diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/app/homepage/AppHomepageSummaryController.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/app/homepage/AppHomepageSummaryController.java index 8595f0e..3ff0794 100644 --- a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/app/homepage/AppHomepageSummaryController.java +++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/app/homepage/AppHomepageSummaryController.java @@ -45,7 +45,7 @@ public class AppHomepageSummaryController { return success(homepageSummaryService.queryTaskDetails(req)); } @GetMapping("/countTask") - @Operation(summary = "任务待办已办") + @Operation(summary = "定时统计任务信息") @PermitAll public void countTaskNumberByUserId(String busiDate) { homepageSummaryService.countTaskNumberByUserId(busiDate); diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/mysql/homepage/HomepageSummaryMapper.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/mysql/homepage/HomepageSummaryMapper.java index cae5acd..6f98416 100644 --- a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/mysql/homepage/HomepageSummaryMapper.java +++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/mysql/homepage/HomepageSummaryMapper.java @@ -137,7 +137,7 @@ public interface HomepageSummaryMapper extends BaseMapperX { * @param userId * @Return com.baomidou.mybatisplus.core.metadata.IPage */ - IPage queryPendingTaskDetails(IPage page, @Param("roleIds") List roleIds, @Param("userId") Long userId); + IPage queryPendingTaskDetails(IPage page, @Param("roleIds") List roleIds, @Param("userId") Long userId, @Param("deptId") Long deptId); /** * @Author wangqian @@ -168,7 +168,7 @@ public interface HomepageSummaryMapper extends BaseMapperX { * @param endTime * @Return java.util.List */ - List countInspPendingTask(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + List countInspPendingTask(@Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("deptId") Long deptId); /** * @Author wangqian * @Description 养护数量 @@ -178,7 +178,7 @@ public interface HomepageSummaryMapper extends BaseMapperX { * @param endTime * @Return java.util.List */ - List countMtPendingTask(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + List countMtPendingTask(@Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("deptId") Long deptId); /** * @Author wangqian diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/homepage/HomepageSummaryServiceImpl.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/homepage/HomepageSummaryServiceImpl.java index d3ce4ec..d32794b 100644 --- a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/homepage/HomepageSummaryServiceImpl.java +++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/homepage/HomepageSummaryServiceImpl.java @@ -60,7 +60,11 @@ public class HomepageSummaryServiceImpl implements HomepageSummaryService{ @Override public List taskCompletionSummary(AppHomePageSummaryReqVO req) { Long userId = SecurityFrameworkUtils.getLoginUserId(); - List respVo = new ArrayList<>(); + //巡查任务和养护任务已完成,未完成数量统计 + //返回数据初始化 + List days = getDays(req.getBeginTime(), req.getEndTime()); + List respVo = addTaskDefaultData(days); + // 优化后的完整代码(含空值判断、泛型指定) LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(TaskStatisticsDO::getUserId, userId); @@ -68,14 +72,32 @@ public class HomepageSummaryServiceImpl implements HomepageSummaryService{ queryWrapper.eq(TaskStatisticsDO::getDeleted, 0); List taskStatisticsDOList = taskStatisticsMapper.selectList(queryWrapper); if (CollectionUtils.isNotEmpty(taskStatisticsDOList)) { + Map countpendingMap = taskStatisticsDOList.stream() + .filter(doObj -> Objects.nonNull(doObj) && Objects.nonNull(doObj.getBusiDate())) + .collect(Collectors.toMap( + TaskStatisticsDO::getBusiDate, + // Map的value:DO对象本身 + doObj -> doObj, + // 重复key(同一日期)的处理策略:用新值覆盖旧值(可根据业务调整为合并) + (oldDo, newDo) -> newDo, + // 指定Map实现类为HashMap(显式指定更可控) + HashMap::new + )); //1、日期赋值 - taskStatisticsDOList.forEach(dayVo->{ - TaskCompletionStatusRspVo vo = new TaskCompletionStatusRspVo(); - vo.setCommitDate(dayVo.getBusiDate()); - vo.setCurrentDate(dayVo.getBusiDate().substring(5).replace("-",".")); - vo.setCompletedNum(dayVo.getMtTotal() + dayVo.getInspTotal() + dayVo.getWoTotal()); - vo.setCountpendingNum(dayVo.getMtUnfinished() + dayVo.getInspUnfinished() +dayVo.getWoUnfinished()); - respVo.add(vo); + respVo.forEach(vo -> { + TaskStatisticsDO dayVo = countpendingMap.get(vo.getCommitDate()); + if (dayVo != null) { + Integer mtTotal = Objects.isNull(dayVo.getMtTotal()) ? 0 : dayVo.getMtTotal(); + Integer inspTotal = Objects.isNull(dayVo.getInspTotal()) ? 0 : dayVo.getInspTotal(); + Integer woTotal = Objects.isNull(dayVo.getWoTotal()) ? 0 : dayVo.getWoTotal(); + + Integer mtUnfinished = Objects.isNull(dayVo.getMtUnfinished()) ? 0 : dayVo.getMtUnfinished(); + Integer inspUnfinished = Objects.isNull(dayVo.getInspUnfinished()) ? 0 : dayVo.getInspUnfinished(); + Integer woUnfinished = Objects.isNull(dayVo.getWoUnfinished()) ? 0 : dayVo.getWoUnfinished(); + // 计算赋值 + vo.setCompletedNum(mtTotal + inspTotal + woTotal); + vo.setCountpendingNum(mtUnfinished + inspUnfinished + woUnfinished); + } }); } return respVo; @@ -90,8 +112,9 @@ public class HomepageSummaryServiceImpl implements HomepageSummaryService{ mpPage = homepageSummaryMapper.queryCompletedTaskDetails(mpPage,userId); } else { //待办 + Long deptId = SecurityFrameworkUtils.getDeptId(); List roleIds = roleApi.getRoleIdsByUserId(SecurityFrameworkUtils.getLoginUserId()); - mpPage = homepageSummaryMapper.queryPendingTaskDetails(mpPage,roleIds, userId); + mpPage = homepageSummaryMapper.queryPendingTaskDetails(mpPage, roleIds, userId, deptId); } return new PageResult<>(mpPage.getRecords(), mpPage.getTotal()); } @@ -166,46 +189,47 @@ public class HomepageSummaryServiceImpl implements HomepageSummaryService{ (oldVo, newVo) -> newVo, HashMap::new )); - //巡查计划数 - List inspTotal = homepageSummaryMapper.countInspPendingTask(beginTime, endTime); - Map inspTotalMap = inspTotal.stream() - .filter(vo -> Objects.nonNull(vo)) - .collect(Collectors.toMap( - // Map的key:从VO中提取Long类型的roleId(核心修正点) - CommonTaskStatusVo::getRoleId, - vo -> vo, - (oldVo, newVo) -> newVo, - HashMap::new - )); - //养护计划数量 - List mtTotal = homepageSummaryMapper.countMtPendingTask(beginTime, endTime); - Map mtTotalMap = mtTotal.stream() - .filter(vo -> Objects.nonNull(vo)) - .collect(Collectors.toMap( - // Map的key:从VO中提取Long类型的roleId(核心修正点) - CommonTaskStatusVo::getRoleId, - vo -> vo, - (oldVo, newVo) -> newVo, - HashMap::new - )); +// //巡查计划数 +// List inspTotal = homepageSummaryMapper.countInspPendingTask(beginTime, endTime); +// Map inspTotalMap = inspTotal.stream() +// .filter(vo -> Objects.nonNull(vo)) +// .collect(Collectors.toMap( +// // Map的key:从VO中提取Long类型的roleId(核心修正点) +// CommonTaskStatusVo::getRoleId, +// vo -> vo, +// (oldVo, newVo) -> newVo, +// HashMap::new +// )); +// //养护计划数量 +// List mtTotal = homepageSummaryMapper.countMtPendingTask(beginTime, endTime); +// Map mtTotalMap = mtTotal.stream() +// .filter(vo -> Objects.nonNull(vo)) +// .collect(Collectors.toMap( +// // Map的key:从VO中提取Long类型的roleId(核心修正点) +// CommonTaskStatusVo::getRoleId, +// vo -> vo, +// (oldVo, newVo) -> newVo, +// HashMap::new +// )); List taskStatisticsDOList = new ArrayList<>(); //根据用户查询任务数量 for (AdminUserRespDTO adminUserRespDTO : userList) { Long userId = adminUserRespDTO.getId(); + Long deptId = adminUserRespDTO.getDeptId(); List roles = roleApi.getRoleIdsByUserId(userId); if (CollectionUtils.isEmpty(roles)) { continue; } - if (roles.contains(1L)) { + if (roles.contains(1L)) {//超级管理员 continue; } - if (roles.contains(2L)) { + if (roles.contains(2L)) {//普通角色 continue; } - if (roles.contains(159L)) { + if (roles.contains(159L)) {//管理员 continue; } - if (roles.contains(168L)) { + if (roles.contains(168L)) {//子公司管理员 continue; } //deptApi.get @@ -217,17 +241,41 @@ public class HomepageSummaryServiceImpl implements HomepageSummaryService{ statisticsDO.setDeptId(adminUserRespDTO.getDeptId()); //2、查询巡查任务数量及已完成数量 Integer inspTotalCount = 0; + List inspTotal = homepageSummaryMapper.countInspPendingTask(beginTime, endTime, deptId); + Map inspTotalMap = inspTotal.stream() + .filter(vo -> Objects.nonNull(vo)) + .collect(Collectors.toMap( + // Map的key:从VO中提取Long类型的roleId(核心修正点) + CommonTaskStatusVo::getRoleId, + vo -> vo, + (oldVo, newVo) -> newVo, + HashMap::new + )); for (Long role : roles) { CommonTaskStatusVo countVo = inspTotalMap.get(role); if (null != countVo) { inspTotalCount = countVo.getTotalCount(); } } - statisticsDO.setInspCompleted(inspCompMap.get(userId) == null? 0: inspCompMap.get(userId).getTotalCount()); + Integer inspCompCount = Optional.ofNullable(inspCompMap) + .map(map -> map.get(userId)) + .map(CommonTaskStatusVo::getTotalCount) + .orElse(0); + statisticsDO.setInspCompleted(inspCompCount); statisticsDO.setInspUnfinished(inspTotalCount); statisticsDO.setInspTotal(statisticsDO.getInspUnfinished() + statisticsDO.getInspCompleted()); Integer mtTotalCount = 0; + List mtTotal = homepageSummaryMapper.countMtPendingTask(beginTime, endTime, deptId); + Map mtTotalMap = mtTotal.stream() + .filter(vo -> Objects.nonNull(vo)) + .collect(Collectors.toMap( + // Map的key:从VO中提取Long类型的roleId(核心修正点) + CommonTaskStatusVo::getRoleId, + vo -> vo, + (oldVo, newVo) -> newVo, + HashMap::new + )); //3、查询养护计划任务数量 for (Long role : roles) { CommonTaskStatusVo countVo = mtTotalMap.get(role); @@ -236,12 +284,24 @@ public class HomepageSummaryServiceImpl implements HomepageSummaryService{ } } statisticsDO.setMtUnfinished(mtTotalCount); - statisticsDO.setMtCompleted(mtCmpMap.get(userId) == null ? 0 : mtCmpMap.get(userId).getTotalCount()); + Integer mtComppCount = Optional.ofNullable(mtCmpMap) + .map(map -> map.get(userId)) + .map(CommonTaskStatusVo::getTotalCount) + .orElse(0); + statisticsDO.setMtCompleted(mtComppCount); statisticsDO.setMtTotal(statisticsDO.getMtUnfinished() + statisticsDO.getMtCompleted()); //4、工单任务数量 - statisticsDO.setWoCompleted(woCompletedMap.get(userId) == null ? 0 : woCompletedMap.get(userId).getTotalCount()); - statisticsDO.setWoUnfinished(woPendingMap.get(userId) == null ? 0: woPendingMap.get(userId).getTotalCount()); + Integer woCompCount = Optional.ofNullable(woCompletedMap) + .map(map -> map.get(userId)) + .map(CommonTaskStatusVo::getTotalCount) + .orElse(0); + statisticsDO.setWoCompleted(woCompCount); + Integer woUnfiCount = Optional.ofNullable(woPendingMap) + .map(map -> map.get(userId)) + .map(CommonTaskStatusVo::getTotalCount) + .orElse(0); + statisticsDO.setWoUnfinished(woUnfiCount); statisticsDO.setWoTotal(statisticsDO.getWoCompleted() + statisticsDO.getWoUnfinished()); statisticsDO.setCreator("1"); @@ -255,4 +315,45 @@ public class HomepageSummaryServiceImpl implements HomepageSummaryService{ //批量保存 taskStatisticsMapper.insertBatch(taskStatisticsDOList); } + + private List addTaskDefaultData(List days){ + List newList = new ArrayList<>(); + //1、日期赋值 + days.forEach(dayy->{ + TaskCompletionStatusRspVo vo = new TaskCompletionStatusRspVo(); + vo.setCommitDate(dayy); + vo.setCurrentDate(dayy.substring(5).replace("-",".")); + vo.setCompletedNum(0); + vo.setCountpendingNum(0); + newList.add(vo); + }); + return newList; + } + public static List getDays(String startTime, String endTime) { + + // 返回的日期集合 + List days = new ArrayList(); + + DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); + try { + Date start = dateFormat.parse(startTime); + Date end = dateFormat.parse(endTime); + + Calendar tempStart = Calendar.getInstance(); + tempStart.setTime(start); + + Calendar tempEnd = Calendar.getInstance(); + tempEnd.setTime(end); + tempEnd.add(Calendar.DATE, +1);// 日期加1(包含结束) + while (tempStart.before(tempEnd)) { + days.add(dateFormat.format(tempStart.getTime())); + tempStart.add(Calendar.DAY_OF_YEAR, 1); + } + + } catch (ParseException e) { + e.printStackTrace(); + } + + return days; + } } diff --git a/urbanops-module-garden/src/main/resources/mapper/homepage/HomepageSummaryMapper.xml b/urbanops-module-garden/src/main/resources/mapper/homepage/HomepageSummaryMapper.xml index 03d1971..0c7aad1 100644 --- a/urbanops-module-garden/src/main/resources/mapper/homepage/HomepageSummaryMapper.xml +++ b/urbanops-module-garden/src/main/resources/mapper/homepage/HomepageSummaryMapper.xml @@ -417,7 +417,7 @@ SELECT a.plan_name as taskName,a.begin_time as busiDateTime,null as pressingType from garden_inspection_plan a INNER JOIN garden_inspection_plan_role b on a.batch_no=b.batch_no - where a.finish_state in(1,3) + where a.finish_state in(1,3) and a.dept_id = #{deptId} AND b.role_id IN #{roleId} @@ -426,7 +426,7 @@ SELECT a.plan_name as taskName,a.begin_time as busiDateTime, null as pressingType from garden_maintain_plan a INNER JOIN garden_maintain_plan_role b on a.batch_no=b.batch_no - where a.finish_state in(1,3) + where a.finish_state in(1,3) and a.dept_id = #{deptId} AND b.role_id IN #{roleId} @@ -481,7 +481,7 @@ FROM garden_maintain_plan_detail a INNER JOIN garden_maintain_plan_role b ON a.batch_no = b.batch_no - WHERE a.finish_state IN (1, 3) -- 1:未完成;3:已过期 + WHERE a.finish_state IN (1, 3) and a.dept_id = #{deptId} -- 1:未完成;3:已过期 AND a.begin_time <= #{beginTime} @@ -498,7 +498,7 @@ FROM garden_inspection_plan_detail a INNER JOIN garden_inspection_plan_role b ON a.batch_no = b.batch_no - WHERE a.finish_state IN (1, 3) -- 1:未完成;3:已过期 + WHERE a.finish_state IN (1, 3) and a.dept_id = #{deptId} -- 1:未完成;3:已过期 AND a.begin_time <= #{beginTime}