Commit 9bf5e48ad7554b62a27f79f831f1c62d6944f30c

Authored by wangqian
1 parent 55a6eff5

app首页接口

urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/app/homepage/AppHomepageSummaryController.java
... ... @@ -10,11 +10,9 @@ import com.zteits.urbanops.module.garden.service.homepage.HomepageSummaryService
10 10 import io.swagger.v3.oas.annotations.Operation;
11 11 import io.swagger.v3.oas.annotations.tags.Tag;
12 12 import jakarta.annotation.Resource;
  13 +import jakarta.annotation.security.PermitAll;
13 14 import jakarta.validation.Valid;
14   -import org.springframework.web.bind.annotation.PostMapping;
15   -import org.springframework.web.bind.annotation.RequestBody;
16   -import org.springframework.web.bind.annotation.RequestMapping;
17   -import org.springframework.web.bind.annotation.RestController;
  15 +import org.springframework.web.bind.annotation.*;
18 16  
19 17 import java.util.List;
20 18 import java.util.Map;
... ... @@ -46,4 +44,11 @@ public class AppHomepageSummaryController {
46 44 public CommonResult<PageResult<TaskDetailsRspVo>> queryTaskDetails(@Valid @RequestBody AppHomePageSummaryPageReqVO req) {
47 45 return success(homepageSummaryService.queryTaskDetails(req));
48 46 }
  47 + @GetMapping("/countTask")
  48 + @Operation(summary = "任务待办已办")
  49 + @PermitAll
  50 + public void countTaskNumberByUserId(String busiDate) {
  51 + homepageSummaryService.countTaskNumberByUserId(busiDate);
  52 + }
  53 +
49 54 }
... ...
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/app/homepage/vo/AppHomePageSummaryReqVO.java
... ... @@ -15,20 +15,4 @@ public class AppHomePageSummaryReqVO{
15 15 @NotEmpty
16 16 @Schema(description = "结束时间", example = "2025-12-10")
17 17 public String endTime;
18   -
19   - public void setBeginTime(String beginTime) {
20   - if (beginTime != null && !beginTime.contains(" ")) {
21   - this.beginTime = beginTime + " 00:00:00";
22   - } else {
23   - this.beginTime = beginTime;
24   - }
25   - }
26   -
27   - public void setEndTime(String endTime) {
28   - if (endTime != null && !endTime.contains(" ")) {
29   - this.endTime = endTime + " 23:59:59";
30   - } else {
31   - this.endTime = endTime;
32   - }
33   - }
34 18 }
... ...
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/app/homepage/vo/CommonTaskStatusVo.java 0 → 100644
  1 +package com.zteits.urbanops.module.garden.controller.app.homepage.vo;
  2 +
  3 +import lombok.Data;
  4 +
  5 +/**
  6 + * @Classname CommonTaskStatusVo
  7 + * @Description TODO
  8 + * @Date 2026/1/8 16:42
  9 + * @Created by wangqian
  10 + */
  11 +@Data
  12 +public class CommonTaskStatusVo {
  13 +
  14 + private Long userId;
  15 +
  16 + private Long roleId;
  17 +
  18 + private Integer totalCount;
  19 +}
