From b2e3d6532dbbb3929e01a598dcef7eb07f39b826 Mon Sep 17 00:00:00 2001
From: 无关风月 <443237572@qq.com>
Date: 星期五, 11 七月 2025 09:30:27 +0800
Subject: [PATCH] 保洁巡检本周代码

---
 ruoyi-common/src/main/java/com/ruoyi/common/utils/MultipartFileUtil.java             |    4 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/WorkbenchesController.java    |    4 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/ReportController.java         |   49 ++++++++-
 ruoyi-system/src/main/java/com/ruoyi/system/vo/system/TaskDetailVO.java              |    8 +
 ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TTaskDetailController.java   |    1 
 ruoyi-system/src/main/resources/mapper/system/TLocationMapper.xml                    |    2 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TLocationController.java      |    3 
 ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TIndexController.java        |    5 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TTaskController.java          |   31 +++++-
 ruoyi-system/src/main/resources/mapper/system/TTaskMapper.xml                        |   25 +++-
 ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TUserController.java         |   90 ++++++++++++++---
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java     |    5 
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TAppealServiceImpl.java     |    8 +
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TTaskCleanServiceImpl.java  |    8 +
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/DataStatisticsController.java |    4 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/task/TaskUtil.java                |    4 
 ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java          |    7 +
 ruoyi-common/src/main/java/com/ruoyi/common/utils/Arith.java                         |    4 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TAppealController.java        |   30 +++++
 ruoyi-system/src/main/java/com/ruoyi/system/model/TTaskDetail.java                   |    3 
 20 files changed, 234 insertions(+), 61 deletions(-)

diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/DataStatisticsController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/DataStatisticsController.java
index 2585930..f57fade 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/DataStatisticsController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/DataStatisticsController.java
@@ -1195,7 +1195,7 @@
                 }
             }
         }
-        map.put("qualifiedRate", new BigDecimal(qualifiedWarn).divide(new BigDecimal(tasks.size()), 2, RoundingMode.HALF_UP));
+        map.put("qualifiedRate", new BigDecimal(qualifiedWarn).divide(new BigDecimal(tasks.size()), 2, RoundingMode.HALF_DOWN));
 
         return R.ok(map);
     }
@@ -1330,7 +1330,7 @@
                 }
             }
         }
-        locationStatisticsVO.setPassRate(new BigDecimal(qualifiedWarn).divide(new BigDecimal(tasks.size()), 2, RoundingMode.HALF_UP));
+        locationStatisticsVO.setPassRate(new BigDecimal(qualifiedWarn).divide(new BigDecimal(tasks.size()), 2, RoundingMode.HALF_DOWN));
         return R.ok(locationStatisticsVO);
     }
 
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/ReportController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/ReportController.java
index b0570e3..f6d0d24 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/ReportController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/ReportController.java
@@ -206,7 +206,7 @@
                                 break;
                         }
                     }
-                    LocalDateTime localDateTime = tTemplate.getCreateTime().plusDays(temp);
+                    LocalDateTime localDateTime = tTemplate.getCreateTime().plusDays(temp-1);
                     stringBuilder.append(localDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
                     record.setTemplateDate(stringBuilder.toString());
                 }
