Commit 9bf5e48ad7554b62a27f79f831f1c62d6944f30c
1 parent
55a6eff5
app首页接口
Showing
12 changed files
with
573 additions
and
94 deletions
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<DepartmentCostDO> { |
| 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 <= #{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 <= #{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 <= #{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 <= #{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_ <= #{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_ <= #{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
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 | } | ... | ... |