From 1a438691fdad75bf7b26202cee792c1b8f8c208e Mon Sep 17 00:00:00 2001
From: 吴羡 <16976746+Xian-TT3@user.noreply.gitee.com>
Date: 星期五, 23 十月 2026 18:09:28 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderPlanServiceImpl.java |   80 +++++++++++++++++++++++++++++++++------
 1 files changed, 67 insertions(+), 13 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 797cc86..9df50e7 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
@@ -368,7 +368,7 @@
                 }
             }
             map.put("errorMsg", collect);
-            map.put("missingExportItems", getMissingTemplateExportValues(orderId));
+            map.put("missingExportItems", getMissingTemplateExportValues(orderId, laboratory));
             map.put("unInsOrderCount", 0L);
             return map;
         }
@@ -652,10 +652,11 @@
 
         JSONObject values = JSON.parseObject(JSON.toJSONString(dto.getValues() == null
                 ? Collections.emptyMap() : dto.getValues()));
-        // 妫�楠屾湡闂撮〉闈㈠睍绀虹殑鏄爣鍑嗙淮鎶や腑鐨勬渶鏂版ā鏉匡紝淇濆瓨鏍¢獙蹇呴』浣跨敤鍚屼竴浠芥ā鏉匡紝
-        // 閬垮厤妯℃澘鏂板鈥滃鍑哄�尖�濇壒娉ㄥ悗浠嶆寜涓嬪崟鏃剁殑鏃у揩鐓ц鎶ユ湭閰嶇疆銆�
-        String currentTemplateThing = getCurrentTemplateThing(snapshot);
-        List<String> exportValueCoordinates = getExportValueCoordinates(currentTemplateThing).values().stream()
+        // 淇濆瓨鏃跺繀椤讳娇鐢ㄩ〉闈㈠綋鍓嶅睍绀虹殑妯℃澘锛氬緟妫�銆佸湪妫�闃舵灞曠ず鏍囧噯缁存姢涓殑瀹炴椂妯℃澘锛�
+        // 澶嶆牳銆侀┏鍥為樁娈靛睍绀鸿鍗曞揩鐓э紱鍚﹀垯妯℃澘鍦ㄦ楠岄�斾腑琚慨鏀瑰悗浼氬彇閿欏鍑哄�煎崟鍏冩牸銆�
+        boolean useSnapshot = useSnapshotTemplate(dto.getOrderId(), getCurrentUserLaboratory(dto.getOrderId()));
+        String pageTemplateThing = getPageTemplateThing(snapshot, useSnapshot);
+        List<String> exportValueCoordinates = getExportValueCoordinates(pageTemplateThing).values().stream()
                 .flatMap(Collection::stream)
                 .distinct()
                 .collect(Collectors.toList());
