xuhy
2025-07-01 dfc3e4b2dd3b648032d0a57688766bf9404cdda3
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/WorkbenchesController.java
@@ -1,26 +1,27 @@
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.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.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.time.LocalDate;
import java.util.*;
import java.util.stream.Collectors;
/**
@@ -36,43 +37,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;
    @Resource
    private TDictDataService dictDataService;
    @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;
    private TDictDataService dictDataService;
    @PostMapping("/data")
    @ApiOperation(value = "工作台", tags = "工作台")
@@ -118,5 +103,764 @@
        }
        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(@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));
        return R.ok(locationTypes);
    }
    @ApiOperation(value = "任务情况")
    @PostMapping(value = "/taskSituation")
    public R<List<TTask>> taskSituation(@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) {
                // 项目部人员
                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());
                        wrapper.in(TTask::getProjectId, 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());
                    wrapper.in(TTask::getProjectId, 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 = "/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) {
                // 项目部人员
                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());
                        wrapper.in(TTask::getProjectId, 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(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));
            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());
                    wrapper.in(TTask::getProjectId, 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(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) {
                // 项目部人员
                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());
                        wrapper.in(TTask::getProjectId, 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());
                    wrapper.in(TTask::getProjectId, 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<>();
        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())){
                // 查询点位
                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) {
                // 项目部人员
                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());
                        wrapper.in(TTask::getProjectId, 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(tTaskDetail.getClearStatus() == 2){
                        unqualifiedWarn++;
                    }else {
                        qualifiedWarn++;
                    }
                }
            }
            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());
                    wrapper.in(TTask::getProjectId, 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(tTaskDetail.getClearStatus() == 2){
                        unqualifiedWarn++;
                    }else {
                        qualifiedWarn++;
                    }
                }
            }
            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) {
                // 项目部人员
                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());
                        wrapper.in(TTask::getProjectId, 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());
                    wrapper.in(TTask::getProjectId, 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);
    }
}