From 8ad863082097ffdcab4a8e7f426d344a1fe6f892 Mon Sep 17 00:00:00 2001
From: 吴羡 <16976746+Xian-TT3@user.noreply.gitee.com>
Date: 星期六, 07 十一月 2026 00:27:02 +0800
Subject: [PATCH] 修复人员管理接口校验与导出,完善设备保养计划与文件受控功能

---
 inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsProductServiceImpl.java |   60 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 59 insertions(+), 1 deletions(-)

diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsProductServiceImpl.java b/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsProductServiceImpl.java
index ed0e8e7..3089f47 100644
--- a/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsProductServiceImpl.java
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsProductServiceImpl.java
@@ -11,12 +11,14 @@
 import com.ruoyi.framework.exception.ErrorException;
 import com.ruoyi.inspect.dto.InsProductBindingDto;
 import com.ruoyi.inspect.dto.WriteInspectionConditionDto;
+import com.ruoyi.inspect.mapper.InsOrderDeviceRecordMapper;
 import com.ruoyi.inspect.mapper.InsOrderMapper;
 import com.ruoyi.inspect.mapper.InsOrderStandardTemplateMapper;
 import com.ruoyi.inspect.mapper.InsOrderTemplateDeviceMapper;
 import com.ruoyi.inspect.mapper.InsProductMapper;
 import com.ruoyi.inspect.mapper.InsSampleMapper;
 import com.ruoyi.inspect.pojo.InsOrder;
+import com.ruoyi.inspect.pojo.InsOrderDeviceRecord;
 import com.ruoyi.inspect.pojo.InsOrderStandardTemplate;
 import com.ruoyi.inspect.pojo.InsOrderTemplateDevice;
 import com.ruoyi.inspect.pojo.InsProduct;
@@ -28,6 +30,8 @@
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.time.LocalDate;
+import java.time.LocalDateTime;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -48,6 +52,8 @@
     private InsOrderStandardTemplateMapper insOrderStandardTemplateMapper;
 
     private InsOrderTemplateDeviceMapper insOrderTemplateDeviceMapper;
+
+    private InsOrderDeviceRecordMapper insOrderDeviceRecordMapper;
 
     @Override
     public int selectOrderManDay(Integer orderId) {
@@ -77,7 +83,24 @@
             if (snapshot == null) {
                 throw new ErrorException("鏈壘鍒板綋鍓嶆ā鏉跨殑鍘熷璁板綍蹇収");
             }
-            boolean hasSnapshotField = dto.isTemperaturePresent() || dto.isDetectionTimePresent()
+            boolean hasDetectionRange = dto.isDetectionTimePresent() || dto.isDetectionEndTimePresent();
+            if (hasDetectionRange) {
+                if (!dto.isDetectionTimePresent()) {
+                    throw new ErrorException("璇烽�夋嫨瀹屾暣鐨勬娴嬫椂闂磋寖鍥�");
+                }
+                // 鍏煎鏃у鎴风鍙彁浜ゅ崟涓棩鏈燂紱鏂板鎴风蹇呴』鍚屾椂鎻愪氦璧锋鏃ユ湡鎴栧悓鏃舵竻绌恒��
+                if (!dto.isDetectionEndTimePresent()) {
+                    dto.setDetectionEndTime(dto.getDetectionTime());
+                }
+                if ((dto.getDetectionTime() == null) != (dto.getDetectionEndTime() == null)) {
+                    throw new ErrorException("璇烽�夋嫨瀹屾暣鐨勬娴嬫椂闂磋寖鍥�");
+                }
+                if (dto.getDetectionTime() != null
+                        && dto.getDetectionEndTime().isBefore(dto.getDetectionTime())) {
+                    throw new ErrorException("妫�娴嬬粨鏉熸棩鏈熶笉鑳芥棭浜庡紑濮嬫棩鏈�");
+                }
+            }
+            boolean hasSnapshotField = dto.isTemperaturePresent() || hasDetectionRange
                     || dto.isDetectionPlacePresent()
                     || dto.isInsResultPresent();
             if (hasSnapshotField) {
@@ -88,6 +111,8 @@
                                         InsOrderStandardTemplate::getTemperature, dto.getTemperature())
                                 .set(dto.isDetectionTimePresent(),
                                         InsOrderStandardTemplate::getDetectionTime, dto.getDetectionTime())
+                                .set(hasDetectionRange,
+                                        InsOrderStandardTemplate::getDetectionEndTime, dto.getDetectionEndTime())
                                 .set(dto.isDetectionPlacePresent(),
                                         InsOrderStandardTemplate::getDetectionPlace, dto.getDetectionPlace())
                                 .set(dto.isInsResultPresent(),
@@ -125,6 +150,7 @@
             if (!hasSnapshotField && !dto.isDeviceIdsPresent()) {
                 throw new ErrorException("娌℃湁闇�瑕佷繚瀛樼殑妯℃澘妫�楠屾潯浠�");
             }
+            refreshPendingDeviceRecords(dto);
             return true;
         }
         InsOrder insOrder = new InsOrder();
@@ -134,6 +160,38 @@
         return true;
     }
 
+    /**
+     * 鍘熷璁板綍鐨勭幆澧冩潯浠跺悗琛ユ椂锛屽悓姝ュ埌灏氭湭濉啓鐨勪娇鐢ㄨ褰曘��
+     * 宸叉墜宸ユ敼鍔ㄨ繃鐨勮褰曪紙宸叉湁寮�濮嬫棩鏈燂級涓嶈鐩栥��
+     */
+    private void refreshPendingDeviceRecords(WriteInspectionConditionDto dto) {
+        boolean hasTemperature = dto.isTemperaturePresent()
+                && dto.getTemperature() != null && !dto.getTemperature().trim().isEmpty();
+        boolean hasDetectionRange = dto.isDetectionTimePresent() && dto.getDetectionTime() != null;
+        if (!hasTemperature && !hasDetectionRange) {
+            return;
+        }
+        List<Integer> deviceIds = insOrderTemplateDeviceMapper
+                .selectDeviceIdsByOrderAndTemplate(dto.getId(), dto.getTemplateId());
+        if (deviceIds == null || deviceIds.isEmpty()) {
+            return;
+        }
+        LocalDateTime start = null;
+        LocalDateTime end = null;
+        if (hasDetectionRange) {
+            start = dto.getDetectionTime().atTime(10, 0);
+            LocalDate endDate = dto.getDetectionEndTime() != null ? dto.getDetectionEndTime() : dto.getDetectionTime();
+            end = endDate.atTime(19, 30);
+        }
+        insOrderDeviceRecordMapper.update(null, Wrappers.<InsOrderDeviceRecord>lambdaUpdate()
+                .eq(InsOrderDeviceRecord::getInsOrderId, dto.getId())
+                .in(InsOrderDeviceRecord::getDeviceId, deviceIds)
+                .isNull(InsOrderDeviceRecord::getUseStartDate)
+                .set(hasTemperature, InsOrderDeviceRecord::getTemperature, dto.getTemperature())
+                .set(hasDetectionRange, InsOrderDeviceRecord::getUseStartDate, start)
+                .set(hasDetectionRange, InsOrderDeviceRecord::getUseEndDate, end));
+    }
+
     //鏌ヨ寰呮椤圭洰
     @Override
     public IPage<InsProduct> selectNoProducts(Page page, InsProduct insProduct, Integer orderId, String ids) {

--
Gitblit v1.9.3