无关风月
2025-07-02 a8176a321bc00f56524852abea7680948547b1b3
Merge remote-tracking branch 'origin/master'
3个文件已添加
10个文件已修改
1595 ■■■■■ 已修改文件
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/DataStatisticsController.java 435 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/WorkbenchesController.java 1037 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/model/TProjectDept.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/model/TTask.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/query/DataStatisticsRankQuery.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/query/TaskSituationQuery.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/vo/system/TaskSituationDayVO.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/vo/system/TaskSituationVO.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/DataStatisticsController.java
@@ -19,6 +19,7 @@
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.util.CollectionUtils;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
@@ -67,7 +68,9 @@
    public R<List<TProjectDept>> queryProject() {
        Integer deptType = tokenService.getLoginUser().getUser().getDeptType();
        String deptId = tokenService.getLoginUser().getUser().getDeptId();
        Long userId = tokenService.getLoginUser().getUserId();
        List<TProjectDept> projectDeptList = new ArrayList<>();
        if(userId != 1L){
        if (deptType == 1) {
            // 查询片区
            TProjectDept projectDept = projectDeptService.getById(deptId);
@@ -75,7 +78,7 @@
            TProjectDept parent = projectDeptService.getById(projectDept.getParentId());
            List<TProjectDept> children = new ArrayList<>();
            children.add(projectDept);
//            parent.setChildren(children);
                parent.setChildren(children);
            projectDeptList.add(parent);
        }else {
            projectDeptList = projectDeptService.list(Wrappers.lambdaQuery(TProjectDept.class)
@@ -85,7 +88,18 @@
            projectDeptList.forEach(projectDept -> {
                List<TProjectDept> children = projectDeptService.list(Wrappers.lambdaQuery(TProjectDept.class)
                        .eq(TProjectDept::getParentId, projectDept.getId()));
//                projectDept.setChildren(children);
                    projectDept.setChildren(children);
                });
            }
        }else {
            projectDeptList = projectDeptService.list(Wrappers.lambdaQuery(TProjectDept.class)
                    .eq(TProjectDept::getStatus,1)
                    .eq(TProjectDept::getParentId,0));
            // 查询片区
            projectDeptList.forEach(projectDept -> {
                List<TProjectDept> children = projectDeptService.list(Wrappers.lambdaQuery(TProjectDept.class)
                        .eq(TProjectDept::getParentId, projectDept.getId()));
                projectDept.setChildren(children);
            });
        }
        return R.ok(projectDeptList);
@@ -93,17 +107,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);
    }
@@ -115,13 +130,12 @@
        String deptId = tokenService.getLoginUser().getUser().getDeptId();
        Long userId = tokenService.getLoginUser().getUserId();
        String startTime = LocalDate.now() + " 00:00:00";
        String endTime = LocalDate.now() + " 23:59:59";
        LambdaQueryWrapper<TTask> wrapper = new LambdaQueryWrapper<>();
        String startTime = LocalDate.now() + " 00:00:00";
        String endTime = LocalDate.now() + " 23:59:59";
        wrapper.between(TTask::getImplementTime, startTime, endTime);
        if(userId != 1L){
        // 查询点位类型
        if(StringUtils.isNotEmpty(query.getLocationTypeId())){
            // 查询点位
@@ -135,9 +149,11 @@
        List<TTask> taskList = new ArrayList<>();
        if (deptType == 1) {
            // 项目部人员
                if(CollectionUtils.isEmpty(query.getProjectId())){
            List<String> projectIds = new ArrayList<>();
            projectIds.add(deptId);
            query.setProjectId(projectIds);
                }
        }else {
            // 公司人员
            // 查询自己的任务列表
@@ -151,7 +167,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);
                }
            }
        }
@@ -174,6 +190,51 @@
        map.put("taskUnExecutedCount", list.stream().filter(task -> task.getStatus() == 1).count());
        map.put("taskPendingCount", list.stream().filter(task -> task.getStatus() == 3).count());
        map.put("taskFinishCount", list.stream().filter(task -> task.getStatus() == 6).count());
        }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);
                }
            }
            // 超级管理员 查询所有任务列表
            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)
                        .eq(TProjectDept::getStatus, 1)
                        .ne(TProjectDept::getParentId, 0));
                if(!CollectionUtils.isEmpty(tProjectDeptList)){
                    List<String> projectIds = tProjectDeptList.stream().map(TProjectDept::getId).collect(Collectors.toList());
                    query.setProjectId(projectIds);
                }
            }
            // 查询片区
            if(!CollectionUtils.isEmpty(query.getProjectId())){
                wrapper.in(TTask::getProjectId, query.getProjectId());
            }
            List<TTask> list = taskCleanService.list(wrapper);
            if(CollectionUtils.isEmpty(list)){
                return R.ok(map);
            }
            if(!CollectionUtils.isEmpty(taskList)){
                list.addAll(taskList);
            }
            map.put("taskCount", list.size());
            map.put("taskUnExecutedCount", list.stream().filter(task -> task.getStatus() == 1).count());
            map.put("taskPendingCount", list.stream().filter(task -> task.getStatus() == 3).count());
            map.put("taskFinishCount", list.stream().filter(task -> task.getStatus() == 6).count());
        }
        return R.ok(map);
    }
@@ -184,7 +245,9 @@
        Map<String, Object> map = new HashMap<>();
        Integer deptType = tokenService.getLoginUser().getUser().getDeptType();
        String deptId = tokenService.getLoginUser().getUser().getDeptId();
        Long userId = tokenService.getLoginUser().getUserId();
        if(userId != 1L){
        // 查询点位类型
        if(StringUtils.isNotEmpty(query.getLocationTypeId())){
            // 查询点位
@@ -197,9 +260,11 @@
        }
        if (deptType == 1) {
            // 项目部人员
                if(CollectionUtils.isEmpty(query.getProjectId())){
            List<String> projectIds = new ArrayList<>();
            projectIds.add(deptId);
            query.setProjectId(projectIds);
                }
        }else {
            if(CollectionUtils.isEmpty(query.getProjectId())) {
                // 查询所有项目部的任务列表
@@ -225,7 +290,7 @@
        // 查询片区
        if(!CollectionUtils.isEmpty(query.getProjectId())){
            List<TLocation> locationList = locationService.list(Wrappers.lambdaQuery(TLocation.class)
                    .eq(TLocation::getProjectId, query.getProjectId()));
                        .in(TLocation::getProjectId, query.getProjectId()));
            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));
@@ -235,6 +300,51 @@
            }
            return R.ok(map);
        }
        }else {
            // 超级管理员
            // 查询点位类型
            if(StringUtils.isNotEmpty(query.getLocationTypeId())){
                // 查询点位
                List<TLocation> locationList = locationService.list(Wrappers.lambdaQuery(TLocation.class)
                        .in(TLocation::getLocationType, query.getLocationTypeId()));
                // 查询类型
                TLocationType locationType = locationTypeService.getById(query.getLocationTypeId());
                map.put(locationType.getLocationName(), locationList.size());
                return R.ok(map);
            }
            if(CollectionUtils.isEmpty(query.getProjectId())) {
                // 查询所有项目部的任务列表
                List<TProjectDept> tProjectDeptList = projectDeptService.list(Wrappers.lambdaQuery(TProjectDept.class)
                        .eq(TProjectDept::getStatus, 1)
                        .ne(TProjectDept::getParentId, 0));
                if (!CollectionUtils.isEmpty(tProjectDeptList)) {
                    List<String> projectIds = tProjectDeptList.stream().map(TProjectDept::getId).collect(Collectors.toList());
                    List<TLocation> locationList = locationService.list(Wrappers.lambdaQuery(TLocation.class)
                            .in(TLocation::getProjectId, projectIds));
                    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));
                    for (TLocationType locationType : locationTypes) {
                        List<TLocation> locationList1 = locationList.stream().filter(location -> location.getLocationType().equals(locationType.getId())).collect(Collectors.toList());
                        map.put(locationType.getLocationName(), locationList1.size());
                    }
                    return R.ok(map);
                }
            }else {
                // 查询片区
                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());
                List<TLocationType> locationTypes = locationTypeService.list(Wrappers.lambdaQuery(TLocationType.class)
                        .in(TLocationType::getId, locationTypeList));
                for (TLocationType locationType : locationTypes) {
                    List<TLocation> locationList1 = locationList.stream().filter(location -> location.getLocationType().equals(locationType.getId())).collect(Collectors.toList());
                    map.put(locationType.getLocationName(), locationList1.size());
                }
                return R.ok(map);
            }
        }
        return R.ok(map);
    }
