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,11 +10,9 @@ import com.zteits.urbanops.module.garden.service.homepage.HomepageSummaryService
10 import io.swagger.v3.oas.annotations.Operation; 10 import io.swagger.v3.oas.annotations.Operation;
11 import io.swagger.v3.oas.annotations.tags.Tag; 11 import io.swagger.v3.oas.annotations.tags.Tag;
12 import jakarta.annotation.Resource; 12 import jakarta.annotation.Resource;
  13 +import jakarta.annotation.security.PermitAll;
13 import jakarta.validation.Valid; 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 import java.util.List; 17 import java.util.List;
20 import java.util.Map; 18 import java.util.Map;
@@ -46,4 +44,11 @@ public class AppHomepageSummaryController { @@ -46,4 +44,11 @@ public class AppHomepageSummaryController {
46 public CommonResult<PageResult<TaskDetailsRspVo>> queryTaskDetails(@Valid @RequestBody AppHomePageSummaryPageReqVO req) { 44 public CommonResult<PageResult<TaskDetailsRspVo>> queryTaskDetails(@Valid @RequestBody AppHomePageSummaryPageReqVO req) {
47 return success(homepageSummaryService.queryTaskDetails(req)); 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,20 +15,4 @@ public class AppHomePageSummaryReqVO{
15 @NotEmpty 15 @NotEmpty
16 @Schema(description = "结束时间", example = "2025-12-10") 16 @Schema(description = "结束时间", example = "2025-12-10")
17 public String endTime; 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 +6,7 @@ import com.zteits.urbanops.module.garden.controller.admin.homepage.vo.CommitTask
6 import com.zteits.urbanops.module.garden.controller.admin.homepage.vo.CommitWorkOrderRespVo; 6 import com.zteits.urbanops.module.garden.controller.admin.homepage.vo.CommitWorkOrderRespVo;
7 import com.zteits.urbanops.module.garden.controller.admin.homepage.vo.CommitWorkOrderSourceRespVo; 7 import com.zteits.urbanops.module.garden.controller.admin.homepage.vo.CommitWorkOrderSourceRespVo;
8 import com.zteits.urbanops.module.garden.controller.admin.homepage.vo.WorkOrderTrendRespVo; 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 import com.zteits.urbanops.module.garden.controller.app.homepage.vo.TaskCompletionStatusRspVo; 10 import com.zteits.urbanops.module.garden.controller.app.homepage.vo.TaskCompletionStatusRspVo;
10 import com.zteits.urbanops.module.garden.controller.app.homepage.vo.TaskDetailsRspVo; 11 import com.zteits.urbanops.module.garden.controller.app.homepage.vo.TaskDetailsRspVo;
11 import com.zteits.urbanops.module.garden.dal.dataobject.departmentcost.DepartmentCostDO; 12 import com.zteits.urbanops.module.garden.dal.dataobject.departmentcost.DepartmentCostDO;
@@ -138,4 +139,64 @@ public interface HomepageSummaryMapper extends BaseMapperX&lt;DepartmentCostDO&gt; { @@ -138,4 +139,64 @@ public interface HomepageSummaryMapper extends BaseMapperX&lt;DepartmentCostDO&gt; {
138 */ 139 */
139 IPage<TaskDetailsRspVo> queryPendingTaskDetails(IPage<TaskDetailsRspVo> page, @Param("roleIds") List<Long> roleIds, @Param("userId") Long userId); 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,4 +34,12 @@ public interface HomepageSummaryService {
34 * @Return java.util.List<TaskDetailsRspVo> 34 * @Return java.util.List<TaskDetailsRspVo>
35 */ 35 */
36 PageResult<TaskDetailsRspVo> queryTaskDetails(AppHomePageSummaryPageReqVO req); 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 package com.zteits.urbanops.module.garden.service.homepage; 1 package com.zteits.urbanops.module.garden.service.homepage;
2 2
  3 +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
3 import com.baomidou.mybatisplus.core.metadata.IPage; 4 import com.baomidou.mybatisplus.core.metadata.IPage;
  5 +import com.esotericsoftware.minlog.Log;
4 import com.zteits.urbanops.framework.common.pojo.PageResult; 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 import com.zteits.urbanops.framework.mybatis.core.util.MyBatisUtils; 10 import com.zteits.urbanops.framework.mybatis.core.util.MyBatisUtils;
6 import com.zteits.urbanops.framework.security.core.util.SecurityFrameworkUtils; 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 import com.zteits.urbanops.module.garden.dal.mysql.homepage.HomepageSummaryMapper; 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 import com.zteits.urbanops.module.system.api.permission.RoleApi; 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 import jakarta.annotation.Resource; 20 import jakarta.annotation.Resource;
  21 +import org.apache.commons.collections4.CollectionUtils;
  22 +import org.apache.commons.lang3.StringUtils;
14 import org.springframework.stereotype.Service; 23 import org.springframework.stereotype.Service;
  24 +import org.springframework.transaction.annotation.Transactional;
15 25
16 import java.text.DateFormat; 26 import java.text.DateFormat;
17 import java.text.ParseException; 27 import java.text.ParseException;
18 import java.text.SimpleDateFormat; 28 import java.text.SimpleDateFormat;
  29 +import java.time.LocalDateTime;
  30 +import java.time.LocalTime;
  31 +import java.time.format.DateTimeFormatter;
19 import java.util.*; 32 import java.util.*;
20 import java.util.stream.Collectors; 33 import java.util.stream.Collectors;
21 34
@@ -34,42 +47,37 @@ public class HomepageSummaryServiceImpl implements HomepageSummaryService{ @@ -34,42 +47,37 @@ public class HomepageSummaryServiceImpl implements HomepageSummaryService{
34 47
35 @Resource 48 @Resource
36 private RoleApi roleApi; 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 @Override 60 @Override
38 public List<TaskCompletionStatusRspVo> taskCompletionSummary(AppHomePageSummaryReqVO req) { 61 public List<TaskCompletionStatusRspVo> taskCompletionSummary(AppHomePageSummaryReqVO req) {
39 Long userId = SecurityFrameworkUtils.getLoginUserId(); 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 return respVo; 81 return respVo;
74 } 82 }
75 83
@@ -88,44 +96,163 @@ public class HomepageSummaryServiceImpl implements HomepageSummaryService{ @@ -88,44 +96,163 @@ public class HomepageSummaryServiceImpl implements HomepageSummaryService{
88 return new PageResult<>(mpPage.getRecords(), mpPage.getTotal()); 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,8 +334,8 @@
334 FROM 334 FROM
335 garden_inspection_plan_detail a 335 garden_inspection_plan_detail a
336 INNER JOIN garden_inspection_plan_role b ON a.batch_no = b.batch_no 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 <foreach collection='roleIds' item='roleId' open='(' close=')' separator=','> 339 <foreach collection='roleIds' item='roleId' open='(' close=')' separator=','>
340 #{roleId} 340 #{roleId}
341 </foreach> 341 </foreach>
@@ -356,8 +356,8 @@ @@ -356,8 +356,8 @@
356 FROM 356 FROM
357 garden_maintain_plan_detail a 357 garden_maintain_plan_detail a
358 INNER JOIN garden_maintain_plan_role b ON a.batch_no = b.batch_no 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 <foreach collection='roleIds' item='roleId' open='(' close=')' separator=','> 361 <foreach collection='roleIds' item='roleId' open='(' close=')' separator=','>
362 #{roleId} 362 #{roleId}
363 </foreach> 363 </foreach>
@@ -441,4 +441,108 @@ @@ -441,4 +441,108 @@
441 ) t 441 ) t
442 ORDER BY busiDateTime DESC 442 ORDER BY busiDateTime DESC
443 </select> 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 </mapper> 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,4 +92,11 @@ public interface AdminUserApi {
92 * @return 业务线列表 92 * @return 业务线列表
93 */ 93 */
94 List<DictDataRespVO> getLoginBusiLine(); 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,4 +89,10 @@ public class AdminUserApiImpl implements AdminUserApi {
89 return userService.getLoginBusiLine(); 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 }