From ee690149bcf516b72df8f12916d5d93319bf55d5 Mon Sep 17 00:00:00 2001
From: buhuazhen <hua100783@gmail.com>
Date: 星期三, 27 五月 2026 17:18:36 +0800
Subject: [PATCH] feat 页面显示巡检状态

---
 src/main/java/com/ruoyi/inspectiontask/service/impl/InspectionTaskServiceImpl.java |   63 +++++++++++++++++++++++++++++++
 src/main/java/com/ruoyi/inspectiontask/pojo/InspectionTask.java                    |    3 +
 src/main/resources/mapper/device/DeviceRepairMapper.xml                            |    8 +++-
 src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskJob.java             |    1 
 src/main/java/com/ruoyi/inspectiontask/dto/InspectionTaskDto.java                  |   11 +++++
 5 files changed, 84 insertions(+), 2 deletions(-)

diff --git a/src/main/java/com/ruoyi/inspectiontask/dto/InspectionTaskDto.java b/src/main/java/com/ruoyi/inspectiontask/dto/InspectionTaskDto.java
index 87e3e61..64f5e29 100644
--- a/src/main/java/com/ruoyi/inspectiontask/dto/InspectionTaskDto.java
+++ b/src/main/java/com/ruoyi/inspectiontask/dto/InspectionTaskDto.java
@@ -6,6 +6,7 @@
 import com.ruoyi.sales.pojo.CommonFile;
 import lombok.Data;
 
+import java.time.LocalDateTime;
 import java.util.List;
 
 @Data
@@ -23,4 +24,14 @@
     private List<CommonFile> commonFileListAfter;  //鐢熶骇鍚�
     private List<CommonFile> commonFileListBefore; //鐢熶骇鍓�
 
+    /**
+     * 瑕佹眰鐨勬墽琛屾椂闂达紙鏉ヨ嚜瀹氭椂浠诲姟鐨刵extExecutionTime锛�
+     */
+    private LocalDateTime nextExecutionTime;
+
+    /**
+     * 鐘舵�侊細EXPIRED-宸茶繃鏈燂紝IN_PROGRESS-宸℃涓紝PENDING-寰呭贰妫�
+     */
+    private String status;
+
 }
diff --git a/src/main/java/com/ruoyi/inspectiontask/pojo/InspectionTask.java b/src/main/java/com/ruoyi/inspectiontask/pojo/InspectionTask.java
index ed6cbce..3fc576b 100644
--- a/src/main/java/com/ruoyi/inspectiontask/pojo/InspectionTask.java
+++ b/src/main/java/com/ruoyi/inspectiontask/pojo/InspectionTask.java
@@ -95,6 +95,9 @@
     @TableField(fill = FieldFill.INSERT)
     private Long deptId;
 
+    @ApiModelProperty(value = "鍏宠仈瀹氭椂浠诲姟ID")
+    private Long timingTaskId;
+
     @ApiModelProperty(value = "鐢熶骇鍓嶆槸鍚﹀瓨鍦ㄥ紓甯�")
     private Boolean hasExceptionBefore;
 
diff --git a/src/main/java/com/ruoyi/inspectiontask/service/impl/InspectionTaskServiceImpl.java b/src/main/java/com/ruoyi/inspectiontask/service/impl/InspectionTaskServiceImpl.java
index 215d605..14501fd 100644
--- a/src/main/java/com/ruoyi/inspectiontask/service/impl/InspectionTaskServiceImpl.java
+++ b/src/main/java/com/ruoyi/inspectiontask/service/impl/InspectionTaskServiceImpl.java
@@ -18,7 +18,9 @@
 import com.ruoyi.common.utils.bean.BeanUtils;
 import com.ruoyi.inspectiontask.dto.InspectionTaskDto;
 import com.ruoyi.inspectiontask.mapper.InspectionTaskMapper;
+import com.ruoyi.inspectiontask.mapper.TimingTaskMapper;
 import com.ruoyi.inspectiontask.pojo.InspectionTask;
+import com.ruoyi.inspectiontask.pojo.TimingTask;
 import com.ruoyi.inspectiontask.service.InspectionTaskService;
 import com.ruoyi.project.system.domain.SysUser;
 import com.ruoyi.project.system.mapper.SysUserMapper;
@@ -31,6 +33,7 @@
 import org.springframework.transaction.annotation.Transactional;
 
 import java.io.IOException;
+import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.function.Function;
@@ -71,6 +74,9 @@
 
     @Autowired
     private CommonFileServiceImpl commonFileService;
+
+    @Autowired
+    private TimingTaskMapper timingTaskMapper;
 
     @Override
     public IPage<InspectionTaskDto> selectInspectionTaskList(Page<InspectionTask> page, InspectionTaskDto inspectionTaskDto) {
@@ -134,6 +140,20 @@
         }
         List<CommonFile> finalCommonFiles = commonFiles;
 