@@ -242,10 +352,13 @@
    @PostMapping(value = "/warningSummary")
    public R<Map<String, Object>> warningSummary(@RequestBody DataStatisticsQuery query) {
        Map<String, Object> map = new HashMap<>();
        map.put("timeoutWarn", 0);
        map.put("unqualifiedWarn", 0);
        Integer deptType = tokenService.getLoginUser().getUser().getDeptType();
        String deptId = tokenService.getLoginUser().getUser().getDeptId();
        Long userId = tokenService.getLoginUser().getUserId();
        LambdaQueryWrapper<TTask> wrapper = new LambdaQueryWrapper<>();
        if (userId != 1L) {
        // 查询点位类型
        if(StringUtils.isNotEmpty(query.getLocationTypeId())){
            // 查询点位
@@ -259,9 +372,11 @@
        List<TTask> taskList = new ArrayList<>();
        if (deptType == 1) {
            // 项目部人员
                if(CollectionUtils.isEmpty(query.getProjectId())){
            List<String> projectIds = new ArrayList<>();
            projectIds.add(deptId);
            query.setProjectId(projectIds);
                }
        }else {
            // 公司人员
            // 查询自己的任务列表
@@ -274,7 +389,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);
                }
            }
        }
@@ -306,12 +421,71 @@
        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){
                    if(Objects.nonNull(tTaskDetail.getClearStatus()) && tTaskDetail.getClearStatus() == 2){
                    unqualifiedWarn++;
                }
            }
        }
        map.put("unqualifiedWarn", unqualifiedWarn);
        }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);
                }
            }
            // 超级管理员 查询所有的任务列表
            List<TTask> taskList = taskCleanService.list(Wrappers.lambdaQuery(TTask.class));
            if(CollectionUtils.isEmpty(query.getProjectId())){
                // 查询所有项目部的任务列表
                List<TProjectDept> tProjectDeptList = projectDeptService.list(Wrappers.lambdaQuery(TProjectDept.class)
                        .eq(TProjectDept::getStatus, 1)
                        .ne(TProjectDept::getParentId, 0));
                if(!CollectionUtils.isEmpty(tProjectDeptList)){
                    List<String> projectIds = tProjectDeptList.stream().map(TProjectDept::getId).collect(Collectors.toList());
                    query.setProjectId(projectIds);
                }
            }
            // 查询片区
            if(!CollectionUtils.isEmpty(query.getProjectId())){
                wrapper.in(TTask::getProjectId, query.getProjectId());
            }
            List<TTask> list = taskCleanService.list(wrapper);
            if(CollectionUtils.isEmpty(list)){
                return R.ok(map);
            }
            if(!CollectionUtils.isEmpty(taskList)){
                list.addAll(taskList);
            }
            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(Objects.nonNull(tTaskDetail.getClearStatus()) && tTaskDetail.getClearStatus() == 2){
                        unqualifiedWarn++;
                    }
                }
            }
            map.put("unqualifiedWarn", unqualifiedWarn);
        }
        return R.ok(map);
    }
@@ -321,7 +495,9 @@
        Integer deptType = tokenService.getLoginUser().getUser().getDeptType();
        String deptId = tokenService.getLoginUser().getUser().getDeptId();
        Long userId = tokenService.getLoginUser().getUserId();
        AnalysisUnqualifiedCleaningVO analysisUnqualifiedCleaningVO = new AnalysisUnqualifiedCleaningVO();
        LambdaQueryWrapper<TTask> wrapper = new LambdaQueryWrapper<>();
        if(userId != 1L){
        // 查询点位类型
        if(StringUtils.isNotEmpty(query.getLocationTypeId())){
            // 查询点位
@@ -335,9 +511,11 @@
        List<TTask> taskList = new ArrayList<>();
        if (deptType == 1) {
            // 项目部人员
                if(CollectionUtils.isEmpty(query.getProjectId())){
            List<String> projectIds = new ArrayList<>();
            projectIds.add(deptId);
            query.setProjectId(projectIds);
                }
        }else {
            // 公司人员
            // 查询自己的任务列表
@@ -350,7 +528,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);
                }
            }
        }
@@ -385,8 +563,6 @@
                taskDetailList.add(tTaskDetail);
            }
        }
        AnalysisUnqualifiedCleaningVO analysisUnqualifiedCleaningVO = new AnalysisUnqualifiedCleaningVO();
        analysisUnqualifiedCleaningVO.setTotal(taskDetailList.size());
        // 查询所有的不合格原因