@@ -429,7 +429,10 @@
                 for (LocationTypeListByProjectVO locationTypeListByProjectVO : locationTypeListByProjectVOS) {
                     LocationTypeListByProjectVO temp = new LocationTypeListByProjectVO();
                     BeanUtils.copyProperties(locationTypeListByProjectVO, temp);
-                    List<String> locationIds = locations.stream().filter(e -> e.getLocationType().equals(locationTypeListByProjectVO.getId())).map(TLocation::getId).collect(Collectors.toList());
+                    List<String> locationIds = locations.stream().filter(e ->
+                            e.getProjectId().equals(projectDeptDetailsChildVO.getProjectId())&&
+                            e.getLocationType().equals(locationTypeListByProjectVO.getId()))
+                            .map(TLocation::getId).collect(Collectors.toList());
                     if (locationIds.isEmpty()) {
                         locationTypeListByProjectVO.setLocationNum(0);
                     } else {
@@ -707,8 +710,8 @@
         List<SysUser> sysUsers = sysUserService.selectAllList();
         LambdaQueryWrapper<TLeave> tLeaveLambdaQueryWrapper = new LambdaQueryWrapper<>();
         if (StringUtils.hasLength(query.getStartTime())){
-            tLeaveLambdaQueryWrapper.ge(TLeave::getCreateTime, query.getStartTime());
-            tLeaveLambdaQueryWrapper.le(TLeave::getCreateTime, query.getEndTime());
+            tLeaveLambdaQueryWrapper.ge(TLeave::getCreateTime, query.getStartTime()+" :00:00:00");
+            tLeaveLambdaQueryWrapper.le(TLeave::getCreateTime, query.getEndTime()+" :23:59:59");
         }
         tLeaveLambdaQueryWrapper.eq(TLeave::getAuditStatus,2);
         List<TLeave> leaves = leaveService.list(tLeaveLambdaQueryWrapper);
@@ -748,15 +751,15 @@
         List<PatrolInspectorVO> res = new ArrayList<>();
         LambdaQueryWrapper<TTask> tTaskLambdaQueryWrapper = new LambdaQueryWrapper<>();
         if (StringUtils.hasLength(query.getStartTime())){
-            tTaskLambdaQueryWrapper.ge(TTask::getCreateTime, query.getStartTime());
-            tTaskLambdaQueryWrapper.le(TTask::getCreateTime, query.getEndTime());
+            tTaskLambdaQueryWrapper.ge(TTask::getCreateTime, query.getStartTime()+" :00:00:00");
+            tTaskLambdaQueryWrapper.le(TTask::getCreateTime, query.getEndTime()+" :23:59:59");
         }
         if(query.getPatrolInspectorIds()!=null){
             tTaskLambdaQueryWrapper.in(TTask::getPatrolInspector, query.getPatrolInspectorIds());
             sysUsers = sysUsers.stream().filter(sysUser -> query.getPatrolInspectorIds().contains(sysUser.getUserId())).collect(Collectors.toList());
         }
         List<TTask> tasks = taskCleanerService.list(tTaskLambdaQueryWrapper);
-
+        sysUsers = sysUsers.stream().filter(e -> e.getUserId() != 1).collect(Collectors.toList());
         for (SysUser sysUser : sysUsers) {
 
             PatrolInspectorVO patrolInspectorVO = new PatrolInspectorVO();
@@ -779,10 +782,22 @@
             }
             // 查询巡检员任务ids
             List<String> taskIds = tasks.stream().filter(e->e.getPatrolInspector().equals(sysUser.getUserId()+"")).map(TTask::getId).collect(Collectors.toList());
+            if (taskIds.isEmpty()){
+                taskIds.add("-1");
+            }
+            // 完成的任务
+            List<String> taskIdsFinish = tasks.stream().filter(e->
+                    (e.getStatus()==5 || e.getStatus()==6)
+                    &&
+                    e.getPatrolInspector().equals(sysUser.getUserId()+"")).map(TTask::getId).collect(Collectors.toList());
+
+            if (taskIdsFinish.isEmpty()){
+                taskIdsFinish.add("-1");
+            }
             List<TTaskDetail> list = taskDetailService.lambdaQuery()
                     .eq(TTaskDetail::getAuditStatus, 1)
                     .isNotNull(TTaskDetail::getClearStatus).orderByDesc(BaseModel::getCreateTime)
-                    .in(!taskIds.isEmpty(), TTaskDetail::getTaskId,taskIds).groupBy(TTaskDetail::getTaskId).list();
+                    .in(!taskIds.isEmpty(), TTaskDetail::getTaskId,taskIdsFinish).groupBy(TTaskDetail::getTaskId).list();
             // 查询clearStatus为1的数量
             List<TTaskDetail> clearStatus1 = list.stream().filter(e -> e.getClearStatus().equals(1)).collect(Collectors.toList());
             List<TTaskDetail> clearStatus2 = list.stream().filter(e -> e.getClearStatus().equals(2)).collect(Collectors.toList());
@@ -873,6 +888,7 @@
             sysUsers = sysUsers.stream().filter(sysUser -> query.getPatrolInspectorIds().contains(sysUser.getUserId())).collect(Collectors.toList());
         }
         List<TTask> tasks = taskCleanerService.list(tTaskLambdaQueryWrapper);
+        sysUsers = sysUsers.stream().filter(e -> e.getUserId() != 1).collect(Collectors.toList());
 
         for (SysUser sysUser : sysUsers) {
 
@@ -896,10 +912,22 @@
             }
             // 查询巡检员任务ids
             List<String> taskIds = tasks.stream().filter(e->e.getPatrolInspector().equals(sysUser.getUserId()+"")).map(TTask::getId).collect(Collectors.toList());
+            if (taskIds.isEmpty()){
+                taskIds.add("-1");
+            }
+            // 完成的任务
+            List<String> taskIdsFinish = tasks.stream().filter(e->
+                    (e.getStatus()==5 || e.getStatus()==6)
+                            &&
+                            e.getPatrolInspector().equals(sysUser.getUserId()+"")).map(TTask::getId).collect(Collectors.toList());
+
+            if (taskIdsFinish.isEmpty()){
+                taskIdsFinish.add("-1");
+            }
             List<TTaskDetail> list = taskDetailService.lambdaQuery()
                     .eq(TTaskDetail::getAuditStatus, 1)
                     .isNotNull(TTaskDetail::getClearStatus).orderByDesc(BaseModel::getCreateTime)
-                    .in(!taskIds.isEmpty(), TTaskDetail::getTaskId,taskIds).groupBy(TTaskDetail::getTaskId).list();
+                    .in(!taskIds.isEmpty(), TTaskDetail::getTaskId,taskIdsFinish).groupBy(TTaskDetail::getTaskId).list();
             // 查询clearStatus为1的数量
             List<TTaskDetail> clearStatus1 = list.stream().filter(e -> e.getClearStatus().equals(1)).collect(Collectors.toList());
             List<TTaskDetail> clearStatus2 = list.stream().filter(e -> e.getClearStatus().equals(2)).collect(Collectors.toList());
@@ -1004,6 +1032,7 @@
         }
         List<InspectorVO> res = new ArrayList<>();
         List<TInspector> inspectors = inspectorService.list(tTaskLambdaQueryWrapper);
+        sysUsers = sysUsers.stream().filter(e -> e.getUserId() != 1).collect(Collectors.toList());
         for (SysUser sysUser : sysUsers) {
             InspectorVO inspectorVO = new InspectorVO();
             inspectorVO.setNickName(sysUser.getNickName());
@@ -1091,6 +1120,8 @@
         }
         List<InspectorVO> res = new ArrayList<>();
         List<TInspector> inspectors = inspectorService.list(tTaskLambdaQueryWrapper);
