From 083c414ff683ab12e65069c6c0ba6871ed1ed09f Mon Sep 17 00:00:00 2001 From: 无关风月 <443237572@qq.com> Date: 星期六, 12 七月 2025 10:19:09 +0800 Subject: [PATCH] 保洁巡检本周代码 --- ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TIndexController.java | 196 ++++++++++++++++++++++++++++++++++++------------- 1 files changed, 144 insertions(+), 52 deletions(-) diff --git a/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TIndexController.java b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TIndexController.java index 28d0bff..1409ea0 100644 --- a/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TIndexController.java +++ b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TIndexController.java @@ -99,6 +99,7 @@ @Resource private TSystemBulletinService systemBulletinService; + @ApiOperation(value = "首页-系统公告") @PostMapping(value = "/systemBulletin") public R<TSystemBulletin> systemBulletin() { @@ -110,17 +111,28 @@ @PostMapping(value = "/dataReport") public R<DataReportVO> dataReport(@RequestBody DataReportDTO dto) { DataReportQuery dataReportQuery = new DataReportQuery(); - dataReportQuery.setStartTime(dto.getStartTime()); - dataReportQuery.setEndTime(dto.getEndTime()); + dataReportQuery.setStartTime(dto.getStartTime()+" 00:00:00"); + dataReportQuery.setEndTime(dto.getEndTime()+" 23:59:59"); + dataReportQuery.setPageNum(dto.getPageNum()); + dataReportQuery.setPageSize(dto.getPageSize()); DataReportVO res = new DataReportVO(); List<TDictData> dataList = dictDataService.list(); List<TProjectDept> projectDepts = projectDeptService.list(); List<TTaskDetail> taskDetails = taskDetailService.lambdaQuery() .isNotNull(TTaskDetail::getClearStatus) + .eq(TTaskDetail::getHandleType,1) .eq(TTaskDetail::getAuditStatus,1) - .groupBy(TTaskDetail::getTaskId) .orderByDesc(BaseModel::getCreateTime) .list(); + taskDetails = new ArrayList<>(taskDetails.stream() + .collect(Collectors.groupingBy( + TTaskDetail::getTaskId, + Collectors.collectingAndThen( + Collectors.toList(), + listAll -> listAll.get(0) + ) + )) + .values()); List<String> userDeptIds = new ArrayList<>(); LambdaQueryWrapper<TTask> tTaskLambdaQueryWrapper = new LambdaQueryWrapper<>(); if (StringUtils.hasLength(dto.getProjectId())) { @@ -151,8 +163,8 @@ tTaskLambdaQueryWrapper.eq(TTask::getProjectId, projectDept.getId()); userDeptIds.add(projectDept.getId()); } else { - TProjectDept parent = projectDeptService.getById(projectDept.getParentId()); - List<TProjectDept> list = projectDeptService.lambdaQuery().eq(TProjectDept::getParentId, parent.getId()).list(); + userDeptIds.add(projectDept.getId()); + List<TProjectDept> list = projectDeptService.lambdaQuery().eq(TProjectDept::getParentId, projectDept.getId()).list(); List<String> deptIds = list.stream().map(TProjectDept::getId).collect(Collectors.toList()); if (!deptIds.isEmpty()) { tTaskLambdaQueryWrapper.in(TTask::getProjectId, deptIds); @@ -168,8 +180,8 @@ dataReportQuery.setProjectIds(userDeptIds); if (StringUtils.hasLength(dto.getStartTime())) { - tTaskLambdaQueryWrapper.ge(TTask::getImplementTime, dto.getStartTime()); - tTaskLambdaQueryWrapper.le(TTask::getImplementTime, dto.getEndTime()); + tTaskLambdaQueryWrapper.ge(TTask::getImplementTime, dto.getStartTime()+" 00:00:00"); + tTaskLambdaQueryWrapper.le(TTask::getImplementTime, dto.getEndTime()+" 23:59:59"); } else { // 获取今天凌晨00:00:00 和今天23:59:59 类型为LocalDateTime LocalDateTime startOfToday = LocalDateTime.of(LocalDate.now(), LocalTime.MIN); @@ -177,7 +189,7 @@ tTaskLambdaQueryWrapper.ge(TTask::getImplementTime, startOfToday); tTaskLambdaQueryWrapper.le(TTask::getImplementTime, endOfToday); } - tTaskLambdaQueryWrapper.ne(TTask::getStatus, 1); +// tTaskLambdaQueryWrapper.ne(TTask::getStatus, 1); List<TTask> tasks = taskCleanerService.list(tTaskLambdaQueryWrapper); HashMap<String, Integer> taskMap = new HashMap<>(); HashMap<String, Integer> statusMap = new HashMap<>(); @@ -214,13 +226,12 @@ break; case 5: temp.append("已完成"); - break; case 6: temp.append("已完成"); break; } - statusMap.put(temp.toString(), statusMap.getOrDefault(task.getStatus()+"", 0) + 1); + statusMap.put(temp.toString(), statusMap.getOrDefault(temp.toString(), 0) + 1); TTaskDetail tTaskDetail = taskDetails.stream().filter(e -> e.getTaskId().equals(task.getId())).findFirst().orElse(null); StringBuilder temp1 = new StringBuilder(); if (tTaskDetail!=null){ @@ -245,6 +256,10 @@ int pass=0; int unPass=0; List<TTask> userTaskList = tasks.stream().filter(e -> e.getPatrolInspector().equals(record.getUserId() + "")).collect(Collectors.toList()); + List<TTask> userTaskListPass = tasks.stream().filter(e -> + (e.getStatus()==5||e.getStatus()==6) + && + e.getPatrolInspector().equals(record.getUserId() + "")).collect(Collectors.toList()); for (TTask tTask : userTaskList) { TTaskDetail tTaskDetail = taskDetails.stream().filter(e -> e.getTaskId().equals(tTask.getId())).findFirst().orElse(null); if (tTaskDetail!=null){ @@ -261,9 +276,7 @@ } record.setTotal(userTaskList.size()); record.setRate(pass+unPass!=0?new BigDecimal(pass).divide(new BigDecimal(pass+unPass),2,RoundingMode.HALF_DOWN).multiply(new BigDecimal(100)):BigDecimal.ZERO); - List<TTask> status1 = userTaskList.stream().filter(e -> e.getStatus() == 5 || e.getStatus() == 6).collect(Collectors.toList()); - List<TTask> status2 = userTaskList.stream().filter(e -> e.getStatus() != 5 && e.getStatus() != 6).collect(Collectors.toList()); - record.setFinish(!status1.isEmpty()?new BigDecimal(status1.size()).divide(new BigDecimal(status1.size()+status2.size()),2,RoundingMode.HALF_DOWN).multiply(new BigDecimal(100)):BigDecimal.ZERO); + record.setFinish(!userTaskList.isEmpty()?new BigDecimal(userTaskListPass.size()).divide(new BigDecimal(userTaskList.size()),2,RoundingMode.HALF_DOWN).multiply(new BigDecimal(100)):BigDecimal.ZERO); } // PageInfo<TaskFinishListVO> taskFinishListVOPageInfo = new PageInfo<>(); @@ -301,18 +314,25 @@ } return R.ok(projectDeptListNoLimitVOS); } - +@Resource +private TNoticeService noticeService; @ApiOperation(value = "首页") @PostMapping(value = "/index") public R<IndexVO> index(@RequestBody IndexDTO dto) throws IOException { -// if (!StringUtils.hasLength(dto.getLon()) || !StringUtils.hasLength(dto.getLat())) { -// return R.fail("请上传经纬度"); -// } IndexVO res = new IndexVO(); + res.setIsNotice(0); Long userId = tokenService.getLoginUserApplet().getUserId(); + Long count = noticeService.lambdaQuery().eq(TNotice::getUserId, userId).eq(TNotice::getStatus, 1).count(); + if (count>0){ + res.setIsNotice(1); + } + List<TProjectDept> projectListAll = projectDeptService.list(); + List<TLocation> locationList = locationService.list(); List<TLocationType> locationTypeList = locationTypeService.list(); - List<TTask> taskAll = taskCleanerService.lambdaQuery().eq(TTask::getPatrolInspector, userId).list(); + dto.setUserId(userId); + List<TTask> taskAll = taskCleanerService.indexTask(dto); +// List<TTask> taskAll = taskCleanerService.lambdaQuery().eq(TTask::getPatrolInspector, userId).list(); // 获取今天凌晨00:00:00 和今天23:59:59 类型为LocalDateTime LocalDateTime startOfToday = LocalDateTime.of(LocalDate.now(), LocalTime.MIN); LocalDateTime endOfToday = LocalDateTime.of(LocalDate.now(), LocalTime.MAX); @@ -330,10 +350,11 @@ TProjectDept projectDept = projectDeptService.getById(sysUser.getDeptId()); if (projectDept != null) { - if (!"0".equals(projectDept.getParentId())) { + if ("0".equals(projectDept.getParentId())) { + List<String> collect = projectListAll.stream().filter(e -> e.getParentId().equals(projectDept.getId())).map(TProjectDept::getId).collect(Collectors.toList()); + collect.add(projectDept.getId()); // 查询片区下的所有人员 - users = sysUsers.stream().filter(e -> e.getDeptId() - .equals(projectDept.getId()) + users = sysUsers.stream().filter(e ->collect.contains(e.getDeptId()) && e.getStatus().equals("0") && e.getDeptType() == 1).collect(Collectors.toList()); } else { @@ -357,11 +378,8 @@ } else { TDept dept = deptService.getById(sysUser.getDeptId()); if (dept != null) { - if (!dept.getDeptName().equals("公司")) { - users = sysUsers.stream().filter(e -> e.getDeptId() - .equals(sysUser.getDeptId()) - && e.getStatus().equals("0") - && e.getDeptType() == 1).collect(Collectors.toList()); + if (!dept.getDeptName().contains("公司")) { + users = sysUsers.stream().filter(e -> e.getDeptType() == 1).collect(Collectors.toList()); } } @@ -382,17 +400,26 @@ .multiply(new BigDecimal(100)) : new BigDecimal(0)); List<TTaskDetail> taskDetails = taskDetailService.lambdaQuery() - .eq(TTaskDetail::getAuditStatus, 1).in(TTaskDetail::getTaskId, taskIds) + .eq(TTaskDetail::getAuditStatus, 1) + .in(TTaskDetail::getTaskId, taskIds) .isNotNull(TTaskDetail::getClearStatus) - .groupBy(TTaskDetail::getTaskId) + .eq(TTaskDetail::getHandleType,1) .orderByDesc(TTaskDetail::getCreateTime).list(); - + taskDetails = new ArrayList<>(taskDetails.stream() + .collect(Collectors.groupingBy( + TTaskDetail::getTaskId, + Collectors.collectingAndThen( + Collectors.toList(), + listAll -> listAll.get(0) + ) + )) + .values()); List<TTaskDetail> status3 = taskDetails.stream().filter(e -> e.getClearStatus() == 1).collect(Collectors.toList()); List<TTaskDetail> status4 = taskDetails.stream().filter(e -> e.getClearStatus() == 2).collect(Collectors.toList()); - if (status3.size() + status4.size() != 0) { - BigDecimal divide = new BigDecimal(status3.size() + status4.size()) - .divide(new BigDecimal(status3.size()), 2, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(100)); + if (!status3.isEmpty()) { + BigDecimal divide = new BigDecimal(status3.size() ) + .divide(new BigDecimal(status3.size()+ status4.size()), 2, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(100)); res.setRate(divide); } else { res.setRate(new BigDecimal(0)); @@ -423,9 +450,13 @@ leaveUserListVO.setCreateTime1(tLeave.getCreateTime()); leaveUserListVO.setStartTime1(tLeave.getStartTime()); leaveUserListVO.setEndTime1(tLeave.getEndTime()); + leaveList.add(leaveUserListVO); } List<TTask> taskList = taskAll.stream().filter(e -> e.getPatrolInspector().equals(userId + "") && e.getStatus() == 4).collect(Collectors.toList()); List<String> taskIds = taskList.stream().map(TTask::getId).collect(Collectors.toList()); + // 驳回原因 + List<TTaskDetail> tTaskDetails = taskDetailService.list(new LambdaQueryWrapper<TTaskDetail>() + .eq(TTaskDetail::getHandleType,3).groupBy(TTaskDetail::getTaskId).orderByDesc(TTaskDetail::getCreateTime)); for (TTask tTask : taskList) { List<TTaskDetail> taskDetailsStatus1 = taskDetailService.lambdaQuery() .eq(TTaskDetail::getAuditStatus, 1).in(TTaskDetail::getTaskId, taskIds) @@ -440,14 +471,14 @@ taskTodayVO.setLocationLon(tLocation.getLocationLon()); taskTodayVO.setLocationLat(tLocation.getLocationLat()); taskTodayVO.setLocationName(tLocation.getLocationName()); - // todo if(StringUtils.hasLength(dto.getLon())){ - Map<String, String> distance = amapApiClient.getDistance(dto.getLon() + "," + dto.getLat(), tLocation.getLocationLon() + "," + tLocation.getLocationLat(), 1); - if (distance != null) { - taskTodayVO.setDistance(new BigDecimal(distance.get("distance")).divide(new BigDecimal(1000)).setScale(2, BigDecimal.ROUND_HALF_EVEN)); - } else { - taskTodayVO.setDistance(new BigDecimal("0")); - } + taskTodayVO.setDistance(tTask.getDistance().divide(new BigDecimal(1000),2, RoundingMode.HALF_DOWN)); +// Map<String, String> distance = amapApiClient.getDistance(dto.getLon() + "," + dto.getLat(), tLocation.getLocationLon() + "," + tLocation.getLocationLat(), 1); +// if (distance != null) { +// taskTodayVO.setDistance(new BigDecimal(distance.get("distance")).divide(new BigDecimal(1000)).setScale(2, BigDecimal.ROUND_HALF_EVEN)); +// } else { +// taskTodayVO.setDistance(new BigDecimal("0")); +// } }else { taskTodayVO.setDistance(new BigDecimal("0")); } @@ -457,16 +488,51 @@ taskTodayVO.setLocationTypeIcon(tLocationType.getLocationIcon()); } } - TTaskDetail tTaskDetail = taskDetailsStatus1.stream().filter(e -> e.getTaskId().equals(tTask.getId())).findFirst().orElse(null); - if (tTaskDetail != null) { - String unqualified = tTaskDetail.getUnqualified(); - TDictData dictData = dictDataService.lambdaQuery().eq(TDictData::getId, unqualified).one(); - if (dictData != null) { - taskTodayVO.setRemark(dictData.getDataContent()); + TTaskDetail tTaskDetail = tTaskDetails.stream().filter(e -> e.getTaskId().equals(tTask.getId())).findFirst().orElse(null); + if (tTaskDetail!=null){ + taskTodayVO.setRemark(tTaskDetail.getAuditRemark()); + } + // 任务记录ids + List<String> collect = taskAll.stream().map(TTask::getId).collect(Collectors.toList()); + if (!collect.isEmpty()){ + List<TInspector> list1 = inspectorService.lambdaQuery() + + .in(TInspector::getTaskId, collect).eq(TInspector::getStatus, 2).list(); + for (TInspector tInspector : list1) { + TaskPendingVO taskTodayVOOne = new TaskPendingVO(); + BeanUtils.copyProperties(tTask, taskTodayVOOne); + taskTodayVOOne.setId(tInspector.getId()); + TLocation tLocationOne = locationList.stream().filter(e -> e.getId().equals(tTask.getLocationId())).findFirst().orElse(null); + if (tLocationOne != null) { + taskTodayVOOne.setLocationAddress(tLocationOne.getLocationAddress()); + taskTodayVOOne.setLocationLon(tLocationOne.getLocationLon()); + taskTodayVOOne.setLocationLat(tLocationOne.getLocationLat()); + taskTodayVOOne.setLocationName(tLocationOne.getLocationName()); + if(StringUtils.hasLength(dto.getLon())){ + Map<String, String> distance = amapApiClient.getDistance(dto.getLon() + "," + dto.getLat(), tLocationOne.getLocationLon() + "," + tLocationOne.getLocationLat(), 1); + if (distance != null) { + taskTodayVOOne.setDistance(new BigDecimal(distance.get("distance")).divide(new BigDecimal(1000)).setScale(2, BigDecimal.ROUND_HALF_EVEN)); + } else { + taskTodayVOOne.setDistance(new BigDecimal("0")); + } + }else { + taskTodayVOOne.setDistance(new BigDecimal("0")); + } + TLocationType tLocationType = locationTypeList.stream().filter(e -> e.getId().equals(tLocationOne.getLocationType())).findFirst().orElse(null); + if (tLocationType != null) { + taskTodayVOOne.setLocationTypeName(tLocationType.getLocationName()); + taskTodayVOOne.setLocationTypeIcon(tLocationType.getLocationIcon()); + } + } + taskTodayVOOne.setStatus(4); + taskTodayVOOne.setRemark(tInspector.getAuditRemark()); + pendingTask.add(taskTodayVOOne); } } pendingTask.add(taskTodayVO); } + // 将pendingTask按照距离 从小到大排序 + pendingTask.sort(Comparator.comparing(TaskPendingVO::getDistance)); res.setPendingTask(pendingTask); res.setLeaveList(leaveList); List<TaskTodayVO> todayTask = new ArrayList<>(); @@ -504,16 +570,15 @@ taskTodayVO.setLocationTypeIcon(tLocationType.getLocationIcon()); } } - TTaskDetail tTaskDetail = taskDetailsStatus1.stream().filter(e -> e.getTaskId().equals(tTask.getId())).findFirst().orElse(null); - if (tTaskDetail != null) { - String unqualified = tTaskDetail.getUnqualified(); - TDictData dictData = dictDataService.lambdaQuery().eq(TDictData::getId, unqualified).one(); - if (dictData != null) { - taskTodayVO.setRemark(dictData.getDataContent()); - } + TTaskDetail tTaskDetail = tTaskDetails.stream().filter(e -> e.getTaskId().equals(tTask.getId())).findFirst().orElse(null); + if (tTaskDetail!=null){ + taskTodayVO.setRemark(tTaskDetail.getAuditRemark()); } todayTask.add(taskTodayVO); + } + // 将todayTask进行排序 优先根据status状态排序,优先展示未执行、超时、待整改、待确认、整改完成、已完成,然后状态一样再根据距离排序 + sortTodayTasks(todayTask); res.setTodayTask(todayTask); List<TaskTomorrowVO> tomorrowTask = new ArrayList<>(); @@ -524,7 +589,34 @@ } Collections.shuffle(tomorrowTask); res.setTomorrowTask(tomorrowTask); + res.setIsLeave(0); + // 查询请假状态 + List<TLeave> list2 = leaveService.lambdaQuery().eq(TLeave::getLeavePerson, userId) + .eq(TLeave::getAuditStatus, 2) + .list(); + for (TLeave tLeave : list2) { + LocalDate now = LocalDate.now(); + LocalDate startDate = tLeave.getStartTime().toLocalDate(); + LocalDate endDate = tLeave.getStartTime().toLocalDate(); + if (now.isAfter(startDate) && now.isBefore(endDate)) { + res.setIsLeave(1); + } else if (now.isEqual(startDate) || now.isEqual(endDate)) { + res.setIsLeave(1); + } + } return R.ok(res); } + public static void sortTodayTasks(List<TaskTodayVO> taskList) { + Map<Integer, Integer> statusOrder = new HashMap<>(); + statusOrder.put(1, 0); + statusOrder.put(2, 1); + statusOrder.put(4, 2); + statusOrder.put(3, 3); + statusOrder.put(5, 4); + statusOrder.put(6, 5); + + taskList.sort(Comparator.comparingInt((TaskTodayVO o) -> statusOrder.getOrDefault(o.getStatus(), Integer.MAX_VALUE)).thenComparing(TaskTodayVO::getDistance)); + } + } -- Gitblit v1.7.1