@@ -401,12 +577,83 @@
            analysisUnqualifiedCleaningDetailVOS.add(analysisUnqualifiedCleaningDetailVO);
        }
        analysisUnqualifiedCleaningVO.setAnalysisUnqualifiedCleaningDetailVOS(analysisUnqualifiedCleaningDetailVOS);
        }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);
                }
            }
            // 超级管理员 查询所有的任务列表
            List<TTask> taskList = taskCleanService.list(Wrappers.lambdaQuery(TTask.class));
            if(CollectionUtils.isEmpty(query.getProjectId())){
                // 查询所有项目部的任务列表
                List<TProjectDept> tProjectDeptList = projectDeptService.list(Wrappers.lambdaQuery(TProjectDept.class)
                        .eq(TProjectDept::getStatus, 1)
                        .ne(TProjectDept::getParentId, 0));
                if(!CollectionUtils.isEmpty(tProjectDeptList)){
                    List<String> projectIds = tProjectDeptList.stream().map(TProjectDept::getId).collect(Collectors.toList());
                    query.setProjectId(projectIds);
                }
            }
            // 查询片区
            if(!CollectionUtils.isEmpty(query.getProjectId())){
                wrapper.in(TTask::getProjectId, query.getProjectId());
            }
            List<TTask> list = taskCleanService.list(wrapper);
            if(CollectionUtils.isEmpty(list)){
                return R.ok();
            }
            if(!CollectionUtils.isEmpty(taskList)){
                list.addAll(taskList);
            }
            List<TTask> tasks = list.stream().filter(task -> task.getStatus() != 1 && task.getStatus() != 2).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, 2)
                    .orderByDesc(TTaskDetail::getCreateTime));
            List<TTaskDetail> taskDetailList = new ArrayList<>();
            for (TTask task : list) {
                TTaskDetail tTaskDetail = taskDetails.stream().filter(taskDetail -> taskDetail.getTaskId().equals(task.getId())).findFirst().orElse(null);
                if(Objects.nonNull(tTaskDetail)){
                    taskDetailList.add(tTaskDetail);
                }
            }
            analysisUnqualifiedCleaningVO.setTotal(taskDetailList.size());
            // 查询所有的不合格原因
            List<TDictData> dictDataList = dictDataService.list(Wrappers.lambdaQuery(TDictData.class)
                    .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());
                AnalysisUnqualifiedCleaningDetailVO analysisUnqualifiedCleaningDetailVO = new AnalysisUnqualifiedCleaningDetailVO();
                analysisUnqualifiedCleaningDetailVO.setUnqualifiedName(tDictData.getDataContent());
                analysisUnqualifiedCleaningDetailVO.setCount(tTaskDetails.size());
                analysisUnqualifiedCleaningDetailVOS.add(analysisUnqualifiedCleaningDetailVO);
            }
            analysisUnqualifiedCleaningVO.setAnalysisUnqualifiedCleaningDetailVOS(analysisUnqualifiedCleaningDetailVOS);
        }
        return R.ok(analysisUnqualifiedCleaningVO);
    }
    @ApiOperation(value = "巡检排行榜")
    @PostMapping(value = "/inspectionRankingList")
    public R<List<DataStatisticsRankVO>> inspectionRankingList(@RequestBody DataStatisticsRankQuery query) {
    public R<List<DataStatisticsRankVO>> inspectionRankingList(@Validated @RequestBody DataStatisticsRankQuery query) {
        Integer deptType = tokenService.getLoginUser().getUser().getDeptType();
        String deptId = tokenService.getLoginUser().getUser().getDeptId();
        Long userId = tokenService.getLoginUser().getUserId();
@@ -434,7 +681,8 @@
        }
        wrapper.between(TTask::getCreateTime, startTime, endTime);
        List<DataStatisticsRankVO> result = new ArrayList<>();
        if(userId != 1L){
        // 查询点位类型
        if(StringUtils.isNotEmpty(query.getLocationTypeId())){
            // 查询点位
@@ -452,14 +700,17 @@
        }
        if (deptType == 1) {
            // 项目部人员
                if(CollectionUtils.isEmpty(query.getProjectId())){
            List<String> projectIds = new ArrayList<>();
            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)
@@ -467,7 +718,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){
                    // 查询所有项目部的人员
@@ -515,8 +766,6 @@
                .eq(TTaskDetail::getClearStatus, 1)
                .orderByDesc(TTaskDetail::getCreateTime));
        List<DataStatisticsRankVO> result = new ArrayList<>();
        if(query.getRankType() == 1){
            // 用户排名
            for (SysUser sysUser : sysUsers) {
@@ -576,6 +825,132 @@
                dataStatisticsRankVO.setQualifiedCount(count);
            }
        }
        }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);
                }
            }
            List<SysUser> sysUsers = new ArrayList<>();
            if(query.getRankType() == 1){
                sysUsers = sysUserService.selectListByDeptId(deptId);
            }
            // 超级管理员 查询所有的任务列表
            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)
                        .eq(TProjectDept::getStatus, 1)
                        .ne(TProjectDept::getParentId, 0));
                if(!CollectionUtils.isEmpty(tProjectDeptList)){
                    List<String> projectIds = tProjectDeptList.stream().map(TProjectDept::getId).collect(Collectors.toList());
                    query.setProjectId(projectIds);
                }
                if(query.getRankType() == 1){
                    // 查询所有项目部的人员
                    List<SysUser> sysUserList = sysUserService.selectListByDeptType(1);
                    if(!CollectionUtils.isEmpty(sysUserList)){
                        sysUsers.addAll(sysUserList);
                    }
                }
            }else {
                if(query.getRankType() == 1){
                    // 查询所有片区
                    List<TProjectDept> tProjectDeptList = projectDeptService.list(Wrappers.lambdaQuery(TProjectDept.class)
                            .eq(TProjectDept::getStatus, 1)
                            .in(TProjectDept::getId, query.getProjectId()));
                    if(!CollectionUtils.isEmpty(tProjectDeptList)){
                        List<String> projectIds = tProjectDeptList.stream().map(TProjectDept::getId).distinct().collect(Collectors.toList());
                        List<SysUser> sysUserList = sysUserService.selectListByDeptIds(projectIds);
                        sysUsers.addAll(sysUserList);
                    }
                }
            }
            // 查询片区
            if(!CollectionUtils.isEmpty(query.getProjectId())){
                wrapper.in(TTask::getProjectId, query.getProjectId());
            }
            List<TTask> list = taskCleanService.list(wrapper);
            if(CollectionUtils.isEmpty(list)){
                return R.ok();
            }
            if(!CollectionUtils.isEmpty(taskList)){
                list.addAll(taskList);
            }
            List<TTask> tasks = list.stream().filter(task -> task.getStatus() != 1 && task.getStatus() != 2).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)
                    .orderByDesc(TTaskDetail::getCreateTime));
            if(query.getRankType() == 1){
                // 用户排名
                for (SysUser sysUser : sysUsers) {
                    DataStatisticsRankVO dataStatisticsRankVO = new DataStatisticsRankVO();
                    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();
                    dataStatisticsRankVO.setQualifiedCount(count);
                }
            }else {
                // 超级管理员 查询所有项目部
                List<TProjectDept> projectDepts;
                if (CollectionUtils.isEmpty(query.getProjectId())){
                    projectDepts = projectDeptService.list(Wrappers.lambdaQuery(TProjectDept.class)
                            .eq(TProjectDept::getStatus, 1)
                            .eq(TProjectDept::getParentId, 0));
                }else {
                    List<TProjectDept> projectDeptList = projectDeptService.list(Wrappers.lambdaQuery(TProjectDept.class)
                            .eq(TProjectDept::getStatus, 1)
                            .in(TProjectDept::getId, query.getProjectId()));
                    List<String> parentIds = projectDeptList.stream().map(TProjectDept::getParentId).collect(Collectors.toList());
                    projectDepts = projectDeptService.list(Wrappers.lambdaQuery(TProjectDept.class)
                            .eq(TProjectDept::getStatus, 1)
                            .in(TProjectDept::getId, parentIds));
                }
                if(CollectionUtils.isEmpty(projectDepts)){
                    return R.ok();
                }
                // 查询所有片区
                List<TProjectDept> tProjectDeptList = projectDeptService.list(Wrappers.lambdaQuery(TProjectDept.class)
                        .eq(TProjectDept::getStatus, 1)
                        .ne(TProjectDept::getParentId, 0));
                for (TProjectDept projectDept : projectDepts) {
                    DataStatisticsRankVO dataStatisticsRankVO = new DataStatisticsRankVO();
                    dataStatisticsRankVO.setName(projectDept.getProjectName());
                    List<String> taskIdList;
                    if(!CollectionUtils.isEmpty(tProjectDeptList)){
                        List<String> projectIds = tProjectDeptList.stream().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<>();
                    }
                    dataStatisticsRankVO.setTaskCount(taskIdList.size());
                    if(CollectionUtils.isEmpty(taskIdList)){
                        dataStatisticsRankVO.setQualifiedCount(0L);
                        continue;
                    }
                    long count = taskDetails.stream().filter(taskDetail -> taskIdList.contains(taskDetail.getTaskId())).count();
                    dataStatisticsRankVO.setQualifiedCount(count);
                }
            }
        }
        return R.ok(result);
    }
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/WorkbenchesController.java
@@ -1,26 +1,34 @@
package com.ruoyi.web.controller.api;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.framework.web.service.TokenService;
import com.ruoyi.system.dto.WorkBenchesDTO;
import com.ruoyi.system.model.TDept;
import com.ruoyi.system.model.TProjectDept;
import com.ruoyi.system.model.*;
import com.ruoyi.system.query.DataStatisticsQuery;
import com.ruoyi.system.query.TaskSituationQuery;
import com.ruoyi.system.service.*;
import com.ruoyi.system.vo.system.DeptNoLimitChildVO;
import com.ruoyi.system.vo.system.DeptNoLimitParentVO;
import com.ruoyi.system.vo.system.DeptNoLimitVO;
import com.ruoyi.system.vo.system.WorkBenchesVO;
import com.ruoyi.system.vo.system.*;
import com.ruoyi.web.util.OssUploadUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.util.*;
import java.util.stream.Collectors;
/**
@@ -36,50 +44,27 @@
@RequestMapping("/workbenches")
public class WorkbenchesController {
    @Resource
    private TTaskCleanService taskCleanerService;
    @Resource
    private TTaskDetailService taskDetailService;
    private TTaskCleanService taskCleanService;
    @Resource
    private TLocationTypeService locationTypeService;
    @Resource
    private TLocationService locationService;
    @Resource
    private TProjectDeptService projectDeptService;
    @Resource
    private TTaskDetailService tTaskDetailService;
    @Resource
    private TDeptService deptService;
    @Resource
    private ISysUserService sysUserService;
    @Resource
    private ISysRoleService roleService;
    private TokenService tokenService;
    @Resource
    private TDictDataService dictDataService;
    @Resource
    private TCleanerService cleanerService;
    @Resource
    private TLeaveService leaveService;
    @Resource
    private TLeaveAuditService leaveAuditService;
    @Resource
    private TokenService tokenService;
    @Resource
    private TAppealService appealService;
    @Resource
    private TInspectorService inspectorService;
    @Resource
    private TFeedbackService feedbackService;
    @Resource
    private TProblemEscalationService problemEscalationService;
    @PostMapping("/data")
    @ApiOperation(value = "工作台", tags = "工作台")
    public R<WorkBenchesVO> data(@RequestBody WorkBenchesDTO dto) {
        return R.ok();
    }
    @ApiOperation(value = "查询部门 项目部列表 不分页")
    @GetMapping(value = "/listDepts")
@@ -118,5 +103,983 @@
        }
        return R.ok(res);
    }
    @ApiOperation(value = "查询片区")
    @GetMapping(value = "/queryProject")
    public R<List<TProjectDept>> queryProject() {
        Integer deptType = tokenService.getLoginUser().getUser().getDeptType();
        String deptId = tokenService.getLoginUser().getUser().getDeptId();
        Long userId = tokenService.getLoginUser().getUserId();
        List<TProjectDept> projectDeptList = new ArrayList<>();
        if(userId != 1L){
            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);
            }else {
                projectDeptList = projectDeptService.list(Wrappers.lambdaQuery(TProjectDept.class)
                        .eq(TProjectDept::getStatus,1)
                        .eq(TProjectDept::getParentId,0));
                // 查询片区
                projectDeptList.forEach(projectDept -> {
                    List<TProjectDept> children = projectDeptService.list(Wrappers.lambdaQuery(TProjectDept.class)
                            .eq(TProjectDept::getParentId, projectDept.getId()));
                    projectDept.setChildren(children);
                });
            }
        }else {
            projectDeptList = projectDeptService.list(Wrappers.lambdaQuery(TProjectDept.class)
                    .eq(TProjectDept::getStatus,1)
                    .eq(TProjectDept::getParentId,0));
            // 查询片区
            projectDeptList.forEach(projectDept -> {
                List<TProjectDept> children = projectDeptService.list(Wrappers.lambdaQuery(TProjectDept.class)
                        .eq(TProjectDept::getParentId, projectDept.getId()));
                projectDept.setChildren(children);
            });
        }
        return R.ok(projectDeptList);
    }
    @ApiOperation(value = "通过片区id查询点位类型")
    @GetMapping(value = "/queryLocationByProjectId")
    public R<List<TLocationType>> queryLocationByProjectId() {
        List<TLocationType> locationTypes = locationTypeService.list();
        return R.ok(locationTypes);
    }
    @ApiOperation(value = "顶部数量统计")
    @PostMapping(value = "/topQuantityStatistics")
    public R<Map<String, Object>> topQuantityStatistics(@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<>();
        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())){
                    List<String> projectIds = new ArrayList<>();
                    projectIds.add(deptId);
                    query.setProjectId(projectIds);
                }
            }else {
                // 公司人员
                // 查询自己的任务列表
                taskList = taskCleanService.list(Wrappers.lambdaQuery(TTask.class)
                        .eq(TTask::getPatrolInspector, userId));
                if(CollectionUtils.isEmpty(query.getProjectId())){
                    // 查询所有项目部的任务列表
                    List<TProjectDept> tProjectDeptList = projectDeptService.list(Wrappers.lambdaQuery(TProjectDept.class)
                            .eq(TProjectDept::getStatus, 1)
                            .ne(TProjectDept::getParentId, 0));
                    if(!CollectionUtils.isEmpty(tProjectDeptList)){
                        List<String> projectIds = tProjectDeptList.stream().map(TProjectDept::getId).collect(Collectors.toList());
                        query.setProjectId(projectIds);
                    }
                }
            }
            // 查询片区
            if(!CollectionUtils.isEmpty(query.getProjectId())){
                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);
            }
        }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 = taskCleanService.list(Wrappers.lambdaQuery(TTask.class));
            if(CollectionUtils.isEmpty(query.getProjectId())){
                // 查询所有项目部的任务列表
                List<TProjectDept> tProjectDeptList = projectDeptService.list(Wrappers.lambdaQuery(TProjectDept.class)
                        .eq(TProjectDept::getStatus, 1)
                        .ne(TProjectDept::getParentId, 0));
                if(!CollectionUtils.isEmpty(tProjectDeptList)){
                    List<String> projectIds = tProjectDeptList.stream().map(TProjectDept::getId).collect(Collectors.toList());
                    query.setProjectId(projectIds);
                }
            }
            // 查询片区
            if(!CollectionUtils.isEmpty(query.getProjectId())){
                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);
            }
        }
        // 查询任务相关数据
        // 总计任务数
        map.put("totalTaskNum", list.size());
        // 今日任务数
        map.put("todayTaskNum", list.stream().filter(tTask -> tTask.getImplementTime().toLocalDate().isEqual(LocalDate.now())).count());
        // 待执行任务数
        map.put("waitTaskNum", list.stream().filter(tTask -> tTask.getStatus() == 1).count());
        // 总计员工数
        Integer totalEmployeeNum = sysUserService.selectUserCount(query.getProjectId(),deptType);
        if (deptType != 1) {
            totalEmployeeNum = totalEmployeeNum + 1;
        }
        map.put("totalEmployeeNum", totalEmployeeNum);
        // 今日请假员工数量
        List<TLeave> leaves = leaveService.list(Wrappers.lambdaQuery(TLeave.class)
                .le(TLeave::getStartTime, LocalDate.now())
                .ge(TLeave::getEndTime, LocalDate.now())
                .eq(TLeave::getAuditStatus, 2));
        if(!CollectionUtils.isEmpty(leaves)){
            map.put("todayLeaveNum", leaves.size());
        }else {
            map.put("todayLeaveNum", 0);
        }
        // 总计保洁员数
        long totalCleanerNum = cleanerService.count(Wrappers.lambdaQuery(TCleaner.class)
                .in(TCleaner::getProjectId, query.getProjectId()));
        map.put("totalCleanerNum", totalCleanerNum);
        return R.ok(map);
    }
    @ApiOperation(value = "任务情况")
    @PostMapping(value = "/taskSituation")
    public R<TaskSituationVO> taskSituation(@RequestBody TaskSituationQuery query) {
        Integer deptType = tokenService.getLoginUser().getUser().getDeptType();
        String deptId = tokenService.getLoginUser().getUser().getDeptId();
        Long userId = tokenService.getLoginUser().getUserId();
        TaskSituationVO taskSituationVO = new TaskSituationVO();
        LambdaQueryWrapper<TTask> wrapper = new LambdaQueryWrapper<>();
        if(StringUtils.isEmpty(query.getStartTime()) || StringUtils.isEmpty(query.getEndTime())){
            LocalDate now = LocalDate.now();
            String startTime = now.minusDays(6) + " 00:00:00";
            String endTime = now + " 23:59:59";
            query.setStartTime(startTime);
            query.setEndTime(endTime);
        }else {
            query.setStartTime(query.getStartTime() + " 00:00:00");
            query.setEndTime(query.getEndTime() + " 23:59:59");
        }
        wrapper.between(TTask::getImplementTime, query.getStartTime(), query.getEndTime());
        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);
                }
            }
            List<TTask> taskList = new ArrayList<>();
            if (deptType == 1) {
                // 项目部人员
                if(CollectionUtils.isEmpty(query.getProjectId())){
                    List<String> projectIds = new ArrayList<>();
                    projectIds.add(deptId);
                    query.setProjectId(projectIds);
                }
            }else {
                // 公司人员
                // 查询自己的任务列表
                taskList = taskCleanService.list(Wrappers.lambdaQuery(TTask.class)
                        .eq(TTask::getPatrolInspector, userId)
                        .between(TTask::getImplementTime, query.getStartTime(), query.getEndTime()));
                if(CollectionUtils.isEmpty(query.getProjectId())){
                    // 查询所有项目部的任务列表
                    List<TProjectDept> tProjectDeptList = projectDeptService.list(Wrappers.lambdaQuery(TProjectDept.class)
                            .eq(TProjectDept::getStatus, 1)
                            .ne(TProjectDept::getParentId, 0));
                    if(!CollectionUtils.isEmpty(tProjectDeptList)){
                        List<String> projectIds = tProjectDeptList.stream().map(TProjectDept::getId).collect(Collectors.toList());
                        query.setProjectId(projectIds);
                    }
                }
            }
            // 查询片区
            if(!CollectionUtils.isEmpty(query.getProjectId())){
                wrapper.in(TTask::getProjectId, query.getProjectId());
            }
            list = taskCleanService.list(wrapper);
            if(CollectionUtils.isEmpty(list)){
                return R.ok();
            }
            if(!CollectionUtils.isEmpty(taskList)){
                list.addAll(taskList);
            }
        }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);
                }
            }
            // 超级管理员 查询所有的任务列表
            List<TTask> taskList = taskCleanService.list(Wrappers.lambdaQuery(TTask.class)
                    .between(TTask::getImplementTime, query.getStartTime(), query.getEndTime()));
            if(CollectionUtils.isEmpty(query.getProjectId())){
                // 查询所有项目部的任务列表
                List<TProjectDept> tProjectDeptList = projectDeptService.list(Wrappers.lambdaQuery(TProjectDept.class)
                        .eq(TProjectDept::getStatus, 1)
                        .ne(TProjectDept::getParentId, 0));
                if(!CollectionUtils.isEmpty(tProjectDeptList)){
                    List<String> projectIds = tProjectDeptList.stream().map(TProjectDept::getId).collect(Collectors.toList());
                    query.setProjectId(projectIds);
                }
            }
            // 查询片区
            if(!CollectionUtils.isEmpty(query.getProjectId())){
                wrapper.in(TTask::getProjectId, query.getProjectId());
            }
            list = taskCleanService.list(wrapper);
            if(CollectionUtils.isEmpty(list)){
                return R.ok();
            }
            if(!CollectionUtils.isEmpty(taskList)){
                list.addAll(taskList);
            }
        }
        // 任务总数
        taskSituationVO.setTotalTaskNum(list.size());
        List<TTask> result = list.stream().filter(task -> task.getStatus() == 6).collect(Collectors.toList());
        // 已完成任务数
        taskSituationVO.setCompletedTaskNum(result.size());
        // 匹配任务详情查看合格数量
        List<TTask> tasks = list.stream().filter(task -> task.getStatus() != 1 && task.getStatus() != 2).collect(Collectors.toList());
        if(CollectionUtils.isEmpty(tasks)){
            taskSituationVO.setPassRate(BigDecimal.ZERO);
            return R.ok(taskSituationVO);
        }
        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++;
                }
            }
        }
        taskSituationVO.setPassRate(new BigDecimal(qualifiedWarn).divide(new BigDecimal(tasks.size()), 2, RoundingMode.HALF_UP));
        // 过滤每天的任务
        LocalDateTime start = DateUtils.stringToLocalDateTime(query.getStartTime());
        LocalDateTime end = DateUtils.stringToLocalDateTime(query.getEndTime());
        long daysBetween = ChronoUnit.DAYS.between(start, end);
        List<TaskSituationDayVO> taskSituationDayVOList = new ArrayList<>();
        LocalDateTime localDateTime = DateUtils.stringToLocalDateTime(query.getStartTime());
        String format = null;
        for (long i = 0; i <= daysBetween; i++) {
            TaskSituationDayVO taskSituationDayVO = new TaskSituationDayVO();
            if(i == 0){
                format = localDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
            }else {
                format = DateUtils.stringToLocalDate(format).plusDays(1).format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
            }
            taskSituationDayVO.setTaskTime(format);
            String finalFormat = format;
            List<TTask> tTasks = list.stream().filter(task -> DateUtils.localDateTimeToString(task.getImplementTime()).contains(finalFormat)).collect(Collectors.toList());
            // 任务数
            taskSituationDayVO.setTaskNum(tTasks.size());
            // 完成数
            taskSituationDayVO.setCompletedNum(tTasks.stream().filter(task -> task.getStatus() == 6).collect(Collectors.toList()).size());
            int qualifiedWarnChild = 0;
            for (TTask task : tTasks) {
                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){
                        qualifiedWarnChild++;
                    }
                }
            }
            if(tTasks.isEmpty()){
                taskSituationDayVO.setCompleteRate(BigDecimal.ZERO);
            }else {
                taskSituationDayVO.setCompleteRate(new BigDecimal(qualifiedWarnChild).divide(new BigDecimal(tTasks.size()), 2, RoundingMode.HALF_UP));
            }
            taskSituationDayVOList.add(taskSituationDayVO);
        }
        taskSituationVO.setTaskSituationDayVO(taskSituationDayVOList);
        return R.ok(taskSituationVO);
    }
    @ApiOperation(value = "今日预警")
    @PostMapping(value = "/todayWarning")
    public R<List<TTask>> todayWarning(@RequestBody DataStatisticsQuery query) {
        Integer deptType = tokenService.getLoginUser().getUser().getDeptType();
        String deptId = tokenService.getLoginUser().getUser().getDeptId();
        Long userId = tokenService.getLoginUser().getUserId();
        // 查询所有点位
        List<TLocation> locations = locationService.list();
        LambdaQueryWrapper<TTask> wrapper = new LambdaQueryWrapper<>();
        String startTime = LocalDate.now() + " 00:00:00";
        String endTime = LocalDate.now() + " 23:59:59";
        wrapper.between(TTask::getImplementTime, startTime, endTime);
        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);
                }
            }
            List<TTask> taskList = new ArrayList<>();
            if (deptType == 1) {
                // 项目部人员
                if(CollectionUtils.isEmpty(query.getProjectId())){
                    List<String> projectIds = new ArrayList<>();
                    projectIds.add(deptId);
                    query.setProjectId(projectIds);
                }
            }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)
                            .ne(TProjectDept::getParentId, 0));
                    if(!CollectionUtils.isEmpty(tProjectDeptList)){
                        List<String> projectIds = tProjectDeptList.stream().map(TProjectDept::getId).collect(Collectors.toList());
                        query.setProjectId(projectIds);
                    }
                }
            }
            // 查询片区
            if(!CollectionUtils.isEmpty(query.getProjectId())){
                wrapper.in(TTask::getProjectId, query.getProjectId());
            }
            List<TTask> list = taskCleanService.list(wrapper);
            if(CollectionUtils.isEmpty(list)){
                return R.ok();
            }
            if(!CollectionUtils.isEmpty(taskList)){
                list.addAll(taskList);
            }
            List<TTask> result = list.stream().filter(task -> task.getStatus() == 2).collect(Collectors.toList());
            List<TTask> tasks = list.stream().filter(task -> task.getStatus() != 1 && task.getStatus() != 2).collect(Collectors.toList());
            if(CollectionUtils.isEmpty(tasks)){
                for (TTask task : result) {
                    TLocation tLocation = locations.stream().filter(location -> location.getId().equals(task.getLocationId())).findFirst().orElse(null);
                    if(Objects.nonNull(tLocation)) {
                        task.setLocationName(tLocation.getLocationName());
                    }
                }
                return R.ok(result);
            }
            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));
            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() == 2){
                        result.add(task);
                    }
                }
            }
            for (TTask task : result) {
                TLocation tLocation = locations.stream().filter(location -> location.getId().equals(task.getLocationId())).findFirst().orElse(null);
                if(Objects.nonNull(tLocation)) {
                    task.setLocationName(tLocation.getLocationName());
                }
            }
            return R.ok(result);
        }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);
                }
            }
            // 超级管理员 查询所有的任务列表
            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)
                        .eq(TProjectDept::getStatus, 1)
                        .ne(TProjectDept::getParentId, 0));
                if(!CollectionUtils.isEmpty(tProjectDeptList)){
                    List<String> projectIds = tProjectDeptList.stream().map(TProjectDept::getId).collect(Collectors.toList());
                    query.setProjectId(projectIds);
                }
            }
            // 查询片区
            if(!CollectionUtils.isEmpty(query.getProjectId())){
                wrapper.in(TTask::getProjectId, query.getProjectId());
            }
            List<TTask> list = taskCleanService.list(wrapper);
            if(CollectionUtils.isEmpty(list)){
                return R.ok();
            }
            if(!CollectionUtils.isEmpty(taskList)){
                list.addAll(taskList);
            }
            List<TTask> result = list.stream().filter(task -> task.getStatus() == 2).collect(Collectors.toList());
            List<TTask> tasks = list.stream().filter(task -> task.getStatus() != 1 && task.getStatus() != 2).collect(Collectors.toList());
            if(CollectionUtils.isEmpty(tasks)){
                for (TTask task : result) {
                    TLocation tLocation = locations.stream().filter(location -> location.getId().equals(task.getLocationId())).findFirst().orElse(null);
                    if(Objects.nonNull(tLocation)) {
                        task.setLocationName(tLocation.getLocationName());
                    }
                }
                return R.ok(result);
            }
            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));
            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() == 2){
                        result.add(task);
                    }
                }
            }
            for (TTask task : result) {
                TLocation tLocation = locations.stream().filter(location -> location.getId().equals(task.getLocationId())).findFirst().orElse(null);
                if(Objects.nonNull(tLocation)) {
                    task.setLocationName(tLocation.getLocationName());
                }
            }
            return R.ok(result);
        }
    }
    @ApiOperation(value = "待审核任务")
    @PostMapping(value = "/pendingAuditTasks")
    public R<List<TTask>> pendingAuditTasks(@RequestBody DataStatisticsQuery query) {
        Integer deptType = tokenService.getLoginUser().getUser().getDeptType();
        String deptId = tokenService.getLoginUser().getUser().getDeptId();
        Long userId = tokenService.getLoginUser().getUserId();
        // 查询所有点位
        List<TLocation> locations = locationService.list();
        LambdaQueryWrapper<TTask> wrapper = new LambdaQueryWrapper<>();
        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);
                }
            }
            List<TTask> taskList = new ArrayList<>();
            if (deptType == 1) {
                // 项目部人员
                if(CollectionUtils.isEmpty(query.getProjectId())){
                    List<String> projectIds = new ArrayList<>();
                    projectIds.add(deptId);
                    query.setProjectId(projectIds);
                }
            }else {
                // 公司人员
                // 查询自己的任务列表
                taskList = taskCleanService.list(Wrappers.lambdaQuery(TTask.class)
                        .eq(TTask::getPatrolInspector, userId));
                if(CollectionUtils.isEmpty(query.getProjectId())){
                    // 查询所有项目部的任务列表
                    List<TProjectDept> tProjectDeptList = projectDeptService.list(Wrappers.lambdaQuery(TProjectDept.class)
                            .eq(TProjectDept::getStatus, 1)
                            .ne(TProjectDept::getParentId, 0));
                    if(!CollectionUtils.isEmpty(tProjectDeptList)){
                        List<String> projectIds = tProjectDeptList.stream().map(TProjectDept::getId).collect(Collectors.toList());
                        query.setProjectId(projectIds);
                    }
                }
            }
            // 查询片区
            if(!CollectionUtils.isEmpty(query.getProjectId())){
                wrapper.in(TTask::getProjectId, query.getProjectId());
            }
            List<TTask> list = taskCleanService.list(wrapper);
            if(CollectionUtils.isEmpty(list)){
                return R.ok();
            }
            if(!CollectionUtils.isEmpty(taskList)){
                list.addAll(taskList);
            }
            List<TTask> result = list.stream().filter(task -> task.getStatus() == 3).collect(Collectors.toList());
            for (TTask task : result) {
                TLocation tLocation = locations.stream().filter(location -> location.getId().equals(task.getLocationId())).findFirst().orElse(null);
                if(Objects.nonNull(tLocation)) {
                    task.setLocationName(tLocation.getLocationName());
                }
            }
            return R.ok(result);
        }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);
                }
            }
            // 超级管理员 查询所有的任务列表
            List<TTask> taskList = taskCleanService.list(Wrappers.lambdaQuery(TTask.class));
            if(CollectionUtils.isEmpty(query.getProjectId())){
                // 查询所有项目部的任务列表
                List<TProjectDept> tProjectDeptList = projectDeptService.list(Wrappers.lambdaQuery(TProjectDept.class)
                        .eq(TProjectDept::getStatus, 1)
                        .ne(TProjectDept::getParentId, 0));
                if(!CollectionUtils.isEmpty(tProjectDeptList)){
                    List<String> projectIds = tProjectDeptList.stream().map(TProjectDept::getId).collect(Collectors.toList());
                    query.setProjectId(projectIds);
                }
            }
            // 查询片区
            if(!CollectionUtils.isEmpty(query.getProjectId())){
                wrapper.in(TTask::getProjectId, query.getProjectId());
            }
            List<TTask> list = taskCleanService.list(wrapper);
            if(CollectionUtils.isEmpty(list)){
                return R.ok();
            }
            if(!CollectionUtils.isEmpty(taskList)){
                list.addAll(taskList);
            }
            List<TTask> result = list.stream().filter(task -> task.getStatus() == 3).collect(Collectors.toList());
            for (TTask task : result) {
                TLocation tLocation = locations.stream().filter(location -> location.getId().equals(task.getLocationId())).findFirst().orElse(null);
                if(Objects.nonNull(tLocation)) {
                    task.setLocationName(tLocation.getLocationName());
                }
            }
            return R.ok(result);
        }
    }
    @ApiOperation(value = "保洁质量汇总")
    @PostMapping(value = "/cleaningQualitySummary")
    public R<Map<String, Object>> cleaningQualitySummary(@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<>();
        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);
                }
            }
            List<TTask> taskList = new ArrayList<>();
            if (deptType == 1) {
                // 项目部人员
                if(CollectionUtils.isEmpty(query.getProjectId())){
                    List<String> projectIds = new ArrayList<>();
                    projectIds.add(deptId);
                    query.setProjectId(projectIds);
                }
            }else {
                // 公司人员
                // 查询自己的任务列表
                taskList = taskCleanService.list(Wrappers.lambdaQuery(TTask.class)
                        .eq(TTask::getPatrolInspector, userId));
                if(CollectionUtils.isEmpty(query.getProjectId())){
                    // 查询所有项目部的任务列表
                    List<TProjectDept> tProjectDeptList = projectDeptService.list(Wrappers.lambdaQuery(TProjectDept.class)
                            .eq(TProjectDept::getStatus, 1)
                            .ne(TProjectDept::getParentId, 0));
                    if(!CollectionUtils.isEmpty(tProjectDeptList)){
                        List<String> projectIds = tProjectDeptList.stream().map(TProjectDept::getId).collect(Collectors.toList());
                        query.setProjectId(projectIds);
                    }
                }
            }
            // 查询片区
            if(!CollectionUtils.isEmpty(query.getProjectId())){
                wrapper.in(TTask::getProjectId, query.getProjectId());
            }
            List<TTask> list = taskCleanService.list(wrapper);
            if(CollectionUtils.isEmpty(list)){
                return R.ok(map);
            }
            if(!CollectionUtils.isEmpty(taskList)){
                list.addAll(taskList);
            }
            List<TTask> tasks = list.stream().filter(task -> task.getStatus() != 1 && task.getStatus() != 2).collect(Collectors.toList());
            if(CollectionUtils.isEmpty(tasks)){
                map.put("unqualifiedWarn", 0);
                map.put("qualifiedWarn", 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;
            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())){
                        if(tTaskDetail.getClearStatus() == 2){
                            unqualifiedWarn++;
                        }else {
                            qualifiedWarn++;
                        }
                    }else {
                        unqualifiedWarn++;
                    }
                }
            }
            map.put("qualifiedWarn", qualifiedWarn);
            map.put("unqualifiedWarn", unqualifiedWarn);
        }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);
                }
            }
            // 超级管理员 查询所有的任务列表
            List<TTask> taskList = taskCleanService.list(Wrappers.lambdaQuery(TTask.class));
            if(CollectionUtils.isEmpty(query.getProjectId())){
                // 查询所有项目部的任务列表
                List<TProjectDept> tProjectDeptList = projectDeptService.list(Wrappers.lambdaQuery(TProjectDept.class)
                        .eq(TProjectDept::getStatus, 1)
                        .ne(TProjectDept::getParentId, 0));
                if(!CollectionUtils.isEmpty(tProjectDeptList)){
                    List<String> projectIds = tProjectDeptList.stream().map(TProjectDept::getId).collect(Collectors.toList());
                    query.setProjectId(projectIds);
                }
            }
            // 查询片区
            if(!CollectionUtils.isEmpty(query.getProjectId())){
                wrapper.in(TTask::getProjectId, query.getProjectId());
            }
            List<TTask> list = taskCleanService.list(wrapper);
            if(CollectionUtils.isEmpty(list)){
                return R.ok(map);
            }
            if(!CollectionUtils.isEmpty(taskList)){
                list.addAll(taskList);
            }
            List<TTask> tasks = list.stream().filter(task -> task.getStatus() != 1 && task.getStatus() != 2).collect(Collectors.toList());
            if(CollectionUtils.isEmpty(tasks)){
                map.put("unqualifiedWarn", 0);
                map.put("qualifiedWarn", 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;
            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())){
                        if(tTaskDetail.getClearStatus() == 2){
                            unqualifiedWarn++;
                        }else {
                            qualifiedWarn++;
                        }
                    }else {
                        unqualifiedWarn++;
                    }
                }
            }
            map.put("unqualifiedWarn", unqualifiedWarn);
            map.put("qualifiedWarn", qualifiedWarn);
        }
        return R.ok(map);
    }
    @ApiOperation(value = "清洁不合格分析")
    @PostMapping(value = "/analysisUnqualifiedCleaning")
    public R<AnalysisUnqualifiedCleaningVO> analysisUnqualifiedCleaning(@RequestBody DataStatisticsQuery query) {
        Integer deptType = tokenService.getLoginUser().getUser().getDeptType();
        String deptId = tokenService.getLoginUser().getUser().getDeptId();
        Long userId = tokenService.getLoginUser().getUserId();
        AnalysisUnqualifiedCleaningVO analysisUnqualifiedCleaningVO = new AnalysisUnqualifiedCleaningVO();
        LambdaQueryWrapper<TTask> wrapper = new LambdaQueryWrapper<>();
        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);
                }
            }
            List<TTask> taskList = new ArrayList<>();
            if (deptType == 1) {
                // 项目部人员
                if(CollectionUtils.isEmpty(query.getProjectId())){
                    List<String> projectIds = new ArrayList<>();
                    projectIds.add(deptId);
                    query.setProjectId(projectIds);
                }
            }else {
                // 公司人员
                // 查询自己的任务列表
                taskList = taskCleanService.list(Wrappers.lambdaQuery(TTask.class)
                        .eq(TTask::getPatrolInspector, userId));
                if(CollectionUtils.isEmpty(query.getProjectId())){
                    // 查询所有项目部的任务列表
                    List<TProjectDept> tProjectDeptList = projectDeptService.list(Wrappers.lambdaQuery(TProjectDept.class)
                            .eq(TProjectDept::getStatus, 1)
                            .ne(TProjectDept::getParentId, 0));
                    if(!CollectionUtils.isEmpty(tProjectDeptList)){
                        List<String> projectIds = tProjectDeptList.stream().map(TProjectDept::getId).collect(Collectors.toList());
                        query.setProjectId(projectIds);
                    }
                }
            }
            // 查询片区
            if(!CollectionUtils.isEmpty(query.getProjectId())){
                wrapper.in(TTask::getProjectId, query.getProjectId());
            }
            List<TTask> list = taskCleanService.list(wrapper);
            if(CollectionUtils.isEmpty(list)){
                return R.ok();
            }
            if(!CollectionUtils.isEmpty(taskList)){
                list.addAll(taskList);
            }
            List<TTask> tasks = list.stream().filter(task -> task.getStatus() != 1 && task.getStatus() != 2).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, 2)
                    .orderByDesc(TTaskDetail::getCreateTime));
            List<TTaskDetail> taskDetailList = new ArrayList<>();
            for (TTask task : list) {
                TTaskDetail tTaskDetail = taskDetails.stream().filter(taskDetail -> taskDetail.getTaskId().equals(task.getId())).findFirst().orElse(null);
                if(Objects.nonNull(tTaskDetail)){
                    taskDetailList.add(tTaskDetail);
                }
            }
            analysisUnqualifiedCleaningVO.setTotal(taskDetailList.size());
            // 查询所有的不合格原因
            List<TDictData> dictDataList = dictDataService.list(Wrappers.lambdaQuery(TDictData.class)
                    .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());
                AnalysisUnqualifiedCleaningDetailVO analysisUnqualifiedCleaningDetailVO = new AnalysisUnqualifiedCleaningDetailVO();
                analysisUnqualifiedCleaningDetailVO.setUnqualifiedName(tDictData.getDataContent());
                analysisUnqualifiedCleaningDetailVO.setCount(tTaskDetails.size());
                analysisUnqualifiedCleaningDetailVOS.add(analysisUnqualifiedCleaningDetailVO);
            }
            analysisUnqualifiedCleaningVO.setAnalysisUnqualifiedCleaningDetailVOS(analysisUnqualifiedCleaningDetailVOS);
        }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);
                }
            }
            // 超级管理员 查询所有的任务列表
            List<TTask> taskList = taskCleanService.list(Wrappers.lambdaQuery(TTask.class));
            if(CollectionUtils.isEmpty(query.getProjectId())){
                // 查询所有项目部的任务列表
                List<TProjectDept> tProjectDeptList = projectDeptService.list(Wrappers.lambdaQuery(TProjectDept.class)
                        .eq(TProjectDept::getStatus, 1)
                        .ne(TProjectDept::getParentId, 0));
                if(!CollectionUtils.isEmpty(tProjectDeptList)){
                    List<String> projectIds = tProjectDeptList.stream().map(TProjectDept::getId).collect(Collectors.toList());
                    query.setProjectId(projectIds);
                }
            }
            // 查询片区
            if(!CollectionUtils.isEmpty(query.getProjectId())){
                wrapper.in(TTask::getProjectId, query.getProjectId());
            }
            List<TTask> list = taskCleanService.list(wrapper);
            if(CollectionUtils.isEmpty(list)){
                return R.ok();
            }
            if(!CollectionUtils.isEmpty(taskList)){
                list.addAll(taskList);
            }
            List<TTask> tasks = list.stream().filter(task -> task.getStatus() != 1 && task.getStatus() != 2).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, 2)
                    .orderByDesc(TTaskDetail::getCreateTime));
            List<TTaskDetail> taskDetailList = new ArrayList<>();
            for (TTask task : list) {
                TTaskDetail tTaskDetail = taskDetails.stream().filter(taskDetail -> taskDetail.getTaskId().equals(task.getId())).findFirst().orElse(null);
                if(Objects.nonNull(tTaskDetail)){
                    taskDetailList.add(tTaskDetail);
                }
            }
            analysisUnqualifiedCleaningVO.setTotal(taskDetailList.size());
            // 查询所有的不合格原因
            List<TDictData> dictDataList = dictDataService.list(Wrappers.lambdaQuery(TDictData.class)
                    .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());
                AnalysisUnqualifiedCleaningDetailVO analysisUnqualifiedCleaningDetailVO = new AnalysisUnqualifiedCleaningDetailVO();
                analysisUnqualifiedCleaningDetailVO.setUnqualifiedName(tDictData.getDataContent());
                analysisUnqualifiedCleaningDetailVO.setCount(tTaskDetails.size());
                analysisUnqualifiedCleaningDetailVOS.add(analysisUnqualifiedCleaningDetailVO);
            }
            analysisUnqualifiedCleaningVO.setAnalysisUnqualifiedCleaningDetailVOS(analysisUnqualifiedCleaningDetailVOS);
        }
        return R.ok(analysisUnqualifiedCleaningVO);
    }
}
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java
@@ -40,8 +40,8 @@
    //@Excel(name = "登录名称")
    @ApiModelProperty(value = "登录名称")
    private String userName;
    @TableField("dept_type")
    @ApiModelProperty(value = "部门类型 1项目部 2部门")
    @TableField("deptType")
    private Integer deptType;
    @TableField("code")
    @ApiModelProperty(value = "编号")
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java
@@ -206,4 +206,5 @@
     */
    List<SysUser> selectListByDeptIds(@Param("projectIds")List<String> projectIds);
    Integer selectUserCount(@Param("projectIds")List<String> projectIds, @Param("deptType")Integer deptType);
}
ruoyi-system/src/main/java/com/ruoyi/system/model/TProjectDept.java
@@ -45,7 +45,7 @@
    @TableField("status")
    private Integer status;