+        sysUsers = sysUsers.stream().filter(e -> e.getUserId() != 1).collect(Collectors.toList());
+
         for (SysUser sysUser : sysUsers) {
             InspectorVO inspectorVO = new InspectorVO();
             inspectorVO.setNickName(sysUser.getNickName());
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TAppealController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TAppealController.java
index b4a6ab0..4fe08ac 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TAppealController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TAppealController.java
@@ -14,6 +14,7 @@
 import com.ruoyi.system.service.*;
 import com.ruoyi.system.vo.system.AppealDetailVO;
 import com.ruoyi.system.vo.system.AppealListVO;
+import com.tencentcloudapi.es.v20180416.models.TaskDetail;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.util.CollectionUtils;
@@ -185,24 +186,49 @@
         TTask task = taskCleanService.getById(appeal.getTaskId());
         TLocation location = locationService.getById(task.getLocationId());
         TNotice tNotice = new TNotice();
-        tNotice.setUserId(dto.getAppealPerson());
+        tNotice.setUserId(appeal.getAppealPerson());
         tNotice.setStatus(1);
         tNotice.setDataId(dto.getId());
         dto.setAuditTime(LocalDateTime.now());
+        TTaskDetail taskDetail = new TTaskDetail();
+        taskDetail.setTaskId(appeal.getTaskId());
+        Long count = tTaskDetailService.lambdaQuery().eq(TTaskDetail::getTaskId, appeal.getTaskId())
+                .eq(TTaskDetail::getHandleType, 1).count();
         if (dto.getStatus()==2){
+            taskDetail.setClearStatus(1);
+            taskDetail.setAuditTime(LocalDateTime.now());
+            taskDetail.setAuditPerson(tokenService.getLoginUser().getUserId()+"");
+            taskDetail.setAuditStatus(1);
+            taskDetail.setAuditRemark(dto.getAuditRemark());
+            taskDetail.setHandleType(5);
+            taskDetail.setAppealId(dto.getId());
             // 通过
             TTask byId = taskCleanService.getById(dto.getTaskId());
-            byId.setStatus(6);
+            if (count>1){
+                byId.setStatus(5);
+            }else{
+                byId.setStatus(6);
+
+            }
+
             taskCleanService.updateById(byId);
             tNotice.setNoticeType(5);
             tNotice.setNoticeContent("【"+location.getLocationName()+"】任务申诉通过");
         }else{
+            taskDetail.setClearStatus(2);
+            taskDetail.setAuditTime(LocalDateTime.now());
+            taskDetail.setAuditPerson(tokenService.getLoginUser().getUserId()+"");
+            taskDetail.setAuditStatus(2);
+            taskDetail.setAuditRemark(dto.getAuditRemark());
+            taskDetail.setHandleType(6);
+            taskDetail.setAppealId(dto.getId());
             tNotice.setNoticeType(4);
             tNotice.setNoticeContent("【"+location.getLocationName()+"】任务申诉驳回");
         }
         noticeService.save(tNotice);
         dto.setAuditPerson(tokenService.getLoginUser().getUserId()+"");
         appealService.updateById(dto);
+        tTaskDetailService.save(taskDetail);
         return R.ok();
     }
 }
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TLocationController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TLocationController.java
index 5c0dab0..5b70801 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TLocationController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TLocationController.java
@@ -164,6 +164,9 @@
                             }
                         }
                 });
+                locationTypeList.stream().filter(e -> e.getId().equals(tLocation.getLocationType())).findFirst()
+                        .ifPresent(tLocationType -> temp.setLocationTypeName(tLocationType.getLocationName()));
+
             }
             TTaskDetail one = tTaskDetailService.lambdaQuery().eq(TTaskDetail::getTaskId, tTask.getId())
                     .orderByDesc(TTaskDetail::getCreateTime).last("limit 1").one();
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TTaskController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TTaskController.java
index 5bcbb49..fa09d0b 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TTaskController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TTaskController.java
@@ -9,6 +9,7 @@
 import cn.afterturn.easypoi.excel.entity.TemplateExportParams;
 import cn.hutool.core.io.resource.ClassPathResource;
 import com.ruoyi.common.core.domain.BaseModel;
+import com.ruoyi.common.utils.CodeGenerateUtils;
 import com.ruoyi.common.utils.DateUtils;
 import com.ruoyi.common.utils.WebUtils;
 import com.ruoyi.framework.web.service.TokenService;