... ...
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/dataobject/taskstatistics/TaskStatisticsDO.java 0 → 100644
  1 +package com.zteits.urbanops.module.garden.dal.dataobject.taskstatistics;
  2 +
  3 +import lombok.*;
  4 +import java.util.*;
  5 +import java.time.LocalDateTime;
  6 +import java.time.LocalDateTime;
  7 +import com.baomidou.mybatisplus.annotation.*;
  8 +import com.zteits.urbanops.framework.mybatis.core.dataobject.BaseDO;
  9 +
  10 +/**
  11 + * 任务情况统计 DO
  12 + *
  13 + * @author 超级管理员
  14 + */
  15 +@TableName("garden_task_statistics")
  16 +@KeySequence("garden_task_statistics_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
  17 +@Data
  18 +@EqualsAndHashCode(callSuper = true)
  19 +@ToString(callSuper = true)
  20 +@Builder
  21 +@NoArgsConstructor
  22 +@AllArgsConstructor
  23 +public class TaskStatisticsDO extends BaseDO {
  24 +
  25 + /**
  26 + * ID
  27 + */
  28 + @TableId
  29 + private Long id;
  30 + /**
  31 + * 当前日期
  32 + */
  33 + private String busiDate;
  34 + /**
  35 + * 归属(一级部门id)
  36 + */
  37 + private Integer companyId;
  38 + /**
  39 + * 部门ID(道路负责部门id)
  40 + */
  41 + private Long deptId;
  42 + /**
  43 + * 用户id
  44 + */
  45 + private Long userId;
  46 + /**
  47 + * 用户名称
  48 + */
  49 + private String userName;
  50 + /**
  51 + * 巡查计划总数
  52 + */
  53 + private Integer inspTotal;
  54 + /**
  55 + * 巡查计划已完成数
  56 + */
  57 + private Integer inspCompleted;
  58 + /**
  59 + * 巡查计划未完成数
  60 + */
  61 + private Integer inspUnfinished;
  62 + /**
  63 + * 养护计划总数
  64 + */
  65 + private Integer mtTotal;
  66 + /**
  67 + * 养护计划完成数
  68 + */
  69 + private Integer mtCompleted;
  70 + /**
  71 + * 养护计划未完成数
  72 + */
  73 + private Integer mtUnfinished;
  74 + /**
  75 + * 工单总数
  76 + */
  77 + private Integer woTotal;
  78 + /**
  79 + * 工单已完成数
  80 + */
  81 + private Integer woCompleted;
  82 + /**
  83 + * 工单未完成数
  84 + */
  85 + private Integer woUnfinished;
  86 + /**
  87 + * 备注
  88 + */
  89 + private String remark;
  90 +
  91 +
  92 +}
... ...
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/mysql/homepage/HomepageSummaryMapper.java
... ... @@ -6,6 +6,7 @@ import com.zteits.urbanops.module.garden.controller.admin.homepage.vo.CommitTask
6 6 import com.zteits.urbanops.module.garden.controller.admin.homepage.vo.CommitWorkOrderRespVo;
7 7 import com.zteits.urbanops.module.garden.controller.admin.homepage.vo.CommitWorkOrderSourceRespVo;
8 8 import com.zteits.urbanops.module.garden.controller.admin.homepage.vo.WorkOrderTrendRespVo;
  9 +import com.zteits.urbanops.module.garden.controller.app.homepage.vo.CommonTaskStatusVo;
9 10 import com.zteits.urbanops.module.garden.controller.app.homepage.vo.TaskCompletionStatusRspVo;
10 11 import com.zteits.urbanops.module.garden.controller.app.homepage.vo.TaskDetailsRspVo;
11 12 import com.zteits.urbanops.module.garden.dal.dataobject.departmentcost.DepartmentCostDO;
... ... @@ -138,4 +139,64 @@ public interface HomepageSummaryMapper extends BaseMapperX&lt;DepartmentCostDO&gt; {
138 139 */
139 140 IPage<TaskDetailsRspVo> queryPendingTaskDetails(IPage<TaskDetailsRspVo> page, @Param("roleIds") List<Long> roleIds, @Param("userId") Long userId);
140 141  
  142 + /**
  143 + * @Author wangqian
  144 + * @Description 巡查已完成
  145 + * @Date 2026/1/8 12:29
  146 + * @param beginTime
  147 + * @param endTime
  148 + * @Return java.util.List<com.zteits.urbanops.module.garden.controller.app.homepage.vo.TaskCompletionStatusRspVo>
  149 + */
  150 + List<CommonTaskStatusVo> countInspCompletedTask(@Param("beginTime") String beginTime, @Param("endTime") String endTime);
  151 +
  152 + /**
  153 + * @Author wangqian
  154 + * @Description 养护已完成
  155 + * @Date 2026/1/8 12:30
  156 + * @param beginTime
  157 + * @param endTime
  158 + * @Return java.util.List<com.zteits.urbanops.module.garden.controller.app.homepage.vo.TaskCompletionStatusRspVo>
  159 + */
  160 + List<CommonTaskStatusVo> countMtCompletedTask(@Param("beginTime") String beginTime, @Param("endTime") String endTime);
  161 +
  162 + /**
  163 + * @Author wangqian
  164 + * @Description 巡查数量
  165 + * @Date 2026/1/8 12:33
  166 + * @Param userId
  167 + * @param beginTime
  168 + * @param endTime
  169 + * @Return java.util.List<com.zteits.urbanops.module.garden.controller.app.homepage.vo.TaskCompletionStatusRspVo>
  170 + */
  171 + List<CommonTaskStatusVo> countInspPendingTask(@Param("beginTime") String beginTime, @Param("endTime") String endTime);
  172 + /**
  173 + * @Author wangqian
  174 + * @Description 养护数量
  175 + * @Date 2026/1/8 12:33
  176 + * @Param userId
  177 + * @param beginTime
  178 + * @param endTime
  179 + * @Return java.util.List<com.zteits.urbanops.module.garden.controller.app.homepage.vo.TaskCompletionStatusRspVo>
  180 + */
  181 + List<CommonTaskStatusVo> countMtPendingTask(@Param("beginTime") String beginTime, @Param("endTime") String endTime);
  182 +
  183 + /**
  184 + * @Author wangqian
  185 + * @Description 按时间查询待完成工单数量
  186 + * @Date 2026/1/8 14:23
  187 + * @Param beginTime
  188 + * @param endTime
  189 + * @Return java.util.List<java.util.Map<java.lang.Long,java.lang.Integer>>
  190 + */
  191 + List<CommonTaskStatusVo> countWorkOrderPending(@Param("beginTime") String beginTime, @Param("endTime") String endTime);
  192 + /**
  193 + * @Author wangqian
  194 + * @Description 按时间查询已完成工单数
  195 + * @Date 2026/1/8 14:24
  196 + * @Param beginTime
  197 + * @param endTime
  198 + * @Return java.util.List<java.util.Map<java.lang.Long,java.lang.Integer>>
  199 + */
  200 + List<CommonTaskStatusVo> countWorkOrderCompleted(@Param("beginTime") String beginTime, @Param("endTime") String endTime);
  201 +
141 202 }
... ...
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/mysql/taskstatistics/TaskStatisticsMapper.java 0 → 100644
  1 +package com.zteits.urbanops.module.garden.dal.mysql.taskstatistics;
  2 +
  3 +import com.zteits.urbanops.framework.mybatis.core.mapper.BaseMapperX;
  4 +import com.zteits.urbanops.module.garden.dal.dataobject.taskstatistics.TaskStatisticsDO;
  5 +import org.apache.ibatis.annotations.Mapper;
  6 +
  7 +/**
  8 + * 任务情况统计 Mapper
  9 + *
  10 + * @author 超级管理员
  11 + */
  12 +@Mapper
  13 +public interface TaskStatisticsMapper extends BaseMapperX<TaskStatisticsDO> {
  14 +
  15 +// default PageResult<TaskStatisticsDO> selectPage(TaskStatisticsPageReqVO reqVO) {
  16 +// return selectPage(reqVO, new LambdaQueryWrapperX<TaskStatisticsDO>()
  17 +// .betweenIfPresent(TaskStatisticsDO::getBusiDate, reqVO.getBusiDate())
  18 +// .eqIfPresent(TaskStatisticsDO::getCompanyId, reqVO.getCompanyId())
  19 +// .eqIfPresent(TaskStatisticsDO::getDeptId, reqVO.getDeptId())
  20 +// .eqIfPresent(TaskStatisticsDO::getUserId, reqVO.getUserId())
  21 +// .likeIfPresent(TaskStatisticsDO::getUserName, reqVO.getUserName())
  22 +// .eqIfPresent(TaskStatisticsDO::getInspTotal, reqVO.getInspTotal())
  23 +// .eqIfPresent(TaskStatisticsDO::getInspCompleted, reqVO.getInspCompleted())
  24 +// .eqIfPresent(TaskStatisticsDO::getInspUnfinished, reqVO.getInspUnfinished())
  25 +// .eqIfPresent(TaskStatisticsDO::getMtTotal, reqVO.getMtTotal())
  26 +// .eqIfPresent(TaskStatisticsDO::getMtCompleted, reqVO.getMtCompleted())
  27 +// .eqIfPresent(TaskStatisticsDO::getMtUnfinished, reqVO.getMtUnfinished())
  28 +// .eqIfPresent(TaskStatisticsDO::getWoTotal, reqVO.getWoTotal())
  29 +// .eqIfPresent(TaskStatisticsDO::getWoCompleted, reqVO.getWoCompleted())
  30 +// .eqIfPresent(TaskStatisticsDO::getWoUnfinished, reqVO.getWoUnfinished())
  31 +// .eqIfPresent(TaskStatisticsDO::getRemark, reqVO.getRemark())
  32 +// .likeIfPresent(TaskStatisticsDO::getCreatorName, reqVO.getCreatorName())
  33 +// .betweenIfPresent(TaskStatisticsDO::getCreateTime, reqVO.getCreateTime())
  34 +// .likeIfPresent(TaskStatisticsDO::getUpdaterName, reqVO.getUpdaterName())
  35 +// .orderByDesc(TaskStatisticsDO::getId));
  36 +// }
  37 +
  38 +}
... ...
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/job/task/TaskStatisticsJob.java 0 → 100644
  1 +package com.zteits.urbanops.module.garden.job.task;
  2 +
  3 +import com.zteits.urbanops.framework.quartz.core.handler.JobHandler;
  4 +import com.zteits.urbanops.module.garden.service.assigntasks.AssignTasksService;
  5 +import com.zteits.urbanops.module.garden.service.homepage.HomepageSummaryService;
  6 +import jakarta.annotation.Resource;
  7 +import lombok.extern.slf4j.Slf4j;
  8 +import org.springframework.stereotype.Component;
  9 +
  10 +/**
  11 + * @Classname TaskStatisticsJob
  12 + * @Description 首页统计任务
  13 + * @Date 2025/12/25 10:37
  14 + * @Created by wangqian
  15 + */
  16 +@Component
  17 +@Slf4j
  18 +public class TaskStatisticsJob implements JobHandler {
  19 +
  20 + @Resource
  21 + private HomepageSummaryService homepageSummaryService;
  22 +
  23 + @Override
  24 + public String execute(String param) throws Exception {
  25 + homepageSummaryService.countTaskNumberByUserId(param);
  26 + return "Successfully";
  27 + }
  28 +}
... ...
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/homepage/HomepageSummaryService.java
... ... @@ -34,4 +34,12 @@ public interface HomepageSummaryService {
34 34 * @Return java.util.List<TaskDetailsRspVo>
35 35 */
36 36 PageResult<TaskDetailsRspVo> queryTaskDetails(AppHomePageSummaryPageReqVO req);
  37 + /**
  38 + * @Author wangqian
  39 + * @Description 定时同步用户任务
  40 + * @Date 2026/1/8 13:50
  41 + * @Param
  42 + * @Return void
  43 + */
  44 + public void countTaskNumberByUserId(String busiDate);
37 45 }
... ...
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/homepage/HomepageSummaryServiceImpl.java
1 1 package com.zteits.urbanops.module.garden.service.homepage;
2 2  
  3 +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
3 4 import com.baomidou.mybatisplus.core.metadata.IPage;
  5 +import com.esotericsoftware.minlog.Log;
4 6 import com.zteits.urbanops.framework.common.pojo.PageResult;
  7 +import com.zteits.urbanops.framework.common.util.date.DateUtils;
  8 +import com.zteits.urbanops.framework.common.util.date.LocalDateTimeUtils;
  9 +import com.zteits.urbanops.framework.mybatis.core.query.QueryWrapperX;
5 10 import com.zteits.urbanops.framework.mybatis.core.util.MyBatisUtils;
6 11 import com.zteits.urbanops.framework.security.core.util.SecurityFrameworkUtils;
7   -import com.zteits.urbanops.module.garden.controller.app.homepage.vo.AppHomePageSummaryPageReqVO;
8   -import com.zteits.urbanops.module.garden.controller.app.homepage.vo.AppHomePageSummaryReqVO;
9   -import com.zteits.urbanops.module.garden.controller.app.homepage.vo.TaskCompletionStatusRspVo;
10   -import com.zteits.urbanops.module.garden.controller.app.homepage.vo.TaskDetailsRspVo;
  12 +import com.zteits.urbanops.module.garden.controller.app.homepage.vo.*;
  13 +import com.zteits.urbanops.module.garden.dal.dataobject.taskstatistics.TaskStatisticsDO;
11 14 import com.zteits.urbanops.module.garden.dal.mysql.homepage.HomepageSummaryMapper;
  15 +import com.zteits.urbanops.module.garden.dal.mysql.taskstatistics.TaskStatisticsMapper;
  16 +import com.zteits.urbanops.module.system.api.dept.DeptApi;
12 17 import com.zteits.urbanops.module.system.api.permission.RoleApi;
  18 +import com.zteits.urbanops.module.system.api.user.AdminUserApi;
  19 +import com.zteits.urbanops.module.system.api.user.dto.AdminUserRespDTO;
13 20 import jakarta.annotation.Resource;
  21 +import org.apache.commons.collections4.CollectionUtils;
  22 +import org.apache.commons.lang3.StringUtils;
14 23 import org.springframework.stereotype.Service;
  24 +import org.springframework.transaction.annotation.Transactional;
15 25  
16 26 import java.text.DateFormat;
17 27 import java.text.ParseException;
18 28 import java.text.SimpleDateFormat;
  29 +import java.time.LocalDateTime;
  30 +import java.time.LocalTime;
  31 +import java.time.format.DateTimeFormatter;
19 32 import java.util.*;
20 33 import java.util.stream.Collectors;
21 34  
... ... @@ -34,42 +47,37 @@ public class HomepageSummaryServiceImpl implements HomepageSummaryService{
34 47  
35 48 @Resource
36 49 private RoleApi roleApi;
  50 +
  51 + @Resource
  52 + private TaskStatisticsMapper taskStatisticsMapper;
  53 +
  54 + @Resource
  55 + private AdminUserApi userApi;
  56 +
  57 + @Resource
  58 + private DeptApi deptApi;
  59 +
37 60 @Override
38 61 public List<TaskCompletionStatusRspVo> taskCompletionSummary(AppHomePageSummaryReqVO req) {
39 62 Long userId = SecurityFrameworkUtils.getLoginUserId();
40   - //巡查任务和养护任务已完成,未完成数量统计
41   - //返回数据初始化
42   - List<String> days = getDays(req.getBeginTime(), req.getEndTime());
43   - List<TaskCompletionStatusRspVo> respVo = addTaskDefaultData(days);
44   - //查询已完成数量
45   - List<TaskCompletionStatusRspVo> completionDetailList = homepageSummaryMapper.countcompletedTask(userId, req.getBeginTime(), req.getEndTime());
46   - Map<String, Integer> completionMap = completionDetailList.stream()
47   - .collect(Collectors.toMap(
48   - TaskCompletionStatusRspVo::getCommitDate,
49   - TaskCompletionStatusRspVo::getCompletedNum,
50   - (existingValue, newValue) -> existingValue + newValue
51   - ));
52   - //查询未完成数量
53   - /*1.查询登录用户角色*/
54   - List<Long> roleIds = roleApi.getRoleIdsByUserId(SecurityFrameworkUtils.getLoginUserId());
55   - List<TaskCompletionStatusRspVo> countpendingDetailList = homepageSummaryMapper.countpendingTask(userId,roleIds, req.getBeginTime(), req.getEndTime());
56   - Map<String, Integer> countpendingMap = countpendingDetailList.stream()
57   - .collect(Collectors.toMap(
58   - TaskCompletionStatusRspVo::getCommitDate,
59   - TaskCompletionStatusRspVo::getCountpendingNum,
60   - (existingValue, newValue) -> existingValue + newValue
61   - ));
62   - //返回对象赋值
63   - respVo.forEach(vo -> {
64   - Integer cmpletedNum = completionMap.get(vo.getCommitDate());
65   - if (cmpletedNum!= null) {
66   - vo.setCompletedNum(cmpletedNum);
67   - }
68   - Integer countpendingNum = countpendingMap.get(vo.getCommitDate());
69   - if (countpendingNum != null) {
70   - vo.setCountpendingNum(countpendingNum);
71   - }
72   - });
  63 + List<TaskCompletionStatusRspVo> respVo = new ArrayList<>();
  64 + // 优化后的完整代码(含空值判断、泛型指定)
  65 + LambdaQueryWrapper<TaskStatisticsDO> queryWrapper = new LambdaQueryWrapper<>();
  66 + queryWrapper.eq(TaskStatisticsDO::getUserId, userId);
  67 + queryWrapper.between(TaskStatisticsDO::getBusiDate, req.getBeginTime(), req.getEndTime());
  68 + queryWrapper.eq(TaskStatisticsDO::getDeleted, 0);
  69 + List<TaskStatisticsDO> taskStatisticsDOList = taskStatisticsMapper.selectList(queryWrapper);
  70 + if (CollectionUtils.isNotEmpty(taskStatisticsDOList)) {
  71 + //1、日期赋值
  72 + taskStatisticsDOList.forEach(dayVo->{
  73 + TaskCompletionStatusRspVo vo = new TaskCompletionStatusRspVo();
  74 + vo.setCommitDate(dayVo.getBusiDate());
  75 + vo.setCurrentDate(dayVo.getBusiDate().substring(5).replace("-","."));
  76 + vo.setCompletedNum(dayVo.getMtTotal() + dayVo.getInspTotal() + dayVo.getWoTotal());
  77 + vo.setCountpendingNum(dayVo.getMtUnfinished() + dayVo.getInspUnfinished() +dayVo.getWoUnfinished());
  78 + respVo.add(vo);
  79 + });
  80 + }
73 81 return respVo;
74 82 }
75 83  
... ... @@ -88,44 +96,163 @@ public class HomepageSummaryServiceImpl implements HomepageSummaryService{
88 96 return new PageResult<>(mpPage.getRecords(), mpPage.getTotal());
89 97 }
90 98  
91   - private List<TaskCompletionStatusRspVo> addTaskDefaultData(List<String> days){
92   - List<TaskCompletionStatusRspVo> newList = new ArrayList<>();
93   - //1、日期赋值
94   - days.forEach(dayy->{
95   - TaskCompletionStatusRspVo vo = new TaskCompletionStatusRspVo();
96   - vo.setCommitDate(dayy);
97   - vo.setCurrentDate(dayy.substring(5).replace("-","."));
98   - vo.setCompletedNum(0);
99   - vo.setCountpendingNum(0);
100   - newList.add(vo);
101   - });
102   - return newList;
103   - }
104   - public static List<String> getDays(String startTime, String endTime) {
105   -
106   - // 返回的日期集合
107   - List<String> days = new ArrayList<String>();
108 99  
109   - DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
110   - try {
111   - Date start = dateFormat.parse(startTime);
112   - Date end = dateFormat.parse(endTime);
  100 + /**
  101 + * @Author wangqian
  102 + * @Description 定时统计当天用户的任务
  103 + * @Date 2026/1/8 13:14
  104 + * @Param
  105 + * @Return void
  106 + */
  107 + @Override
  108 + @Transactional
  109 + public void countTaskNumberByUserId(String busiDate) {
  110 + //1、 获取前一天日期,格式 yyyy-MM-dd
  111 + LocalDateTime yesterday = LocalDateTimeUtils.getYesterday();
  112 + // 4. 格式化为字符串
  113 + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
  114 + if (StringUtils.isEmpty(busiDate)) {
  115 + busiDate = yesterday.format(formatter);
  116 + }
  117 + String beginTime = busiDate + " 00:00:00";
  118 + String endTime = busiDate + " 23:59:59";
  119 + Log.info("昨天开始时间:" + beginTime);
  120 + Log.info("昨天结束时间:" + endTime);
  121 + //获取正常用户
  122 + List<AdminUserRespDTO> userList = userApi.getUserList();
  123 + if (CollectionUtils.isEmpty(userList)){
  124 + return;
  125 + }
  126 + //巡查已完成
  127 + List<CommonTaskStatusVo> inspComp = homepageSummaryMapper.countInspCompletedTask(beginTime, endTime);
  128 + Map<Long, CommonTaskStatusVo> inspCompMap = inspComp.stream()
  129 + .filter(vo -> Objects.nonNull(vo))
  130 + .collect(Collectors.toMap(
  131 + CommonTaskStatusVo::getUserId,
  132 + vo -> vo,
  133 + (oldVo, newVo) -> newVo,
  134 + HashMap::new
  135 + ));
  136 + //养护已完成
  137 + List<CommonTaskStatusVo> mtComp = homepageSummaryMapper.countMtCompletedTask(beginTime, endTime);
  138 + Map<Long, CommonTaskStatusVo> mtCmpMap = mtComp.stream()
  139 + .filter(vo -> Objects.nonNull(vo))
  140 + .collect(Collectors.toMap(
  141 + CommonTaskStatusVo::getUserId,
  142 + vo -> vo,
  143 + (oldVo, newVo) -> newVo,
  144 + HashMap::new
  145 + ));
113 146  
114   - Calendar tempStart = Calendar.getInstance();
115   - tempStart.setTime(start);
  147 + //待完成工单数量
  148 + List<CommonTaskStatusVo> woPending = homepageSummaryMapper.countWorkOrderPending(beginTime, endTime);
  149 + Map<Long, CommonTaskStatusVo> woPendingMap = woPending.stream()
  150 + .filter(vo -> Objects.nonNull(vo))
  151 + .collect(Collectors.toMap(
  152 + // Map的key:从VO中提取Long类型的roleId(核心修正点)
  153 + CommonTaskStatusVo::getUserId,
  154 + vo -> vo,
  155 + (oldVo, newVo) -> newVo,
  156 + HashMap::new
  157 + ));
  158 + //已完成工单数量
  159 + List<CommonTaskStatusVo> woCompleted = homepageSummaryMapper.countWorkOrderCompleted(beginTime, endTime);
  160 + Map<Long, CommonTaskStatusVo> woCompletedMap = woCompleted.stream()
  161 + .filter(vo -> Objects.nonNull(vo))
  162 + .collect(Collectors.toMap(
  163 + // Map的key:从VO中提取Long类型的roleId(核心修正点)
  164 + CommonTaskStatusVo::getUserId,
  165 + vo -> vo,
  166 + (oldVo, newVo) -> newVo,
  167 + HashMap::new
  168 + ));
  169 + //巡查计划数
  170 + List<CommonTaskStatusVo> inspTotal = homepageSummaryMapper.countInspPendingTask(beginTime, endTime);
  171 + Map<Long, CommonTaskStatusVo> inspTotalMap = inspTotal.stream()
  172 + .filter(vo -> Objects.nonNull(vo))
  173 + .collect(Collectors.toMap(
  174 + // Map的key:从VO中提取Long类型的roleId(核心修正点)
  175 + CommonTaskStatusVo::getRoleId,
  176 + vo -> vo,
  177 + (oldVo, newVo) -> newVo,
  178 + HashMap::new
  179 + ));
  180 + //养护计划数量
  181 + List<CommonTaskStatusVo> mtTotal = homepageSummaryMapper.countMtPendingTask(beginTime, endTime);
  182 + Map<Long, CommonTaskStatusVo> mtTotalMap = mtTotal.stream()
  183 + .filter(vo -> Objects.nonNull(vo))
  184 + .collect(Collectors.toMap(
  185 + // Map的key:从VO中提取Long类型的roleId(核心修正点)
  186 + CommonTaskStatusVo::getRoleId,
  187 + vo -> vo,
  188 + (oldVo, newVo) -> newVo,
  189 + HashMap::new
  190 + ));
  191 + List<TaskStatisticsDO> taskStatisticsDOList = new ArrayList<>();
  192 + //根据用户查询任务数量
  193 + for (AdminUserRespDTO adminUserRespDTO : userList) {
  194 + Long userId = adminUserRespDTO.getId();
  195 + List<Long> roles = roleApi.getRoleIdsByUserId(userId);
  196 + if (CollectionUtils.isEmpty(roles)) {
  197 + continue;
  198 + }
  199 + if (roles.contains(1L)) {
  200 + continue;
  201 + }
  202 + if (roles.contains(2L)) {
  203 + continue;
  204 + }
  205 + if (roles.contains(159L)) {
  206 + continue;
  207 + }
  208 + if (roles.contains(168L)) {
  209 + continue;
  210 + }
  211 + //deptApi.get
  212 + TaskStatisticsDO statisticsDO = new TaskStatisticsDO();
  213 + statisticsDO.setBusiDate(busiDate);
  214 + statisticsDO.setUserId(userId);
  215 + statisticsDO.setUserName(statisticsDO.getUserName());
  216 + //statisticsDO.setCompanyId();
  217 + statisticsDO.setDeptId(adminUserRespDTO.getDeptId());
  218 + //2、查询巡查任务数量及已完成数量
  219 + Integer inspTotalCount = 0;
  220 + for (Long role : roles) {
  221 + CommonTaskStatusVo countVo = inspTotalMap.get(role);
  222 + if (null != countVo) {
  223 + inspTotalCount = countVo.getTotalCount();
  224 + }
  225 + }
  226 + statisticsDO.setInspCompleted(inspCompMap.get(userId) == null? 0: inspCompMap.get(userId).getTotalCount());
  227 + statisticsDO.setInspUnfinished(inspTotalCount);
  228 + statisticsDO.setInspTotal(statisticsDO.getInspUnfinished() + statisticsDO.getInspCompleted());
116 229  
117   - Calendar tempEnd = Calendar.getInstance();
118   - tempEnd.setTime(end);
119   - tempEnd.add(Calendar.DATE, +1);// 日期加1(包含结束)
120   - while (tempStart.before(tempEnd)) {
121   - days.add(dateFormat.format(tempStart.getTime()));
122   - tempStart.add(Calendar.DAY_OF_YEAR, 1);
  230 + Integer mtTotalCount = 0;
  231 + //3、查询养护计划任务数量
  232 + for (Long role : roles) {
  233 + CommonTaskStatusVo countVo = mtTotalMap.get(role);
  234 + if (null != countVo) {
  235 + mtTotalCount = countVo.getTotalCount();
  236 + }
123 237 }
  238 + statisticsDO.setMtUnfinished(mtTotalCount);
  239 + statisticsDO.setMtCompleted(mtCmpMap.get(userId) == null ? 0 : mtCmpMap.get(userId).getTotalCount());
  240 + statisticsDO.setMtTotal(statisticsDO.getMtUnfinished() + statisticsDO.getMtCompleted());
124 241  
125   - } catch (ParseException e) {
126   - e.printStackTrace();
127   - }
  242 + //4、工单任务数量
  243 + statisticsDO.setWoCompleted(woCompletedMap.get(userId) == null ? 0 : woCompletedMap.get(userId).getTotalCount());
  244 + statisticsDO.setWoUnfinished(woPendingMap.get(userId) == null ? 0: woPendingMap.get(userId).getTotalCount());
  245 + statisticsDO.setWoTotal(statisticsDO.getWoCompleted() + statisticsDO.getWoUnfinished());
128 246  
129   - return days;
  247 + statisticsDO.setCreator("1");
  248 + statisticsDO.setCreateTime(LocalDateTime.now());
  249 + statisticsDO.setUpdater("1");
  250 + statisticsDO.setUpdateTime(LocalDateTime.now());
  251 + taskStatisticsDOList.add(statisticsDO);
  252 + }
  253 + //删除
  254 + taskStatisticsMapper.delete(TaskStatisticsDO::getBusiDate, busiDate);
  255 + //批量保存
  256 + taskStatisticsMapper.insertBatch(taskStatisticsDOList);
130 257 }
131 258 }
... ...
urbanops-module-garden/src/main/resources/mapper/homepage/HomepageSummaryMapper.xml
... ... @@ -334,8 +334,8 @@
334 334 FROM
335 335 garden_inspection_plan_detail a
336 336 INNER JOIN garden_inspection_plan_role b ON a.batch_no = b.batch_no
337   - WHERE a.finish_state IN (1, 3) -- 1:未完成;3:已过期
338   - AND b.role_id IN
  337 + WHERE -- a.finish_state IN (1, 3) -- 1:未完成;3:已过期
  338 + b.role_id IN
339 339 <foreach collection='roleIds' item='roleId' open='(' close=')' separator=','>
340 340 #{roleId}
341 341 </foreach>
... ... @@ -356,8 +356,8 @@
356 356 FROM
357 357 garden_maintain_plan_detail a
358 358 INNER JOIN garden_maintain_plan_role b ON a.batch_no = b.batch_no
359   - WHERE a.finish_state IN (1, 3) -- 1:未完成;3:已过期
360   - AND b.role_id IN
  359 + WHERE -- a.finish_state IN (1, 3) -- 1:未完成;3:已过期
  360 + b.role_id IN
361 361 <foreach collection='roleIds' item='roleId' open='(' close=')' separator=','>
362 362 #{roleId}
363 363 </foreach>
... ... @@ -441,4 +441,108 @@
441 441 ) t
442 442 ORDER BY busiDateTime DESC
443 443 </select>
  444 +
  445 + <!--巡查已完成任务数量-->
  446 + <select id="countInspCompletedTask" resultType="com.zteits.urbanops.module.garden.controller.app.homepage.vo.CommonTaskStatusVo">
  447 + SELECT
  448 + user_id as userId,
  449 + COUNT(*) AS totalCount
  450 + FROM garden_inspection_plan_commit
  451 + WHERE 1=1
  452 + <if test="beginTime != null and beginTime != ''">
  453 + AND finish_time >= #{beginTime}
  454 + </if>
  455 + <if test="endTime != null and endTime != ''">
  456 + AND finish_time &lt;= #{endTime}
  457 + </if>
  458 + GROUP BY user_id
  459 + </select>
  460 + <!--养护已完成任务数量-->
  461 + <select id="countMtCompletedTask" resultType="com.zteits.urbanops.module.garden.controller.app.homepage.vo.CommonTaskStatusVo">
  462 + SELECT
  463 + user_id as userId,
  464 + COUNT(*) AS totalCount
  465 + FROM garden_maintain_plan_commit
  466 + WHERE 1=1
  467 + <if test="beginTime != null and beginTime != ''">
  468 + AND finish_time >= #{beginTime}
  469 + </if>
  470 + <if test="endTime != null and endTime != ''">
  471 + AND finish_time &lt;= #{endTime}
  472 + </if>
  473 + GROUP BY user_id
  474 + </select>
  475 +
  476 + <!--养护未完成任务数量-->
  477 + <select id="countMtPendingTask" resultType="com.zteits.urbanops.module.garden.controller.app.homepage.vo.CommonTaskStatusVo" >
  478 + SELECT
  479 + role_id as roleId,
  480 + COUNT(*) AS totalCount
  481 + FROM
  482 + garden_maintain_plan_detail a
  483 + INNER JOIN garden_maintain_plan_role b ON a.batch_no = b.batch_no
  484 + WHERE a.finish_state IN (1, 3) -- 1:未完成;3:已过期
  485 + <if test="beginTime != null and beginTime != ''">
  486 + AND a.begin_time &lt;= #{beginTime}
  487 + </if>
  488 + <if test="endTime != null and endTime != ''">
  489 + AND a.end_time >= #{endTime}
  490 + </if>
  491 + GROUP BY role_id
  492 + </select>
  493 + <!--巡查未完成任务数量-->
  494 + <select id="countInspPendingTask" resultType="com.zteits.urbanops.module.garden.controller.app.homepage.vo.CommonTaskStatusVo" >
  495 + SELECT
  496 + role_id as roleId,
  497 + COUNT(*) AS totalCount
  498 + FROM
  499 + garden_inspection_plan_detail a
  500 + INNER JOIN garden_inspection_plan_role b ON a.batch_no = b.batch_no
  501 + WHERE a.finish_state IN (1, 3) -- 1:未完成;3:已过期
  502 + <if test="beginTime != null and beginTime != ''">
  503 + AND a.begin_time &lt;= #{beginTime}
  504 + </if>
  505 + <if test="endTime != null and endTime != ''">
  506 + AND a.begin_time >= #{endTime}
  507 + </if>
  508 + GROUP BY role_id
  509 + </select>
  510 +
  511 + <!--工单待办数量-->
  512 + <select id="countWorkOrderPending" resultType="com.zteits.urbanops.module.garden.controller.app.homepage.vo.CommonTaskStatusVo" >
  513 + select
  514 + t.ASSIGNEE_ as userId,
  515 + count(*)
  516 + FROM act_ru_task t
  517 + LEFT JOIN workorder_main_info m ON t.PROC_INST_ID_ = m.process_instance_id AND m.deleted = 0
  518 + WHERE t.SUSPENSION_STATE_ = 1
  519 + <if test="beginTime != null and beginTime != ''">
  520 + and t.create_time_ >= #{beginTime}
  521 + </if>
  522 + <if test="endTime != null and endTime != ''">
  523 + and t.create_time_ &lt;= #{endTime}
  524 + </if>
  525 + group by t.ASSIGNEE_
  526 + </select>
  527 + <!--工单已办数量-->
  528 + <select id="countWorkOrderCompleted" resultType="com.zteits.urbanops.module.garden.controller.app.homepage.vo.CommonTaskStatusVo" >
  529 + select t.userId,count(*)
  530 + FROM (
  531 + select t.ASSIGNEE_ as userId,
  532 + ROW_NUMBER() OVER (
  533 + PARTITION BY m.order_no
  534 + ORDER BY t.START_TIME_ DESC, t.ID_ DESC
  535 + ) AS rn
  536 + FROM act_hi_taskinst t
  537 + LEFT JOIN workorder_main_info m ON t.PROC_INST_ID_ = m.process_instance_id AND m.deleted = 0
  538 + WHERE t.END_TIME_ IS NOT NULL
  539 + <if test="beginTime != null and beginTime != ''">
  540 + and t.END_TIME_ >= #{beginTime}
  541 + </if>
  542 + <if test="endTime != null and endTime != ''">
  543 + and t.END_TIME_ &lt;= #{endTime}
  544 + </if>
  545 + ) t
  546 + group by t.userId
  547 + </select>
444 548 </mapper>
... ...
urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/api/user/AdminUserApi.java
... ... @@ -92,4 +92,11 @@ public interface AdminUserApi {
92 92 * @return 业务线列表
93 93 */
94 94 List<DictDataRespVO> getLoginBusiLine();
  95 +
  96 + /**
  97 + * 通过用户 ID 查询用户们
  98 + *
  99 + * @return 用户对象信息
  100 + */
  101 + List<AdminUserRespDTO> getUserList();
95 102 }
... ...
urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/api/user/AdminUserApiImpl.java
... ... @@ -89,4 +89,10 @@ public class AdminUserApiImpl implements AdminUserApi {
89 89 return userService.getLoginBusiLine();
90 90 }
91 91  
  92 + @Override
  93 + public List<AdminUserRespDTO> getUserList() {
  94 + List<AdminUserDO> users = userService.getUserListByStatus(0);
  95 + return BeanUtils.toBean(users, AdminUserRespDTO.class);
  96 + }
  97 +
92 98 }
... ...