+        // 鎵归噺鏌ヨ瀹氭椂浠诲姟鑾峰彇nextExecutionTime
+        List<Long> timingTaskIds = entityPage.getRecords().stream()
+                .map(InspectionTask::getTimingTaskId)
+                .filter(Objects::nonNull)
+                .collect(Collectors.toList());
+        Map<Long, TimingTask> timingTaskMap = new HashMap<>();
+        if (!timingTaskIds.isEmpty()) {
+            List<TimingTask> timingTasks = timingTaskMapper.selectBatchIds(timingTaskIds);
+            timingTaskMap = timingTasks.stream()
+                    .collect(Collectors.toMap(TimingTask::getId, Function.identity()));
+        }
+        final Map<Long, TimingTask> finalTimingTaskMap = timingTaskMap;
+        final LocalDateTime now = LocalDateTime.now();
+
         List<InspectionTaskDto> dtoList = entityPage.getRecords().stream().map(inspectionTask -> {
             InspectionTaskDto dto = new InspectionTaskDto();
             BeanUtils.copyProperties(inspectionTask, dto);  // 澶嶅埗涓诲璞″睘鎬�
@@ -173,6 +193,17 @@
                     .filter(commonFile -> commonFile.getCommonId().equals(taskId) && commonFile.getType().equals(FileNameType.INSPECTION_PRODUCTION_BEFORE.getValue()))
                     .collect(Collectors.toList()));
 
+            // 璁$畻鐘舵�侊細宸茶繃鏈� > 宸℃涓� > 寰呭贰妫�
+            String status = calculateStatus(inspectionTask, finalTimingTaskMap, now);
+            dto.setStatus(status);
+
+            // 璁剧疆nextExecutionTime鐢ㄤ簬鍓嶇灞曠ず
+            if (inspectionTask.getTimingTaskId() != null) {
+                TimingTask timingTask = finalTimingTaskMap.get(inspectionTask.getTimingTaskId());
+                if (timingTask != null) {
+                    dto.setNextExecutionTime(timingTask.getNextExecutionTime());
+                }
+            }
 
             return dto;
         }).collect(Collectors.toList());
@@ -206,6 +237,38 @@
         return dto;
     }
 
+    /**
+     * 璁$畻宸℃浠诲姟鐘舵��
+     * 浼樺厛绾э細宸茶繃鏈� > 宸℃涓� > 寰呭贰妫�
+     * @param inspectionTask 宸℃浠诲姟
+     * @param timingTaskMap 瀹氭椂浠诲姟Map
+     * @param now 褰撳墠鏃堕棿
+     * @return 鐘舵�侊細EXPIRED-宸茶繃鏈燂紝IN_PROGRESS-宸℃涓紝PENDING-寰呭贰妫�
+     */
+    private String calculateStatus(InspectionTask inspectionTask, Map<Long, TimingTask> timingTaskMap, LocalDateTime now) {
+        // 1. 鍒ゆ柇鏄惁宸茶繃鏈�
+        if (inspectionTask.getTimingTaskId() != null) {
+            TimingTask timingTask = timingTaskMap.get(inspectionTask.getTimingTaskId());
+            if (timingTask != null && timingTask.getNextExecutionTime() != null) {
+                if (now.isAfter(timingTask.getNextExecutionTime())) {
+                    return "EXPIRED";
+                }
+            }
+        }else {
+            return "EXPIRED";
+        }
+
+        // 2. 鍒ゆ柇鏄惁宸℃涓紙浠讳竴寮傚父瀛楁涓嶄负null锛�
+        if (inspectionTask.getHasExceptionBefore() != null
+                || inspectionTask.getHasExceptionAfter() != null
+                || inspectionTask.getHasExceptionIssue() != null) {
+            return "IN_PROGRESS";
+        }
+
+        // 3. 寰呭贰妫�
+        return "PENDING";
+    }
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public int addOrEditInspectionTask(InspectionTaskDto inspectionTaskDto) throws IOException {
diff --git a/src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskJob.java b/src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskJob.java
index b8ffdf5..6cddf48 100644
--- a/src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskJob.java
+++ b/src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskJob.java
@@ -116,6 +116,7 @@
         inspectionTask.setFrequencyType(timingTask.getFrequencyType());
         inspectionTask.setFrequencyDetail(timingTask.getFrequencyDetail());
         inspectionTask.setTenantId(timingTask.getTenantId());
+        inspectionTask.setTimingTaskId(timingTask.getId());
 
         return inspectionTask;
     }
diff --git a/src/main/resources/mapper/device/DeviceRepairMapper.xml b/src/main/resources/mapper/device/DeviceRepairMapper.xml
index d82119b..7970318 100644
--- a/src/main/resources/mapper/device/DeviceRepairMapper.xml
+++ b/src/main/resources/mapper/device/DeviceRepairMapper.xml
@@ -46,8 +46,12 @@
             <if test="deviceRepairDto.maintenanceName != null">
                 and dr.maintenance_name like concat('%',#{deviceRepairDto.maintenanceName},'%')
             </if>
-
-
+            <if test="deviceRepairDto.repairTimeStart != null">
+                and dr.repair_time_start &gt;= #{deviceRepairDto.repairTimeStart}
+            </if>
+            <if test="deviceRepairDto.repairTimeEnd != null">
+                and dr.repair_time_end &lt;= #{deviceRepairDto.repairTimeEnd}
+            </if>
             <if test="deviceRepairDto.maintenanceTimeStr != null and deviceRepairDto.maintenanceTimeStr != '' ">
                 and dr.maintenance_time like concat('%',#{deviceRepairDto.maintenanceTimeStr},'%')
             </if>

--
Gitblit v1.9.3