@@ -161,6 +162,9 @@
     @ApiOperation(value = "新增任务")
     @PostMapping(value = "/add")
     public R<Boolean> add(@RequestBody TTaskDTO dto) {
+        String nameAndCode = CodeGenerateUtils.generateVolumeSn();
+        dto.setTaskName(nameAndCode);
+        dto.setTaskCode(nameAndCode);
         dto.setTaskType(2);
         String implementTime1 = dto.getImplementTime1();
         // 转化为LocalDateTime类型
@@ -177,6 +181,7 @@
         dto.setAuditTime(LocalDateTime.now());
         TTask task = taskCleanerService.getById(dto.getTaskId());
         TTaskDetail one = taskDetailService.lambdaQuery().eq(TTaskDetail::getTaskId, dto.getTaskId())
+                .eq(TTaskDetail::getHandleType,1)
                 .orderByDesc(BaseModel::getCreateTime).last("limit 1").one();
         dto.setClearStatus(one.getClearStatus());
         TLocation location = locationService.getById(task.getLocationId());
@@ -197,20 +202,33 @@
             tNotice.setNoticeContent("【"+location.getLocationName()+"】任务不合格,请重新上传!");
 
         }else{
+
             dto.setHandleType(2);
             // 如果是初次审核就通过 将状态设置为已完成
-            List<TTaskDetail> list = tTaskDetailService.lambdaQuery().eq(TTaskDetail::getTaskId, dto.getTaskId()).list();
-            if (list.isEmpty()){
+            List<TTaskDetail> list = tTaskDetailService.lambdaQuery()
+                    .eq(TTaskDetail::getHandleType,1)
+                    .eq(TTaskDetail::getTaskId, dto.getTaskId()).list();
+            if (one.getClearStatus()==1){
+                if (list.size()<2){
                     task.setStatus(6);
                     taskCleanerService.updateById(task);
                     tNotice.setNoticeType(2);
                     tNotice.setNoticeContent("【"+location.getLocationName()+"】任务已通过");
+                }else{
+                    task.setStatus(5);
+                    taskCleanerService.updateById(task);
+                    tNotice.setNoticeType(2);
+                    tNotice.setNoticeContent("【"+location.getLocationName()+"】任务已通过");
+                }
             }else{
-                task.setStatus(5);
+                // 将任务修改为待整改
+                task.setStatus(4);
                 taskCleanerService.updateById(task);
-                tNotice.setNoticeType(2);
-                tNotice.setNoticeContent("【"+location.getLocationName()+"】任务已通过");
+                // 增加消息
+                tNotice.setNoticeType(1);
+                tNotice.setNoticeContent("【"+location.getLocationName()+"】任务不合格,请重新上传!");
             }
+
         }
         noticeService.save(tNotice);
         dto.setAuditPerson(tokenService.getLoginUser().getUserId()+"");
@@ -275,6 +293,9 @@
                 tTaskDetail.setUnqualifiedName(byId3.getDataContent());
             }
         }
+        if (tTaskDetail!=null){
+            tTaskDetail.setFinishTime(tTaskDetail.getCreateTime());
+        }
         taskDetailVO.setTaskDetail(tTaskDetail);
         taskDetailVO.setRecords(list);
         return R.ok(taskDetailVO);
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/WorkbenchesController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/WorkbenchesController.java
index cd7f8c0..f45740d 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/WorkbenchesController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/WorkbenchesController.java
@@ -470,7 +470,7 @@
                 }
             }
         }
-        taskSituationVO.setPassRate(new BigDecimal(qualifiedWarn).divide(new BigDecimal(tasks.size()), 2, RoundingMode.HALF_UP));
+        taskSituationVO.setPassRate(new BigDecimal(qualifiedWarn).divide(new BigDecimal(tasks.size()), 2, RoundingMode.HALF_DOWN));
 
         // 过滤每天的任务
         LocalDateTime start = DateUtils.stringToLocalDateTime(query.getStartTime());
@@ -508,7 +508,7 @@
             if(tTasks.isEmpty()){
                 taskSituationDayVO.setCompleteRate(BigDecimal.ZERO);
             }else {
-                taskSituationDayVO.setCompleteRate(new BigDecimal(qualifiedWarnChild).divide(new BigDecimal(tTasks.size()), 2, RoundingMode.HALF_UP));
+                taskSituationDayVO.setCompleteRate(new BigDecimal(qualifiedWarnChild).divide(new BigDecimal(tTasks.size()), 2, RoundingMode.HALF_DOWN));
             }
             taskSituationDayVOList.add(taskSituationDayVO);
         }
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java
index 52100ba..767d5fc 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java
@@ -86,7 +86,10 @@
         TTemplate byId = templateService.getById(templateId);
         SysRole sysRole = roleService.selectRoleById(byId.getRoleId());
         List<SysRole> sysRoles = new ArrayList<>();
-        sysRoles.add(sysRole);
+        if (sysRole!=null){
+            sysRoles.add(sysRole);
+
+        }
         return AjaxResult.success(sysRoles);
     }
     @PreAuthorize("@ss.hasPermi('system:role:count')")
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/task/TaskUtil.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/task/TaskUtil.java
index f69a501..cbaddef 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/task/TaskUtil.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/task/TaskUtil.java
@@ -332,8 +332,8 @@
             templateCount.setUserId(sysUser.getUserId());
             templateCountService.save(templateCount);
 
-                taskCleanService.saveBatch(tasks);
-                taskCount = taskCount + tasks.size();
+            taskCleanService.saveBatch(tasks);
+            taskCount = taskCount + tasks.size();
             }
             template.setTaskCount(taskCount);
             templateService.updateById(template);
diff --git a/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TIndexController.java b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TIndexController.java
index ac756dc..fdb22cd 100644
--- a/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TIndexController.java
+++ b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TIndexController.java
@@ -151,8 +151,7 @@
                         tTaskLambdaQueryWrapper.eq(TTask::getProjectId, projectDept.getId());
                         userDeptIds.add(projectDept.getId());
                     } else {
-                        TProjectDept parent = projectDeptService.getById(projectDept.getParentId());
-                        List<TProjectDept> list = projectDeptService.lambdaQuery().eq(TProjectDept::getParentId, parent.getId()).list();
+                        List<TProjectDept> list = projectDeptService.lambdaQuery().eq(TProjectDept::getParentId, projectDept.getId()).list();
                         List<String> deptIds = list.stream().map(TProjectDept::getId).collect(Collectors.toList());
                         if (!deptIds.isEmpty()) {
                             tTaskLambdaQueryWrapper.in(TTask::getProjectId, deptIds);
@@ -473,6 +472,8 @@
             }
             pendingTask.add(taskTodayVO);
         }