//    @TableField(exist = false)
//    private List<TProjectDept> children;
    @TableField(exist = false)
    private List<TProjectDept> children;
}
ruoyi-system/src/main/java/com/ruoyi/system/model/TTask.java
@@ -80,4 +80,7 @@
    @ApiModelProperty(value = "模板id 日常任务存储")
    @TableField("user_id")
    private Long userId;
    @ApiModelProperty(value = "点位名称")
    @TableField(exist = false)
    private String locationName;
}
ruoyi-system/src/main/java/com/ruoyi/system/query/DataStatisticsRankQuery.java
@@ -4,6 +4,7 @@
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.List;
@@ -17,12 +18,15 @@
    @ApiModelProperty(value = "点位类型id")
    private String locationTypeId;
    @NotNull(message = "排名类型不能为空")
    @ApiModelProperty(value = "排名类型 1=人员排名 2=项目部排名")
    private Integer rankType;
    @NotNull(message = "时间类型不能为空")
    @ApiModelProperty(value = "时间类型 1=月排行 2=季度排行 3=年度排行")
    private Integer timeType;
    @NotNull(message = "排序类型不能为空")
    @ApiModelProperty(value = "排序类型 1=升序 2=降序")
    private Integer sortType;
ruoyi-system/src/main/java/com/ruoyi/system/query/TaskSituationQuery.java
New file
@@ -0,0 +1,26 @@
package com.ruoyi.system.query;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
@Data
@ApiModel(value = "任务情况查询参数Query")
public class TaskSituationQuery implements Serializable {
    @ApiModelProperty(value = "片区id")
    private List<String> projectId;
    @ApiModelProperty(value = "点位类型id")
    private String locationTypeId;
    @ApiModelProperty(value = "开始时间 yyyy-MM-dd")
    private String startTime;
    @ApiModelProperty(value = "结束时间")
    private String endTime;
}
ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java
@@ -291,4 +291,12 @@
    PageInfo<TaskFinishListVO> pageListReport(DataReportQuery dataReportQuery);
    /**
     * 查询部门类型下的人员数量
     * @param projectId
     * @param deptType
     * @return
     */
    Integer selectUserCount(List<String> projectId, Integer deptType);
}
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
@@ -759,6 +759,11 @@
    }
    @Override
    public Integer selectUserCount(List<String> projectId, Integer deptType) {
        return userMapper.selectUserCount(projectId,deptType);
    }
    @Override
    public SysUser selectByPhone(String phonenumber) {
        return userMapper.selectByPhone(phonenumber);
    }
