From 4b8477f30194cf6dea7f1cecf405e29efb0f7bed Mon Sep 17 00:00:00 2001 From: 无关风月 <443237572@qq.com> Date: 星期六, 12 七月 2025 14:51:19 +0800 Subject: [PATCH] 保洁巡检本周代码 --- ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/DataStatisticsController.java | 721 ++++++++++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 609 insertions(+), 112 deletions(-) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/DataStatisticsController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/DataStatisticsController.java index bee8d01..d0cae9a 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/DataStatisticsController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/DataStatisticsController.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.ruoyi.common.basic.PageInfo; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.utils.DateUtils; @@ -12,17 +13,19 @@ import com.ruoyi.system.query.DataStatisticsQuery; import com.ruoyi.system.query.DataStatisticsRankQuery; import com.ruoyi.system.query.InsepectorListQuery; +import com.ruoyi.system.query.PointDetailQuery; import com.ruoyi.system.service.*; -import com.ruoyi.system.vo.system.AnalysisUnqualifiedCleaningDetailVO; -import com.ruoyi.system.vo.system.AnalysisUnqualifiedCleaningVO; -import com.ruoyi.system.vo.system.DataStatisticsRankVO; +import com.ruoyi.system.vo.system.*; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import org.springframework.beans.BeanUtils; import org.springframework.util.CollectionUtils; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; +import java.math.BigDecimal; +import java.math.RoundingMode; import java.text.SimpleDateFormat; import java.time.LocalDate; import java.util.*; @@ -62,6 +65,8 @@ private TAppealService appealService; @Resource private TDictDataService dictDataService; + @Resource + private TEarlyWarningService earlyWarningService; @ApiOperation(value = "查询片区") @GetMapping(value = "/queryProject") @@ -74,12 +79,21 @@ if (deptType == 1) { // 查询片区 TProjectDept projectDept = projectDeptService.getById(deptId); - // 查询项目部 - TProjectDept parent = projectDeptService.getById(projectDept.getParentId()); - List<TProjectDept> children = new ArrayList<>(); - children.add(projectDept); - parent.setChildren(children); - projectDeptList.add(parent); + if("0".equals(projectDept.getParentId())){ + // 查询项目部 + List<TProjectDept> childProjectDept = projectDeptService.list(Wrappers.lambdaQuery(TProjectDept.class) + .eq(TProjectDept::getStatus,1) + .eq(TProjectDept::getParentId,projectDept.getId())); + projectDept.setChildren(childProjectDept); + projectDeptList.add(projectDept); + }else { + // 查询项目部 + TProjectDept parent = projectDeptService.getById(projectDept.getParentId()); + List<TProjectDept> children = new ArrayList<>(); + children.add(projectDept); + parent.setChildren(children); + projectDeptList.add(parent); + } }else { projectDeptList = projectDeptService.list(Wrappers.lambdaQuery(TProjectDept.class) .eq(TProjectDept::getStatus,1) @@ -107,17 +121,18 @@ @ApiOperation(value = "通过片区id查询点位类型") @GetMapping(value = "/queryLocationByProjectId") - public R<List<TLocationType>> queryLocationByProjectId(@RequestParam(value = "projectId") String projectId) { - List<TLocationType> locationTypes = new ArrayList<>(); - // 通过片区id查询点位 - List<TLocation> locationList = locationService.list(Wrappers.lambdaQuery(TLocation.class) - .eq(TLocation::getProjectId, projectId)); - if(CollectionUtils.isEmpty(locationList)){ - return R.ok(locationTypes); - } - List<String> typeIds = locationList.stream().map(TLocation::getLocationType).collect(Collectors.toList()); - locationTypes = locationTypeService.list(Wrappers.lambdaQuery(TLocationType.class) - .in(TLocationType::getId, typeIds)); + public R<List<TLocationType>> queryLocationByProjectId() { +// List<TLocationType> locationTypes = new ArrayList<>(); +// // 通过片区id查询点位 +// List<TLocation> locationList = locationService.list(Wrappers.lambdaQuery(TLocation.class) +// .eq(TLocation::getProjectId, projectId)); +// if(CollectionUtils.isEmpty(locationList)){ +// return R.ok(locationTypes); +// } +// List<String> typeIds = locationList.stream().map(TLocation::getLocationType).collect(Collectors.toList()); +// locationTypes = locationTypeService.list(Wrappers.lambdaQuery(TLocationType.class) +// .in(TLocationType::getId, typeIds)); + List<TLocationType> locationTypes = locationTypeService.list(); return R.ok(locationTypes); } @@ -148,9 +163,21 @@ List<TTask> taskList = new ArrayList<>(); if (deptType == 1) { // 项目部人员 - List<String> projectIds = new ArrayList<>(); - projectIds.add(deptId); - query.setProjectId(projectIds); + if(CollectionUtils.isEmpty(query.getProjectId())){ + TProjectDept projectDept = projectDeptService.getById(deptId); + List<String> projectIds = new ArrayList<>(); + if("0".equals(projectDept.getParentId())){ + List<TProjectDept> tProjectDeptList = projectDeptService.list(Wrappers.lambdaQuery(TProjectDept.class) + .eq(TProjectDept::getStatus, 1) + .eq(TProjectDept::getParentId, projectDept.getId())); + List<String> ids = tProjectDeptList.stream().map(TProjectDept::getId).collect(Collectors.toList()); + projectIds.add(projectDept.getId()); + projectIds.addAll(ids); + }else { + projectIds.add(deptId); + } + query.setProjectId(projectIds); + } }else { // 公司人员 // 查询自己的任务列表 @@ -160,17 +187,17 @@ if(CollectionUtils.isEmpty(query.getProjectId())){ // 查询所有项目部的任务列表 List<TProjectDept> tProjectDeptList = projectDeptService.list(Wrappers.lambdaQuery(TProjectDept.class) - .eq(TProjectDept::getStatus, 1) - .ne(TProjectDept::getParentId, 0)); + .eq(TProjectDept::getStatus, 1)); if(!CollectionUtils.isEmpty(tProjectDeptList)){ List<String> projectIds = tProjectDeptList.stream().map(TProjectDept::getId).collect(Collectors.toList()); - wrapper.in(TTask::getProjectId, projectIds); + query.setProjectId(projectIds); } } } // 查询片区 if(!CollectionUtils.isEmpty(query.getProjectId())){ + query.setProjectId(query.getProjectId().stream().distinct().collect(Collectors.toList())); wrapper.in(TTask::getProjectId, query.getProjectId()); } @@ -182,11 +209,12 @@ if(!CollectionUtils.isEmpty(taskList)){ list.addAll(taskList); } + list = list.stream().distinct().collect(Collectors.toList()); map.put("taskCount", list.size()); - map.put("taskUnExecutedCount", list.stream().filter(task -> task.getStatus() == 1).count()); + map.put("taskUnExecutedCount", list.stream().filter(task -> task.getStatus() == 1 || task.getStatus() == 2).count()); map.put("taskPendingCount", list.stream().filter(task -> task.getStatus() == 3).count()); - map.put("taskFinishCount", list.stream().filter(task -> task.getStatus() == 6).count()); + map.put("taskFinishCount", list.stream().filter(task -> task.getStatus() == 5 || task.getStatus() == 6).count()); }else { // 超级管理员 // 查询点位类型 @@ -205,17 +233,20 @@ if(CollectionUtils.isEmpty(query.getProjectId())){ // 查询所有项目部的任务列表 List<TProjectDept> tProjectDeptList = projectDeptService.list(Wrappers.lambdaQuery(TProjectDept.class) - .eq(TProjectDept::getStatus, 1) - .ne(TProjectDept::getParentId, 0)); + .eq(TProjectDept::getStatus, 1)); if(!CollectionUtils.isEmpty(tProjectDeptList)){ List<String> projectIds = tProjectDeptList.stream().map(TProjectDept::getId).collect(Collectors.toList()); - wrapper.in(TTask::getProjectId, projectIds); + query.setProjectId(projectIds); } } // 查询片区 if(!CollectionUtils.isEmpty(query.getProjectId())){ + query.setProjectId(query.getProjectId().stream().distinct().collect(Collectors.toList())); wrapper.in(TTask::getProjectId, query.getProjectId()); + taskList = taskCleanService.list(Wrappers.lambdaQuery(TTask.class) + .in(TTask::getProjectId, query.getProjectId()) + .between(TTask::getImplementTime, startTime, endTime)); } List<TTask> list = taskCleanService.list(wrapper); @@ -226,11 +257,12 @@ if(!CollectionUtils.isEmpty(taskList)){ list.addAll(taskList); } + list = list.stream().distinct().collect(Collectors.toList()); map.put("taskCount", list.size()); - map.put("taskUnExecutedCount", list.stream().filter(task -> task.getStatus() == 1).count()); + map.put("taskUnExecutedCount", list.stream().filter(task -> task.getStatus() == 1 || task.getStatus() == 2).count()); map.put("taskPendingCount", list.stream().filter(task -> task.getStatus() == 3).count()); - map.put("taskFinishCount", list.stream().filter(task -> task.getStatus() == 6).count()); + map.put("taskFinishCount", list.stream().filter(task -> task.getStatus() == 5 || task.getStatus() == 6).count()); } return R.ok(map); @@ -257,15 +289,26 @@ } if (deptType == 1) { // 项目部人员 - List<String> projectIds = new ArrayList<>(); - projectIds.add(deptId); - query.setProjectId(projectIds); + if(CollectionUtils.isEmpty(query.getProjectId())){ + TProjectDept projectDept = projectDeptService.getById(deptId); + List<String> projectIds = new ArrayList<>(); + if("0".equals(projectDept.getParentId())){ + List<TProjectDept> tProjectDeptList = projectDeptService.list(Wrappers.lambdaQuery(TProjectDept.class) + .eq(TProjectDept::getStatus, 1) + .eq(TProjectDept::getParentId, projectDept.getId())); + List<String> ids = tProjectDeptList.stream().map(TProjectDept::getId).collect(Collectors.toList()); + projectIds.add(projectDept.getId()); + projectIds.addAll(ids); + }else { + projectIds.add(deptId); + } + query.setProjectId(projectIds); + } }else { if(CollectionUtils.isEmpty(query.getProjectId())) { // 查询所有项目部的任务列表 List<TProjectDept> tProjectDeptList = projectDeptService.list(Wrappers.lambdaQuery(TProjectDept.class) - .eq(TProjectDept::getStatus, 1) - .ne(TProjectDept::getParentId, 0)); + .eq(TProjectDept::getStatus, 1)); if (!CollectionUtils.isEmpty(tProjectDeptList)) { List<String> projectIds = tProjectDeptList.stream().map(TProjectDept::getId).collect(Collectors.toList()); List<TLocation> locationList = locationService.list(Wrappers.lambdaQuery(TLocation.class) @@ -284,6 +327,7 @@ // 查询片区 if(!CollectionUtils.isEmpty(query.getProjectId())){ + query.setProjectId(query.getProjectId().stream().distinct().collect(Collectors.toList())); List<TLocation> locationList = locationService.list(Wrappers.lambdaQuery(TLocation.class) .in(TLocation::getProjectId, query.getProjectId())); List<String> locationTypeList = locationList.stream().map(TLocation::getLocationType).distinct().collect(Collectors.toList()); @@ -310,8 +354,7 @@ if(CollectionUtils.isEmpty(query.getProjectId())) { // 查询所有项目部的任务列表 List<TProjectDept> tProjectDeptList = projectDeptService.list(Wrappers.lambdaQuery(TProjectDept.class) - .eq(TProjectDept::getStatus, 1) - .ne(TProjectDept::getParentId, 0)); + .eq(TProjectDept::getStatus, 1)); if (!CollectionUtils.isEmpty(tProjectDeptList)) { List<String> projectIds = tProjectDeptList.stream().map(TProjectDept::getId).collect(Collectors.toList()); List<TLocation> locationList = locationService.list(Wrappers.lambdaQuery(TLocation.class) @@ -329,6 +372,9 @@ // 查询片区 List<TLocation> locationList = locationService.list(Wrappers.lambdaQuery(TLocation.class) .in(TLocation::getProjectId, query.getProjectId())); + if (locationList.isEmpty()){ + return R.ok(map); + } List<String> locationTypeList = locationList.stream().map(TLocation::getLocationType).distinct().collect(Collectors.toList()); List<TLocationType> locationTypes = locationTypeService.list(Wrappers.lambdaQuery(TLocationType.class) .in(TLocationType::getId, locationTypeList)); @@ -367,9 +413,21 @@ List<TTask> taskList = new ArrayList<>(); if (deptType == 1) { // 项目部人员 - List<String> projectIds = new ArrayList<>(); - projectIds.add(deptId); - query.setProjectId(projectIds); + if(CollectionUtils.isEmpty(query.getProjectId())){ + TProjectDept projectDept = projectDeptService.getById(deptId); + List<String> projectIds = new ArrayList<>(); + if("0".equals(projectDept.getParentId())){ + List<TProjectDept> tProjectDeptList = projectDeptService.list(Wrappers.lambdaQuery(TProjectDept.class) + .eq(TProjectDept::getStatus, 1) + .eq(TProjectDept::getParentId, projectDept.getId())); + List<String> ids = tProjectDeptList.stream().map(TProjectDept::getId).collect(Collectors.toList()); + projectIds.add(projectDept.getId()); + projectIds.addAll(ids); + }else { + projectIds.add(deptId); + } + query.setProjectId(projectIds); + } }else { // 公司人员 // 查询自己的任务列表 @@ -378,17 +436,17 @@ if(CollectionUtils.isEmpty(query.getProjectId())){ // 查询所有项目部的任务列表 List<TProjectDept> tProjectDeptList = projectDeptService.list(Wrappers.lambdaQuery(TProjectDept.class) - .eq(TProjectDept::getStatus, 1) - .ne(TProjectDept::getParentId, 0)); + .eq(TProjectDept::getStatus, 1)); if(!CollectionUtils.isEmpty(tProjectDeptList)){ List<String> projectIds = tProjectDeptList.stream().map(TProjectDept::getId).collect(Collectors.toList()); - wrapper.in(TTask::getProjectId, projectIds); + query.setProjectId(projectIds); } } } // 查询片区 if(!CollectionUtils.isEmpty(query.getProjectId())){ + query.setProjectId(query.getProjectId().stream().distinct().collect(Collectors.toList())); wrapper.in(TTask::getProjectId, query.getProjectId()); } @@ -400,26 +458,22 @@ if(!CollectionUtils.isEmpty(taskList)){ list.addAll(taskList); } + list = list.stream().distinct().collect(Collectors.toList()); map.put("timeoutWarn", list.stream().filter(task -> task.getStatus() == 2).count()); - List<TTask> tasks = list.stream().filter(task -> task.getStatus() != 1 && task.getStatus() != 2).collect(Collectors.toList()); - if(CollectionUtils.isEmpty(tasks)){ - map.put("unqualifiedWarn", 0); - return R.ok(map); - } - List<String> taskIds = tasks.stream().map(TTask::getId).collect(Collectors.toList()); - List<TTaskDetail> taskDetails = tTaskDetailService.list(Wrappers.lambdaQuery(TTaskDetail.class) - .in(TTaskDetail::getTaskId, taskIds) - .orderByDesc(TTaskDetail::getCreateTime)); int unqualifiedWarn = 0; - for (TTask task : list) { - TTaskDetail tTaskDetail = taskDetails.stream().filter(taskDetail -> taskDetail.getTaskId().equals(task.getId())).findFirst().orElse(null); - if(Objects.nonNull(tTaskDetail)){ - if(tTaskDetail.getClearStatus() == 2){ + List<TEarlyWarning> earlyWarnings = earlyWarningService.list(Wrappers.lambdaQuery(TEarlyWarning.class)); + if(CollectionUtils.isEmpty(earlyWarnings)){ + map.put("unqualifiedWarn", unqualifiedWarn); + }else { + // 将earlyWarnings列表的taskId用逗号拼接 + String taskIds = earlyWarnings.stream().map(TEarlyWarning::getTaskId).collect(Collectors.joining(",")); + for (TTask task : list) { + if(taskIds.contains(task.getId())){ unqualifiedWarn++; } } + map.put("unqualifiedWarn", unqualifiedWarn); } - map.put("unqualifiedWarn", unqualifiedWarn); }else { // 超级管理员 // 查询点位类型 @@ -433,20 +487,21 @@ } } // 超级管理员 查询所有的任务列表 - List<TTask> taskList = taskCleanService.list(Wrappers.lambdaQuery(TTask.class)); + List<TTask> taskList = new ArrayList<>(); if(CollectionUtils.isEmpty(query.getProjectId())){ + taskList = taskCleanService.list(Wrappers.lambdaQuery(TTask.class)); // 查询所有项目部的任务列表 List<TProjectDept> tProjectDeptList = projectDeptService.list(Wrappers.lambdaQuery(TProjectDept.class) - .eq(TProjectDept::getStatus, 1) - .ne(TProjectDept::getParentId, 0)); + .eq(TProjectDept::getStatus, 1)); if(!CollectionUtils.isEmpty(tProjectDeptList)){ List<String> projectIds = tProjectDeptList.stream().map(TProjectDept::getId).collect(Collectors.toList()); - wrapper.in(TTask::getProjectId, projectIds); + query.setProjectId(projectIds); } } // 查询片区 if(!CollectionUtils.isEmpty(query.getProjectId())){ + query.setProjectId(query.getProjectId().stream().distinct().collect(Collectors.toList())); wrapper.in(TTask::getProjectId, query.getProjectId()); } @@ -458,26 +513,22 @@ if(!CollectionUtils.isEmpty(taskList)){ list.addAll(taskList); } + list = list.stream().distinct().collect(Collectors.toList()); map.put("timeoutWarn", list.stream().filter(task -> task.getStatus() == 2).count()); - List<TTask> tasks = list.stream().filter(task -> task.getStatus() != 1 && task.getStatus() != 2).collect(Collectors.toList()); - if(CollectionUtils.isEmpty(tasks)){ - map.put("unqualifiedWarn", 0); - return R.ok(map); - } - List<String> taskIds = tasks.stream().map(TTask::getId).collect(Collectors.toList()); - List<TTaskDetail> taskDetails = tTaskDetailService.list(Wrappers.lambdaQuery(TTaskDetail.class) - .in(TTaskDetail::getTaskId, taskIds) - .orderByDesc(TTaskDetail::getCreateTime)); int unqualifiedWarn = 0; - for (TTask task : list) { - TTaskDetail tTaskDetail = taskDetails.stream().filter(taskDetail -> taskDetail.getTaskId().equals(task.getId())).findFirst().orElse(null); - if(Objects.nonNull(tTaskDetail)){ - if(tTaskDetail.getClearStatus() == 2){ + List<TEarlyWarning> earlyWarnings = earlyWarningService.list(Wrappers.lambdaQuery(TEarlyWarning.class)); + if(CollectionUtils.isEmpty(earlyWarnings)){ + map.put("unqualifiedWarn", unqualifiedWarn); + }else { + // 将earlyWarnings列表的taskId用逗号拼接 + String taskIds = earlyWarnings.stream().map(TEarlyWarning::getTaskId).collect(Collectors.joining(",")); + for (TTask task : list) { + if(taskIds.contains(task.getId())){ unqualifiedWarn++; } } + map.put("unqualifiedWarn", unqualifiedWarn); } - map.put("unqualifiedWarn", unqualifiedWarn); } return R.ok(map); } @@ -504,9 +555,21 @@ List<TTask> taskList = new ArrayList<>(); if (deptType == 1) { // 项目部人员 - List<String> projectIds = new ArrayList<>(); - projectIds.add(deptId); - query.setProjectId(projectIds); + if(CollectionUtils.isEmpty(query.getProjectId())){ + TProjectDept projectDept = projectDeptService.getById(deptId); + List<String> projectIds = new ArrayList<>(); + if("0".equals(projectDept.getParentId())){ + List<TProjectDept> tProjectDeptList = projectDeptService.list(Wrappers.lambdaQuery(TProjectDept.class) + .eq(TProjectDept::getStatus, 1) + .eq(TProjectDept::getParentId, projectDept.getId())); + List<String> ids = tProjectDeptList.stream().map(TProjectDept::getId).collect(Collectors.toList()); + projectIds.add(projectDept.getId()); + projectIds.addAll(ids); + }else { + projectIds.add(deptId); + } + query.setProjectId(projectIds); + } }else { // 公司人员 // 查询自己的任务列表 @@ -515,17 +578,17 @@ if(CollectionUtils.isEmpty(query.getProjectId())){ // 查询所有项目部的任务列表 List<TProjectDept> tProjectDeptList = projectDeptService.list(Wrappers.lambdaQuery(TProjectDept.class) - .eq(TProjectDept::getStatus, 1) - .ne(TProjectDept::getParentId, 0)); + .eq(TProjectDept::getStatus, 1)); if(!CollectionUtils.isEmpty(tProjectDeptList)){ List<String> projectIds = tProjectDeptList.stream().map(TProjectDept::getId).collect(Collectors.toList()); - wrapper.in(TTask::getProjectId, projectIds); + query.setProjectId(projectIds); } } } // 查询片区 if(!CollectionUtils.isEmpty(query.getProjectId())){ + query.setProjectId(query.getProjectId().stream().distinct().collect(Collectors.toList())); wrapper.in(TTask::getProjectId, query.getProjectId()); } @@ -537,8 +600,10 @@ if(!CollectionUtils.isEmpty(taskList)){ list.addAll(taskList); } + list = list.stream().distinct().collect(Collectors.toList()); - List<TTask> tasks = list.stream().filter(task -> task.getStatus() != 1 && task.getStatus() != 2).collect(Collectors.toList()); + List<TTask> tasks = list.stream().filter(task -> task.getStatus() != 1 && task.getStatus() != 2 + && task.getStatus() != 3 && task.getStatus() != 4).collect(Collectors.toList()); if(CollectionUtils.isEmpty(tasks)){ return R.ok(); } @@ -546,7 +611,17 @@ List<TTaskDetail> taskDetails = tTaskDetailService.list(Wrappers.lambdaQuery(TTaskDetail.class) .in(TTaskDetail::getTaskId, taskIds) .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); @@ -561,7 +636,7 @@ .eq(TDictData::getDataType, 2)); List<AnalysisUnqualifiedCleaningDetailVO> analysisUnqualifiedCleaningDetailVOS = new ArrayList<>(); for (TDictData tDictData : dictDataList) { - List<TTaskDetail> tTaskDetails = taskDetailList.stream().filter(taskDetail -> taskDetail.getUnqualified().equals(tDictData.getId())).collect(Collectors.toList()); + List<TTaskDetail> tTaskDetails = taskDetailList.stream().filter(taskDetail -> StringUtils.isNotEmpty(taskDetail.getUnqualified())&&taskDetail.getUnqualified().equals(tDictData.getId())).collect(Collectors.toList()); AnalysisUnqualifiedCleaningDetailVO analysisUnqualifiedCleaningDetailVO = new AnalysisUnqualifiedCleaningDetailVO(); analysisUnqualifiedCleaningDetailVO.setUnqualifiedName(tDictData.getDataContent()); analysisUnqualifiedCleaningDetailVO.setCount(tTaskDetails.size()); @@ -581,20 +656,21 @@ } } // 超级管理员 查询所有的任务列表 - List<TTask> taskList = taskCleanService.list(Wrappers.lambdaQuery(TTask.class)); + List<TTask> taskList = new ArrayList<>(); if(CollectionUtils.isEmpty(query.getProjectId())){ + taskList = taskCleanService.list(Wrappers.lambdaQuery(TTask.class)); // 查询所有项目部的任务列表 List<TProjectDept> tProjectDeptList = projectDeptService.list(Wrappers.lambdaQuery(TProjectDept.class) - .eq(TProjectDept::getStatus, 1) - .ne(TProjectDept::getParentId, 0)); + .eq(TProjectDept::getStatus, 1)); if(!CollectionUtils.isEmpty(tProjectDeptList)){ List<String> projectIds = tProjectDeptList.stream().map(TProjectDept::getId).collect(Collectors.toList()); - wrapper.in(TTask::getProjectId, projectIds); + query.setProjectId(projectIds); } } // 查询片区 if(!CollectionUtils.isEmpty(query.getProjectId())){ + query.setProjectId(query.getProjectId().stream().distinct().collect(Collectors.toList())); wrapper.in(TTask::getProjectId, query.getProjectId()); } @@ -606,16 +682,28 @@ if(!CollectionUtils.isEmpty(taskList)){ list.addAll(taskList); } + list = list.stream().distinct().collect(Collectors.toList()); - List<TTask> tasks = list.stream().filter(task -> task.getStatus() != 1 && task.getStatus() != 2).collect(Collectors.toList()); + List<TTask> tasks = list.stream().filter(task -> task.getStatus() != 1 && task.getStatus() != 2 + && task.getStatus() != 3 && task.getStatus() != 4).collect(Collectors.toList()); if(CollectionUtils.isEmpty(tasks)){ return R.ok(); } List<String> taskIds = tasks.stream().map(TTask::getId).collect(Collectors.toList()); List<TTaskDetail> taskDetails = tTaskDetailService.list(Wrappers.lambdaQuery(TTaskDetail.class) .in(TTaskDetail::getTaskId, taskIds) + .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); @@ -630,7 +718,7 @@ .eq(TDictData::getDataType, 2)); List<AnalysisUnqualifiedCleaningDetailVO> analysisUnqualifiedCleaningDetailVOS = new ArrayList<>(); for (TDictData tDictData : dictDataList) { - List<TTaskDetail> tTaskDetails = taskDetailList.stream().filter(taskDetail -> taskDetail.getUnqualified().equals(tDictData.getId())).collect(Collectors.toList()); + List<TTaskDetail> tTaskDetails = taskDetailList.stream().filter(taskDetail -> StringUtils.isNotEmpty(taskDetail.getUnqualified())&& taskDetail.getUnqualified().equals(tDictData.getId())).collect(Collectors.toList()); AnalysisUnqualifiedCleaningDetailVO analysisUnqualifiedCleaningDetailVO = new AnalysisUnqualifiedCleaningDetailVO(); analysisUnqualifiedCleaningDetailVO.setUnqualifiedName(tDictData.getDataContent()); analysisUnqualifiedCleaningDetailVO.setCount(tTaskDetails.size()); @@ -691,22 +779,34 @@ } if (deptType == 1) { // 项目部人员 - List<String> projectIds = new ArrayList<>(); - projectIds.add(deptId); - query.setProjectId(projectIds); + if(CollectionUtils.isEmpty(query.getProjectId())){ + TProjectDept projectDept = projectDeptService.getById(deptId); + List<String> projectIds = new ArrayList<>(); + if("0".equals(projectDept.getParentId())){ + List<TProjectDept> tProjectDeptList = projectDeptService.list(Wrappers.lambdaQuery(TProjectDept.class) + .eq(TProjectDept::getStatus, 1) + .eq(TProjectDept::getParentId, projectDept.getId())); + List<String> ids = tProjectDeptList.stream().map(TProjectDept::getId).collect(Collectors.toList()); + projectIds.add(projectDept.getId()); + projectIds.addAll(ids); + }else { + projectIds.add(deptId); + } + query.setProjectId(projectIds); + } }else { // 公司人员 // 查询自己的任务列表 taskList = taskCleanService.list(Wrappers.lambdaQuery(TTask.class) - .eq(TTask::getPatrolInspector, userId)); + .eq(TTask::getPatrolInspector, userId) + .between(TTask::getCreateTime, startTime, endTime)); if(CollectionUtils.isEmpty(query.getProjectId())){ // 查询所有项目部的任务列表 List<TProjectDept> tProjectDeptList = projectDeptService.list(Wrappers.lambdaQuery(TProjectDept.class) - .eq(TProjectDept::getStatus, 1) - .ne(TProjectDept::getParentId, 0)); + .eq(TProjectDept::getStatus, 1)); if(!CollectionUtils.isEmpty(tProjectDeptList)){ List<String> projectIds = tProjectDeptList.stream().map(TProjectDept::getId).collect(Collectors.toList()); - wrapper.in(TTask::getProjectId, projectIds); + query.setProjectId(projectIds); } if(query.getRankType() == 1){ // 查询所有项目部的人员 @@ -732,6 +832,7 @@ // 查询片区 if(!CollectionUtils.isEmpty(query.getProjectId())){ + query.setProjectId(query.getProjectId().stream().distinct().collect(Collectors.toList())); wrapper.in(TTask::getProjectId, query.getProjectId()); } @@ -743,16 +844,29 @@ if(!CollectionUtils.isEmpty(taskList)){ list.addAll(taskList); } + list = list.stream().distinct().collect(Collectors.toList()); - List<TTask> tasks = list.stream().filter(task -> task.getStatus() != 1 && task.getStatus() != 2).collect(Collectors.toList()); + List<TTask> tasks = list.stream().filter(task -> task.getStatus() != 1 && task.getStatus() != 2 + && task.getStatus() != 3 && task.getStatus() != 4).collect(Collectors.toList()); if(CollectionUtils.isEmpty(tasks)){ return R.ok(); } List<String> taskIds = tasks.stream().map(TTask::getId).collect(Collectors.toList()); List<TTaskDetail> taskDetails = tTaskDetailService.list(Wrappers.lambdaQuery(TTaskDetail.class) .in(TTaskDetail::getTaskId, taskIds) - .eq(TTaskDetail::getClearStatus, 1) + .eq(TTaskDetail::getHandleType,1) .orderByDesc(TTaskDetail::getCreateTime)); + + // 使用 stream 去重,保留每个 taskId 最新的一条 + taskDetails = new ArrayList<>(taskDetails.stream() + .collect(Collectors.groupingBy( + TTaskDetail::getTaskId, + Collectors.collectingAndThen( + Collectors.toList(), + list1 -> list1.get(0) + ) + )) + .values()); if(query.getRankType() == 1){ // 用户排名 @@ -761,8 +875,10 @@ dataStatisticsRankVO.setName(sysUser.getNickName()); List<String> taskIdList = tasks.stream().filter(task -> task.getPatrolInspector().equals(String.valueOf(sysUser.getUserId()))).map(TTask::getId).collect(Collectors.toList()); dataStatisticsRankVO.setTaskCount(taskIdList.size()); - long count = taskDetails.stream().filter(taskDetail -> taskIdList.contains(taskDetail.getTaskId())).count(); + long count = taskDetails.stream().filter(taskDetail -> taskIdList.contains(taskDetail.getTaskId()) + && taskDetail.getClearStatus() == 1).count(); dataStatisticsRankVO.setQualifiedCount(count); + result.add(dataStatisticsRankVO); } }else { // 查询项目部 @@ -771,6 +887,9 @@ projectDepts = new ArrayList<>(); // 当前项目部 TProjectDept projectDept = projectDeptService.getById(deptId); + if(Objects.nonNull(projectDept) && !"0".equals(projectDept.getParentId())){ + projectDept = projectDeptService.getById(projectDept.getParentId()); + } projectDepts.add(projectDept); }else { if (CollectionUtils.isEmpty(query.getProjectId())){ @@ -799,7 +918,7 @@ dataStatisticsRankVO.setName(projectDept.getProjectName()); List<String> taskIdList; if(!CollectionUtils.isEmpty(tProjectDeptList)){ - List<String> projectIds = tProjectDeptList.stream().map(TProjectDept::getId).collect(Collectors.toList()); + List<String> projectIds = tProjectDeptList.stream().filter(e -> e.getParentId().equals(projectDept.getId())).map(TProjectDept::getId).collect(Collectors.toList()); taskIdList = tasks.stream().filter(task -> projectIds.contains(task.getProjectId())).map(TTask::getId).collect(Collectors.toList()); } else { taskIdList = new ArrayList<>(); @@ -809,8 +928,10 @@ dataStatisticsRankVO.setQualifiedCount(0L); continue; } - long count = taskDetails.stream().filter(taskDetail -> taskIdList.contains(taskDetail.getTaskId())).count(); + long count = taskDetails.stream().filter(taskDetail -> taskIdList.contains(taskDetail.getTaskId()) + && taskDetail.getClearStatus() == 1).count(); dataStatisticsRankVO.setQualifiedCount(count); + result.add(dataStatisticsRankVO); } } }else { @@ -830,7 +951,8 @@ sysUsers = sysUserService.selectListByDeptId(deptId); } // 超级管理员 查询所有的任务列表 - List<TTask> taskList = taskCleanService.list(Wrappers.lambdaQuery(TTask.class)); + List<TTask> taskList = taskCleanService.list(Wrappers.lambdaQuery(TTask.class) + .between(TTask::getImplementTime, startTime, endTime)); if(CollectionUtils.isEmpty(query.getProjectId())){ // 查询所有项目部的任务列表 List<TProjectDept> tProjectDeptList = projectDeptService.list(Wrappers.lambdaQuery(TProjectDept.class) @@ -838,7 +960,7 @@ .ne(TProjectDept::getParentId, 0)); if(!CollectionUtils.isEmpty(tProjectDeptList)){ List<String> projectIds = tProjectDeptList.stream().map(TProjectDept::getId).collect(Collectors.toList()); - wrapper.in(TTask::getProjectId, projectIds); + query.setProjectId(projectIds); } if(query.getRankType() == 1){ // 查询所有项目部的人员 @@ -863,6 +985,7 @@ // 查询片区 if(!CollectionUtils.isEmpty(query.getProjectId())){ + query.setProjectId(query.getProjectId().stream().distinct().collect(Collectors.toList())); wrapper.in(TTask::getProjectId, query.getProjectId()); } @@ -874,16 +997,29 @@ if(!CollectionUtils.isEmpty(taskList)){ list.addAll(taskList); } + list = list.stream().distinct().collect(Collectors.toList()); - List<TTask> tasks = list.stream().filter(task -> task.getStatus() != 1 && task.getStatus() != 2).collect(Collectors.toList()); + List<TTask> tasks = list.stream().filter(task -> task.getStatus() != 1 && task.getStatus() != 2 + && task.getStatus() != 3 && task.getStatus() != 4).collect(Collectors.toList()); if(CollectionUtils.isEmpty(tasks)){ return R.ok(); } List<String> taskIds = tasks.stream().map(TTask::getId).collect(Collectors.toList()); List<TTaskDetail> taskDetails = tTaskDetailService.list(Wrappers.lambdaQuery(TTaskDetail.class) .in(TTaskDetail::getTaskId, taskIds) - .eq(TTaskDetail::getClearStatus, 1) + .eq(TTaskDetail::getHandleType,1) .orderByDesc(TTaskDetail::getCreateTime)); + + // 使用 stream 去重,保留每个 taskId 最新的一条 + taskDetails = new ArrayList<>(taskDetails.stream() + .collect(Collectors.groupingBy( + TTaskDetail::getTaskId, + Collectors.collectingAndThen( + Collectors.toList(), + list1 -> list1.get(0) + ) + )) + .values()); if(query.getRankType() == 1){ // 用户排名 @@ -892,8 +1028,10 @@ dataStatisticsRankVO.setName(sysUser.getNickName()); List<String> taskIdList = tasks.stream().filter(task -> task.getPatrolInspector().equals(String.valueOf(sysUser.getUserId()))).map(TTask::getId).collect(Collectors.toList()); dataStatisticsRankVO.setTaskCount(taskIdList.size()); - long count = taskDetails.stream().filter(taskDetail -> taskIdList.contains(taskDetail.getTaskId())).count(); + long count = taskDetails.stream().filter(taskDetail -> taskIdList.contains(taskDetail.getTaskId()) + && taskDetail.getClearStatus() == 1).count(); dataStatisticsRankVO.setQualifiedCount(count); + result.add(dataStatisticsRankVO); } }else { // 超级管理员 查询所有项目部 @@ -923,7 +1061,7 @@ dataStatisticsRankVO.setName(projectDept.getProjectName()); List<String> taskIdList; if(!CollectionUtils.isEmpty(tProjectDeptList)){ - List<String> projectIds = tProjectDeptList.stream().map(TProjectDept::getId).collect(Collectors.toList()); + List<String> projectIds = tProjectDeptList.stream().filter(e -> e.getParentId().equals(projectDept.getId())).map(TProjectDept::getId).collect(Collectors.toList()); taskIdList = tasks.stream().filter(task -> projectIds.contains(task.getProjectId())).map(TTask::getId).collect(Collectors.toList()); } else { taskIdList = new ArrayList<>(); @@ -933,13 +1071,372 @@ dataStatisticsRankVO.setQualifiedCount(0L); continue; } - long count = taskDetails.stream().filter(taskDetail -> taskIdList.contains(taskDetail.getTaskId())).count(); + long count = taskDetails.stream().filter(taskDetail -> taskIdList.contains(taskDetail.getTaskId()) + && taskDetail.getClearStatus() == 1).count(); dataStatisticsRankVO.setQualifiedCount(count); + result.add(dataStatisticsRankVO); + } + } + } + // 先根据任务总数排序,再根据合格数进行排序 + result.sort((o1, o2) -> { + if (o1.getTaskCount().equals(o2.getTaskCount())) { + return o2.getQualifiedCount().compareTo(o1.getQualifiedCount()); + }else{ + return o2.getTaskCount().compareTo(o1.getTaskCount()); + } + }); + return R.ok(result); + } + + + @ApiOperation(value = "点位巡检热力图-数量统计") + @PostMapping(value = "/pointInspectionHeatStatistics") + public R<Map<String, Object>> pointInspectionHeatStatistics(@RequestBody DataStatisticsQuery query) { + Map<String, Object> map = new HashMap<>(); + Integer deptType = tokenService.getLoginUser().getUser().getDeptType(); + String deptId = tokenService.getLoginUser().getUser().getDeptId(); + Long userId = tokenService.getLoginUser().getUserId(); + + LambdaQueryWrapper<TTask> wrapper = new LambdaQueryWrapper<>(); + + Map<String, Date> yearDate = DateUtils.getYearDate(new Date()); + String startTime = new SimpleDateFormat("yyyy-MM-dd").format(yearDate.get("first")); + String endTime = new SimpleDateFormat("yyyy-MM-dd").format(yearDate.get("last")); + wrapper.between(TTask::getImplementTime, startTime, endTime); + + List<TTask> list; + if (userId != 1L) { + // 查询点位类型 + if(StringUtils.isNotEmpty(query.getLocationTypeId())){ + // 查询点位 + List<TLocation> locationList = locationService.list(Wrappers.lambdaQuery(TLocation.class) + .in(TLocation::getLocationType, query.getLocationTypeId())); + if(!CollectionUtils.isEmpty(locationList)){ + List<String> locationIds = locationList.stream().map(TLocation::getId).collect(Collectors.toList()); + wrapper.in(TTask::getLocationId, locationIds); + } + map.put("totalLocationNum", locationList.size()); + } + List<TTask> taskList = new ArrayList<>(); + if (deptType == 1) { + // 项目部人员 + if(CollectionUtils.isEmpty(query.getProjectId())){ + TProjectDept projectDept = projectDeptService.getById(deptId); + List<String> projectIds = new ArrayList<>(); + if("0".equals(projectDept.getParentId())){ + List<TProjectDept> tProjectDeptList = projectDeptService.list(Wrappers.lambdaQuery(TProjectDept.class) + .eq(TProjectDept::getStatus, 1) + .eq(TProjectDept::getParentId, projectDept.getId())); + List<String> ids = tProjectDeptList.stream().map(TProjectDept::getId).collect(Collectors.toList()); + projectIds.add(projectDept.getId()); + projectIds.addAll(ids); + }else { + projectIds.add(deptId); + } + query.setProjectId(projectIds); + } + // 巡检员数 + Integer totalEmployeeNum = sysUserService.selectUserCount(query.getProjectId(),deptType); + map.put("totalEmployeeNum", totalEmployeeNum); + }else { + // 公司人员 + // 查询自己的任务列表 + taskList = taskCleanService.list(Wrappers.lambdaQuery(TTask.class) + .eq(TTask::getPatrolInspector, userId) + .between(TTask::getImplementTime, startTime, endTime)); + if(CollectionUtils.isEmpty(query.getProjectId())){ + // 查询所有项目部的任务列表 + List<TProjectDept> tProjectDeptList = projectDeptService.list(Wrappers.lambdaQuery(TProjectDept.class) + .eq(TProjectDept::getStatus, 1)); + if(!CollectionUtils.isEmpty(tProjectDeptList)){ + List<String> projectIds = tProjectDeptList.stream().map(TProjectDept::getId).collect(Collectors.toList()); + query.setProjectId(projectIds); + } + }else { + + } + // 巡检员数 + Integer totalEmployeeNum = sysUserService.selectUserCount(query.getProjectId(),1); + map.put("totalEmployeeNum", totalEmployeeNum+1); + } + + // 查询片区 + if(!CollectionUtils.isEmpty(query.getProjectId())){ + query.setProjectId(query.getProjectId().stream().distinct().collect(Collectors.toList())); + wrapper.in(TTask::getProjectId, query.getProjectId()); + // 查询点位数 + List<TLocation> locationList = locationService.list(Wrappers.lambdaQuery(TLocation.class) + .in(TLocation::getProjectId, query.getProjectId())); + map.put("totalLocationNum", locationList.size()); + } + + list = taskCleanService.list(wrapper); + if(CollectionUtils.isEmpty(list)){ + return R.ok(); + } + + if(!CollectionUtils.isEmpty(taskList)){ + list.addAll(taskList); + } + list = list.stream().distinct().collect(Collectors.toList()); + + }else { + // 超级管理员 + // 查询点位类型 + if(StringUtils.isNotEmpty(query.getLocationTypeId())){ + // 查询点位 + List<TLocation> locationList = locationService.list(Wrappers.lambdaQuery(TLocation.class) + .in(TLocation::getLocationType, query.getLocationTypeId())); + if(!CollectionUtils.isEmpty(locationList)){ + List<String> locationIds = locationList.stream().map(TLocation::getId).collect(Collectors.toList()); + wrapper.in(TTask::getLocationId, locationIds); + } + map.put("totalLocationNum", locationList.size()); + } + // 超级管理员 查询所有的任务列表 + List<TTask> taskList = new ArrayList<>(); + if(CollectionUtils.isEmpty(query.getProjectId())){ + taskList = taskCleanService.list(Wrappers.lambdaQuery(TTask.class) + .between(TTask::getImplementTime, startTime, endTime)); + // 查询所有项目部的任务列表 + List<TProjectDept> tProjectDeptList = projectDeptService.list(Wrappers.lambdaQuery(TProjectDept.class) + .eq(TProjectDept::getStatus, 1)); + if(!CollectionUtils.isEmpty(tProjectDeptList)){ + List<String> projectIds = tProjectDeptList.stream().map(TProjectDept::getId).collect(Collectors.toList()); + query.setProjectId(projectIds); + } + } + + // 查询片区 + if(!CollectionUtils.isEmpty(query.getProjectId())){ + query.setProjectId(query.getProjectId().stream().distinct().collect(Collectors.toList())); + wrapper.in(TTask::getProjectId, query.getProjectId()); + List<TLocation> locationList = locationService.list(Wrappers.lambdaQuery(TLocation.class) + .in(TLocation::getProjectId, query.getProjectId())); + map.put("totalLocationNum", locationList.size()); + taskList = taskCleanService.list(Wrappers.lambdaQuery(TTask.class) + .in(TTask::getProjectId, query.getProjectId()) + .between(TTask::getImplementTime, startTime, endTime)); + } + + list = taskCleanService.list(wrapper); + if(CollectionUtils.isEmpty(list)){ + return R.ok(); + } + + if(!CollectionUtils.isEmpty(taskList)){ + list.addAll(taskList); + } + list = list.stream().distinct().collect(Collectors.toList()); + + // 巡检员数 + if(CollectionUtils.isEmpty(query.getProjectId())){ + Integer totalEmployeeNum = sysUserService.selectUserCount(query.getProjectId(),deptType); + Integer totalEmployeeNum1 = sysUserService.selectUserCount(query.getProjectId(),1); + map.put("totalEmployeeNum", totalEmployeeNum+totalEmployeeNum1); + }else { + Integer totalEmployeeNum = sysUserService.selectUserCount(query.getProjectId(),1); + map.put("totalEmployeeNum", totalEmployeeNum); + } + + } + + // 查询任务相关数据 + // 总计任务数 + map.put("totalTaskNum", list.size()); + // 片区数量 + map.put("totalProjectNum", query.getProjectId().size()); + + // 合格率 + // 匹配任务详情查看合格数量 + List<TTask> tasks = list.stream().filter(task -> task.getStatus() != 1 && task.getStatus() != 2 + && task.getStatus() != 3 && task.getStatus() != 4).collect(Collectors.toList()); + if(CollectionUtils.isEmpty(tasks)){ + map.put("qualifiedRate",BigDecimal.ZERO); + return R.ok(map); + } + List<String> taskIds = tasks.stream().map(TTask::getId).collect(Collectors.toList()); + List<TTaskDetail> taskDetails = tTaskDetailService.list(Wrappers.lambdaQuery(TTaskDetail.class) + .in(TTaskDetail::getTaskId, taskIds) + .orderByDesc(TTaskDetail::getCreateTime)); + int qualifiedWarn = 0; + for (TTask task : list) { + TTaskDetail tTaskDetail = taskDetails.stream().filter(taskDetail -> taskDetail.getTaskId().equals(task.getId())).findFirst().orElse(null); + if(Objects.nonNull(tTaskDetail)){ + if(Objects.nonNull(tTaskDetail.getClearStatus()) && tTaskDetail.getClearStatus() == 1){ + qualifiedWarn++; + } + } + } + map.put("qualifiedRate", new BigDecimal(qualifiedWarn).divide(new BigDecimal(tasks.size()), 2, RoundingMode.HALF_DOWN)); + + return R.ok(map); + } + + @ApiOperation(value = "点位巡检热力图-点位地图") + @PostMapping(value = "/pointInspectionHeatMap") + public R<List<TLocation>> pointInspectionHeatMap(@RequestBody DataStatisticsQuery query) { + Integer deptType = tokenService.getLoginUser().getUser().getDeptType(); + String deptId = tokenService.getLoginUser().getUser().getDeptId(); + Long userId = tokenService.getLoginUser().getUserId(); + + LambdaQueryWrapper<TLocation> wrapper = new LambdaQueryWrapper<>(); + + Map<String, Date> yearDate = DateUtils.getYearDate(new Date()); + String startTime = new SimpleDateFormat("yyyy-MM-dd").format(yearDate.get("first")); + String endTime = new SimpleDateFormat("yyyy-MM-dd").format(yearDate.get("last")); + wrapper.between(TLocation::getCreateTime, startTime, endTime); + + // 查询点位类型 + if(StringUtils.isNotEmpty(query.getLocationTypeId())){ + // 查询点位 + wrapper.in(TLocation::getLocationType, query.getLocationTypeId()); + } + if(StringUtils.isNotEmpty(query.getLocationNameOrCode())){ + wrapper.and(e->e.like(TLocation::getLocationName, query.getLocationNameOrCode()).or() + .like(TLocation::getLocationCode, query.getLocationNameOrCode())); + } + if (userId != 1L) { + if (deptType == 1) { + // 项目部人员 + if(CollectionUtils.isEmpty(query.getProjectId())){ + TProjectDept projectDept = projectDeptService.getById(deptId); + List<String> projectIds = new ArrayList<>(); + if("0".equals(projectDept.getParentId())){ + List<TProjectDept> tProjectDeptList = projectDeptService.list(Wrappers.lambdaQuery(TProjectDept.class) + .eq(TProjectDept::getStatus, 1) + .eq(TProjectDept::getParentId, projectDept.getId())); + List<String> ids = tProjectDeptList.stream().map(TProjectDept::getId).collect(Collectors.toList()); + projectIds.add(projectDept.getId()); + projectIds.addAll(ids); + }else { + projectIds.add(deptId); + } + query.setProjectId(projectIds); + } + }else { + // 公司人员 + if(CollectionUtils.isEmpty(query.getProjectId())){ + // 查询所有项目部的任务列表 + List<TProjectDept> tProjectDeptList = projectDeptService.list(Wrappers.lambdaQuery(TProjectDept.class) + .eq(TProjectDept::getStatus, 1)); + if(!CollectionUtils.isEmpty(tProjectDeptList)){ + List<String> projectIds = tProjectDeptList.stream().map(TProjectDept::getId).collect(Collectors.toList()); + query.setProjectId(projectIds); + } + } + } + }else { + // 超级管理员 + if(CollectionUtils.isEmpty(query.getProjectId())){ + // 查询所有项目部的任务列表 + List<TProjectDept> tProjectDeptList = projectDeptService.list(Wrappers.lambdaQuery(TProjectDept.class) + .eq(TProjectDept::getStatus, 1)); + if(!CollectionUtils.isEmpty(tProjectDeptList)){ + List<String> projectIds = tProjectDeptList.stream().map(TProjectDept::getId).collect(Collectors.toList()); + query.setProjectId(projectIds); } } } - return R.ok(result); + // 查询片区 + if(!CollectionUtils.isEmpty(query.getProjectId())){ + query.setProjectId(query.getProjectId().stream().distinct().collect(Collectors.toList())); + wrapper.in(TLocation::getProjectId, query.getProjectId()); + } + + // 查询点位 + List<TLocation> locationList = locationService.list(wrapper); + + if(CollectionUtils.isEmpty(locationList)){ + return R.ok(locationList); + } + + List<String> locationIds = locationList.stream().map(TLocation::getId).collect(Collectors.toList()); + + // 查询任务 + List<TTask> tasks = taskCleanService.list(Wrappers.lambdaQuery(TTask.class) + .in(TTask::getLocationId, locationIds)); + + for (TLocation tLocation : locationList) { + long count = tasks.stream().filter(task -> task.getLocationId().equals(tLocation.getId())).count(); + tLocation.setTaskNum(count); + } + return R.ok(locationList); + } + + + @ApiOperation(value = "点位巡检热力图-点位详情和统计") + @PostMapping(value = "/pointInspectionHeatDetailStatistics") + public R<TLocationStatisticsVO> pointInspectionHeatDetailStatistics(@Validated @RequestBody PointDetailQuery query) { + + TLocation location = locationService.getById(query.getLocationId()); + TLocationStatisticsVO locationStatisticsVO = new TLocationStatisticsVO(); + BeanUtils.copyProperties(location, locationStatisticsVO); + + // 查询点位类型 + TLocationType locationType = locationTypeService.getById(location.getLocationType()); + if(Objects.nonNull(locationType)){ + locationStatisticsVO.setLocationIcon(locationType.getLocationIcon()); + } + + List<TTask> list = taskCleanService.list(Wrappers.lambdaQuery(TTask.class) + .eq(TTask::getLocationId, query.getLocationId())); + // 总数 + locationStatisticsVO.setTotalInspection(list.size()); + + // 完成数 + long completeInspection = list.stream().filter(task -> task.getStatus() == 6 || task.getStatus() == 5).count(); + locationStatisticsVO.setCompleteInspection(completeInspection); + + // 合格率 + List<TTask> tasks = list.stream().filter(task -> task.getStatus() != 1 && task.getStatus() != 2 + && task.getStatus() != 3 && task.getStatus() != 4).collect(Collectors.toList()); + if(CollectionUtils.isEmpty(tasks)){ + locationStatisticsVO.setPassRate(new BigDecimal(0)); + return R.ok(locationStatisticsVO); + } + List<String> taskIds = tasks.stream().map(TTask::getId).collect(Collectors.toList()); + List<TTaskDetail> taskDetails = tTaskDetailService.list(Wrappers.lambdaQuery(TTaskDetail.class) + .in(TTaskDetail::getTaskId, taskIds) + .orderByDesc(TTaskDetail::getCreateTime)); + int qualifiedWarn = 0; + for (TTask task : list) { + TTaskDetail tTaskDetail = taskDetails.stream().filter(taskDetail -> taskDetail.getTaskId().equals(task.getId())).findFirst().orElse(null); + if(Objects.nonNull(tTaskDetail)){ + if(Objects.nonNull(tTaskDetail.getClearStatus()) && tTaskDetail.getClearStatus() == 1){ + qualifiedWarn++; + } + } + } + locationStatisticsVO.setPassRate(new BigDecimal(qualifiedWarn).divide(new BigDecimal(tasks.size()), 2, RoundingMode.HALF_DOWN)); + return R.ok(locationStatisticsVO); + } + + @ApiOperation(value = "点位巡检热力图-点位详情任务列表") + @PostMapping(value = "/pointInspectionHeatDetailTaskList") + public R<PageInfo<TLocationTaskListVO>> pointInspectionHeatDetailTaskList(@Validated @RequestBody PointDetailQuery query) { + + if(StringUtils.isNotBlank(query.getDeptName())){ + + List<TProjectDept> projectDeptList = projectDeptService.list(Wrappers.lambdaQuery(TProjectDept.class) + .like(TProjectDept::getProjectName, query.getDeptName())); + List<String> projectIds = projectDeptList.stream().map(TProjectDept::getId).collect(Collectors.toList()); + + List<TDept> deptList = deptService.list(Wrappers.lambdaQuery(TDept.class) + .like(TDept::getDeptName, query.getDeptName())); + List<String> deptIds = deptList.stream().map(TDept::getId).collect(Collectors.toList()); + + projectIds.addAll(deptIds); + if (projectIds.isEmpty()){ + projectIds.add("-1"); + } + query.setProjectIds(projectIds); + } + + PageInfo<TLocationTaskListVO> pageInfo = taskCleanService.pointInspectionHeatDetailTaskList(query); + return R.ok(pageInfo); } } -- Gitblit v1.7.1