+        // 将pendingTask按照距离 从小到大排序
+        pendingTask.sort(Comparator.comparing(TaskPendingVO::getDistance));
         res.setPendingTask(pendingTask);
         res.setLeaveList(leaveList);
         List<TaskTodayVO> todayTask = new ArrayList<>();
diff --git a/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TTaskDetailController.java b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TTaskDetailController.java
index 8bb4677..f7b1ff1 100644
--- a/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TTaskDetailController.java
+++ b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TTaskDetailController.java
@@ -118,6 +118,7 @@
         TTaskDetail taskDetail = new TTaskDetail();
         taskDetail.setTaskId(dto.getTaskId());
         taskDetail.setHandleType(4);
+        taskDetail.setAppealId(dto.getId());
         taskDetailService.save(taskDetail);
         return R.ok();
     }
diff --git a/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TUserController.java b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TUserController.java
index 77c613d..117a79e 100644
--- a/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TUserController.java
+++ b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TUserController.java
@@ -35,15 +35,13 @@
 import javax.annotation.Resource;
 import javax.validation.Valid;
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.text.SimpleDateFormat;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalTime;
 import java.time.format.DateTimeFormatter;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Date;
-import java.util.List;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -183,6 +181,8 @@
     @PostMapping(value = "/userIndex")
     public R<UserIndexVO> userIndex() {
         UserIndexVO userIndexVO = new UserIndexVO();
+        List<SysUser> userAll = sysUserService.selectAllList();
+        List<SysUser> users = userAll.stream().filter(e -> e.getUserId() != 1).collect(Collectors.toList());
 
         Long userId = tokenService.getLoginUserApplet().getUserId();
         SysUser sysUser = sysUserService.selectUserById(userId);
@@ -237,7 +237,9 @@
             taskIds.add("-1");
         }
         List<TTaskDetail> taskDetails = taskDetailService.lambdaQuery()
-                .eq(TTaskDetail::getAuditStatus, 1).in(TTaskDetail::getTaskId, taskIds)
+                .in(TTaskDetail::getTaskId, taskIds)
+                .eq(TTaskDetail::getAuditStatus, 1)
+
                 .isNotNull(TTaskDetail::getClearStatus)
                 .groupBy(TTaskDetail::getTaskId)
                 .orderByDesc(TTaskDetail::getCreateTime).list();
@@ -253,8 +255,58 @@
         } else {
             userIndexVO.setRate(new BigDecimal(0));
         }
-        // todo 月排名
-        userIndexVO.setRanking(0);
+
+        // 判断时间
+        String startTime = "";
+        String endTime = "";
+        Map<String, Date> monthDate = DateUtils.getMonthDate(new Date());
+        startTime = new SimpleDateFormat("yyyy-MM-dd").format((monthDate.get("first"))) + " 00:00:00";
+        endTime = new SimpleDateFormat("yyyy-MM-dd").format((monthDate.get("last"))) + " 23:59:59";
+        List<TTask> taskRank = taskCleanerService.lambdaQuery().between(TTask::getImplementTime, startTime, endTime).list();
+        List<String> taskIdsRank = taskRank.stream().map(TTask::getId).collect(Collectors.toList());
+        if (taskIdsRank.isEmpty()){
+            userIndexVO.setRanking(0);
+        }else{
+            List<TTaskDetail> taskDetailsRank = taskDetailService.lambdaQuery().in(TTaskDetail::getTaskId)
+                    .eq(TTaskDetail::getAuditStatus, 1)
+                    .isNotNull(TTaskDetail::getClearStatus)
+                    .groupBy(TTaskDetail::getTaskId)
+                    .orderByDesc(TTaskDetail::getCreateTime).list();
+            for (SysUser user : users) {
+                int finishCount = (int) taskRank.stream().filter(e->e.getPatrolInspector().equals(user.getUserId()+"")&&e.getStatus() == 5 || e.getStatus() == 6).count();
+                int totalCount = (int) taskRank.stream().filter(e->e.getPatrolInspector().equals(user.getUserId()+"")).count();
+                if (totalCount!=0){
+                    user.setFinish(new BigDecimal(finishCount).divide(new BigDecimal(totalCount),2, RoundingMode.HALF_DOWN));
+                }else{
+                    user.setFinish(BigDecimal.ZERO);
+                }
+                List<TTaskDetail> status1User = taskDetails.stream().filter(e -> e.getClearStatus() == 1).collect(Collectors.toList());
+                List<TTaskDetail> status2User = taskDetails.stream().filter(e -> e.getClearStatus() == 2).collect(Collectors.toList());
+                if (!status1User.isEmpty()) {
+                    BigDecimal divide = new BigDecimal(status1User.size() + status2User.size())
+                            .divide(new BigDecimal(status1User.size()), 2, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(100));
+                    user.setRate(divide);
+                } else {
+                    user.setRate(new BigDecimal(0));
+                }
+            }
+            // 将users进行排序,优先根据rate倒叙排序,如果rate相同 再finish倒叙排序
+            users.sort((o1, o2) -> {
+                if (o1.getRate().compareTo(o2.getRate()) == 0) {
+                    return o2.getFinish().compareTo(o1.getFinish());
+                } else {
+                    return o2.getRate().compareTo(o1.getRate());
+                }
+            });
+            // 查询当前登陆人处于哪一个排名
+            for (int i = 0; i < users.size(); i++) {
+                if (users.get(i).getUserId().equals(userId)) {
+                    userIndexVO.setRanking(i + 1);
+                    break;
+                }
+            }
+
+        }
         return R.ok(userIndexVO);
     }
 