ruoyi-system/src/main/java/com/ruoyi/system/vo/system/TaskSituationDayVO.java
New file
@@ -0,0 +1,26 @@
package com.ruoyi.system.vo.system;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
@Data
@ApiModel(value = "任务情况每日VO")
public class TaskSituationDayVO implements Serializable {
    @ApiModelProperty(value = "时间")
    private String taskTime;
    @ApiModelProperty(value = "任务数")
    private Integer taskNum;
    @ApiModelProperty(value = "完成数")
    private Integer completedNum;
    @ApiModelProperty(value = "完成率")
    private BigDecimal completeRate;
}
ruoyi-system/src/main/java/com/ruoyi/system/vo/system/TaskSituationVO.java
New file
@@ -0,0 +1,27 @@
package com.ruoyi.system.vo.system;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List;
@Data
@ApiModel(value = "任务情况VO")
public class TaskSituationVO implements Serializable {
    @ApiModelProperty(value = "总计任务数")
    private Integer totalTaskNum;
    @ApiModelProperty(value = "已完成任务数")
    private Integer completedTaskNum;
    @ApiModelProperty(value = "合格率")
    private BigDecimal passRate;
    @ApiModelProperty(value = "任务情况每日VO")
    private List<TaskSituationDayVO> taskSituationDayVO;
}
ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
@@ -28,6 +28,7 @@
        <result property="businessDeptId"       column="business_dept_id"       />
        <result property="roleName"       column="role_name"       />
        <result property="code"       column="code"       />
        <result property="deptType"       column="deptType"       />
        <association property="dept"    javaType="SysDept"         resultMap="deptResult" />
        <collection  property="roles"   javaType="java.util.List"  resultMap="RoleResult" />
    </resultMap>
@@ -53,7 +54,7 @@
    
    <sql id="selectUserVo">
        select u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, u.business_dept_id,
        d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.status as dept_status,
        d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.status as dept_status,u.deptType as deptType,
        r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.status as role_status,u.code
        from sys_user u
            left join sys_dept d on u.dept_id = d.dept_id
@@ -308,7 +309,19 @@
               u.login_date AS loginDate, u.create_by AS createBy, u.create_time AS createTime, u.remark AS remark,u.templateId
        from sys_user u where u.status = 0 and u.del_flag = 0
        <if test="projectIds != null and projectIds.size() > 0">
            and u.dept_id in
            and u.deptId in
            <foreach item="item" collection="projectIds" open="(" separator="," close=")">
                #{item}
            </foreach>
        </if>
    </select>
    <select id="selectUserCount" resultType="java.lang.Integer">
        select count(1) from sys_user where status = 0 and del_flag = 0
        <if test="deptType != null">
            and deptType = #{deptType}
        </if>
        <if test="projectIds != null and projectIds.size() > 0">
            and deptId in
            <foreach item="item" collection="projectIds" open="(" separator="," close=")">
                #{item}
            </foreach>