无关风月
2 天以前 951b06c1aaa8cc4c83f9e4b4ba9fae066fd84941
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)
@@ -150,8 +164,18 @@
            if (deptType == 1) {
                // 项目部人员
                if(CollectionUtils.isEmpty(query.getProjectId())){
                    TProjectDept projectDept = projectDeptService.getById(deptId);
                    List<String> projectIds = new ArrayList<>();
                    projectIds.add(deptId);
                    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 {
@@ -163,8 +187,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());
                        query.setProjectId(projectIds);
@@ -174,6 +197,7 @@
            // 查询片区
            if(!CollectionUtils.isEmpty(query.getProjectId())){
                query.setProjectId(query.getProjectId().stream().distinct().collect(Collectors.toList()));
                wrapper.in(TTask::getProjectId, query.getProjectId());
            }
@@ -185,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 {
            // 超级管理员
            // 查询点位类型
@@ -208,8 +233,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());
                    query.setProjectId(projectIds);
@@ -218,7 +242,11 @@
            // 查询片区
            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);
@@ -229,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);
@@ -261,16 +290,25 @@
            if (deptType == 1) {
                // 项目部人员
                if(CollectionUtils.isEmpty(query.getProjectId())){
                    TProjectDept projectDept = projectDeptService.getById(deptId);
                    List<String> projectIds = new ArrayList<>();
                    projectIds.add(deptId);
                    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)
@@ -289,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());
@@ -315,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)
@@ -334,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));
@@ -373,8 +414,18 @@
            if (deptType == 1) {
                // 项目部人员
                if(CollectionUtils.isEmpty(query.getProjectId())){
                    TProjectDept projectDept = projectDeptService.getById(deptId);
                    List<String> projectIds = new ArrayList<>();
                    projectIds.add(deptId);
                    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 {
@@ -385,8 +436,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());
                        query.setProjectId(projectIds);
@@ -396,6 +446,7 @@
            // 查询片区
            if(!CollectionUtils.isEmpty(query.getProjectId())){
                query.setProjectId(query.getProjectId().stream().distinct().collect(Collectors.toList()));
                wrapper.in(TTask::getProjectId, query.getProjectId());
            }
@@ -407,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 {
            // 超级管理员
            // 查询点位类型
@@ -440,12 +487,12 @@
                }
            }
            // 超级管理员 查询所有的任务列表
            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());
                    query.setProjectId(projectIds);
@@ -454,6 +501,7 @@
            // 查询片区
            if(!CollectionUtils.isEmpty(query.getProjectId())){
                query.setProjectId(query.getProjectId().stream().distinct().collect(Collectors.toList()));
                wrapper.in(TTask::getProjectId, query.getProjectId());
            }
@@ -465,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);
    }
@@ -512,8 +556,18 @@
            if (deptType == 1) {
                // 项目部人员
                if(CollectionUtils.isEmpty(query.getProjectId())){
                    TProjectDept projectDept = projectDeptService.getById(deptId);
                    List<String> projectIds = new ArrayList<>();
                    projectIds.add(deptId);
                    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 {
@@ -524,8 +578,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());
                        query.setProjectId(projectIds);
@@ -535,6 +588,7 @@
            // 查询片区
            if(!CollectionUtils.isEmpty(query.getProjectId())){
                query.setProjectId(query.getProjectId().stream().distinct().collect(Collectors.toList()));
                wrapper.in(TTask::getProjectId, query.getProjectId());
            }
@@ -546,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();
            }
@@ -555,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);
@@ -570,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());
@@ -590,12 +656,12 @@
                }
            }
            // 超级管理员 查询所有的任务列表
            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());
                    query.setProjectId(projectIds);
@@ -604,6 +670,7 @@
            // 查询片区
            if(!CollectionUtils.isEmpty(query.getProjectId())){
                query.setProjectId(query.getProjectId().stream().distinct().collect(Collectors.toList()));
                wrapper.in(TTask::getProjectId, query.getProjectId());
            }
@@ -615,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);
@@ -639,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());
@@ -701,20 +780,30 @@
            if (deptType == 1) {
                // 项目部人员
                if(CollectionUtils.isEmpty(query.getProjectId())){
                    TProjectDept projectDept = projectDeptService.getById(deptId);
                    List<String> projectIds = new ArrayList<>();
                    projectIds.add(deptId);
                    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());
                        query.setProjectId(projectIds);
@@ -743,6 +832,7 @@
            // 查询片区
            if(!CollectionUtils.isEmpty(query.getProjectId())){
                query.setProjectId(query.getProjectId().stream().distinct().collect(Collectors.toList()));
                wrapper.in(TTask::getProjectId, query.getProjectId());
            }
@@ -754,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){
                // 用户排名
@@ -772,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 {
                // 查询项目部
@@ -782,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())){
@@ -810,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<>();
@@ -820,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 {
@@ -841,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)
@@ -874,6 +985,7 @@
            // 查询片区
            if(!CollectionUtils.isEmpty(query.getProjectId())){
                query.setProjectId(query.getProjectId().stream().distinct().collect(Collectors.toList()));
                wrapper.in(TTask::getProjectId, query.getProjectId());
            }
@@ -885,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){
                // 用户排名
@@ -903,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 {
                // 超级管理员 查询所有项目部
@@ -934,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<>();
@@ -944,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);
    }
}