龙空技术网

工单状态按日统计

java任我行 31

前言:

现时大家对“java统计代码行数工具”可能比较重视,小伙伴们都想要剖析一些“java统计代码行数工具”的相关内容。那么小编同时在网摘上收集了一些对于“java统计代码行数工具””的相关文章,希望我们能喜欢,各位老铁们快快来了解一下吧!

3.1 需求分析

在后台系统中要根据一定日期范围展示出每日的不同状态的工单数量图表,方便管理人员根据图表进行后续的任务分配工作。具体的产品原型如下:

3.2 实现思路

在后台系统中要根据一定日期范围展示出每日的不同状态的工单数量图表 ,如果直接对工单表进行聚合统计,效率不高,对数据库也造成较大压力。所以我们需要每日固定时刻将前日工单根据状态分别进行汇总查询,然后存入工单汇总表中。查询时直接查询汇总数据即可。

为了提升对工单的统计效率,在工单库- 工单汇总表 tb_task_collect :

任务描述:

(1)完成定时任务类处理工单汇总逻辑,包含无效工单的处理

(2)通过xxl-job配置任务

3.3 代码实现3.3.1 工单定时汇总

(1)工单微服务添加xxl-job依赖

<dependency>    <groupId>com.xuxueli</groupId>    <artifactId>xxl-job-core</artifactId>    <version>2.2.0</version></dependency>

(2)工单微服务添加xxl-job配置

xxl:  job:    accessToken:    admin:      addresses:     executor:      appname: task-service      address:      ip:      port: 9981      logretentiondays: 30

(3)工单微服务新建com.lkd.job包,包下创建配置类XxlJobConfig

(4)工单微服务编写任务类,处理工单汇总请求

@Componentpublic class TaskCollectJob {    @Autowired    private TaskService taskService;    @Autowired    private TaskCollectService taskCollectService;    /**     * 每日工单数据汇总(汇总昨天数据)     * @return     */    @XxlJob("taskCollectJobHandler")    public ReturnT<String> collectTask(String param){        var taskCollectEntity = new TaskCollectEntity();        LocalDate start = LocalDate.now().plusDays(-1);        //进行中的工单        taskCollectEntity.setProgressCount(this.count(start, VMSystem.TASK_STATUS_PROGRESS  ));        //取消或拒绝的工单        taskCollectEntity.setCancelCount( this.count(start, VMSystem.TASK_STATUS_CANCEL  ));        //完成的工单        taskCollectEntity.setFinishCount(this.count(start, VMSystem.TASK_STATUS_FINISH  ));        //日期        taskCollectEntity.setCollectDate(start);        clearData(start);        taskCollectService.save(taskCollectEntity);        return ReturnT.SUCCESS;    }    /**     * 清理某天数据     * @param start     */    private void clearData(LocalDate start){        var qw = new LambdaQueryWrapper<TaskCollectEntity>();        qw.eq(TaskCollectEntity::getCollectDate,start);        taskCollectService.remove(qw);    }    /**     * 按时间和状态进行统计     * @param start     * @param taskStatus     * @return     */    private int count(LocalDate start ,Integer taskStatus){        var qw = new LambdaQueryWrapper<TaskEntity>();        qw                .ge(TaskEntity::getUpdateTime,start)                .lt(TaskEntity::getUpdateTime,start.plusDays(1))                .eq(TaskEntity::getTaskStatus, taskStatus);        return taskService.count(qw);    }}

(5)在XXL-job中进行配置

创建执行器 task-service 名称为:立可得-工单微服务

创建任务

3.3.2 无效工单处理

将工单表中日期小于当天,并且状态为创建或进行中的工单(非完成和取消)修改为取消状态。

(1)TaskCollectJob新增私有方法

    /**     * 清理无效工单     */    private void cleanTask(){        var uw = new UpdateWrapper<TaskEntity>();        uw.lambda()                .lt(TaskEntity::getUpdateTime, LocalDate.now())                .and(w->w.eq(TaskEntity::getTaskStatus, VMSystem.TASK_STATUS_PROGRESS).or().eq(TaskEntity::getTaskStatus,VMSystem.TASK_STATUS_CREATE))                .set(TaskEntity::getTaskStatus,VMSystem.TASK_STATUS_CANCEL)                .set(TaskEntity::getDesc,"工单超时");        taskService.update(uw);    }

(2)collectTask方法追加对该私有方法的调用。

3.3.3 工单状态统计

对工单汇总表 tb_task_collect 进行查询

API : 管理后台 - 用户服务-工单状态统计

(1)创建TaskCollectService

package com.lkd.service;import com.baomidou.mybatisplus.extension.service.IService;import com.lkd.entity.TaskCollectEntity;import com.lkd.http.viewModel.TaskReportInfo;import java.time.LocalDate;import java.util.List;public interface TaskCollectService extends IService<TaskCollectEntity>{    /**     * 获取工单报表     * @param start     * @param end     * @return     */    List<TaskCollectEntity> getTaskReport(LocalDate start, LocalDate end);}

实现类TaskCollectServiceImpl

package com.lkd.service.impl;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;import com.lkd.dao.TaskCollectDao;import com.lkd.entity.TaskCollectEntity;import com.lkd.service.TaskCollectService;import org.springframework.stereotype.Service;import java.time.LocalDate;import java.util.List;@Servicepublic class TaskCollectServiceImpl extends ServiceImpl<TaskCollectDao, TaskCollectEntity> implements TaskCollectService {    @Override    public List<TaskCollectEntity> getTaskReport(LocalDate start, LocalDate end) {        QueryWrapper<TaskCollectEntity> qw = new QueryWrapper<>();        qw                .lambda()                .ge(TaskCollectEntity::getCollectDate,start)                .le(TaskCollectEntity::getCollectDate,end)                .orderByAsc(TaskCollectEntity::getCollectDate);        return this.list(qw);    }}

(2)TaskController新增方法

/** * 获取工单报表 * @param start * @param end * @return */@GetMapping("/collectReport/{start}/{end}")public List<TaskCollectEntity> getTaskCollectReport(@PathVariable String start,@PathVariable String end){    return taskCollectService.getTaskReport(LocalDate.parse(start, DateTimeFormatter.ISO_LOCAL_DATE),LocalDate.parse(end,DateTimeFormatter.ISO_LOCAL_DATE));}

标签: #java统计代码行数工具