ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/DataStatisticsController.java
@@ -619,6 +619,15 @@ .eq(TTaskDetail::getClearStatus, 2) .eq(TTaskDetail::getHandleType,1) .orderByDesc(TTaskDetail::getCreateTime)); taskDetails = new ArrayList<>(taskDetails.stream() .collect(Collectors.groupingBy( TTaskDetail::getTaskId, Collectors.collectingAndThen( Collectors.toList(), listAll -> listAll.get(0) ) )) .values()); List<TTaskDetail> taskDetailList = new ArrayList<>(); for (TTask task : list) { TTaskDetail tTaskDetail = taskDetails.stream().filter(taskDetail -> taskDetail.getTaskId().equals(task.getId())).findFirst().orElse(null); @@ -691,6 +700,15 @@ .eq(TTaskDetail::getHandleType,1) .eq(TTaskDetail::getClearStatus, 2) .orderByDesc(TTaskDetail::getCreateTime)); taskDetails = new ArrayList<>(taskDetails.stream() .collect(Collectors.groupingBy( TTaskDetail::getTaskId, Collectors.collectingAndThen( Collectors.toList(), listAll -> listAll.get(0) ) )) .values()); List<TTaskDetail> taskDetailList = new ArrayList<>(); for (TTask task : list) { TTaskDetail tTaskDetail = taskDetails.stream().filter(taskDetail -> taskDetail.getTaskId().equals(task.getId())).findFirst().orElse(null); ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/ReportController.java
@@ -228,7 +228,7 @@ return R.ok(progressListVOPageInfo); } @ApiOperation(value = "任务进度导出") @Log(title = "任务进度导出", businessType = BusinessType.EXPORT) @Log(title = "任务进度导出", businessType = BusinessType.OTHER) @PostMapping(value = "/taskProgressExport") public void taskProgressExport(@RequestBody TaskProgressQuery query) { List<SysUser> sysUsers = sysUserService.selectAllList(); @@ -440,64 +440,65 @@ && locationIds.contains(e.getLocationId())).collect(Collectors.toList()); Integer count = taskList.size(); temp.setLocationNum(count); int total = taskList.size(); int num1 = 0; int num2 = 0; int num3 = 0; int num4 = 0; int num5 = 0; int num6 = 0; int num7 = 0; for (TTask tTask : taskList) { TTaskDetail tTaskDetail = taskDetails.stream().filter(e -> e.getTaskId().equals(tTask.getId()) && e.getClearStatus() != null).findFirst().orElse(null); if (tTaskDetail!=null){ switch (tTaskDetail.getClearStatus()) { case 1: num1++; break; case 2: num2++; break; } } // 任务状态:1未执行、2超时、3待确认、4待整改、5整改完成、6已完成 switch (tTask.getStatus()) { case 1: if (tTaskDetail == null) { num3++; } break; case 2: num6++; break; case 3: break; case 4: num4++; break; case 5: num7++; break; case 6: num5++; break; } } projectDeptDetailsChildVO.setTotal(total); projectDeptDetailsChildVO.setNum1(num1); projectDeptDetailsChildVO.setNum2(num2); projectDeptDetailsChildVO.setNum3(num3); projectDeptDetailsChildVO.setNum4(num4); projectDeptDetailsChildVO.setNum5(num5); projectDeptDetailsChildVO.setNum6(num6); projectDeptDetailsChildVO.setNum7(num7); } locationTypeListByProjectVOS1.add(temp); } List<TTask> taskList = tasks.stream().filter(e -> e.getProjectId().equals(projectDeptDetailsChildVO.getProjectId()) ).collect(Collectors.toList()); int total = taskList.size(); int num1 = 0; int num2 = 0; int num3 = 0; int num4 = 0; int num5 = 0; int num6 = 0; int num7 = 0; for (TTask tTask : taskList) { TTaskDetail tTaskDetail = taskDetails.stream().filter(e -> e.getTaskId().equals(tTask.getId()) && e.getClearStatus() != null).findFirst().orElse(null); if (tTaskDetail!=null&&(tTask.getStatus()==5||tTask.getStatus()==6)){ switch (tTaskDetail.getClearStatus()) { case 1: num1++; break; case 2: num2++; break; } } // 任务状态:1未执行、2超时、3待确认、4待整改、5整改完成、6已完成 switch (tTask.getStatus()) { case 1: if (tTaskDetail == null) { num3++; } break; case 2: num6++; break; case 3: break; case 4: num4++; break; case 5: num7++; break; case 6: num5++; break; } } projectDeptDetailsChildVO.setTotal(total); projectDeptDetailsChildVO.setNum1(num1); projectDeptDetailsChildVO.setNum2(num2); projectDeptDetailsChildVO.setNum3(num3); projectDeptDetailsChildVO.setNum4(num4); projectDeptDetailsChildVO.setNum5(num5); projectDeptDetailsChildVO.setNum6(num6); projectDeptDetailsChildVO.setNum7(num7); projectDeptDetailsChildVO.setLocationTypeList(locationTypeListByProjectVOS1); } } return R.ok(res); } @@ -547,73 +548,82 @@ locationTypeListByProjectVOS.add(locationTypeListByProjectVO); } for (ProjectDeptDetailsVO re : res) { List<ProjectDeptDetailsChildVO> projectChild = re.getProjectChild(); for (ProjectDeptDetailsChildVO projectDeptDetailsChildVO : projectChild) { for (ProjectDeptDetailsChildVO projectDeptDetailsChildVO : re.getProjectChild()) { int cleanerCount = cleanerService.lambdaQuery().eq(TCleaner::getProjectId, projectDeptDetailsChildVO.getProjectId()).list().size(); projectDeptDetailsChildVO.setCleanerCount(cleanerCount); List<LocationTypeListByProjectVO> locationTypeListByProjectVOS1 = new ArrayList<>(); for (LocationTypeListByProjectVO locationTypeListByProjectVO : locationTypeListByProjectVOS) { List<String> locationIds = locations.stream().filter(e -> e.getLocationType().equals(locationTypeListByProjectVO.getId())).map(TLocation::getId).collect(Collectors.toList()); LocationTypeListByProjectVO temp = new LocationTypeListByProjectVO(); BeanUtils.copyProperties(locationTypeListByProjectVO, temp); List<String> locationIds = locations.stream().filter(e -> e.getProjectId().equals(projectDeptDetailsChildVO.getProjectId())&& e.getLocationType().equals(locationTypeListByProjectVO.getId())) .map(TLocation::getId).collect(Collectors.toList()); if (locationIds.isEmpty()) { locationTypeListByProjectVO.setLocationNum(0); } else { List<TTask> taskList = tasks.stream().filter(e -> e.getProjectId().equals(projectDeptDetailsChildVO.getProjectId()) && locationIds.contains(e.getLocationId())).collect(Collectors.toList()); Integer count = taskList.size(); locationTypeListByProjectVO.setLocationNum(count); int total = taskList.size(); int num1 = 0; int num2 = 0; int num3 = 0; int num4 = 0; int num5 = 0; int num6 = 0; int num7 = 0; for (TTask tTask : taskList) { TTaskDetail tTaskDetail = taskDetails.stream().filter(e -> e.getTaskId().equals(tTask.getId()) && e.getClearStatus() != null).findFirst().orElse(null); if (tTaskDetail!=null){ switch (tTaskDetail.getClearStatus()) { case 1: num1++; break; case 2: num2++; break; } } // 任务状态:1未执行、2超时、3待确认、4待整改、5整改完成、6已完成 switch (tTask.getStatus()) { case 1: if (tTaskDetail == null) { num3++; } break; case 2: num6++; break; case 3: break; case 4: num4++; break; case 5: num7++; break; case 6: num5++; break; } temp.setLocationNum(count); } locationTypeListByProjectVOS1.add(temp); } List<TTask> taskList = tasks.stream().filter(e -> e.getProjectId().equals(projectDeptDetailsChildVO.getProjectId()) ).collect(Collectors.toList()); int total = taskList.size(); int num1 = 0; int num2 = 0; int num3 = 0; int num4 = 0; int num5 = 0; int num6 = 0; int num7 = 0; for (TTask tTask : taskList) { TTaskDetail tTaskDetail = taskDetails.stream().filter(e -> e.getTaskId().equals(tTask.getId()) && e.getClearStatus() != null).findFirst().orElse(null); if (tTaskDetail!=null&&(tTask.getStatus()==5||tTask.getStatus()==6)){ switch (tTaskDetail.getClearStatus()) { case 1: num1++; break; case 2: num2++; break; } projectDeptDetailsChildVO.setTotal(total); projectDeptDetailsChildVO.setNum1(num1); projectDeptDetailsChildVO.setNum2(num2); projectDeptDetailsChildVO.setNum3(num3); projectDeptDetailsChildVO.setNum4(num4); projectDeptDetailsChildVO.setNum5(num5); projectDeptDetailsChildVO.setNum6(num6); projectDeptDetailsChildVO.setNum7(num7); } // 任务状态:1未执行、2超时、3待确认、4待整改、5整改完成、6已完成 switch (tTask.getStatus()) { case 1: if (tTaskDetail == null) { num3++; } break; case 2: num6++; break; case 3: break; case 4: num4++; break; case 5: num7++; break; case 6: num5++; break; } } projectDeptDetailsChildVO.setLocationTypeList(locationTypeListByProjectVOS); projectDeptDetailsChildVO.setTotal(total); projectDeptDetailsChildVO.setNum1(num1); projectDeptDetailsChildVO.setNum2(num2); projectDeptDetailsChildVO.setNum3(num3); projectDeptDetailsChildVO.setNum4(num4); projectDeptDetailsChildVO.setNum5(num5); projectDeptDetailsChildVO.setNum6(num6); projectDeptDetailsChildVO.setNum7(num7); projectDeptDetailsChildVO.setLocationTypeList(locationTypeListByProjectVOS1); } } @@ -724,9 +734,20 @@ if (projectIds.isEmpty()){ return R.ok(new ArrayList<>()); } query.setDeptIds(projectIds); if (StringUtils.hasLength(query.getPhonenumber())){ List<Long> patrolInspectorIds = sysUsers.stream().filter(sysUser -> sysUser.getPhonenumber().equals(query.getPhonenumber()) && projectIds.contains(sysUser.getDeptId()) ).map(SysUser::getUserId).collect(Collectors.toList()); if (patrolInspectorIds.isEmpty()){ return R.ok(new ArrayList<>()); } query.setPatrolInspectorIds(patrolInspectorIds); } if (StringUtils.hasLength(query.getNickName())){ List<Long> patrolInspectorIds = sysUsers.stream().filter(sysUser -> sysUser.getNickName().contains(query.getNickName()) && projectIds.contains(sysUser.getDeptId()) ).map(SysUser::getUserId).collect(Collectors.toList()); if (patrolInspectorIds.isEmpty()){ @@ -739,7 +760,33 @@ List<Long> patrolInspectorIds = sysUsers.stream().filter(sysUser -> sysUser.getPhonenumber().equals(query.getPhonenumber()) ).map(SysUser::getUserId).collect(Collectors.toList()); if (!query.getPatrolInspectorIds().isEmpty()){ if (query.getPatrolInspectorIds()!=null&&!query.getPatrolInspectorIds().isEmpty()){ // 取交集 patrolInspectorIds = patrolInspectorIds.stream().filter(query.getPatrolInspectorIds()::contains).collect(Collectors.toList()); } query.setPatrolInspectorIds(patrolInspectorIds); if (patrolInspectorIds.isEmpty()){ return R.ok(new ArrayList<>()); } } if (StringUtils.hasLength(query.getNickName())){ List<Long> patrolInspectorIds = sysUsers.stream().filter(sysUser -> sysUser.getNickName().contains(query.getNickName()) ).map(SysUser::getUserId).collect(Collectors.toList()); if (query.getPatrolInspectorIds()!=null&&!query.getPatrolInspectorIds().isEmpty()){ // 取交集 patrolInspectorIds = patrolInspectorIds.stream().filter(query.getPatrolInspectorIds()::contains).collect(Collectors.toList()); } query.setPatrolInspectorIds(patrolInspectorIds); if (patrolInspectorIds.isEmpty()){ return R.ok(new ArrayList<>()); } } if (query.getDeptIds()!=null&&!query.getDeptIds().isEmpty()){ List<Long> patrolInspectorIds = sysUsers.stream().filter(sysUser -> query.getDeptIds().contains(sysUser.getDeptId()) ).map(SysUser::getUserId).collect(Collectors.toList()); if (query.getPatrolInspectorIds()!=null&&!query.getPatrolInspectorIds().isEmpty()){ // 取交集 patrolInspectorIds = patrolInspectorIds.stream().filter(query.getPatrolInspectorIds()::contains).collect(Collectors.toList()); } @@ -751,10 +798,10 @@ List<PatrolInspectorVO> res = new ArrayList<>(); LambdaQueryWrapper<TTask> tTaskLambdaQueryWrapper = new LambdaQueryWrapper<>(); if (StringUtils.hasLength(query.getStartTime())){ tTaskLambdaQueryWrapper.ge(TTask::getCreateTime, query.getStartTime()+" :00:00:00"); tTaskLambdaQueryWrapper.le(TTask::getCreateTime, query.getEndTime()+" :23:59:59"); tTaskLambdaQueryWrapper.ge(TTask::getImplementTime, query.getStartTime()+" :00:00:00"); tTaskLambdaQueryWrapper.le(TTask::getImplementTime, query.getEndTime()+" :23:59:59"); } if(query.getPatrolInspectorIds()!=null){ if(query.getPatrolInspectorIds()!=null&& !query.getPatrolInspectorIds().isEmpty()){ tTaskLambdaQueryWrapper.in(TTask::getPatrolInspector, query.getPatrolInspectorIds()); sysUsers = sysUsers.stream().filter(sysUser -> query.getPatrolInspectorIds().contains(sysUser.getUserId())).collect(Collectors.toList()); } @@ -796,8 +843,18 @@ } List<TTaskDetail> list = taskDetailService.lambdaQuery() .eq(TTaskDetail::getAuditStatus, 1) .eq(TTaskDetail::getHandleType,1) .isNotNull(TTaskDetail::getClearStatus).orderByDesc(BaseModel::getCreateTime) .in(!taskIds.isEmpty(), TTaskDetail::getTaskId,taskIdsFinish).groupBy(TTaskDetail::getTaskId).list(); .in(!taskIds.isEmpty(), TTaskDetail::getTaskId,taskIdsFinish).list(); list = new ArrayList<>(list.stream() .collect(Collectors.groupingBy( TTaskDetail::getTaskId, Collectors.collectingAndThen( Collectors.toList(), listAll -> listAll.get(0) ) )) .values()); // 查询clearStatus为1的数量 List<TTaskDetail> clearStatus1 = list.stream().filter(e -> e.getClearStatus().equals(1)).collect(Collectors.toList()); List<TTaskDetail> clearStatus2 = list.stream().filter(e -> e.getClearStatus().equals(2)).collect(Collectors.toList()); @@ -806,8 +863,8 @@ patrolInspectorVO.setNum1(clearStatus1.size()); patrolInspectorVO.setNum2(clearStatus2.size()); patrolInspectorVO.setNum3(!clearStatus1.isEmpty() ? (new BigDecimal(clearStatus1.size()).add(new BigDecimal(clearStatus2.size()))) .divide(new BigDecimal(clearStatus1.size()), 2, RoundingMode.HALF_DOWN) (new BigDecimal(clearStatus1.size())) .divide(new BigDecimal(clearStatus1.size()+clearStatus2.size()), 2, RoundingMode.HALF_DOWN) .multiply(new BigDecimal(100)):BigDecimal.ZERO); // 未执行 List<TTask> status1 = taskList.stream().filter(e -> e.getStatus() == 1).collect(Collectors.toList()); @@ -834,13 +891,13 @@ } @ApiOperation(value = "巡检人员报表导出") @PostMapping(value = "/patrolInspectorListExport") @Log(title = "巡检人员报表导出", businessType = BusinessType.EXPORT) @Log(title = "巡检人员报表导出", businessType = BusinessType.OTHER) public void patrolInspectorListExport(@RequestBody PatrolInspectorQuery query) { List<SysUser> sysUsers = sysUserService.selectAllList(); LambdaQueryWrapper<TLeave> tLeaveLambdaQueryWrapper = new LambdaQueryWrapper<>(); if (StringUtils.hasLength(query.getStartTime())){ tLeaveLambdaQueryWrapper.ge(TLeave::getCreateTime, query.getStartTime()); tLeaveLambdaQueryWrapper.le(TLeave::getCreateTime, query.getEndTime()); tLeaveLambdaQueryWrapper.ge(TLeave::getCreateTime, query.getStartTime()+" :00:00:00"); tLeaveLambdaQueryWrapper.le(TLeave::getCreateTime, query.getEndTime()+" :23:59:59"); } tLeaveLambdaQueryWrapper.eq(TLeave::getAuditStatus,2); List<TLeave> leaves = leaveService.list(tLeaveLambdaQueryWrapper); @@ -851,11 +908,22 @@ .stream().map(TDept::getId).collect(Collectors.toList()); projectIds.addAll(deptIds); if (projectIds.isEmpty()){ projectIds.add("0"); projectIds.add("-1"); } query.setDeptIds(projectIds); if (StringUtils.hasLength(query.getPhonenumber())){ List<Long> patrolInspectorIds = sysUsers.stream().filter(sysUser -> sysUser.getPhonenumber().equals(query.getPhonenumber()) && projectIds.contains(sysUser.getDeptId()) ).map(SysUser::getUserId).collect(Collectors.toList()); if (patrolInspectorIds.isEmpty()){ patrolInspectorIds.add(0L); } query.setPatrolInspectorIds(patrolInspectorIds); } if (StringUtils.hasLength(query.getNickName())){ List<Long> patrolInspectorIds = sysUsers.stream().filter(sysUser -> sysUser.getNickName().contains(query.getNickName()) && projectIds.contains(sysUser.getDeptId()) ).map(SysUser::getUserId).collect(Collectors.toList()); if (patrolInspectorIds.isEmpty()){ @@ -868,7 +936,33 @@ List<Long> patrolInspectorIds = sysUsers.stream().filter(sysUser -> sysUser.getPhonenumber().equals(query.getPhonenumber()) ).map(SysUser::getUserId).collect(Collectors.toList()); if (!query.getPatrolInspectorIds().isEmpty()){ if (query.getPatrolInspectorIds()!=null&&!query.getPatrolInspectorIds().isEmpty()){ // 取交集 patrolInspectorIds = patrolInspectorIds.stream().filter(query.getPatrolInspectorIds()::contains).collect(Collectors.toList()); } query.setPatrolInspectorIds(patrolInspectorIds); if (patrolInspectorIds.isEmpty()){ patrolInspectorIds.add(0L); } } if (StringUtils.hasLength(query.getNickName())){ List<Long> patrolInspectorIds = sysUsers.stream().filter(sysUser -> sysUser.getNickName().contains(query.getNickName()) ).map(SysUser::getUserId).collect(Collectors.toList()); if (query.getPatrolInspectorIds()!=null&&!query.getPatrolInspectorIds().isEmpty()){ // 取交集 patrolInspectorIds = patrolInspectorIds.stream().filter(query.getPatrolInspectorIds()::contains).collect(Collectors.toList()); } query.setPatrolInspectorIds(patrolInspectorIds); if (patrolInspectorIds.isEmpty()){ patrolInspectorIds.add(0L); } } if (query.getDeptIds()!=null&&!query.getDeptIds().isEmpty()){ List<Long> patrolInspectorIds = sysUsers.stream().filter(sysUser -> query.getDeptIds().contains(sysUser.getDeptId()) ).map(SysUser::getUserId).collect(Collectors.toList()); if (query.getPatrolInspectorIds()!=null&&!query.getPatrolInspectorIds().isEmpty()){ // 取交集 patrolInspectorIds = patrolInspectorIds.stream().filter(query.getPatrolInspectorIds()::contains).collect(Collectors.toList()); } @@ -880,16 +974,15 @@ List<PatrolInspectorVO> res = new ArrayList<>(); LambdaQueryWrapper<TTask> tTaskLambdaQueryWrapper = new LambdaQueryWrapper<>(); if (StringUtils.hasLength(query.getStartTime())){ tTaskLambdaQueryWrapper.ge(TTask::getCreateTime, query.getStartTime()); tTaskLambdaQueryWrapper.le(TTask::getCreateTime, query.getEndTime()); tTaskLambdaQueryWrapper.ge(TTask::getImplementTime, query.getStartTime()+" :00:00:00"); tTaskLambdaQueryWrapper.le(TTask::getImplementTime, query.getEndTime()+" :23:59:59"); } if(query.getPatrolInspectorIds()!=null){ if(query.getPatrolInspectorIds()!=null&& !query.getPatrolInspectorIds().isEmpty()){ tTaskLambdaQueryWrapper.in(TTask::getPatrolInspector, query.getPatrolInspectorIds()); sysUsers = sysUsers.stream().filter(sysUser -> query.getPatrolInspectorIds().contains(sysUser.getUserId())).collect(Collectors.toList()); } List<TTask> tasks = taskCleanerService.list(tTaskLambdaQueryWrapper); sysUsers = sysUsers.stream().filter(e -> e.getUserId() != 1).collect(Collectors.toList()); for (SysUser sysUser : sysUsers) { PatrolInspectorVO patrolInspectorVO = new PatrolInspectorVO(); @@ -901,14 +994,14 @@ if (tProjectDept!=null&&!tProjectDept.getParentId().equals("0")){ TProjectDept tProjectDept1 = projectDeptService.getById(tProjectDept.getParentId()); if (tProjectDept1!=null) patrolInspectorVO.setDeptName(tProjectDept1.getProjectName()+">"+tProjectDept.getProjectName()); patrolInspectorVO.setDeptName(tProjectDept1.getProjectName()+">"+tProjectDept.getProjectName()); }else{ patrolInspectorVO.setDeptName(tProjectDept.getProjectName()); } }else{ TDept tDept = deptService.getById(sysUser.getDeptId()); if (tDept!=null) patrolInspectorVO.setDeptName(tDept.getDeptName()); patrolInspectorVO.setDeptName(tDept.getDeptName()); } // 查询巡检员任务ids List<String> taskIds = tasks.stream().filter(e->e.getPatrolInspector().equals(sysUser.getUserId()+"")).map(TTask::getId).collect(Collectors.toList()); @@ -926,8 +1019,18 @@ } List<TTaskDetail> list = taskDetailService.lambdaQuery() .eq(TTaskDetail::getAuditStatus, 1) .eq(TTaskDetail::getHandleType,1) .isNotNull(TTaskDetail::getClearStatus).orderByDesc(BaseModel::getCreateTime) .in(!taskIds.isEmpty(), TTaskDetail::getTaskId,taskIdsFinish).groupBy(TTaskDetail::getTaskId).list(); .in(!taskIds.isEmpty(), TTaskDetail::getTaskId,taskIdsFinish).list(); list = new ArrayList<>(list.stream() .collect(Collectors.groupingBy( TTaskDetail::getTaskId, Collectors.collectingAndThen( Collectors.toList(), listAll -> listAll.get(0) ) )) .values()); // 查询clearStatus为1的数量 List<TTaskDetail> clearStatus1 = list.stream().filter(e -> e.getClearStatus().equals(1)).collect(Collectors.toList()); List<TTaskDetail> clearStatus2 = list.stream().filter(e -> e.getClearStatus().equals(2)).collect(Collectors.toList()); @@ -936,8 +1039,8 @@ patrolInspectorVO.setNum1(clearStatus1.size()); patrolInspectorVO.setNum2(clearStatus2.size()); patrolInspectorVO.setNum3(!clearStatus1.isEmpty() ? (new BigDecimal(clearStatus1.size()).add(new BigDecimal(clearStatus2.size()))) .divide(new BigDecimal(clearStatus1.size()), 2, RoundingMode.HALF_DOWN) (new BigDecimal(clearStatus1.size())) .divide(new BigDecimal(clearStatus1.size()+clearStatus2.size()), 2, RoundingMode.HALF_DOWN) .multiply(new BigDecimal(100)):BigDecimal.ZERO); // 未执行 List<TTask> status1 = taskList.stream().filter(e -> e.getStatus() == 1).collect(Collectors.toList()); @@ -1027,6 +1130,11 @@ tTaskLambdaQueryWrapper.le(TInspector::getCreateTime, query.getEndTime()); } if(query.getPatrolInspectorIds()!=null){ if (query.getPatrolInspectorIds().isEmpty()){ List<Long> patrolInspectorIds = query.getPatrolInspectorIds(); patrolInspectorIds.add(0L); query.setPatrolInspectorIds(patrolInspectorIds); } tTaskLambdaQueryWrapper.in(TInspector::getCommitPerson, query.getPatrolInspectorIds()); sysUsers = sysUsers.stream().filter(sysUser -> query.getPatrolInspectorIds().contains(sysUser.getUserId())).collect(Collectors.toList()); } @@ -1071,7 +1179,7 @@ } @ApiOperation(value = "随机督察报表导出") @PostMapping(value = "/inspectorListExport") @Log(title = "随机督察报表导出", businessType = BusinessType.EXPORT) @Log(title = "随机督察报表导出", businessType = BusinessType.OTHER) public void inspectorListExport(@RequestBody InspectorQuery query) { List<SysUser> sysUsers = sysUserService.selectAllList(); if (StringUtils.hasLength(query.getDeptName())){ @@ -1115,13 +1223,17 @@ tTaskLambdaQueryWrapper.le(TInspector::getCreateTime, query.getEndTime()); } if(query.getPatrolInspectorIds()!=null){ if (query.getPatrolInspectorIds().isEmpty()){ List<Long> patrolInspectorIds = query.getPatrolInspectorIds(); patrolInspectorIds.add(0L); query.setPatrolInspectorIds(patrolInspectorIds); } tTaskLambdaQueryWrapper.in(TInspector::getCommitPerson, query.getPatrolInspectorIds()); sysUsers = sysUsers.stream().filter(sysUser -> query.getPatrolInspectorIds().contains(sysUser.getUserId())).collect(Collectors.toList()); } List<InspectorVO> res = new ArrayList<>(); List<TInspector> inspectors = inspectorService.list(tTaskLambdaQueryWrapper); sysUsers = sysUsers.stream().filter(e -> e.getUserId() != 1).collect(Collectors.toList()); for (SysUser sysUser : sysUsers) { InspectorVO inspectorVO = new InspectorVO(); inspectorVO.setNickName(sysUser.getNickName()); @@ -1149,11 +1261,11 @@ inspectorVO.setNum1(status1.size()); inspectorVO.setNum2(status2.size()); inspectorVO.setNum3(!status1.isEmpty()?new BigDecimal(status1.size()).divide(new BigDecimal(status2.size()+status1.size()),2,RoundingMode.HALF_DOWN).multiply(new BigDecimal(100)):BigDecimal.ZERO); inspectorVO.setNum3(!status1.isEmpty()||!status2.isEmpty()?new BigDecimal(status1.size()).divide(new BigDecimal(status2.size()+status1.size()),2,RoundingMode.HALF_DOWN).multiply(new BigDecimal(100)):BigDecimal.ZERO); inspectorVO.setNum4(status4.size()); inspectorVO.setNum5(status5.size()); inspectorVO.setNum6(status6.size()); inspectorVO.setNum7(!status6.isEmpty()?new BigDecimal(status6.size()).divide(new BigDecimal(status5.size()+status6.size()),2,RoundingMode.HALF_DOWN).multiply(new BigDecimal(100)):new BigDecimal(0)); inspectorVO.setNum7(!status6.isEmpty()||!status5.isEmpty()?new BigDecimal(status6.size()).divide(new BigDecimal(status5.size()+status6.size()),2,RoundingMode.HALF_DOWN).multiply(new BigDecimal(100)):new BigDecimal(0)); res.add(inspectorVO); } //1.获取excel模板 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TAppealController.java
@@ -3,6 +3,7 @@ import com.ruoyi.common.annotation.Log; import com.ruoyi.common.basic.PageInfo; import com.ruoyi.common.core.domain.BaseModel; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.enums.BusinessType; @@ -71,18 +72,28 @@ List<SysUser> sysUsers = sysUserService.selectAllList(); List<TLocation> locationList = locationService.list(); if (StringUtils.hasLength(query.getDeptName())){ List<String> projectIds = projectDeptService.lambdaQuery().like(TProjectDept::getProjectName, query.getDeptName()).list() List<TProjectDept> list = projectDeptService.lambdaQuery().like(TProjectDept::getProjectName, query.getDeptName()).list(); List<String> listIds = projectDeptService.lambdaQuery().like(TProjectDept::getProjectName, query.getDeptName()).list() .stream().map(TProjectDept::getId).collect(Collectors.toList()); for (TProjectDept tProjectDept : list) { if (tProjectDept.getParentId().equals("0")){ List<String> collect = projectDeptService.lambdaQuery().eq(TProjectDept::getParentId, tProjectDept.getId()).list() .stream().map(TProjectDept::getId).collect(Collectors.toList()); listIds.addAll(collect); } } List<String> deptIds = deptService.lambdaQuery().like(TDept::getDeptName, query.getDeptName()).list() .stream().map(TDept::getId).collect(Collectors.toList()); projectIds.addAll(deptIds); if (projectIds.isEmpty()){ return R.ok(new PageInfo<>()); listIds.addAll(deptIds); if (listIds.isEmpty()){ listIds.add("0"); } query.setPatrolInspectorIds(sysUsers.stream().filter(e->listIds.contains(e.getDeptId())).map(SysUser::getUserId) .collect(Collectors.toList())); if (StringUtils.hasLength(query.getPhonenumber())){ List<Long> patrolInspectorIds = sysUsers.stream().filter(sysUser -> sysUser.getPhonenumber().equals(query.getPhonenumber()) && projectIds.contains(sysUser.getDeptId()) && listIds.contains(sysUser.getDeptId()) ).map(SysUser::getUserId).collect(Collectors.toList()); if (patrolInspectorIds.isEmpty()){ return R.ok(new PageInfo<>()); @@ -105,7 +116,11 @@ } if (query.getClearStatus()!=null){ List<String> collect = tTaskDetailService.lambdaQuery().eq(TTaskDetail::getClearStatus, query.getClearStatus()) .list().stream().distinct().map(TTaskDetail::getTaskId).collect(Collectors.toList()); .eq(TTaskDetail::getHandleType,1) .groupBy(TTaskDetail::getTaskId) .orderByDesc(BaseModel::getCreateTime) .list().stream().map(TTaskDetail::getTaskId).collect(Collectors.toList()); query.setTaskIds(collect); if (collect.isEmpty()){ return R.ok(new PageInfo<>()); @@ -126,9 +141,11 @@ query.setLocationIds(collect); return R.ok(new PageInfo<>()); }else{ collect = collect.stream().filter(query.getLocationIds()::contains).collect(Collectors.toList()); if (collect.isEmpty()){ return R.ok(new PageInfo<>()); if (query.getLocationIds()!=null){ collect = collect.stream().filter(query.getLocationIds()::contains).collect(Collectors.toList()); if (collect.isEmpty()){ return R.ok(new PageInfo<>()); } } query.setLocationIds(collect); } ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TDictDataController.java
@@ -39,7 +39,11 @@ @ApiOperation(value = "数据字典列表") @GetMapping(value = "/list") public R<List<TDictData>> pageList(@RequestParam Integer dataType) { return R.ok(dictDataService.lambdaQuery().eq(TDictData::getDataType,dataType).list()); if (dataType==4){ return R.ok(dictDataService.lambdaQuery().in(TDictData::getDataType,Arrays.asList(4,5)).list()); }else{ return R.ok(dictDataService.lambdaQuery().eq(TDictData::getDataType,dataType).list()); } } @Log(title = "新增数据字典", businessType = BusinessType.INSERT) @ApiOperation(value = "新增数据字典") ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TInspectorController.java
@@ -127,9 +127,11 @@ query.setLocationIds(collect); return R.ok(new PageInfo<>()); }else{ collect = collect.stream().filter(query.getLocationIds()::contains).collect(Collectors.toList()); if (collect.isEmpty()){ return R.ok(new PageInfo<>()); if (query.getLocationIds()!=null){ collect = collect.stream().filter(query.getLocationIds()::contains).collect(Collectors.toList()); if (collect.isEmpty()){ return R.ok(new PageInfo<>()); } } query.setLocationIds(collect); } @@ -137,7 +139,7 @@ return R.ok(inspectorService.pageList(query)); } @Log(title = "督察记录导出", businessType = BusinessType.EXPORT) @Log(title = "督察记录导出", businessType = BusinessType.OTHER) @ApiOperation(value = "督察记录导出") @PostMapping(value = "/exportExcel") public void exportExcel(@RequestBody InsepectorListQuery query) { @@ -258,7 +260,6 @@ public R<Boolean> audit(@RequestBody TInspectorAuditDTO dto) { TTaskAuditDTO tTaskAuditDTO = new TTaskAuditDTO(); BeanUtils.copyProperties(dto, tTaskAuditDTO); dto.setAuditTime(LocalDateTime.now()); TTask task = taskCleanerService.getById(dto.getTaskId()); TLocation location = locationService.getById(task.getLocationId()); TNotice tNotice = new TNotice(); @@ -268,57 +269,26 @@ tNotice.setStatus(1); tNotice.setDataId(task.getId()); tNotice.setNoticeSetType(noticeSet.getNoticeType()); if (dto.getAuditStatus()==2){ tTaskAuditDTO.setHandleType(3); // 将任务修改为待整改 task.setStatus(4); taskCleanerService.updateById(task); // 增加消息 tNotice.setNoticeType(1); tNotice.setNoticeContent("【"+location.getLocationName()+"】任务不合格,请重新上传!"); }else{ tTaskAuditDTO.setHandleType(2); // 如果是初次审核就通过 将状态设置为已完成 List<TTaskDetail> list = tTaskDetailService.lambdaQuery().eq(TTaskDetail::getTaskId, dto.getTaskId()).list(); if (list.isEmpty()){ if (dto.getClearStatus()==1){ task.setStatus(6); dto.setStatus(4); taskCleanerService.updateById(task); }else{ dto.setStatus(2); task.setStatus(4); taskCleanerService.updateById(task); // 增加消息 tNotice.setNoticeType(1); tNotice.setNoticeContent("【"+location.getLocationName()+"】任务不合格,请重新上传!"); } if (dto.getAuditStatus()==1){ if (dto.getClearStatus()==2){ tTaskAuditDTO.setHandleType(3); dto.setStatus(2); // 增加消息 tNotice.setNoticeType(1); tNotice.setNoticeContent("【"+location.getLocationName()+"】督察任务不合格,请重新上传!"); noticeService.save(tNotice); }else{ if (dto.getClearStatus()==1){ if (dto.getAuditTime()!=null){ dto.setStatus(3); task.setStatus(5); taskCleanerService.updateById(task); // 增加消息 tNotice.setNoticeType(2); tNotice.setNoticeContent("【"+location.getLocationName()+"】任务已通过"); }else{ dto.setStatus(2); task.setStatus(4); taskCleanerService.updateById(task); // 增加消息 tNotice.setNoticeType(1); tNotice.setNoticeContent("【"+location.getLocationName()+"】任务不合格,请重新上传!"); dto.setStatus(4); } } } noticeService.save(tNotice); dto.setAuditTime(LocalDateTime.now()); dto.setAuditPerson(tokenService.getLoginUser().getUserId()+""); inspectorService.updateById(dto); tTaskDetailService.save(tTaskAuditDTO); return R.ok(); } } ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TLocationController.java
@@ -5,8 +5,11 @@ import cn.afterturn.easypoi.excel.ExcelImportUtil; import cn.afterturn.easypoi.excel.entity.ExportParams; import cn.afterturn.easypoi.excel.entity.ImportParams; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.basic.PageInfo; import com.ruoyi.common.core.domain.BaseModel; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.core.exception.ServiceException; @@ -133,10 +136,23 @@ .eq(query.getStatus() != null, TTask::getStatus, query.getStatus()) .in(query.getPatrolInspectorIds() != null && query.getPatrolInspectorIds().isEmpty(), TTask::getPatrolInspector, query.getPatrolInspectorIds()) .in(query.getTaskIds() != null && query.getTaskIds().isEmpty(), TTask::getId, query.getTaskIds()).list(); List<String> collect = list.stream().map(TTask::getId).collect(Collectors.toList()); list = list.stream().skip((long) (query.getPageNum() - 1) * query.getPageSize()).limit(query.getPageSize()).collect(Collectors.toList()); pageInfo.setTotal(list.size()); List<LocationListTaskVO> res = new ArrayList<>(); List<TTaskDetail> taskDetails = tTaskDetailService.list(Wrappers.lambdaQuery(TTaskDetail.class) .in(TTaskDetail::getTaskId,collect) .eq(TTaskDetail::getClearStatus, 2) .eq(TTaskDetail::getHandleType,1) .orderByDesc(TTaskDetail::getCreateTime)); taskDetails = new ArrayList<>(taskDetails.stream() .collect(Collectors.groupingBy( TTaskDetail::getTaskId, Collectors.collectingAndThen( Collectors.toList(), listAll -> listAll.get(0) ) )) .values()); for (TTask tTask : list) { LocationListTaskVO temp = new LocationListTaskVO(); TLocation tLocation = locationList.stream().filter(e -> e.getId().equals(tTask.getLocationId())).findFirst().orElse(null); @@ -168,18 +184,26 @@ .ifPresent(tLocationType -> temp.setLocationTypeName(tLocationType.getLocationName())); } TTaskDetail one = tTaskDetailService.lambdaQuery().eq(TTaskDetail::getTaskId, tTask.getId()) .orderByDesc(TTaskDetail::getCreateTime).last("limit 1").one(); if (one!=null){ temp.setClearStatus(one.getClearStatus()); temp.setPicture(one.getPicture()); TTaskDetail tTaskDetail = taskDetails.stream().filter(e -> e.getTaskId().equals(tTask.getId())).findFirst().orElse(null); if (tTaskDetail!=null){ temp.setPicture(tTaskDetail.getPicture()); temp.setClearStatus(tTaskDetail.getClearStatus()); if (query.getClearStatus()!=null){ if (query.getClearStatus().equals(tTaskDetail.getClearStatus())){ res.add(temp); } }else{ res.add(temp); } } temp.setTaskType(tTask.getTaskType()); temp.setStatus(tTask.getStatus()); temp.setTaskId(tTask.getId()); temp.setImplementTime(tTask.getImplementTime()); res.add(temp); } res = res.stream().skip((long) (query.getPageNum() - 1) * query.getPageSize()).limit(query.getPageSize()).collect(Collectors.toList()); pageInfo.setTotal(res.size()); pageInfo.setRecords(res); return R.ok(pageInfo); } ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TProblemEscalationController.java
@@ -71,10 +71,13 @@ TProblemEscalation byId = problemEscalationService.getById(id); BeanUtils.copyProperties(byId,problemEscalationDetailVO); TDictData byId1 = dictDataService.getById(byId.getEscalationType()); SysUser sysUser = sysUserService.selectUserById(Long.valueOf(byId.getHandleId())); if (sysUser!=null){ problemEscalationDetailVO.setHandleName(sysUser.getUserName()); if (byId.getHandleId()!=null){ SysUser sysUser = sysUserService.selectUserById(Long.valueOf(byId.getHandleId())); if (sysUser!=null){ problemEscalationDetailVO.setHandleName(sysUser.getUserName()); } } problemEscalationDetailVO.setEscalationTypeName(byId1.getDataContent()); return R.ok(problemEscalationDetailVO); } ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TTaskController.java
@@ -92,18 +92,29 @@ List<SysUser> sysUsers = sysUserService.selectAllList(); List<TLocation> locationList = locationService.list(); if (StringUtils.hasLength(query.getDeptName())){ List<String> projectIds = projectDeptService.lambdaQuery().like(TProjectDept::getProjectName, query.getDeptName()).list() List<TProjectDept> list = projectDeptService.lambdaQuery().like(TProjectDept::getProjectName, query.getDeptName()).list(); List<String> listIds = projectDeptService.lambdaQuery().like(TProjectDept::getProjectName, query.getDeptName()).list() .stream().map(TProjectDept::getId).collect(Collectors.toList()); for (TProjectDept tProjectDept : list) { if (tProjectDept.getParentId().equals("0")){ List<String> collect = projectDeptService.lambdaQuery().eq(TProjectDept::getParentId, tProjectDept.getId()).list() .stream().map(TProjectDept::getId).collect(Collectors.toList()); listIds.addAll(collect); } } List<String> deptIds = deptService.lambdaQuery().like(TDept::getDeptName, query.getDeptName()).list() .stream().map(TDept::getId).collect(Collectors.toList()); projectIds.addAll(deptIds); if (projectIds.isEmpty()){ listIds.addAll(deptIds); if (listIds.isEmpty()){ return R.ok(new PageInfo<>()); } List<Long> collect = sysUsers.stream().filter(e -> listIds.contains(e.getDeptId())) .map(SysUser::getUserId).collect(Collectors.toList()); query.setPatrolInspectorIds( collect); if (StringUtils.hasLength(query.getPhonenumber())){ List<Long> patrolInspectorIds = sysUsers.stream().filter(sysUser -> sysUser.getPhonenumber().contains(query.getPhonenumber()) && projectIds.contains(sysUser.getDeptId()) && listIds.contains(sysUser.getDeptId()) ).map(SysUser::getUserId).collect(Collectors.toList()); if (patrolInspectorIds.isEmpty()){ return R.ok(new PageInfo<>()); @@ -208,7 +219,6 @@ List<TTaskDetail> list = tTaskDetailService.lambdaQuery() .eq(TTaskDetail::getHandleType,1) .eq(TTaskDetail::getTaskId, dto.getTaskId()).list(); if (one.getClearStatus()==1){ if (list.size()<2){ task.setStatus(6); taskCleanerService.updateById(task); @@ -220,15 +230,6 @@ tNotice.setNoticeType(2); tNotice.setNoticeContent("【"+location.getLocationName()+"】任务已通过"); } }else{ // 将任务修改为待整改 task.setStatus(4); taskCleanerService.updateById(task); // 增加消息 tNotice.setNoticeType(1); tNotice.setNoticeContent("【"+location.getLocationName()+"】任务不合格,请重新上传!"); } } noticeService.save(tNotice); dto.setAuditPerson(tokenService.getLoginUser().getUserId()+""); @@ -243,7 +244,7 @@ @Log(title = "批量审核任务", businessType = BusinessType.UPDATE) @ApiOperation(value = "批量审核任务") @PostMapping(value = "/auditBatch") public R<Boolean> auditBatch(@RequestBody @Validated TTaskAuditBatchDTO dto) { public R<Boolean> auditBatch(@RequestBody TTaskAuditBatchDTO dto) { List<TTaskDetail> tTaskDetails = new ArrayList<>(); for (String s : dto.getTaskIds().split(",")) { TTask byId = taskCleanerService.getById(s); @@ -285,7 +286,8 @@ TLocationType byId2 = locationTypeService.getById(byId1.getLocationType()); taskDetailVO.setLocationAddress(byId1.getLocationAddress()); taskDetailVO.setLocationIcon(byId2.getLocationIcon()); taskDetailVO.setLocationName(byId2.getLocationName()); taskDetailVO.setLocationName(byId1.getLocationName()); taskDetailVO.setLocationTypeName(byId2.getLocationName()); TTaskDetail tTaskDetail = list.stream().filter(e -> e.getHandleType() == 1).findFirst().orElse(null); if (tTaskDetail!=null && tTaskDetail.getUnqualified()!=null){ TDictData byId3 = dictDataService.getById(tTaskDetail.getUnqualified()); @@ -369,43 +371,55 @@ return R.ok(); } @Log(title = "任务记录导出", businessType = BusinessType.EXPORT) @Log(title = "任务记录导出", businessType = BusinessType.OTHER) @ApiOperation(value = "任务记录导出") @PostMapping(value = "/exportExcel") public void exportExcel(@RequestBody TaskListQuery query) { List<SysUser> sysUsers = sysUserService.selectAllList(); List<TLocation> locationList = locationService.list(); if (StringUtils.hasLength(query.getDeptName())){ List<String> projectIds = projectDeptService.lambdaQuery().like(TProjectDept::getProjectName, query.getDeptName()).list() List<TProjectDept> list = projectDeptService.lambdaQuery().like(TProjectDept::getProjectName, query.getDeptName()).list(); List<String> listIds = projectDeptService.lambdaQuery().like(TProjectDept::getProjectName, query.getDeptName()).list() .stream().map(TProjectDept::getId).collect(Collectors.toList()); for (TProjectDept tProjectDept : list) { if (tProjectDept.getParentId().equals("0")){ List<String> collect = projectDeptService.lambdaQuery().eq(TProjectDept::getParentId, tProjectDept.getId()).list() .stream().map(TProjectDept::getId).collect(Collectors.toList()); listIds.addAll(collect); } } List<String> deptIds = deptService.lambdaQuery().like(TDept::getDeptName, query.getDeptName()).list() .stream().map(TDept::getId).collect(Collectors.toList()); projectIds.addAll(deptIds); if (projectIds.isEmpty()){ projectIds.add("-1"); listIds.addAll(deptIds); if (listIds.isEmpty()){ listIds.add("0"); } List<Long> collect = sysUsers.stream().filter(e -> listIds.contains(e.getDeptId())) .map(SysUser::getUserId).collect(Collectors.toList()); query.setPatrolInspectorIds( collect); if (StringUtils.hasLength(query.getPhonenumber())){ List<Long> patrolInspectorIds = sysUsers.stream().filter(sysUser -> sysUser.getPhonenumber().equals(query.getPhonenumber()) && projectIds.contains(sysUser.getDeptId()) sysUser.getPhonenumber().contains(query.getPhonenumber()) && listIds.contains(sysUser.getDeptId()) ).map(SysUser::getUserId).collect(Collectors.toList()); if (patrolInspectorIds.isEmpty()){ patrolInspectorIds.add(-1L); patrolInspectorIds.add(0L); } query.setPatrolInspectorIds(patrolInspectorIds); } } if (StringUtils.hasLength(query.getPhonenumber())){ List<Long> patrolInspectorIds = sysUsers.stream().filter(sysUser -> sysUser.getPhonenumber().equals(query.getPhonenumber()) sysUser.getPhonenumber().contains(query.getPhonenumber()) ).map(SysUser::getUserId).collect(Collectors.toList()); query.setPatrolInspectorIds(patrolInspectorIds); if (!query.getPatrolInspectorIds().isEmpty()){ // 取交集 patrolInspectorIds = patrolInspectorIds.stream().filter(query.getPatrolInspectorIds()::contains).collect(Collectors.toList()); } query.setPatrolInspectorIds(patrolInspectorIds); if (patrolInspectorIds.isEmpty()){ patrolInspectorIds.add(-1L); patrolInspectorIds.add(0L); } } if (query.getClearStatus()!=null){ @@ -413,26 +427,27 @@ .list().stream().distinct().map(TTaskDetail::getTaskId).collect(Collectors.toList()); query.setTaskIds(collect); if (collect.isEmpty()){ collect.add("-1"); collect.add("0"); } } if (query.getLocationType()!=null){ if (StringUtils.hasLength(query.getLocationType())){ List<String> collect = locationList.stream().filter(e -> e.getLocationType().equals(query.getLocationType())).map(TLocation::getId) .collect(Collectors.toList()); if (collect.isEmpty()){ collect.add("-1"); collect.add("0"); } query.setLocationIds(collect); } if (StringUtils.hasLength(query.getLocationName())){ List<String> collect = locationList.stream().filter(e -> e.getLocationName().contains(query.getLocationName())).map(TLocation::getId) .collect(Collectors.toList()); query.setLocationIds(collect); if (collect.isEmpty()){ collect.add("-1"); collect.add("0"); }else{ collect = collect.stream().filter(query.getLocationIds()::contains).collect(Collectors.toList()); if (collect.isEmpty()){ collect.add("-1"); collect.add("0"); } query.setLocationIds(collect); } ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/WorkbenchesController.java
@@ -1071,6 +1071,15 @@ .eq(TTaskDetail::getClearStatus, 2) .eq(TTaskDetail::getHandleType,1) .orderByDesc(TTaskDetail::getCreateTime)); taskDetails = new ArrayList<>(taskDetails.stream() .collect(Collectors.groupingBy( TTaskDetail::getTaskId, Collectors.collectingAndThen( Collectors.toList(), listAll -> listAll.get(0) ) )) .values()); List<TTaskDetail> taskDetailList = new ArrayList<>(); for (TTask task : list) { TTaskDetail tTaskDetail = taskDetails.stream().filter(taskDetail -> taskDetail.getTaskId().equals(task.getId())).findFirst().orElse(null); @@ -1144,6 +1153,15 @@ .eq(TTaskDetail::getHandleType,1) .eq(TTaskDetail::getClearStatus, 2) .orderByDesc(TTaskDetail::getCreateTime)); taskDetails = new ArrayList<>(taskDetails.stream() .collect(Collectors.groupingBy( TTaskDetail::getTaskId, Collectors.collectingAndThen( Collectors.toList(), listAll -> listAll.get(0) ) )) .values()); List<TTaskDetail> taskDetailList = new ArrayList<>(); for (TTask task : list) { TTaskDetail tTaskDetail = taskDetails.stream().filter(taskDetail -> taskDetail.getTaskId().equals(task.getId())).findFirst().orElse(null); ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java
@@ -7,8 +7,10 @@ import java.util.stream.Collectors; import com.ruoyi.common.basic.PageInfo; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.domain.entity.SysMenu; import com.ruoyi.system.dto.SysRoleDTO; import com.ruoyi.system.mapper.SysUserRoleMapper; import com.ruoyi.system.model.TTemplate; import com.ruoyi.system.query.SysRoleQuery; import com.ruoyi.system.service.*; @@ -47,6 +49,8 @@ private ISysRoleService roleService; @Autowired private SysUserRoleMapper sysUserRoleMapper; @Autowired private TokenService tokenService; @Autowired @@ -62,7 +66,6 @@ @Autowired private TTemplateService templateService; @PreAuthorize("@ss.hasPermi('system:role')") @ApiOperation(value = "角色列表") @PostMapping("/list") public AjaxResult list(@RequestBody SysRoleQuery query) @@ -71,7 +74,6 @@ return AjaxResult.success(list); } @PreAuthorize("@ss.hasPermi('system:role')") @ApiOperation(value = "角色列表不分页") @PostMapping("/listNotPage") public AjaxResult list() @@ -139,7 +141,7 @@ roleInfoVo.setRoleId(role.getRoleId()); roleInfoVo.setRoleName(role.getRoleName()); roleInfoVo.setRemark(role.getRemark()); roleInfoVo.setRoleType(role.getRoleType()); // 获取当前角色的菜单列表 List<SysMenu> menus = menuService.selectListByRoleId(roleId); if(menus.size()==0){ @@ -249,6 +251,13 @@ List<Long> id = new ArrayList<>(); for (String s : split) { id.add(Long.valueOf(s)); int i = sysUserRoleMapper.countUserRoleByRoleId(Long.valueOf(s)); if (i > 0) { SysRole sysRole = roleService.selectRoleById(Long.valueOf(s)); return AjaxResult.error("角色"+sysRole.getRoleName()+"下有员工,不可删除"); } } return AjaxResult.success(roleService.deleteRoleByIds(id)); } ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java
@@ -60,7 +60,6 @@ */ @ApiOperation(value = "获取用户列表") @PostMapping("/list") @PreAuthorize("@ss.hasPermi('system:user')") public AjaxResult<PageInfo<SysUserVO>> list(@RequestBody SysUserQuery query) { List<SysUser> sysUsers = userService.selectAllList(); @@ -88,7 +87,6 @@ @ApiOperation(value = "获取用户列表-不分页") @PostMapping("/listNotPage") @PreAuthorize("@ss.hasPermi('system:user')") public AjaxResult listNotPage() { @@ -176,7 +174,6 @@ /** * 新增用户 */ // @PreAuthorize("@ss.hasPermi('system:user:add')") @ApiOperation(value = "新增用户管理") @Log(title = "用户信息-新增用户", businessType = BusinessType.INSERT) @PostMapping("/add") ruoyi-admin/src/main/java/com/ruoyi/web/controller/task/TaskUtil.java
@@ -1,363 +1,363 @@ package com.ruoyi.web.controller.task; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.core.redis.RedisCache; import com.ruoyi.common.utils.CodeGenerateUtils; import com.ruoyi.system.mapper.TCleanerMapper; import com.ruoyi.system.model.*; import com.ruoyi.system.service.*; import javafx.concurrent.Task; import lombok.extern.slf4j.Slf4j; import org.apache.poi.ss.formula.functions.T; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.time.LocalDate; import java.time.LocalDateTime; import java.util.*; import java.util.stream.Collectors; /** * @author xiaochen * @date 2025/6/11 18:39 */ @Slf4j @Component public class TaskUtil { // 项目部权重标识 private static final String PROJECT_DEPT_WEIGHT = ":PROJECT_DEPT_WEIGHT"; // 保洁员权重标识 private static final String CLEANER_WEIGHT = ":CLEANER_WEIGHT"; // 重复点位标识 private static final String REPEAT_LOCATION = ":REPEAT_LOCATION"; @Autowired private RedisCache redisCache; @Autowired private TTemplateService templateService; @Autowired private TTemplateDetailService templateDetailService; @Autowired private TProjectDeptService projectDeptService; @Autowired private TCleanerService cleanerService; @Autowired private TLocationService locationService; @Autowired private TLocationTypeService locationTypeService; @Autowired private ISysUserService sysUserService; @Autowired private TTaskCleanService taskCleanService; @Autowired private TTemplateCountService templateCountService; // 每一个小时执行一次 // @Scheduled(cron = "0 0 0 * * ?") @Scheduled(fixedRate = 1500000000) public void dayOfCreateInspection() { try { // 查询任务模板 List<TTemplate> list = templateService.list(); if (CollectionUtils.isEmpty(list)) { return; } list.forEach(template -> { // 创建任务 createInspection(template); }); // 查询前一天为执行的所有任务,改成已超时状态 List<TTask> taskCleanList = taskCleanService.list(Wrappers.lambdaQuery(TTask.class) .like(TTask::getImplementTime, LocalDate.now().minusDays(1)) .eq(TTask::getStatus, 1)); if (!CollectionUtils.isEmpty(taskCleanList)) { taskCleanList.forEach(task -> { task.setStatus(2); }); taskCleanService.updateBatchById(taskCleanList); } } catch (Exception e) { e.printStackTrace(); } } public void createInspection(TTemplate template) { // 查询所有的模板详情 List<TTemplateDetail> list = templateDetailService.list(Wrappers.lambdaQuery(TTemplateDetail.class) .eq(TTemplateDetail::getTemplateId, template.getId())); if (CollectionUtils.isEmpty(list)) { return; } // 通过模板id查询员工巡检员 List<SysUser> sysUsers = sysUserService.selectUserByTempLateId(template.getId()); // 创建任务 for (TTemplateDetail detail : list) { // 计算周期 int cycle = detail.getCycle(); switch (detail.getCycleType()){ case 2: cycle = cycle * 7; break; case 3: cycle = cycle * 30; break; case 4: cycle = cycle * 90; break; case 5: cycle = cycle * 365; break; } // 拿到保洁抽查次数 int num1 = detail.getNum1(); // 拿到项目部数 int num2 = detail.getNum2(); // 拿到每日重复点位 int num3 = detail.getNum3(); // 获取点位类型的占比 String num4 = detail.getNum4(); // 未绑定员工 if(CollectionUtils.isEmpty(sysUsers)){ continue; } int taskCount = 0; for (SysUser sysUser : sysUsers) { List<TProjectDept> projectDeptLists = new ArrayList<>(); if(sysUser.getDeptType() == 1){ TProjectDept projectDept = projectDeptService.getById(sysUser.getDeptId()); if("0".equals(projectDept.getParentId())){ projectDeptLists = projectDeptService.list(Wrappers.lambdaQuery(TProjectDept.class) .eq(TProjectDept::getParentId, projectDept.getId())); }else { projectDeptLists.add(projectDept); } }else { projectDeptLists = projectDeptService.list(Wrappers.lambdaQuery(TProjectDept.class) .ne(TProjectDept::getParentId,0)); } List<String> proDeptIds = projectDeptLists.stream().map(TProjectDept::getId).collect(Collectors.toList()); // 获取项目部在该模板详情中的权重 List<String> projectDeptIds = redisCache.getCacheList(detail.getId() + PROJECT_DEPT_WEIGHT); // 获取项目部列表 List<TProjectDept> projectDeptList; if(CollectionUtils.isEmpty(projectDeptIds)){ projectDeptList = projectDeptLists; }else { projectDeptList = projectDeptService.list(Wrappers.lambdaQuery(TProjectDept.class) .ne(TProjectDept::getParentId,0) .in(TProjectDept::getId, proDeptIds) .notIn(TProjectDept::getId, projectDeptIds)); // 所过所有的项目部都被抽取了,则重新抽取,并且清空项目部权重 if(CollectionUtils.isEmpty(projectDeptList)){ projectDeptList = projectDeptLists; redisCache.deleteObject(detail.getId() + PROJECT_DEPT_WEIGHT); } } // 如果可抽取的项目部数不足,先抽取余下项目部后,再清空权重,重新抽取 List<TProjectDept> projectDepts = randomSelection(projectDeptList, num2); if(projectDepts.size() < num2){ List<String> proIds = projectDepts.stream().map(TProjectDept::getId).collect(Collectors.toList()); List<TProjectDept> projectDeptList1 = projectDeptService.list(Wrappers.lambdaQuery(TProjectDept.class) .notIn(TProjectDept::getId, proIds) .ne(TProjectDept::getParentId,0)); redisCache.deleteObject(detail.getId() + PROJECT_DEPT_WEIGHT); List<TProjectDept> projectDepts1 = randomSelection(projectDeptList1, num2 - projectDepts.size()); List<String> proIds1 = projectDepts1.stream().map(TProjectDept::getId).collect(Collectors.toList()); // 将已抽取的项目部id保存到redis中 redisCache.setCacheList(detail.getId() + PROJECT_DEPT_WEIGHT, proIds1); projectDepts.addAll(projectDepts1); }else { List<String> proIds = projectDepts.stream().map(TProjectDept::getId).collect(Collectors.toList()); // 将已抽取的项目部id保存到redis中 redisCache.setCacheList(detail.getId() + PROJECT_DEPT_WEIGHT, proIds); } List<String> proIds = projectDepts.stream().map(TProjectDept::getId).collect(Collectors.toList()); // 拿到抽取的项目部下的所有保洁员 // List<TProjectDept> tProjectDeptList = projectDeptService.list(Wrappers.lambdaQuery(TProjectDept.class) // .in(TProjectDept::getId, proIds)); // 获取片区id List<String> areaIds = projectDepts.stream().map(TProjectDept::getId).collect(Collectors.toList()); if(CollectionUtils.isEmpty(areaIds)){ return; } // 计算每天需要抽取多少个保洁员 long count = cleanerService.count(Wrappers.lambdaQuery(TCleaner.class) .in(TCleaner::getProjectId, areaIds)); int cleanerSums = num1 * Integer.parseInt(count + ""); // 获取每天需要抽取的保洁员数,向上取整 if (cleanerSums < cycle){ cleanerSums = cycle; } int dayCleanerCount = cleanerSums / cycle; if((cycle == detail.getCurrentValue()) && cleanerSums % cycle != 0){ dayCleanerCount++; } // 获取保洁员权重 List<String> cleanerIds = redisCache.getCacheList(detail.getId() + CLEANER_WEIGHT); // 获取保洁员列表 List<TCleaner> cleaners; if(CollectionUtils.isEmpty(cleanerIds)){ cleaners = cleanerService.list(Wrappers.lambdaQuery(TCleaner.class) .in(TCleaner::getProjectId, areaIds)); }else { cleaners = cleanerService.list(Wrappers.lambdaQuery(TCleaner.class) .in(TCleaner::getProjectId, areaIds) .notIn(TCleaner::getId, cleanerIds)); if(CollectionUtils.isEmpty(cleaners)){ cleaners = cleanerService.list(Wrappers.lambdaQuery(TCleaner.class) .in(TCleaner::getProjectId, areaIds)); redisCache.deleteObject(detail.getId() + CLEANER_WEIGHT); } } // 抽取保洁员 List<TCleaner> tCleaners = randomSelection(cleaners, dayCleanerCount); if(CollectionUtils.isEmpty(tCleaners)){ log.error("没有可抽取的保洁员,模板id为:{}",detail.getId()); continue; } if(tCleaners.size() < dayCleanerCount){ List<String> cleanIds = tCleaners.stream().map(TCleaner::getId).collect(Collectors.toList()); List<TCleaner> cleaners1 = cleanerService.list(Wrappers.lambdaQuery(TCleaner.class) .in(TCleaner::getProjectId, areaIds) .notIn(TCleaner::getId, cleanIds)); redisCache.deleteObject(detail.getId() + CLEANER_WEIGHT); List<TCleaner> tCleaners1 = randomSelection(cleaners1, dayCleanerCount - tCleaners.size()); List<String> cleanIds1 = tCleaners1.stream().map(TCleaner::getId).collect(Collectors.toList()); // 将已抽取的保洁员id保存到redis中 cleanIds1.addAll(cleanIds); redisCache.setCacheList(detail.getId() + CLEANER_WEIGHT, cleanIds1); tCleaners.addAll(tCleaners1); }else { List<String> cleanIds = tCleaners.stream().map(TCleaner::getId).collect(Collectors.toList()); redisCache.setCacheList(detail.getId() + CLEANER_WEIGHT, cleanIds); } // 通过保洁员id查询点位 List<String> cleanersIds = tCleaners.stream().map(TCleaner::getId).collect(Collectors.toList()); List<TLocation> locationList = locationService.list(Wrappers.lambdaQuery(TLocation.class) .in(TLocation::getLocationCleaner, cleanersIds)); // 查询点位类型 JSONArray jsonArray = JSONObject.parseArray(num4); List<TLocation> tLocationList = new ArrayList<>(); for (Object o : jsonArray) { JSONObject jsonObject = JSONObject.parseObject(o.toString()); String id = jsonObject.getString("id"); BigDecimal value = jsonObject.getBigDecimal("value"); List<TLocation> locations = locationList.stream().filter(tLocation -> tLocation.getLocationType().equals(id)).collect(Collectors.toList()); if(!CollectionUtils.isEmpty(locations)){ BigDecimal bigDecimal = new BigDecimal(locations.size()).multiply(value.divide(new BigDecimal(100), 2, BigDecimal.ROUND_DOWN)).setScale(0, BigDecimal.ROUND_UP); int locationCount = bigDecimal.intValue(); if(locationCount > 0){ List<TLocation> tLocations = randomSelection(locations, locationCount); tLocationList.addAll(tLocations); } } } tLocationList = tLocationList.stream().distinct().collect(Collectors.toList()); // 抽取重复点位 Integer currentValue = detail.getCurrentValue(); if(currentValue != cycle){ // 周期天数加一 detail.setCurrentValue(currentValue + 1); // 获取重复点位 Set<TLocation> repeatLocation = redisCache.getCacheSet(detail.getId() + ":" + sysUser.getUserId() + REPEAT_LOCATION); if(!CollectionUtils.isEmpty(repeatLocation)){ List<TLocation> locations = randomSelection(new ArrayList<>(tLocationList), num3); tLocationList.addAll(locations); } Set<TLocation> locationSet = new HashSet<>(tLocationList); redisCache.setCacheSet(detail.getId() + ":" + sysUser.getUserId() + REPEAT_LOCATION, locationSet); }else { // 设置当前周期为0 detail.setCurrentValue(0); // 将重复点位置空 redisCache.deleteObject(detail.getId() + ":" + sysUser.getUserId() + REPEAT_LOCATION); // 将项目部权重置空 redisCache.deleteObject(detail.getId() + PROJECT_DEPT_WEIGHT); // 将保洁员权重置空 redisCache.deleteObject(detail.getId() + CLEANER_WEIGHT); } // 创建任务 List<TTask> tasks = new ArrayList<>(); for (TLocation tLocation : tLocationList) { TTask task = new TTask(); // 获取保洁员 tCleaners.stream().filter(tCleaner -> tCleaner.getId().equals(tLocation.getLocationCleaner())).findFirst().ifPresent(tCleaner -> { task.setProjectId(tCleaner.getProjectId()); task.setCleanerId(tCleaner.getId()); }); // 获取巡检员 task.setPatrolInspector(sysUser.getUserId().toString()); task.setPatrolInspectorDept(sysUser.getDeptId()); task.setUserId(sysUser.getUserId()); task.setStatus(1); task.setLocationId(tLocation.getId()); task.setImplementTime(LocalDateTime.now().plusDays(1)); task.setTaskType(1); task.setTemplateId(detail.getTemplateId()); String nameAndCode = CodeGenerateUtils.generateVolumeSn(); task.setTaskName(nameAndCode); task.setTaskCode(nameAndCode); tasks.add(task); } // 添加应生成任务数量 TTemplateCount templateCount = new TTemplateCount(); templateCount.setTemplateId(detail.getTemplateId()); templateCount.setTaskCount(tLocationList.size()* cycle); templateCount.setUserId(sysUser.getUserId()); templateCountService.save(templateCount); taskCleanService.saveBatch(tasks); taskCount = taskCount + tasks.size(); } template.setTaskCount(taskCount); templateService.updateById(template); templateDetailService.updateById(detail); } } /** * 从集合中随机抽取数量 * @param list * @param size * @return * @param <T> */ private static <T> List<T> randomSelection(List<T> list, int size) { List<T> selected = new ArrayList<>(); int length = list.size(); for (int i = 0; i < size; i++) { Collections.shuffle(list); // 如果需求的大小超过了集合的长度,则只能取到集合的全部元素 int subListSize = Math.min(size - selected.size(), length); selected.addAll(list.subList(0, subListSize)); } return selected; } } //package com.ruoyi.web.controller.task; // // //import com.alibaba.fastjson.JSONArray; //import com.alibaba.fastjson.JSONObject; //import com.baomidou.mybatisplus.core.toolkit.Wrappers; //import com.ruoyi.common.core.domain.entity.SysUser; //import com.ruoyi.common.core.redis.RedisCache; //import com.ruoyi.common.utils.CodeGenerateUtils; //import com.ruoyi.system.mapper.TCleanerMapper; //import com.ruoyi.system.model.*; //import com.ruoyi.system.service.*; //import javafx.concurrent.Task; //import lombok.extern.slf4j.Slf4j; //import org.apache.poi.ss.formula.functions.T; //import org.springframework.beans.factory.annotation.Autowired; //import org.springframework.scheduling.annotation.Scheduled; //import org.springframework.stereotype.Component; //import org.springframework.util.CollectionUtils; // //import java.math.BigDecimal; //import java.text.SimpleDateFormat; //import java.time.LocalDate; //import java.time.LocalDateTime; //import java.util.*; //import java.util.stream.Collectors; // ///** // * @author xiaochen // * @date 2025/6/11 18:39 // */ //@Slf4j //@Component //public class TaskUtil { // // // 项目部权重标识 // private static final String PROJECT_DEPT_WEIGHT = ":PROJECT_DEPT_WEIGHT"; // // 保洁员权重标识 // private static final String CLEANER_WEIGHT = ":CLEANER_WEIGHT"; // // 重复点位标识 // private static final String REPEAT_LOCATION = ":REPEAT_LOCATION"; // // @Autowired // private RedisCache redisCache; // @Autowired // private TTemplateService templateService; // @Autowired // private TTemplateDetailService templateDetailService; // @Autowired // private TProjectDeptService projectDeptService; // @Autowired // private TCleanerService cleanerService; // @Autowired // private TLocationService locationService; // @Autowired // private TLocationTypeService locationTypeService; // @Autowired // private ISysUserService sysUserService; // @Autowired // private TTaskCleanService taskCleanService; // @Autowired // private TTemplateCountService templateCountService; // // // // 每一个小时执行一次 //// @Scheduled(cron = "0 0 0 * * ?") //// @Scheduled(fixedRate = 1500000000) // public void dayOfCreateInspection() { // try { // // // 查询任务模板 // List<TTemplate> list = templateService.list(); // if (CollectionUtils.isEmpty(list)) { // return; // } // list.forEach(template -> { // // 创建任务 // createInspection(template); // }); // // // 查询前一天为执行的所有任务,改成已超时状态 // List<TTask> taskCleanList = taskCleanService.list(Wrappers.lambdaQuery(TTask.class) // .like(TTask::getImplementTime, LocalDate.now().minusDays(1)) // .eq(TTask::getStatus, 1)); // if (!CollectionUtils.isEmpty(taskCleanList)) { // taskCleanList.forEach(task -> { // task.setStatus(2); // }); // taskCleanService.updateBatchById(taskCleanList); // } // // } catch (Exception e) { // e.printStackTrace(); // } // } // // public void createInspection(TTemplate template) { // // 查询所有的模板详情 // List<TTemplateDetail> list = templateDetailService.list(Wrappers.lambdaQuery(TTemplateDetail.class) // .eq(TTemplateDetail::getTemplateId, template.getId())); // if (CollectionUtils.isEmpty(list)) { // return; // } // // 通过模板id查询员工巡检员 // List<SysUser> sysUsers = sysUserService.selectUserByTempLateId(template.getId()); // // 创建任务 // for (TTemplateDetail detail : list) { // // 计算周期 // int cycle = detail.getCycle(); // switch (detail.getCycleType()){ // case 2: // cycle = cycle * 7; // break; // case 3: // cycle = cycle * 30; // break; // case 4: // cycle = cycle * 90; // break; // case 5: // cycle = cycle * 365; // break; // } // // // 拿到保洁抽查次数 // int num1 = detail.getNum1(); // // 拿到项目部数 // int num2 = detail.getNum2(); // // 拿到每日重复点位 // int num3 = detail.getNum3(); // // 获取点位类型的占比 // String num4 = detail.getNum4(); // // // 未绑定员工 // if(CollectionUtils.isEmpty(sysUsers)){ // continue; // } // // int taskCount = 0; // for (SysUser sysUser : sysUsers) { // List<TProjectDept> projectDeptLists = new ArrayList<>(); // if(sysUser.getDeptType() == 1){ // TProjectDept projectDept = projectDeptService.getById(sysUser.getDeptId()); // if("0".equals(projectDept.getParentId())){ // projectDeptLists = projectDeptService.list(Wrappers.lambdaQuery(TProjectDept.class) // .eq(TProjectDept::getParentId, projectDept.getId())); // }else { // projectDeptLists.add(projectDept); // } // }else { // projectDeptLists = projectDeptService.list(Wrappers.lambdaQuery(TProjectDept.class) // .ne(TProjectDept::getParentId,0)); // } // List<String> proDeptIds = projectDeptLists.stream().map(TProjectDept::getId).collect(Collectors.toList()); // // // 获取项目部在该模板详情中的权重 // List<String> projectDeptIds = redisCache.getCacheList(detail.getId() + PROJECT_DEPT_WEIGHT); // // 获取项目部列表 // List<TProjectDept> projectDeptList; // if(CollectionUtils.isEmpty(projectDeptIds)){ // projectDeptList = projectDeptLists; // }else { // projectDeptList = projectDeptService.list(Wrappers.lambdaQuery(TProjectDept.class) // .ne(TProjectDept::getParentId,0) // .in(TProjectDept::getId, proDeptIds) // .notIn(TProjectDept::getId, projectDeptIds)); // // 所过所有的项目部都被抽取了,则重新抽取,并且清空项目部权重 // if(CollectionUtils.isEmpty(projectDeptList)){ // projectDeptList = projectDeptLists; // redisCache.deleteObject(detail.getId() + PROJECT_DEPT_WEIGHT); // } // } // // 如果可抽取的项目部数不足,先抽取余下项目部后,再清空权重,重新抽取 // List<TProjectDept> projectDepts = randomSelection(projectDeptList, num2); // if(projectDepts.size() < num2){ // List<String> proIds = projectDepts.stream().map(TProjectDept::getId).collect(Collectors.toList()); // List<TProjectDept> projectDeptList1 = projectDeptService.list(Wrappers.lambdaQuery(TProjectDept.class) // .notIn(TProjectDept::getId, proIds) // .ne(TProjectDept::getParentId,0)); // redisCache.deleteObject(detail.getId() + PROJECT_DEPT_WEIGHT); // List<TProjectDept> projectDepts1 = randomSelection(projectDeptList1, num2 - projectDepts.size()); // List<String> proIds1 = projectDepts1.stream().map(TProjectDept::getId).collect(Collectors.toList()); // // 将已抽取的项目部id保存到redis中 // redisCache.setCacheList(detail.getId() + PROJECT_DEPT_WEIGHT, proIds1); // projectDepts.addAll(projectDepts1); // }else { // List<String> proIds = projectDepts.stream().map(TProjectDept::getId).collect(Collectors.toList()); // // 将已抽取的项目部id保存到redis中 // redisCache.setCacheList(detail.getId() + PROJECT_DEPT_WEIGHT, proIds); // } // List<String> proIds = projectDepts.stream().map(TProjectDept::getId).collect(Collectors.toList()); // // // 拿到抽取的项目部下的所有保洁员 //// List<TProjectDept> tProjectDeptList = projectDeptService.list(Wrappers.lambdaQuery(TProjectDept.class) //// .in(TProjectDept::getId, proIds)); // // 获取片区id // List<String> areaIds = projectDepts.stream().map(TProjectDept::getId).collect(Collectors.toList()); // if(CollectionUtils.isEmpty(areaIds)){ // return; // } // // // 计算每天需要抽取多少个保洁员 // long count = cleanerService.count(Wrappers.lambdaQuery(TCleaner.class) // .in(TCleaner::getProjectId, areaIds)); // int cleanerSums = num1 * Integer.parseInt(count + ""); // // 获取每天需要抽取的保洁员数,向上取整 // if (cleanerSums < cycle){ // cleanerSums = cycle; // } // int dayCleanerCount = cleanerSums / cycle; // // if((cycle == detail.getCurrentValue()) && cleanerSums % cycle != 0){ // dayCleanerCount++; // } // // // 获取保洁员权重 // List<String> cleanerIds = redisCache.getCacheList(detail.getId() + CLEANER_WEIGHT); // // 获取保洁员列表 // List<TCleaner> cleaners; // if(CollectionUtils.isEmpty(cleanerIds)){ // cleaners = cleanerService.list(Wrappers.lambdaQuery(TCleaner.class) // .in(TCleaner::getProjectId, areaIds)); // }else { // cleaners = cleanerService.list(Wrappers.lambdaQuery(TCleaner.class) // .in(TCleaner::getProjectId, areaIds) // .notIn(TCleaner::getId, cleanerIds)); // if(CollectionUtils.isEmpty(cleaners)){ // cleaners = cleanerService.list(Wrappers.lambdaQuery(TCleaner.class) // .in(TCleaner::getProjectId, areaIds)); // redisCache.deleteObject(detail.getId() + CLEANER_WEIGHT); // } // } // // // 抽取保洁员 // List<TCleaner> tCleaners = randomSelection(cleaners, dayCleanerCount); // if(CollectionUtils.isEmpty(tCleaners)){ // log.error("没有可抽取的保洁员,模板id为:{}",detail.getId()); // continue; // } // if(tCleaners.size() < dayCleanerCount){ // List<String> cleanIds = tCleaners.stream().map(TCleaner::getId).collect(Collectors.toList()); // List<TCleaner> cleaners1 = cleanerService.list(Wrappers.lambdaQuery(TCleaner.class) // .in(TCleaner::getProjectId, areaIds) // .notIn(TCleaner::getId, cleanIds)); // redisCache.deleteObject(detail.getId() + CLEANER_WEIGHT); // List<TCleaner> tCleaners1 = randomSelection(cleaners1, dayCleanerCount - tCleaners.size()); // List<String> cleanIds1 = tCleaners1.stream().map(TCleaner::getId).collect(Collectors.toList()); // // 将已抽取的保洁员id保存到redis中 // cleanIds1.addAll(cleanIds); // redisCache.setCacheList(detail.getId() + CLEANER_WEIGHT, cleanIds1); // tCleaners.addAll(tCleaners1); // }else { // List<String> cleanIds = tCleaners.stream().map(TCleaner::getId).collect(Collectors.toList()); // redisCache.setCacheList(detail.getId() + CLEANER_WEIGHT, cleanIds); // } // // // 通过保洁员id查询点位 // List<String> cleanersIds = tCleaners.stream().map(TCleaner::getId).collect(Collectors.toList()); // List<TLocation> locationList = locationService.list(Wrappers.lambdaQuery(TLocation.class) // .in(TLocation::getLocationCleaner, cleanersIds)); // // 查询点位类型 // JSONArray jsonArray = JSONObject.parseArray(num4); // List<TLocation> tLocationList = new ArrayList<>(); // for (Object o : jsonArray) { // JSONObject jsonObject = JSONObject.parseObject(o.toString()); // String id = jsonObject.getString("id"); // BigDecimal value = jsonObject.getBigDecimal("value"); // List<TLocation> locations = locationList.stream().filter(tLocation -> tLocation.getLocationType().equals(id)).collect(Collectors.toList()); // if(!CollectionUtils.isEmpty(locations)){ // BigDecimal bigDecimal = new BigDecimal(locations.size()).multiply(value.divide(new BigDecimal(100), 2, BigDecimal.ROUND_DOWN)).setScale(0, BigDecimal.ROUND_UP); // int locationCount = bigDecimal.intValue(); // if(locationCount > 0){ // List<TLocation> tLocations = randomSelection(locations, locationCount); // tLocationList.addAll(tLocations); // } // } // } // tLocationList = tLocationList.stream().distinct().collect(Collectors.toList()); // // 抽取重复点位 // Integer currentValue = detail.getCurrentValue(); // if(currentValue != cycle){ // // 周期天数加一 // detail.setCurrentValue(currentValue + 1); // // 获取重复点位 // Set<TLocation> repeatLocation = redisCache.getCacheSet(detail.getId() + ":" + sysUser.getUserId() + REPEAT_LOCATION); // if(!CollectionUtils.isEmpty(repeatLocation)){ // List<TLocation> locations = randomSelection(new ArrayList<>(tLocationList), num3); // tLocationList.addAll(locations); // } // Set<TLocation> locationSet = new HashSet<>(tLocationList); // redisCache.setCacheSet(detail.getId() + ":" + sysUser.getUserId() + REPEAT_LOCATION, locationSet); // // }else { // // 设置当前周期为0 // detail.setCurrentValue(0); // // 将重复点位置空 // redisCache.deleteObject(detail.getId() + ":" + sysUser.getUserId() + REPEAT_LOCATION); // // 将项目部权重置空 // redisCache.deleteObject(detail.getId() + PROJECT_DEPT_WEIGHT); // // 将保洁员权重置空 // redisCache.deleteObject(detail.getId() + CLEANER_WEIGHT); // } // // // 创建任务 // List<TTask> tasks = new ArrayList<>(); // for (TLocation tLocation : tLocationList) { // TTask task = new TTask(); // // 获取保洁员 // tCleaners.stream().filter(tCleaner -> tCleaner.getId().equals(tLocation.getLocationCleaner())).findFirst().ifPresent(tCleaner -> { // task.setProjectId(tCleaner.getProjectId()); // task.setCleanerId(tCleaner.getId()); // }); // // 获取巡检员 // task.setPatrolInspector(sysUser.getUserId().toString()); // task.setPatrolInspectorDept(sysUser.getDeptId()); // task.setUserId(sysUser.getUserId()); // task.setStatus(1); // task.setLocationId(tLocation.getId()); // task.setImplementTime(LocalDateTime.now().plusDays(1)); // task.setTaskType(1); // task.setTemplateId(detail.getTemplateId()); // String nameAndCode = CodeGenerateUtils.generateVolumeSn(); // task.setTaskName(nameAndCode); // task.setTaskCode(nameAndCode); // tasks.add(task); // } // // // 添加应生成任务数量 // TTemplateCount templateCount = new TTemplateCount(); // templateCount.setTemplateId(detail.getTemplateId()); // templateCount.setTaskCount(tLocationList.size()* cycle); // templateCount.setUserId(sysUser.getUserId()); // templateCountService.save(templateCount); // // taskCleanService.saveBatch(tasks); // taskCount = taskCount + tasks.size(); // } // template.setTaskCount(taskCount); // templateService.updateById(template); // templateDetailService.updateById(detail); // } // } // // /** // * 从集合中随机抽取数量 // * @param list // * @param size // * @return // * @param <T> // */ // private static <T> List<T> randomSelection(List<T> list, int size) { // List<T> selected = new ArrayList<>(); // int length = list.size(); // for (int i = 0; i < size; i++) { // Collections.shuffle(list); // // 如果需求的大小超过了集合的长度,则只能取到集合的全部元素 // int subListSize = Math.min(size - selected.size(), length); // selected.addAll(list.subList(0, subListSize)); // } // return selected; // } // //} 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,6 +163,7 @@ tTaskLambdaQueryWrapper.eq(TTask::getProjectId, projectDept.getId()); userDeptIds.add(projectDept.getId()); } else { 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()) { @@ -167,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); @@ -176,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<>(); @@ -213,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){ @@ -244,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){ @@ -260,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<>(); @@ -305,9 +319,6 @@ @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(); @@ -315,6 +326,8 @@ 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(); @@ -336,9 +349,10 @@ TProjectDept projectDept = projectDeptService.getById(sysUser.getDeptId()); if (projectDept != null) { 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 { @@ -363,10 +377,7 @@ TDept dept = deptService.getById(sysUser.getDeptId()); if (dept != null) { if (!dept.getDeptName().contains("公司")) { users = sysUsers.stream().filter(e -> (e.getDeptId() .equals(sysUser.getDeptId()) && e.getStatus().equals("0")) || e.getDeptType() == 1).collect(Collectors.toList()); users = sysUsers.stream().filter(e -> e.getDeptType() == 1).collect(Collectors.toList()); } } @@ -387,12 +398,21 @@ .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.isEmpty()) { @@ -432,6 +452,9 @@ } 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) @@ -462,12 +485,45 @@ 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); @@ -511,15 +567,12 @@ 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); ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TTaskDetailController.java
@@ -3,6 +3,7 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.core.domain.R; @@ -11,14 +12,8 @@ import com.ruoyi.system.applet.dto.AppealDTO; import com.ruoyi.system.dto.TTaskAuditBatchDTO; import com.ruoyi.system.dto.TaskDetailDto; import com.ruoyi.system.model.TAppeal; import com.ruoyi.system.model.TLocation; import com.ruoyi.system.model.TTask; import com.ruoyi.system.model.TTaskDetail; import com.ruoyi.system.service.TAppealService; import com.ruoyi.system.service.TLocationService; import com.ruoyi.system.service.TTaskCleanService; import com.ruoyi.system.service.TTaskDetailService; import com.ruoyi.system.model.*; import com.ruoyi.system.service.*; import com.ruoyi.web.controller.tool.AmapApiClient; import com.ruoyi.web.controller.tool.GeoChecker; import com.ruoyi.web.controller.tool.PathParser; @@ -37,6 +32,7 @@ import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; /** * <p> @@ -59,6 +55,8 @@ private TAppealService appealService; @Autowired private TLocationService locationService; @Resource private TInspectorService inspectorService; @ApiOperation(value = "上传任务") @PostMapping(value = "/uploadTask") @@ -69,7 +67,23 @@ if (task==null)return R.fail("任务不存在"); TLocation location = locationService.getById(task.getLocationId()); if (location==null)return R.fail("点位不存在"); // try { TInspector byId = inspectorService.getById(dto.getId()); if (byId!=null){ UpdateWrapper<TInspector> tInspectorUpdateWrapper = new UpdateWrapper<>(); tInspectorUpdateWrapper.set("clear_status", dto.getClearStatus()); tInspectorUpdateWrapper.set("unqualified", dto.getUnqualified()); tInspectorUpdateWrapper.set("remark", dto.getRemark()); tInspectorUpdateWrapper.set("picture", dto.getPicture()); tInspectorUpdateWrapper.set("audio_url", dto.getAudioUrl()); tInspectorUpdateWrapper.set("status", 1); tInspectorUpdateWrapper.set("audit_time", 1); tInspectorUpdateWrapper.set("audit_person", 1); tInspectorUpdateWrapper.set("audit_status", 1); tInspectorUpdateWrapper.set("audit_remark", 1); tInspectorUpdateWrapper.eq("id", dto.getId()); inspectorService.update(tInspectorUpdateWrapper); }else{ // try { // String routeJson = AmapApiClient.getDrivingRoute(Double.parseDouble(location.getLocationLat()), // Double.parseDouble(location.getLocationLon()), // Double.parseDouble(location.getLocationLatEnd()), @@ -97,9 +111,11 @@ // } catch (Exception e) { // e.printStackTrace(); // } taskDetailService.save(dto); // 修改任务状态 taskService.update(Wrappers.<TTask>lambdaUpdate().set(TTask::getStatus, 3).eq(TTask::getId, dto.getTaskId())); taskDetailService.save(dto); // 修改任务状态 taskService.update(Wrappers.<TTask>lambdaUpdate().set(TTask::getStatus, 3).eq(TTask::getId, dto.getTaskId())); } return R.ok(); } @@ -114,10 +130,27 @@ } dto.setAppealPerson(tokenService.getLoginUserApplet().getUserId()+""); appealService.save(dto); List<TTaskDetail> taskDetails = taskDetailService.lambdaQuery() .eq(TTaskDetail::getTaskId, dto.getTaskId()) .eq(TTaskDetail::getAuditStatus, 1) .eq(TTaskDetail::getHandleType,1) .isNotNull(TTaskDetail::getClearStatus) .orderByDesc(TTaskDetail::getCreateTime).list(); // 使用 stream 去重,保留每个 taskId 最新的一条 taskDetails = new ArrayList<>(taskDetails.stream() .collect(Collectors.groupingBy( TTaskDetail::getTaskId, Collectors.collectingAndThen( Collectors.toList(), listAll -> listAll.get(0) ) )) .values()); // 添加任务详情 TTaskDetail taskDetail = new TTaskDetail(); taskDetail.setTaskId(dto.getTaskId()); taskDetail.setHandleType(4); taskDetail.setClearStatus(taskDetail.getClearStatus()); taskDetail.setAppealId(dto.getId()); taskDetailService.save(taskDetail); return R.ok(); ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TUserController.java
@@ -239,18 +239,31 @@ List<TTaskDetail> taskDetails = taskDetailService.lambdaQuery() .in(TTaskDetail::getTaskId, taskIds) .eq(TTaskDetail::getAuditStatus, 1) .eq(TTaskDetail::getHandleType,1) .isNotNull(TTaskDetail::getClearStatus) .groupBy(TTaskDetail::getTaskId) .orderByDesc(TTaskDetail::getCreateTime).list(); // 使用 stream 去重,保留每个 taskId 最新的一条 taskDetails = new ArrayList<>(taskDetails.stream() .collect(Collectors.groupingBy( TTaskDetail::getTaskId, Collectors.collectingAndThen( Collectors.toList(), listAll -> listAll.get(0) ) )) .values()); int size = (int) finishTask.stream().filter(e -> e.getStatus() == 5 || e.getStatus() == 6).count(); List<String> taskIdsStatus = finishTask.stream().map(TTask::getId).collect(Collectors.toList()); if (taskIdsStatus.isEmpty()){ taskIdsStatus.add("-1"); } userIndexVO.setFinishCount(size); List<TTaskDetail> status1 = taskDetails.stream().filter(e -> e.getClearStatus() == 1).collect(Collectors.toList()); List<TTaskDetail> status2 = taskDetails.stream().filter(e -> e.getClearStatus() == 2).collect(Collectors.toList()); List<TTaskDetail> status1 = taskDetails.stream().filter(e -> e.getClearStatus() == 1&&taskIdsStatus.contains(e.getTaskId())).collect(Collectors.toList()); List<TTaskDetail> status2 = taskDetails.stream().filter(e -> e.getClearStatus() == 2&&taskIdsStatus.contains(e.getTaskId())).collect(Collectors.toList()); if (!status1.isEmpty()) { BigDecimal divide = new BigDecimal(status1.size() + status2.size()) .divide(new BigDecimal(status1.size()), 2, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(100)); BigDecimal divide = new BigDecimal(status1.size()) .divide(new BigDecimal(status1.size()+status2.size()), 2, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(100)); userIndexVO.setRate(divide); } else { userIndexVO.setRate(new BigDecimal(0)); @@ -267,11 +280,7 @@ if (taskIdsRank.isEmpty()){ userIndexVO.setRanking(0); }else{ List<TTaskDetail> taskDetailsRank = taskDetailService.lambdaQuery().in(TTaskDetail::getTaskId) .eq(TTaskDetail::getAuditStatus, 1) .isNotNull(TTaskDetail::getClearStatus) .groupBy(TTaskDetail::getTaskId) .orderByDesc(TTaskDetail::getCreateTime).list(); for (SysUser user : users) { int finishCount = (int) taskRank.stream().filter(e->e.getPatrolInspector().equals(user.getUserId()+"")&&e.getStatus() == 5 || e.getStatus() == 6).count(); int totalCount = (int) taskRank.stream().filter(e->e.getPatrolInspector().equals(user.getUserId()+"")).count(); @@ -333,19 +342,30 @@ taskDetailVO.setLocationAddressEnd(byId1.getLocationAddressEnd()); taskDetailVO.setLocationIcon(byId2.getLocationIcon()); taskDetailVO.setLocationTypeName(byId2.getLocationName()); taskDetailVO.setLocationLon(byId1.getLocationLon()); taskDetailVO.setLocationLat(byId1.getLocationLat()); taskDetailVO.setLocationLatEnd(byId1.getLocationLatEnd()); taskDetailVO.setLocationLonEnd(byId1.getLocationLonEnd()); TTaskDetail tTaskDetail = list.stream().filter(e -> e.getHandleType() == 1).findFirst().orElse(null); TTaskDetail tTaskDetailFinish = list.stream().filter(e -> e.getHandleType() == 2).findFirst().orElse(null); if (tTaskDetail != null && tTaskDetail.getUnqualified() != null) { TDictData byId3 = dictDataService.getById(tTaskDetail.getUnqualified()); if (byId3 != null) { tTaskDetail.setUnqualifiedName(byId3.getDataContent()); } } if (tTaskDetailFinish != null) { tTaskDetailFinish.setFinishTime(tTaskDetailFinish.getCreateTime()); if (tTaskDetail != null) { tTaskDetail.setFinishTime(tTaskDetail.getCreateTime()); } taskDetailVO.setTaskDetail(tTaskDetail); taskDetailVO.setRecords(list); if (byId.getStatus()==4){ TTaskDetail reject = taskDetailService.lambdaQuery().eq(TTaskDetail::getTaskId, id) .eq(TTaskDetail::getHandleType,3) .orderByDesc(BaseModel::getCreateTime).last("limit 1").one(); if (reject!=null){ taskDetailVO.setRejectRemark(reject.getAuditRemark()); } } return R.ok(taskDetailVO); } @@ -367,6 +387,7 @@ byId4.setUnqualifiedName(byId3.getDataContent()); } } byId4.setFinishTime(byId4.getCreateTime()); SysUser sysUser = sysUserService.selectUserById(Long.valueOf(byId4.getAuditPerson())); if (sysUser != null) { byId4.setAuditPersonName(sysUser.getUserName()); @@ -393,8 +414,9 @@ TLocationType byId2 = locationTypeService.getById(byId1.getLocationType()); appealDetailVO.setLocationAddress(byId1.getLocationAddress()); appealDetailVO.setLocationIcon(byId2.getLocationIcon()); appealDetailVO.setLocationName(byId2.getLocationName()); appealDetailVO.setLocationName(byId1.getLocationName()); appealDetailVO.setTaskId(byId.getId()); appealDetailVO.setLocationTypeName(byId2.getLocationName()); if (StringUtils.hasLength(appeal.getAuditPerson())) { SysUser sysUser = sysUserService.selectUserById(Long.valueOf(appeal.getAuditPerson())); if (sysUser != null) { @@ -420,6 +442,11 @@ @PostMapping(value = "/listAllTask") public R<List<TaskListAllVO>> listAllTask(@RequestBody AppealListDTO appealListDTO) { appealListDTO.setUserId(tokenService.getLoginUserApplet().getUserId() + ""); SysUser sysUser = sysUserService.selectUserById(tokenService.getLoginUserApplet().getUserId()); if (sysUser.getDeptType()==2){ // 公司部门查询所有任务 appealListDTO.setUserId(null); } List<TaskListAllVO> res = appealService.listAllTask(appealListDTO); return R.ok(res); } @@ -516,6 +543,8 @@ SysRole sysRole = roleService.selectRoleById(userRole); List<SysUser> sysUsers = sysUserService.selectAllList(); SysUser auditPerson = sysUserService.selectUserById(999L); List<TProjectDept> paojectList = projectDeptService.lambdaQuery().eq(TProjectDept::getParentId, "0").list(); //项目部负责人、部门负责人、公司成员提交由最终审批人审批; if (user.getDeptType() == 2 || sysRole.getRoleName().contains("项目部负责人") || sysRole.getRoleName().contains("部门负责人")) { LeaveAuditVO tLeaveAudit = new LeaveAuditVO(); @@ -525,19 +554,24 @@ res.setAuditPersonId("999"); } else if (!sysRole.getRoleName().equals("部门助理")) { // 审批人根据当前角色类型来 if (sysRole.getRoleName().contains("片区负责人") || sysRole.getRoleName().contains("组长/队长")||sysRole.getRoleName().contains("项目部助理")) { List<SysUser> collect = sysUsers.stream().filter(e -> e.getDeptType() == 1 && e.getDeptId().equals(user.getDeptId())).collect(Collectors.toList()); if (sysRole.getRoleName().contains("片区负责人") || sysRole.getRoleName().contains("组长")|| sysRole.getRoleName().contains("队长") ||sysRole.getRoleName().contains("项目部助理")) { TProjectDept userDept = projectDeptService.getById(user.getDeptId()); List<SysUser> collect = sysUsers.stream().filter(e -> e.getDeptType() == 1).collect(Collectors.toList()); for (SysUser sysUser : collect) { Long userRole1 = sysUserService.getUserRole(sysUser.getUserId()); SysRole sysRole1 = roleService.selectRoleById(userRole1); if (sysRole1 != null && sysRole1.getRoleName().equals("项目部负责人")) { LeaveAuditVO tLeaveAudit = new LeaveAuditVO(); tLeaveAudit.setAvatar(sysUser.getAvatar()); tLeaveAudit.setNickName(sysUser.getNickName()); res.setAuditPerson(tLeaveAudit); res.setAuditPersonId(sysUser.getUserId() + ""); break; if (userDept.getParentId().equals(sysUser.getDeptId())){ LeaveAuditVO tLeaveAudit = new LeaveAuditVO(); tLeaveAudit.setAvatar(sysUser.getAvatar()); tLeaveAudit.setNickName(sysUser.getNickName()); res.setAuditPerson(tLeaveAudit); res.setAuditPersonId(sysUser.getUserId() + ""); break; } } } } @@ -613,19 +647,35 @@ leaveAuditService.save(tLeaveAudit1); } else if (!sysRole.getRoleName().equals("部门助理")) { // 审批人根据当前角色类型来 if (sysRole.getRoleName().contains("片区负责人") || sysRole.getRoleName().contains("组长/队长")||sysRole.getRoleName().contains("项目部助理")) { List<SysUser> collect = sysUsers.stream().filter(e -> e.getDeptType() == 1 && e.getDeptId().equals(user.getDeptId())).collect(Collectors.toList()); if (sysRole.getRoleName().contains("片区负责人") || sysRole.getRoleName().contains("组长")|| sysRole.getRoleName().contains("队长") ||sysRole.getRoleName().contains("项目部助理")) { TProjectDept userDept = projectDeptService.getById(user.getDeptId()); List<SysUser> collect = sysUsers.stream().filter(e -> e.getDeptType() == 1).collect(Collectors.toList()); for (SysUser sysUser : collect) { Long userRole1 = sysUserService.getUserRole(sysUser.getUserId()); SysRole sysRole1 = roleService.selectRoleById(userRole1); if (sysRole1 != null && sysRole1.getRoleName().equals("项目部负责人")) { TLeaveAudit tLeaveAudit1 = new TLeaveAudit(); tLeaveAudit1.setLeaveId(leaveDTO.getId()); tLeaveAudit1.setAuditStatus(1); tLeaveAudit1.setAuditId(sysUser.getUserId() + ""); tLeaveAudit1.setAuditType(1); leaveAuditService.save(tLeaveAudit1); if (userDept.getParentId().equals(sysUser.getDeptId())){ LeaveAuditVO tLeaveAudit = new LeaveAuditVO(); tLeaveAudit.setAvatar(sysUser.getAvatar()); tLeaveAudit.setNickName(sysUser.getNickName()); TLeaveAudit tLeaveAudit1 = new TLeaveAudit(); tLeaveAudit1.setLeaveId(leaveDTO.getId()); tLeaveAudit1.setAuditStatus(1); tLeaveAudit1.setAuditId(sysUser.getUserId() + ""); tLeaveAudit1.setAuditType(1); leaveAuditService.save(tLeaveAudit1); TLeaveAudit tLeaveAudit2 = new TLeaveAudit(); tLeaveAudit2.setLeaveId(leaveDTO.getId()); tLeaveAudit2.setAuditStatus(2); tLeaveAudit2.setAuditId(user.getUserId() + "," + sysUser.getUserId()); tLeaveAudit2.setAuditType(2); tLeaveAudit2.setAuditTime(LocalDateTime.now()); leaveAuditService.save(tLeaveAudit2); break; } } } } @@ -642,16 +692,17 @@ tLeaveAudit1.setAuditId(sysUser.getUserId() + ""); tLeaveAudit1.setAuditType(1); leaveAuditService.save(tLeaveAudit1); TLeaveAudit tLeaveAudit2 = new TLeaveAudit(); tLeaveAudit2.setLeaveId(leaveDTO.getId()); tLeaveAudit2.setAuditStatus(2); tLeaveAudit2.setAuditId(user.getUserId() + "," + auditPerson.getUserId()); tLeaveAudit2.setAuditType(2); tLeaveAudit2.setAuditTime(LocalDateTime.now()); leaveAuditService.save(tLeaveAudit2); } } } TLeaveAudit tLeaveAudit2 = new TLeaveAudit(); tLeaveAudit2.setLeaveId(leaveDTO.getId()); tLeaveAudit2.setAuditStatus(2); tLeaveAudit2.setAuditId(user.getUserId() + "," + auditPerson.getUserId()); tLeaveAudit2.setAuditType(2); tLeaveAudit2.setAuditTime(LocalDateTime.now()); leaveAuditService.save(tLeaveAudit2); // 新增消息 TNotice tNotice = new TNotice(); tNotice.setUserId(leaveDTO.getAuditId()); @@ -702,10 +753,10 @@ public R<LeaveUserDetailVO> leaveDetail(@RequestParam String id) { TLeave leave = leaveService.getById(id); LeaveUserDetailVO leaveUserDetailVO = new LeaveUserDetailVO(); SysUser sysUser = sysUserService.selectUserById(Long.parseLong(leave.getLeavePerson())); SysUser sysUser = sysUserService.selectUserById(tokenService.getLoginUserApplet().getUserId()); Long userRole = sysUserService.getUserRole(sysUser.getUserId()); SysRole sysRole = roleService.selectRoleById(userRole); if (sysRole.getRoleName().contains("片区负责人") || sysRole.getRoleName().equals("组长/队长")||sysRole.getRoleName().contains("项目部助理")) { if (sysRole.getRoleName().contains("片区负责人") || sysRole.getRoleName().equals("组长")|| sysRole.getRoleName().equals("队长")||sysRole.getRoleName().contains("项目部助理")) { if (sysUser.getDeptType() == 1) { TProjectDept tProjectDept = projectDeptService.getById(sysUser.getDeptId()); if (!tProjectDept.getParentId().equals("0")) { ruoyi-system/src/main/java/com/ruoyi/system/applet/vo/TaskListAllVO.java
@@ -28,5 +28,7 @@ private Integer status; @ApiModelProperty(value = "距离 单位km") private BigDecimal distance; @ApiModelProperty(value = "驳回原因") private String rejectRemark; } ruoyi-system/src/main/java/com/ruoyi/system/dto/SysRoleDTO.java
@@ -19,6 +19,8 @@ @ApiModelProperty(value = "类型") private Integer postType; @ApiModelProperty(value = "归属类型") private Integer roleType; @ApiModelProperty(value = "备注") private String remark; ruoyi-system/src/main/java/com/ruoyi/system/dto/TTaskAuditBatchDTO.java
@@ -13,7 +13,6 @@ public class TTaskAuditBatchDTO{ @ApiModelProperty(value = "审核状态1通过2驳回") @NotBlank(message = "审核状态不能为空") private Integer auditStatus; @ApiModelProperty(value = "审核备注") private String auditRemark; ruoyi-system/src/main/java/com/ruoyi/system/model/TDictData.java
@@ -38,7 +38,7 @@ @TableField("data_content") private String dataContent; @ApiModelProperty(value = "类型1任务类型 2不合格原因 3问题上报类型") @ApiModelProperty(value = "类型1任务类型 2不合格原因 3问题上报类型 4邮箱号 5授权码") @TableField("data_type") private Integer dataType; ruoyi-system/src/main/java/com/ruoyi/system/query/PatrolInspectorQuery.java
@@ -18,7 +18,7 @@ @ApiModelProperty(value = "用户ids 前端忽略") private List<Long> patrolInspectorIds; @ApiModelProperty(value = "部门ids 前端忽略") private List<Long> deptIds; private List<String> deptIds; @ApiModelProperty(value = "开始时间 yyyy-MM-dd HH:mm:ss") private String startTime; @ApiModelProperty(value = "结束时间 yyyy-MM-dd HH:mm:ss") ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java
@@ -4,6 +4,7 @@ import java.util.stream.Collectors; import com.ruoyi.common.basic.PageInfo; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.domain.entity.SysMenu; import com.ruoyi.system.dto.SysRoleDTO; import com.ruoyi.system.mapper.*; @@ -560,6 +561,7 @@ sysRole.setRoleName(dto.getRoleName()); sysRole.setPostType(dto.getPostType()); sysRole.setRemark(dto.getRemark()); sysRole.setRoleType(dto.getRoleType()); roleMapper.insertRole(sysRole); // 添加角色权限中间表 @@ -590,6 +592,7 @@ sysRole.setRoleName(dto.getRoleName()); sysRole.setPostType(dto.getPostType()); sysRole.setRemark(dto.getRemark()); sysRole.setRoleType(dto.getRoleType()); roleMapper.updateRole(sysRole); // 删除角色与菜单关联 roleMenuMapper.deleteRoleMenuByRoleId(dto.getRoleId()); ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TAppealServiceImpl.java
@@ -16,6 +16,7 @@ import com.ruoyi.system.vo.system.InspectorListVO; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; import java.math.BigDecimal; import java.math.RoundingMode; @@ -44,30 +45,37 @@ private SysUserMapper sysUserMapper; @Override public PageInfo<AppealListVO> pageList(InsepectorListQuery query) { if (StringUtils.hasLength(query.getEndTime())){ String replace = query.getEndTime().replace(" 00:00:00", " 23:59:59"); query.setEndTime(replace); } PageInfo<AppealListVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); List<AppealListVO> list = this.baseMapper.pageList(query,pageInfo); List<TTask> tTasks = taskMapper.selectList(null); List<SysUser> sysUsers = sysUserMapper.selectAllList(); for (AppealListVO taskListVO : list) { TTask tTask = tTasks.stream().filter(e -> e.getId().equals(taskListVO.getTaskId())).findFirst().orElse(null); if (tTask!=null){ SysUser sysUser = sysUsers.stream().filter(e -> e.getUserId().equals(Long.valueOf(tTask.getPatrolInspector()))).findFirst().orElse(null); SysUser sysUser = sysUsers.stream().filter(e -> e.getUserId().equals(Long.valueOf(taskListVO.getAppealPerson()))).findFirst().orElse(null); if (sysUser!=null){ if (sysUser.getDeptType()==2){ TDept tDept = deptMapper.selectById(tTask.getPatrolInspectorDept()); TDept tDept = deptMapper.selectById(sysUser.getDeptId()); if (tDept!=null){ taskListVO.setDeptName(tDept.getDeptName()); } }else{ TProjectDept tProjectDept = projectDeptMapper.selectById(tTask.getPatrolInspectorDept()); if (tProjectDept!=null){ taskListVO.setDeptName(tProjectDept.getProjectName()); TProjectDept tProjectDept = projectDeptMapper.selectById(sysUser.getDeptId()); if (tProjectDept != null) { if (!tProjectDept.getParentId().equals("0")) { TProjectDept tProjectDept1 = projectDeptMapper.selectById(tProjectDept.getParentId()); if (tProjectDept1 != null) { taskListVO.setDeptName(tProjectDept1.getProjectName() + ">" + tProjectDept.getProjectName()); } } else { taskListVO.setDeptName(tProjectDept.getProjectName()); } } } } } } pageInfo.setRecords(list); return pageInfo; @@ -90,6 +98,8 @@ @Override public List<TaskListAllVO> listAllTask(AppealListDTO query) { List<TTaskDetail> tTaskDetails = taskDetailMapper.selectList(new LambdaQueryWrapper<TTaskDetail>() .eq(TTaskDetail::getHandleType,3).groupBy(TTaskDetail::getTaskId).orderByDesc(TTaskDetail::getCreateTime)); PageInfo<AppealListVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); List<TaskListAllVO> list = this.baseMapper.listAllTask(query,pageInfo); for (TaskListAllVO taskListAllVO : list) { @@ -97,7 +107,12 @@ if (taskListAllVO.getStatus()==1 || taskListAllVO.getStatus()==2 ){ taskListAllVO.setStatus(1); }else{ // 查询任务的驳回原因 taskListAllVO.setStatus(2); TTaskDetail tTaskDetail = tTaskDetails.stream().filter(e -> e.getTaskId().equals(taskListAllVO.getId())).findFirst().orElse(null); if (tTaskDetail!=null){ taskListAllVO.setRejectRemark(tTaskDetail.getAuditRemark()); } } } return list; ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TTaskCleanServiceImpl.java
@@ -24,8 +24,10 @@ import java.math.BigDecimal; import java.math.RoundingMode; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; /** * <p> @@ -52,10 +54,24 @@ public PageInfo<TaskListVO> pageList(TaskListQuery query) { PageInfo<TaskListVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); List<TaskListVO> list = this.baseMapper.pageList(query,pageInfo); List<TTaskDetail> tTaskDetails = taskDetailMapper.selectList(new LambdaQueryWrapper<TTaskDetail>() .orderByDesc(BaseModel::getCreateTime) .in(TTaskDetail::getHandleType,Arrays.asList(1,4))); List<String> collect = list.stream().map(TTask::getId).collect(Collectors.toList()); if (collect.isEmpty()){ return pageInfo; } List<TTaskDetail> taskDetails = taskDetailMapper.selectList(Wrappers.lambdaQuery(TTaskDetail.class) .in(TTaskDetail::getTaskId, collect) .eq(TTaskDetail::getClearStatus, 2) .eq(TTaskDetail::getHandleType,1) .orderByDesc(TTaskDetail::getCreateTime)); taskDetails = new ArrayList<>(taskDetails.stream() .collect(Collectors.groupingBy( TTaskDetail::getTaskId, Collectors.collectingAndThen( Collectors.toList(), listAll -> listAll.get(0) ) )) .values()); for (TaskListVO temp : list) { SysUser sysUser = sysUserMapper.selectUserById(Long.valueOf(temp.getPatrolInspector())); @@ -76,7 +92,7 @@ } } } TTaskDetail tTaskDetail = tTaskDetails.stream().filter(e -> e.getTaskId().equals(temp.getId())).findFirst().orElse(null); TTaskDetail tTaskDetail = taskDetails.stream().filter(e -> e.getTaskId().equals(temp.getId())).findFirst().orElse(null); if (tTaskDetail!=null){ temp.setPicture(tTaskDetail.getPicture()); temp.setClearStatus(tTaskDetail.getClearStatus()); ruoyi-system/src/main/java/com/ruoyi/system/vo/system/AppealDetailVO.java
@@ -18,8 +18,10 @@ private String locationAddress; @ApiModelProperty("点位类型图标") private String locationIcon; @ApiModelProperty("点位类型名称") @ApiModelProperty("点位名称") private String locationName; @ApiModelProperty(value = "点位类型名称") private String locationTypeName; @ApiModelProperty("任务id") private String taskId; @ApiModelProperty(value = "任务名称") ruoyi-system/src/main/java/com/ruoyi/system/vo/system/RoleInfoVO.java
@@ -11,6 +11,7 @@ private String roleName; private String remark; private Integer roleType; @ApiModelProperty("菜单id") private List<Long> menus; ruoyi-system/src/main/java/com/ruoyi/system/vo/system/TaskDetailVO.java
@@ -1,5 +1,6 @@ package com.ruoyi.system.vo.system; import com.baomidou.mybatisplus.annotation.TableField; import com.ruoyi.system.model.TTask; import com.ruoyi.system.model.TTaskDetail; import com.ruoyi.system.model.TTemplate; @@ -28,4 +29,14 @@ private TTaskDetail taskDetail; @ApiModelProperty("操作记录") private List<TTaskDetail> records; @ApiModelProperty(value = "点位经度 终点") private String locationLonEnd; @ApiModelProperty(value = "点位纬度 终点") private String locationLatEnd; @ApiModelProperty(value = "点位经度 起点") private String locationLon; @ApiModelProperty(value = "点位纬度 起点") private String locationLat; @ApiModelProperty(value = "驳回备注") private String rejectRemark; } ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml
@@ -188,6 +188,7 @@ <if test="createBy != null and createBy != ''">create_by,</if> <if test="removeDays != null">removeDays,</if> <if test="postType != null">postType,</if> <if test="roleType != null">role_type,</if> create_time )values( <if test="roleId != null and roleId != 0">#{roleId},</if> @@ -202,7 +203,9 @@ <if test="createBy != null and createBy != ''">#{createBy},</if> <if test="removeDays != null">#{removeDays},</if> <if test="postType != null">#{postType},</if> sysdate() <if test="roleType != null">#{roleType},</if> sysdate() ) </insert> @@ -220,6 +223,7 @@ <if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if> <if test="removeDays != null">removeDays = #{removeDays},</if> <if test="postType != null">postType = #{postType},</if> <if test="roleType != null">role_type = #{roleType},</if> update_time = sysdate() </set> where role_id = #{roleId} ruoyi-system/src/main/resources/mapper/system/TAppealMapper.xml
@@ -56,8 +56,8 @@ <if test="query.status != null"> and t1.status = #{query.status} </if> <if test="query.startTime != null and startTime != ''"> and (t5.implement_time between #{startTime} and #{endTime}) <if test="query.startTime != null and query.startTime != ''"> and (t5.implement_time between #{query.startTime} and #{query.endTime}) </if> order by t1.create_time desc </select> @@ -148,7 +148,9 @@ ) AS t2 ON t1.task_id = t2.task_id AND t1.create_time = t2.max_time ) t5 on t1.id = t5.task_id where 1=1 and t1.patrol_inspector = #{query.userId} <if test="query.userId != null"> and t1.patrol_inspector = #{query.userId} </if> and t1.`disabled` = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()} and t1.status !=3 and t1.status !=5 and t1.status !=6 AND DATE(t1.implement_time) = CURDATE() ruoyi-system/src/main/resources/mapper/system/TTaskMapper.xml
@@ -123,6 +123,7 @@ <if test="query.startTime != null and query.startTime != ''"> and (t1.implement_time between #{query.startTime} and #{query.endTime}) </if> order by t1.update_time desc </select> <select id="exportList" resultType="com.ruoyi.system.vo.system.TaskListVO"> select t1.*,t2.location_name as locationName,t3.location_name as locationTypeName,