From 3d397976d08f0359b8cfeb4e4f22403ae5d0c04f Mon Sep 17 00:00:00 2001
From: 吴羡 <16976746+Xian-TT3@user.noreply.gitee.com>
Date: 星期六, 24 十月 2026 20:44:14 +0800
Subject: [PATCH] feat(device): 设备核查计划附件与设备使用记录联动改造

---
 inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderPlanServiceImpl.java |  105 ++++++++++++++++++++++++----------------------------
 1 files changed, 49 insertions(+), 56 deletions(-)

diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderPlanServiceImpl.java b/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderPlanServiceImpl.java
index 9df50e7..3dde4b3 100644
--- a/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderPlanServiceImpl.java
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderPlanServiceImpl.java
@@ -605,11 +605,9 @@
         }
 
 
-        // 娣诲姞璁惧璁板綍
-        threadPoolTaskExecutor.execute(() -> {
-            // 娣诲姞璁惧浣跨敤璁板綍
-            addDeviceRecord(insSample, userId);
-        });
+        // 鍘熷璁板綍淇濆瓨鍚庯紝鎸夊綋鍓嶆ā鏉块�夌敤鐨勮澶囩敓鎴愪娇鐢ㄨ褰�
+        syncDeviceRecordsFromTemplate(saveInsContextDto.getOrderId(), saveInsContextDto.getSampleId(),
+                saveInsContextDto.getCurrentTable(), userId);
     }
 
     /**
@@ -692,6 +690,9 @@
                 .and(w -> w.isNull(InsProduct::getLastValue).or().eq(InsProduct::getLastValue, "")));
         sample.setInsState(unfinished == 0 ? 2 : 1);
         insSampleMapper.updateById(sample);
+
+        // 鍘熷璁板綍淇濆瓨鍚庯紝鎸夊綋鍓嶆ā鏉块�夌敤鐨勮澶囩敓鎴愪娇鐢ㄨ褰�
+        syncDeviceRecordsFromTemplate(dto.getOrderId(), dto.getSampleId(), dto.getTemplateId(), userId);
     }
 
     /**
@@ -1031,60 +1032,52 @@
         }
     }
 
-    private synchronized void addDeviceRecord(InsSample insSample, Integer userId) {
-        InsOrder order = insOrderMapper.selectById(insSample.getInsOrderId());
+    /**
+     * 鍘熷璁板綍淇濆瓨鍚庯紝鎸夊綋鍓嶆ā鏉块�夌敤鐨勮澶囩敓鎴愬緟濉啓鐨勪娇鐢ㄨ褰曘��
+     * 鍚屼竴璁㈠崟銆佹牱鍝併�佽澶囧彧鐢熸垚涓�鏉★紱宸茬粡濉啓杩囩殑璁板綍涓嶄細琚鐩栥��
+     */
+    private synchronized void syncDeviceRecordsFromTemplate(Integer orderId, Integer sampleId,
+                                                            Integer templateId, Integer userId) {
+        if (orderId == null || sampleId == null || templateId == null) {
+            return;
+        }
+        InsOrder order = insOrderMapper.selectById(orderId);
+        InsSample sample = insSampleMapper.selectById(sampleId);
+        if (order == null || sample == null) {
+            return;
+        }
+        List<Integer> deviceIds = insOrderTemplateDeviceMapper
+                .selectDeviceIdsByOrderAndTemplate(orderId, templateId);
+        if (CollectionUtils.isEmpty(deviceIds)) {
+            return;
+        }
         User user = userMapper.selectById(userId);
-        // 鏌ヨ璁惧浣跨敤璁板綍鏌ヨ璇ヨ鍗曠殑浣跨敤璁板綍
-        List<InsOrderDeviceRecordDto> deviceRecordDtoList = insOrderDeviceRecordMapper.selectDeviceNumber(insSample.getInsOrderId());
-        Set<String> recordCodeset = deviceRecordDtoList.stream().map(InsOrderDeviceRecordDto::getManagementNumber).collect(Collectors.toSet());
-
-        // 鑾峰彇璁㈠崟璁惧缂栧彿
-        List<InsProductResult> resultList = insProductResultMapper.selectResultByOrderId(insSample.getInsOrderId());
-        Set<String> deviceCodeSet = new HashSet<>();
-        for (InsProductResult result : resultList) {
-            // 娣诲姞璁惧缂栧彿
-            List<JSONObject> jsonObjects = JSON.parseArray(result.getEquipValue(), JSONObject.class);
-            for (JSONObject jsonObject : jsonObjects) {
-                if (!"".equals(jsonObject.get("v") + "")) {
-                    List<String> v = StrUtil.split(jsonObject.get("v") + "", "锛�");
-                    deviceCodeSet.addAll(v);
-                }
+        String usePerson = user == null ? "" : user.getName();
+        String sampleCode = StringUtils.isNotBlank(sample.getSampleCode())
+                ? sample.getSampleCode() : order.getEntrustCode();
+        for (Integer deviceId : deviceIds) {
+            if (deviceId == null) {
+                continue;
             }
+            Long count = insOrderDeviceRecordMapper.selectCount(Wrappers.<InsOrderDeviceRecord>lambdaQuery()
+                    .eq(InsOrderDeviceRecord::getInsOrderId, orderId)
+                    .eq(InsOrderDeviceRecord::getDeviceId, deviceId)
+                    .eq(InsOrderDeviceRecord::getSampleCode, sampleCode));
+            if (count != null && count > 0) {
+                continue;
+            }
+            InsOrderDeviceRecord record = new InsOrderDeviceRecord();
+            record.setInsOrderId(orderId);
+            record.setDeviceId(deviceId);
+            record.setSampleCode(sampleCode);
+            record.setTemperature(order.getTemperature());
+            record.setHumidity(order.getHumidity());
+            record.setUseBefore(1);
+            record.setUseAfter(1);
+            record.setUsePersonId(userId);
+            record.setUsePerson(usePerson);
+            insOrderDeviceRecordMapper.insert(record);
         }
-        // 1.鍒ゆ柇鏄惁鏈夋病鏈夋坊鍔犵殑浣跨敤璁板綍
-        Set<String> orderDeviceNumbers = getDeviceDifference(deviceCodeSet, recordCodeset);
-        // 娣诲姞浣跨敤璁板綍, 鏍规嵁缂栧彿鏌ヨ璁惧id
-        if (CollectionUtils.isNotEmpty(orderDeviceNumbers)) {
-            List<Integer> orderDeviceIds = insOrderDeviceRecordMapper.selectDeviceIdsByNumbers(orderDeviceNumbers);
-            List<InsOrderDeviceRecord> collect = orderDeviceIds.stream().map(deviceId -> {
-                InsOrderDeviceRecord insOrderDeviceRecord = new InsOrderDeviceRecord();
-                insOrderDeviceRecord.setInsOrderId(insSample.getInsOrderId());
-                insOrderDeviceRecord.setDeviceId(deviceId);
-                insOrderDeviceRecord.setSampleCode(order.getEntrustCode());
-                insOrderDeviceRecord.setUseBefore(1);
-                insOrderDeviceRecord.setUseAfter(1);
-                insOrderDeviceRecord.setUsePerson(user.getName());
-                insOrderDeviceRecord.setUsePersonId(user.getId());
-                return insOrderDeviceRecord;
-            }).collect(Collectors.toList());
-
-            insOrderDeviceRecordService.saveBatch(collect);
-
-        }
-
-        // 2.鍒ゆ柇鏄惁鍙栨秷浜嗚澶囦娇鐢�
-        Set<String> repoprNumbers = getDeviceDifference(recordCodeset, deviceCodeSet);
-        if (CollectionUtils.isNotEmpty(repoprNumbers)) {
-            List<Integer> reportDeviceIds = insOrderDeviceRecordMapper.selectDeviceIdsByNumbers(repoprNumbers);
-            insOrderDeviceRecordMapper.delete(Wrappers.<InsOrderDeviceRecord>lambdaQuery()
-                    .in(InsOrderDeviceRecord::getDeviceId, reportDeviceIds)
-                    .eq(InsOrderDeviceRecord::getInsOrderId, insSample.getInsOrderId()));
-        }
-    }
-
-    private static Set<String> getDeviceDifference(Set<String> number1, Set<String> number2) {
-        return number1.stream().filter(s1 -> number2.stream().noneMatch(s2 -> s1.equals(s2)))
-                .collect(Collectors.toSet());
     }
 
 

--
Gitblit v1.9.3