Просмотр исходного кода

feat(inspection): 移动端巡检任务状态过滤 + 详情加载 items

1. queryMobileDetail: 加载巡检项目列表(items),原 VO 类型 RiskInspectionItemVo 字段对不上前端 InspectionItem,改为 RiskInspectionTaskItemVo
2. queryMobileList / queryQualityMobileList: 提取 applyStatusFilter 工具方法,支持 ALL/PENDING/DONE/OVERDUE/EXPIRED 状态过滤(原 if-else 漏写 else 分支,导致 PENDING/DONE 不生效)

🤖 Generated with [Claude Code](https://claude.com/claude-code)
yangjingjing 2 дней назад
Родитель
Сommit
4f48d81eef

+ 2 - 2
ruoyi-modules/ruoyi-risk/src/main/java/org/dromara/risk/domain/vo/MobileInspectionTaskVo.java

@@ -88,6 +88,6 @@ public class MobileInspectionTaskVo implements Serializable {
     /** 已完成数 */
     private Integer completedCount;
 
-    /** 巡检项目列表(详情页用) */
-    private List<RiskInspectionItemVo> items;
+    /** 巡检项目列表(详情页用,前端 InspectionItem 字段:itemCategory/itemContent/itemStandard/needPhoto/result/...) */
+    private List<RiskInspectionTaskItemVo> items;
 }

+ 1 - 1
ruoyi-modules/ruoyi-risk/src/main/java/org/dromara/risk/domain/vo/RiskInspectionTaskItemVo.java

@@ -46,7 +46,7 @@ public class RiskInspectionTaskItemVo implements Serializable {
     /** 巡检标准 */
     private String itemStandard;
 
-    /** 是否需要拍照 */
+    /** 是否需要拍照(字典: 0-否 1-是) */
     private String needPhoto;
 
     /** 排序 */

+ 45 - 9
ruoyi-modules/ruoyi-risk/src/main/java/org/dromara/risk/service/impl/RiskInspectionTaskServiceImpl.java

@@ -33,6 +33,7 @@ import org.springframework.util.Assert;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalTime;
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.Date;
 import java.util.List;
@@ -259,11 +260,8 @@ public class RiskInspectionTaskServiceImpl implements IRiskInspectionTaskService
         }
         // 不查 已删除 的
         lqw.eq(RiskInspectionTask::getDelFlag, "0");
-        // 状态过滤(移动端状态 PENDING/PUNCHED/OVERDUE/FINISHED)
-        if (StringUtils.isBlank(status)) {
-            // 默认查 全部,但隐藏 已完成
-            lqw.ne(RiskInspectionTask::getTaskStatus, "已完成");
-        }
+        // 状态过滤(移动端 tab: ALL/PENDING/DONE/OVERDUE)
+        applyStatusFilter(lqw, status);
         lqw.orderByDesc(RiskInspectionTask::getPlanStartTime);
         Page<RiskInspectionTask> page = baseMapper.selectPage(pageQuery.build(), lqw);
         List<MobileInspectionTaskVo> rows = page.getRecords().stream()
@@ -288,9 +286,8 @@ public class RiskInspectionTaskServiceImpl implements IRiskInspectionTaskService
             lqw.eq(RiskInspectionTask::getInspectorId, inspectorId);
         }
         lqw.eq(RiskInspectionTask::getDelFlag, "0");
-        if (StringUtils.isBlank(status)) {
-            lqw.ne(RiskInspectionTask::getTaskStatus, "已完成");
-        }
+        // 状态过滤(移动端 tab: ALL/PENDING/DONE/OVERDUE)
+        applyStatusFilter(lqw, status);
         lqw.orderByDesc(RiskInspectionTask::getPlanStartTime);
         Page<RiskInspectionTask> page = baseMapper.selectPage(pageQuery.build(), lqw);
         List<MobileInspectionTaskVo> rows = page.getRecords().stream()
@@ -310,7 +307,10 @@ public class RiskInspectionTaskServiceImpl implements IRiskInspectionTaskService
     public MobileInspectionTaskVo queryMobileDetail(Long id) {
         RiskInspectionTask task = baseMapper.selectById(id);
         Assert.notNull(task, "巡检任务不存在: " + id);
-        return convertToMobileVo(task);
+        MobileInspectionTaskVo vo = convertToMobileVo(task);
+        // 加载巡检项目列表(供详情页渲染;needPhoto 字符串"0"/"1" 留到前端按需转 boolean)
+        vo.setItems(taskItemMapper.selectVoListByTaskId(id));
+        return vo;
     }
 
     /**
@@ -374,4 +374,40 @@ public class RiskInspectionTaskServiceImpl implements IRiskInspectionTaskService
         return vo;
     }
 
+    /**
+     * 移动端列表按状态过滤(对应前端 tab: 全部/未打卡/已打卡/已过期)
+     *
+     * 任务表 task_status 实际值: 待执行 / 已打卡 / 异常打卡 / 已完成
+     * 移动端 punchStatus 含义:   PENDING(待执行+未超时) / PUNCHED(已打卡) / OVERDUE(待执行+超时) / FINISHED(已完成)
+     *
+     * 前端 tab 简化为 4 个,后端按 status 字符串做粗过滤(punchStatus 是 convert 阶段计算出来的,
+     * 不能直接 SQL 过滤,所以这里按 task_status + plan_end_time 近似还原)。
+     */
+    private void applyStatusFilter(LambdaQueryWrapper<RiskInspectionTask> lqw, String status) {
+        if (StringUtils.isBlank(status) || "ALL".equalsIgnoreCase(status)) {
+            // 全部:隐藏已完成
+            lqw.ne(RiskInspectionTask::getTaskStatus, "已完成");
+            return;
+        }
+        if ("PENDING".equalsIgnoreCase(status)) {
+            // 未打卡:待执行 + 未超时
+            lqw.eq(RiskInspectionTask::getTaskStatus, "待执行");
+            lqw.gt(RiskInspectionTask::getPlanEndTime, new Date());
+            return;
+        }
+        if ("DONE".equalsIgnoreCase(status)) {
+            // 已打卡:已打卡 + 异常打卡(都有打卡记录)
+            lqw.in(RiskInspectionTask::getTaskStatus, Arrays.asList("已打卡", "异常打卡"));
+            return;
+        }
+        if ("OVERDUE".equalsIgnoreCase(status) || "EXPIRED".equalsIgnoreCase(status)) {
+            // 已过期:待执行 + 已超时
+            lqw.eq(RiskInspectionTask::getTaskStatus, "待执行");
+            lqw.lt(RiskInspectionTask::getPlanEndTime, new Date());
+            return;
+        }
+        // 未知状态:兜底显示全部但隐藏已完成
+        lqw.ne(RiskInspectionTask::getTaskStatus, "已完成");
+    }
+
 }