@@ -276,9 +328,11 @@
         BeanUtils.copyProperties(byId, taskDetailVO);
         TLocation byId1 = locationService.getById(byId.getLocationId());
         TLocationType byId2 = locationTypeService.getById(byId1.getLocationType());
+        taskDetailVO.setLocationName(byId1.getLocationName());
         taskDetailVO.setLocationAddress(byId1.getLocationAddress());
+        taskDetailVO.setLocationAddressEnd(byId1.getLocationAddressEnd());
         taskDetailVO.setLocationIcon(byId2.getLocationIcon());
-        taskDetailVO.setLocationName(byId2.getLocationName());
+        taskDetailVO.setLocationTypeName(byId2.getLocationName());
         TTaskDetail tTaskDetail = list.stream().filter(e -> e.getHandleType() == 1).findFirst().orElse(null);
         TTaskDetail tTaskDetailFinish = list.stream().filter(e -> e.getHandleType() == 2).findFirst().orElse(null);
         if (tTaskDetail != null && tTaskDetail.getUnqualified() != null) {
@@ -462,8 +516,8 @@
         SysRole sysRole = roleService.selectRoleById(userRole);
         List<SysUser> sysUsers = sysUserService.selectAllList();
         SysUser auditPerson = sysUserService.selectUserById(999L);
-        //项目负责人、部门负责人、公司成员提交由最终审批人审批;
-        if (user.getDeptType() == 2 || sysRole.getRoleName().contains("项目负责人") || sysRole.getRoleName().contains("部门负责人")) {
+        //项目部负责人、部门负责人、公司成员提交由最终审批人审批;
+        if (user.getDeptType() == 2 || sysRole.getRoleName().contains("项目部负责人") || sysRole.getRoleName().contains("部门负责人")) {
             LeaveAuditVO tLeaveAudit = new LeaveAuditVO();
             tLeaveAudit.setAvatar(auditPerson.getAvatar());
             tLeaveAudit.setNickName(auditPerson.getNickName());
@@ -471,13 +525,13 @@
             res.setAuditPersonId("999");
         } else if (!sysRole.getRoleName().equals("部门助理")) {
             // 审批人根据当前角色类型来
-            if (sysRole.getRoleName().contains("现场负责人") || sysRole.getRoleName().contains("组长")) {
+            if (sysRole.getRoleName().contains("片区负责人") || sysRole.getRoleName().contains("组长/队长")||sysRole.getRoleName().contains("项目部助理")) {
                 List<SysUser> collect = sysUsers.stream().filter(e -> e.getDeptType() == 1 &&
                         e.getDeptId().equals(user.getDeptId())).collect(Collectors.toList());
                 for (SysUser sysUser : collect) {
                     Long userRole1 = sysUserService.getUserRole(sysUser.getUserId());
                     SysRole sysRole1 = roleService.selectRoleById(userRole1);
-                    if (sysRole1 != null && sysRole1.getRoleName().equals("项目负责人")) {
+                    if (sysRole1 != null && sysRole1.getRoleName().equals("项目部负责人")) {
                         LeaveAuditVO tLeaveAudit = new LeaveAuditVO();
                         tLeaveAudit.setAvatar(sysUser.getAvatar());
                         tLeaveAudit.setNickName(sysUser.getNickName());
@@ -549,8 +603,8 @@
         leaveDTO.setTemplateId(user.getTemplateId());
         leaveDTO.setLeavePerson(userId + "");
         leaveService.save(leaveDTO);
-        //项目负责人、部门负责人、公司成员提交由最终审批人审批;
-        if (user.getDeptType() == 2 || sysRole.getRoleName().contains("项目负责人") || sysRole.getRoleName().contains("部门负责人")) {
+        //项目部负责人、部门负责人、公司成员提交由最终审批人审批;
+        if (user.getDeptType() == 2 || sysRole.getRoleName().contains("项目部负责人") || sysRole.getRoleName().contains("部门负责人")) {
             TLeaveAudit tLeaveAudit1 = new TLeaveAudit();
             tLeaveAudit1.setLeaveId(leaveDTO.getId());
             tLeaveAudit1.setAuditStatus(1);
@@ -559,13 +613,13 @@
             leaveAuditService.save(tLeaveAudit1);
         } else if (!sysRole.getRoleName().equals("部门助理")) {
             // 审批人根据当前角色类型来
-            if (sysRole.getRoleName().contains("现场负责人") || sysRole.getRoleName().contains("组长")) {
+            if (sysRole.getRoleName().contains("片区负责人") || sysRole.getRoleName().contains("组长/队长")||sysRole.getRoleName().contains("项目部助理")) {
                 List<SysUser> collect = sysUsers.stream().filter(e -> e.getDeptType() == 1 &&
                         e.getDeptId().equals(user.getDeptId())).collect(Collectors.toList());
                 for (SysUser sysUser : collect) {
                     Long userRole1 = sysUserService.getUserRole(sysUser.getUserId());
                     SysRole sysRole1 = roleService.selectRoleById(userRole1);
-                    if (sysRole1 != null && sysRole1.getRoleName().equals("项目负责人")) {
+                    if (sysRole1 != null && sysRole1.getRoleName().equals("项目部负责人")) {
                         TLeaveAudit tLeaveAudit1 = new TLeaveAudit();
                         tLeaveAudit1.setLeaveId(leaveDTO.getId());
                         tLeaveAudit1.setAuditStatus(1);
@@ -651,7 +705,7 @@
         SysUser sysUser = sysUserService.selectUserById(Long.parseLong(leave.getLeavePerson()));
         Long userRole = sysUserService.getUserRole(sysUser.getUserId());
         SysRole sysRole = roleService.selectRoleById(userRole);
-        if (sysRole.getRoleName().contains("现场负责人") || sysRole.getRoleName().equals("组长")) {
+        if (sysRole.getRoleName().contains("片区负责人") || sysRole.getRoleName().equals("组长/队长")||sysRole.getRoleName().contains("项目部助理")) {
             if (sysUser.getDeptType() == 1) {
                 TProjectDept tProjectDept = projectDeptService.getById(sysUser.getDeptId());
                 if (!tProjectDept.getParentId().equals("0")) {
@@ -664,7 +718,7 @@
                 TDept tDept = deptService.getById(sysUser.getDeptId());
                 leaveUserDetailVO.setDeptName(tDept.getDeptName());
             }
-        } else if (sysRole.getRoleName().contains("项目负责人")) {
+        } else if (sysRole.getRoleName().contains("项目部负责人")) {
             TProjectDept tProjectDept = projectDeptService.getById(sysUser.getDeptId());
             leaveUserDetailVO.setDeptName(tProjectDept.getProjectName());
         }
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java
index 449b5a2..7034d98 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java
@@ -11,6 +11,7 @@
 
 import javax.validation.constraints.Email;
 import javax.validation.constraints.Size;
+import java.math.BigDecimal;
 import java.util.Date;
 import java.util.List;
 
@@ -49,6 +50,12 @@
     @TableField("templateId")
     @ApiModelProperty(value = "所属任务模板id")
     private String templateId;
+    @TableField(exist = false)
+    @ApiModelProperty(value = "合格率")
+    private BigDecimal rate;
+    @TableField(exist = false)
+    @ApiModelProperty(value = "完成率")
+    private BigDecimal finish;
 
     /** 用户昵称 */
     //@Excel(name = "用户名称")
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/Arith.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/Arith.java
index b6326c2..4e81d8e 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/Arith.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/Arith.java
@@ -91,7 +91,7 @@
         {
             return BigDecimal.ZERO.doubleValue();
         }
-        return b1.divide(b2, scale, RoundingMode.HALF_UP).doubleValue();
+        return b1.divide(b2, scale, RoundingMode.HALF_DOWN).doubleValue();
     }
 
     /**
@@ -109,6 +109,6 @@
         }
         BigDecimal b = new BigDecimal(Double.toString(v));
         BigDecimal one = BigDecimal.ONE;
-        return b.divide(one, scale, RoundingMode.HALF_UP).doubleValue();
+        return b.divide(one, scale, RoundingMode.HALF_DOWN).doubleValue();
     }
 }
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/MultipartFileUtil.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/MultipartFileUtil.java
index 3759d6a..31d4507 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/MultipartFileUtil.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/MultipartFileUtil.java
@@ -200,8 +200,8 @@
 //            FileInputStream fis = new FileInputStream(source);
 //            fc= fis.getChannel();
 //            BigDecimal fileSize = new BigDecimal(fc.size());
-//            //size = fileSize.divide(new BigDecimal(1048576), 2, RoundingMode.HALF_UP) + "MB";
-//            size = fileSize.divide(new BigDecimal(1024*1024), 2, RoundingMode.HALF_UP)  ;
+//            //size = fileSize.divide(new BigDecimal(1048576), 2, RoundingMode.HALF_DOWN) + "MB";
+//            size = fileSize.divide(new BigDecimal(1024*1024), 2, RoundingMode.HALF_DOWN)  ;
 //        } catch (FileNotFoundException e) {
 //            e.printStackTrace();
 //        } catch (IOException e) {
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/TTaskDetail.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/TTaskDetail.java
index e9b0864..ae180eb 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/model/TTaskDetail.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/model/TTaskDetail.java
@@ -46,6 +46,9 @@
     @ApiModelProperty(value = "不合格原因名称")
     @TableField(exist = false)
     private String unqualifiedName;
+    @ApiModelProperty(value = "申诉记录id handleType=4 5 6 返回")
+    @TableField("appeal_id")
+    private String appealId;
 
     @ApiModelProperty(value = "备注")
     @TableField("remark")
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TAppealServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TAppealServiceImpl.java
index c40fd30..8c12ffc 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TAppealServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TAppealServiceImpl.java
@@ -78,7 +78,11 @@
         PageInfo<AppealListVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize());
         List<AppealListVO> list = this.baseMapper.pageListUser(query,pageInfo);
         for (AppealListVO taskListVO : list) {
-            taskListVO.setDistance(taskListVO.getDistance().divide(new BigDecimal(1000),2, RoundingMode.HALF_UP));
+            if (taskListVO.getDistance()!=null){
+                taskListVO.setDistance(taskListVO.getDistance().divide(new BigDecimal(1000),2, RoundingMode.HALF_DOWN));
+            }else{
+                taskListVO.setDistance(new BigDecimal(0));
+            }
         }
         pageInfo.setRecords(list);
         return pageInfo;
@@ -89,7 +93,7 @@
         PageInfo<AppealListVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize());
         List<TaskListAllVO> list = this.baseMapper.listAllTask(query,pageInfo);
         for (TaskListAllVO taskListAllVO : list) {
-            taskListAllVO.setDistance(taskListAllVO.getDistance().divide(new BigDecimal(1000),2, RoundingMode.HALF_UP));
+            taskListAllVO.setDistance(taskListAllVO.getDistance().divide(new BigDecimal(1000),2, RoundingMode.HALF_DOWN));
             if (taskListAllVO.getStatus()==1 || taskListAllVO.getStatus()==2 ){
                 taskListAllVO.setStatus(1);
             }else{
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TTaskCleanServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TTaskCleanServiceImpl.java
index 833fdff..ae738b2 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TTaskCleanServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TTaskCleanServiceImpl.java
@@ -20,6 +20,7 @@
 import com.ruoyi.system.vo.system.TaskListVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
 
 import java.math.BigDecimal;
 import java.math.RoundingMode;
@@ -90,7 +91,12 @@
         PageInfo<TaskUserListVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize());
         List<TaskUserListVO> list = this.baseMapper.pageListUser(query,pageInfo);
         for (TaskUserListVO taskUserListVO : list) {
-            taskUserListVO.setDistance(taskUserListVO.getDistance().divide(new BigDecimal("1000"),2, RoundingMode.HALF_UP));
+
+            if (taskUserListVO.getDistance()!=null){
+                taskUserListVO.setDistance(taskUserListVO.getDistance().divide(new BigDecimal("1000"),2, RoundingMode.HALF_DOWN));
+            }else{
+                taskUserListVO.setDistance(new BigDecimal("0"));
+            }
         }
         pageInfo.setRecords(list);
         return pageInfo;
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/system/TaskDetailVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/system/TaskDetailVO.java
index 2be789e..652a3a4 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/system/TaskDetailVO.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/system/TaskDetailVO.java
@@ -14,12 +14,16 @@
 @ApiModel(value = "任务详情VO")
 public class TaskDetailVO extends TTask {
 
-    @ApiModelProperty("位置")
+    @ApiModelProperty("起点位置")
     private String locationAddress;
+    @ApiModelProperty("结束位置")
+    private String locationAddressEnd;
     @ApiModelProperty("点位类型图标")
     private String locationIcon;
-    @ApiModelProperty("点位类型名称")
+    @ApiModelProperty("点位名称")
     private String locationName;
+    @ApiModelProperty("点位类型名称")
+    private String locationTypeName;
     @ApiModelProperty("完成情况")
     private TTaskDetail  taskDetail;
     @ApiModelProperty("操作记录")
diff --git a/ruoyi-system/src/main/resources/mapper/system/TLocationMapper.xml b/ruoyi-system/src/main/resources/mapper/system/TLocationMapper.xml
index f4b5b44..7e839ba 100644
--- a/ruoyi-system/src/main/resources/mapper/system/TLocationMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/TLocationMapper.xml
@@ -46,7 +46,7 @@
             and t1.location_cleaner = #{query.locationCleaner}
         </if>
         and t1.disabled = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()}
-
+        order by t1.create_time desc
     </select>
 
 </mapper>
diff --git a/ruoyi-system/src/main/resources/mapper/system/TTaskMapper.xml b/ruoyi-system/src/main/resources/mapper/system/TTaskMapper.xml
index 8bb2557..b3120d7 100644
--- a/ruoyi-system/src/main/resources/mapper/system/TTaskMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/TTaskMapper.xml
@@ -65,7 +65,7 @@
         select t1.*,t2.location_name as locationName,t3.location_name as locationTypeName,
                t2.location_address as locationAddress,
         t2.location_address_end as locationAddressEnd,
-        t3.location_icon as locatioTypeIcon,
+        t3.location_icon as locationTypeIcon,
         t5.clear_status as clearStatus,
         t4.nick_name as patrolInspectorName,
         t4.phonenumber as phonenumber,
@@ -95,22 +95,30 @@
         left join t_location t2 on t1.location_id = t2.id
         left join t_location_type t3 on t2.location_type = t3.id
         left join sys_user t4 on t1.patrol_inspector = t4.user_id
-        LEFT JOIN (
+        inner JOIN (
         SELECT t1.*
         FROM t_task_detail t1
-        JOIN (SELECT task_id, MAX(create_time) AS max_time
+        left join (SELECT task_id, MAX(create_time) AS max_time
         FROM t_task_detail
-        GROUP BY task_id) AS t2 ON t1.task_id = t2.task_id AND t1.create_time = t2.max_time
-        where 1=1
-        <if test="query.clearStatus != null">
-            and t1.clear_status = #{query.clearStatus}
-        </if>
+        GROUP BY task_id
+        order by create_time desc
+        ) AS t2 ON t1.task_id = t2.task_id AND t1.create_time = t2.max_time
+
         ) t5 on t1.id = t5.task_id
         where 1=1
         and t1.`disabled` = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()}
 
         <if test="query.userId != null and query.userId != ''">
             and t1.patrol_inspector = #{query.userId}
+        </if>
+        <if test="query.clearStatus != null and query.clearStatus == 1">
+            and (t1.status = 5 or t1.status = 6)
+        </if>
+        <if test="query.clearStatus != null and query.clearStatus == 2">
+            and (t1.status = 4 )
+        </if>
+        <if test="query.clearStatus == null">
+            and (t1.status = 4 or t1.status = 5 or t1.status = 6 )
         </if>
         <if test="query.startTime != null and query.startTime != ''">
             and (t1.implement_time between #{query.startTime} and #{query.endTime})
@@ -150,6 +158,7 @@
         <if test="query.startTime != null and startTime != ''">
             and (t1.implement_time between #{query.startTime} and #{query.endTime})
         </if>
+        order by t1.update_time desc
     </select>
     <select id="taskProgress" resultType="com.ruoyi.system.vo.system.ProgressListVO">
         select t1.*,t2.nick_name as nickName,t2.phonenumber,t3.template_name as templateName,count(*) as num2,

--
Gitblit v1.7.1