@@ -892,8 +893,8 @@
     }
 
     /**
-     * 妫�楠屼繚瀛樸�佹彁浜ゆ牎楠岃鍙栨爣鍑嗙淮鎶や腑鐨勫疄鏃舵ā鏉匡紱妯℃澘宸茶鍒犻櫎鎴栧唴瀹逛负绌烘椂鎵嶅洖閫�璁㈠崟蹇収銆�
-     * 妫�楠屽畬鎴愬悗鐨勫睍绀哄拰鎶ュ憡浠嶇敱璁㈠崟蹇収璐熻矗锛屼笉浼氶殢鏍囧噯妯℃澘鍚庣画淇敼鑰屽彉鍖栥��
+     * 璇诲彇鏍囧噯缁存姢涓殑瀹炴椂妯℃澘锛涙ā鏉垮凡琚垹闄ゆ垨鍐呭涓虹┖鏃舵墠鍥為��璁㈠崟蹇収銆�
+     * 浠呯敤浜庢楠屽浠嶅浜庡緟妫�銆佸湪妫�闃舵锛堥〉闈㈠睍绀哄疄鏃舵ā鏉匡級鐨勪繚瀛樹笌鏍¢獙銆�
      */
     private String getCurrentTemplateThing(InsOrderStandardTemplate snapshot) {
         if (snapshot != null && snapshot.getTemplateId() != null) {
@@ -906,9 +907,53 @@
     }
 
     /**
+     * 妫�楠屽崟椤甸潰鍦ㄦ楠屽杩涘叆澶嶆牳鍙婁箣鍚庣姸鎬佹椂灞曠ず璁㈠崟蹇収锛屽鍑哄�肩殑淇濆瓨鍜屾彁浜ゆ牎楠屽繀椤讳笌椤甸潰
+     * 浣跨敤鍚屼竴浠芥ā鏉匡紱鍚﹀垯鏍囧噯妯℃澘鍦ㄦ楠岄�斾腑琚慨鏀瑰悗锛屽巻鍙插崟鎹細鎸夋柊鍧愭爣璇诲彇蹇収鏁版嵁鑰岃鎶ヤ负绌恒��
+     */
+    private String getPageTemplateThing(InsOrderStandardTemplate snapshot, boolean useSnapshot) {
+        if (useSnapshot && snapshot != null && StrUtil.isNotBlank(snapshot.getThing())) {
+            return snapshot.getThing();
+        }
+        return getCurrentTemplateThing(snapshot);
+    }
+
+    /**
+     * 涓庢楠屽崟椤甸潰 getTemplateThing 鐨勫垽瀹氫繚鎸佷竴鑷达細妫�楠屽鐘舵�佽繘鍏ュ鏍革紙2锛夊強涔嬪悗鏃朵娇鐢ㄨ鍗曞揩鐓с��
+     * 鎸囨淳璁板綍閲岀殑瀹為獙瀹ゅ悕绉板彲鑳藉拰鐘舵�佽涓嶄竴鑷达紙濡傗�滃叏閮ㄢ�濓級锛屾鏃堕��鍥炴寜璁㈠崟鏁翠綋鐘舵�佸垽瀹氥��
+     */
+    private boolean useSnapshotTemplate(Integer orderId, String laboratory) {
+        if (StringUtils.isNotBlank(laboratory)) {
+            InsOrderState state = insOrderStateMapper.selectOne(Wrappers.<InsOrderState>lambdaQuery()
+                    .eq(InsOrderState::getInsOrderId, orderId)
+                    .eq(InsOrderState::getLaboratory, laboratory)
+                    .last("limit 1"));
+            if (state != null) {
+                return state.getInsState() != null && state.getInsState() >= 2;
+            }
+        }
+        return insOrderStateMapper.selectList(Wrappers.<InsOrderState>lambdaQuery()
+                        .eq(InsOrderState::getInsOrderId, orderId))
+                .stream()
+                .anyMatch(state -> state.getInsState() != null && state.getInsState() >= 2);
+    }
+
+    /**
+     * 鍙栧綋鍓嶇櫥褰曚汉鍦ㄨ璁㈠崟涓婃渶杩戜竴鏉℃寚娲捐褰曟墍灞炵殑妫�楠屽锛涙湭鎸囨淳璐﹀彿杩斿洖 null锛岀敱鐘舵�佸垽瀹氬厹搴曘��
+     */
+    private String getCurrentUserLaboratory(Integer orderId) {
+        Integer userId = SecurityUtils.getUserId().intValue();
+        InsSampleUser sampleUser = insSampleUserMapper.selectOne(Wrappers.<InsSampleUser>lambdaQuery()
+                .eq(InsSampleUser::getInsSampleId, orderId)
+                .eq(InsSampleUser::getUserId, userId)
+                .orderByDesc(InsSampleUser::getId)
+                .last("limit 1"));
+        return sampleUser == null ? null : sampleUser.getSonLaboratory();
+    }
+
+    /**
      * 鐩寸粦妯℃澘璁㈠崟鍙牎楠屾瘡涓�滃鍑哄�尖�濇壒娉ㄦ墍鍦ㄥ尯鍩熷彸渚х揣閭诲崟鍏冩牸锛屼笉浣跨敤妫�楠岄」鐘舵�佹垨 last_value 鍒ゅ畾銆�
      */
-    private List<String> getMissingTemplateExportValues(Integer orderId) {
+    private List<String> getMissingTemplateExportValues(Integer orderId, String laboratory) {
         List<InsOrderStandardTemplate> snapshots = insOrderStandardTemplateService.list(
                 Wrappers.<InsOrderStandardTemplate>lambdaQuery()
                         .eq(InsOrderStandardTemplate::getInsOrderId, orderId)
@@ -918,9 +963,10 @@
             missing.add("褰撳墠璁㈠崟鏈壘鍒板師濮嬭褰曟ā鏉垮揩鐓�");
             return missing;
         }
+        boolean useSnapshot = useSnapshotTemplate(orderId, laboratory);
         for (InsOrderStandardTemplate snapshot : snapshots) {
             Integer templateId = snapshot.getTemplateId();
-            List<String> coordinates = getExportValueCoordinates(getCurrentTemplateThing(snapshot)).values().stream()
+            List<String> coordinates = getExportValueCoordinates(getPageTemplateThing(snapshot, useSnapshot)).values().stream()
                     .flatMap(Collection::stream)
                     .distinct()
                     .collect(Collectors.toList());
@@ -1276,7 +1322,7 @@
         boolean directTemplateOrder = isDirectTemplateOrder(orderId);
         List<InsProduct> insProducts;
         if (directTemplateOrder) {
-            List<String> missingExportValues = getMissingTemplateExportValues(orderId);
+            List<String> missingExportValues = getMissingTemplateExportValues(orderId, laboratory);
             if (!missingExportValues.isEmpty()) {
                 throw new ErrorException("妯℃澘涓殑瀵煎嚭鍊间笉鑳戒负绌猴細\n" + String.join("\n", missingExportValues));
             }
@@ -1888,9 +1934,17 @@
 
 
         } else {
-            //澶嶆牳涓嶉�氳繃灏嗘妸澶嶆牳鐨勮礋璐d汉鍘绘帀
-            Integer id = insSampleUserMapper.selectOne(Wrappers.<InsSampleUser>lambdaQuery().eq(InsSampleUser::getInsSampleId, orderId).orderByDesc(InsSampleUser::getId).last("limit 1")).getId();
-            insSampleUserMapper.deleteById(id);
+            // 澶嶆牳涓嶉�氳繃鍙幓鎺夋湰妫�楠屽鏈鎻愪氦鐨勫鏍歌礋璐d汉锛涙寜澶嶆牳浜虹姸鎬佸拰妫�楠屽瀹氫綅锛�
+            // 閬垮厤璇垹鍏朵粬妫�楠屽鐨勮褰曟垨妫�楠屼汉鍛樿褰曘��
+            InsSampleUser reviewerRow = insSampleUserMapper.selectOne(Wrappers.<InsSampleUser>lambdaQuery()
+                    .eq(InsSampleUser::getInsSampleId, orderId)
+                    .eq(InsSampleUser::getState, 1)
+                    .eq(InsSampleUser::getSonLaboratory, laboratory)
+                    .orderByDesc(InsSampleUser::getId)
+                    .last("limit 1"));
+            if (reviewerRow != null) {
+                insSampleUserMapper.deleteById(reviewerRow.getId());
+            }
 
             // 褰撳墠瀹℃牳浜�
             Integer currentUserId = SecurityUtils.getUserId().intValue();

--
Gitblit v1.9.3