From b43973fb18890173bdb0f973f217df04e18a2095 Mon Sep 17 00:00:00 2001
From: liding <756868258@qq.com>
Date: 星期五, 18 九月 2026 09:08:01 +0800
Subject: [PATCH] fix:1.检验单模板实时更新

---
 inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderPlanServiceImpl.java |   94 ++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 85 insertions(+), 9 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 cdf9f44..cd0ebb6 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
@@ -92,6 +92,7 @@
 
     private static final int DETECTION_REPORT = 0;
     private static final int INSPECTION_REPORT = 1;
+    private static final String DIRECT_TEMPLATE_LABORATORY = "鏂拌仛";
 
     @Resource
     private InsSampleMapper insSampleMapper;
@@ -225,6 +226,7 @@
 
     @Override
     public Map<String, Object> doInsOrder(Integer id, String laboratory) {
+        ensureDirectTemplateOrderState(id);
         InsOrder order = insOrderMapper.selectById(id);
         Map<String, Object> map = insOrderService.getInsOrderAndSample(id, laboratory);
         List<SampleProductDto> list = JSON.parseArray(JSON.toJSONString(map.get("sampleProduct")), SampleProductDto.class);
@@ -345,7 +347,22 @@
         Map<String, Object> map = new HashMap<>();
         List<String> collect = new ArrayList<>();
         if (isDirectTemplateOrder(orderId)) {
-            map.put("errorMsg", Collections.emptyList());
+            List<InsOrderStandardTemplate> snapshots = insOrderStandardTemplateService.list(
+                    Wrappers.<InsOrderStandardTemplate>lambdaQuery()
+                            .eq(InsOrderStandardTemplate::getInsOrderId, orderId)
+                            .orderByAsc(InsOrderStandardTemplate::getSort,
+                                    InsOrderStandardTemplate::getId));
+            for (InsOrderStandardTemplate snapshot : snapshots) {
+                String templateName = StringUtils.defaultIfBlank(snapshot.getName(),
+                        "妯℃澘ID " + snapshot.getTemplateId());
+                if (snapshot.getDetectionTime() == null) {
+                    collect.add("璇烽�夋嫨鈥�" + templateName + "鈥濈殑妫�娴嬫椂闂�");
+                }
+                if (StringUtils.isBlank(snapshot.getDetectionPlace())) {
+                    collect.add("璇峰~鍐欌��" + templateName + "鈥濈殑妫�娴嬪湴鐐�");
+                }
+            }
+            map.put("errorMsg", collect);
             map.put("missingExportItems", getMissingTemplateExportValues(orderId));
             map.put("unInsOrderCount", 0L);
             return map;
@@ -608,6 +625,7 @@
         if (snapshot == null) {
             throw new ErrorException("鏈壘鍒板綋鍓嶈鍗曠殑鍘熷璁板綍妯℃澘蹇収");
         }
+        ensureDirectTemplateOrderState(dto.getOrderId());
         List<InsProduct> products = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                 .eq(InsProduct::getInsSampleId, dto.getSampleId())
                 .eq(InsProduct::getTemplateId, dto.getTemplateId())
@@ -616,7 +634,10 @@
 
         JSONObject values = JSON.parseObject(JSON.toJSONString(dto.getValues() == null
                 ? Collections.emptyMap() : dto.getValues()));
-        List<String> exportValueCoordinates = getExportValueCoordinates(snapshot.getThing()).values().stream()
+        // 妫�楠屾湡闂撮〉闈㈠睍绀虹殑鏄爣鍑嗙淮鎶や腑鐨勬渶鏂版ā鏉匡紝淇濆瓨鏍¢獙蹇呴』浣跨敤鍚屼竴浠芥ā鏉匡紝
+        // 閬垮厤妯℃澘鏂板鈥滃鍑哄�尖�濇壒娉ㄥ悗浠嶆寜涓嬪崟鏃剁殑鏃у揩鐓ц鎶ユ湭閰嶇疆銆�
+        String currentTemplateThing = getCurrentTemplateThing(snapshot);
+        List<String> exportValueCoordinates = getExportValueCoordinates(currentTemplateThing).values().stream()
                 .flatMap(Collection::stream)
                 .distinct()
                 .collect(Collectors.toList());
@@ -670,6 +691,9 @@
                 .map(InsProduct::getSonLaboratory)
                 .filter(StringUtils::isNotBlank)
                 .collect(Collectors.toSet());
+        if (laboratories.isEmpty() && isDirectTemplateOrder(orderId)) {
+            laboratories.add(DIRECT_TEMPLATE_LABORATORY);
+        }
         if (!laboratories.isEmpty()) {
             insOrderStateMapper.update(null, Wrappers.<InsOrderState>lambdaUpdate()
                     .eq(InsOrderState::getInsOrderId, orderId)
@@ -756,6 +780,20 @@
     }
 
     /**
+     * 妫�楠屼繚瀛樸�佹彁浜ゆ牎楠岃鍙栨爣鍑嗙淮鎶や腑鐨勫疄鏃舵ā鏉匡紱妯℃澘宸茶鍒犻櫎鎴栧唴瀹逛负绌烘椂鎵嶅洖閫�璁㈠崟蹇収銆�
+     * 妫�楠屽畬鎴愬悗鐨勫睍绀哄拰鎶ュ憡浠嶇敱璁㈠崟蹇収璐熻矗锛屼笉浼氶殢鏍囧噯妯℃澘鍚庣画淇敼鑰屽彉鍖栥��
+     */
+    private String getCurrentTemplateThing(InsOrderStandardTemplate snapshot) {
+        if (snapshot != null && snapshot.getTemplateId() != null) {
+            StandardTemplate currentTemplate = standardTemplateService.getById(snapshot.getTemplateId());
+            if (currentTemplate != null && StrUtil.isNotBlank(currentTemplate.getThing())) {
+                return currentTemplate.getThing();
+            }
+        }
+        return snapshot == null ? null : snapshot.getThing();
+    }
+
+    /**
      * 鐩寸粦妯℃澘璁㈠崟鍙牎楠屾ā鏉夸腑鏍囪涓衡�滃鍑哄�尖�濈殑鍗曞厓鏍硷紝涓嶄娇鐢ㄦ楠岄」鐘舵�佹垨 last_value 鍒ゅ畾銆�
      */
     private List<String> getMissingTemplateExportValues(Integer orderId) {
@@ -770,7 +808,7 @@
         }
         for (InsOrderStandardTemplate snapshot : snapshots) {
             Integer templateId = snapshot.getTemplateId();
-            List<String> coordinates = getExportValueCoordinates(snapshot.getThing()).values().stream()
+            List<String> coordinates = getExportValueCoordinates(getCurrentTemplateThing(snapshot)).values().stream()
                     .flatMap(Collection::stream)
                     .distinct()
                     .collect(Collectors.toList());
@@ -1071,6 +1109,7 @@
     @Override
     @Transactional(rollbackFor = Exception.class)
     public int submitPlan(Integer orderId, String laboratory, Integer verifyUser, String entrustCode, Boolean registerInsResults) {
+        ensureDirectTemplateOrderState(orderId);
         int reportType = DETECTION_REPORT;
         InsOrder order = insOrderMapper.selectOne(Wrappers.<InsOrder>lambdaQuery()
                 .eq(InsOrder::getId, orderId)
@@ -1531,6 +1570,7 @@
         if (orderId == null || laboratory == null || type == null) {
             throw new ErrorException("澶嶆牳鍙傛暟涓嶅畬鏁�");
         }
+        ensureDirectTemplateOrderState(orderId);
         InsOrderState currentState = insOrderStateMapper.selectOne(Wrappers.<InsOrderState>lambdaQuery()
                 .eq(InsOrderState::getInsOrderId, orderId)
                 .eq(InsOrderState::getLaboratory, laboratory)
@@ -1717,6 +1757,26 @@
         return insProductMapper.selectCount(Wrappers.<InsProduct>lambdaQuery()
                 .in(InsProduct::getInsSampleId, samples.stream().map(InsSample::getId).collect(Collectors.toList()))
                 .isNotNull(InsProduct::getTemplateRowIndex)) > 0;
+    }
+
+    /**
+     * 鍏煎淇涓婄嚎鍓嶅凡缁忎笅鍙戙�佷絾鍥犳病鏈� ins_product 鑰岀己灏戜换鍔$姸鎬佺殑鐩寸粦妯℃澘璁㈠崟銆�
+     */
+    private void ensureDirectTemplateOrderState(Integer orderId) {
+        if (!isDirectTemplateOrder(orderId)) {
+            return;
+        }
+        Long stateCount = insOrderStateMapper.selectCount(Wrappers.<InsOrderState>lambdaQuery()
+                .eq(InsOrderState::getInsOrderId, orderId)
+                .eq(InsOrderState::getLaboratory, DIRECT_TEMPLATE_LABORATORY));
+        if (stateCount > 0) {
+            return;
+        }
+        InsOrderState state = new InsOrderState();
+        state.setInsOrderId(orderId);
+        state.setLaboratory(DIRECT_TEMPLATE_LABORATORY);
+        state.setInsState(0);
+        insOrderStateMapper.insert(state);
     }
 
     private Integer resolveInspectionUserId(Integer orderId, String laboratory) {
@@ -3188,9 +3248,11 @@
         // 鏉ユ牱鏂瑰紡
         String formType = iSysDictTypeService.selectLabelByDict(DictDataConstants.FORM_TYPE, insOrder.getFormType());
 
-        // 鏍峰搧鐘舵��
-        String sampleStatus = iSysDictTypeService.selectLabelByDict(DictDataConstants.SAMPLE_STATUS_LIST, insOrder.getSampleStatus());
-        ;
+        // 鏍峰搧澶栬浼樺厛灞曠ず瀛楀吀鍚嶇О锛涘巻鍙叉暟鎹垨鐩存帴淇濆瓨鏂囨湰鏃讹紝鍥為��灞曠ず璁㈠崟鍘熷�笺��
+        String sampleStatus = defaultReportText(
+                iSysDictTypeService.selectLabelByDict(
+                        DictDataConstants.SAMPLE_STATUS_LIST, insOrder.getSampleStatus()),
+                insOrder.getSampleStatus());
 
         // 鍏徃淇℃伅
         Custom custom = customMapper.selectById(insOrder.getCompanyId());
@@ -3530,8 +3592,9 @@
 
             Map<String, String> row = new LinkedHashMap<>();
             row.put("seq", String.valueOf(sequence++));
-            row.put("itemName", defaultReportText(itemName,
-                    defaultReportText(snapshot.getName(), "妯℃澘ID " + snapshot.getTemplateId())));
+            String reportItemName = defaultReportText(itemName,
+                    defaultReportText(snapshot.getName(), "妯℃澘ID " + snapshot.getTemplateId()));
+            row.put("itemName", formatExportItemName(reportItemName));
             row.put("unit", defaultReportText(unit, "/"));
             row.put("result", result);
             rows.add(row);
@@ -3673,7 +3736,12 @@
             }
         }
         if (numbers.isEmpty()) {
-            return StringUtils.isBlank(fallback) ? "" : fallback + unit;
+            // 鈥�/鈥濊〃绀烘ā鏉挎槑纭~鍐欎簡涓嶉�傜敤锛屼笉鑳藉啀鎸夌┖鍊煎鐞嗘垨杩藉姞鍗曚綅銆�
+            return candidates.stream()
+                    .filter(StringUtils::isNotBlank)
+                    .map(String::trim)
+                    .distinct()
+                    .collect(Collectors.joining("~"));
         }
         BigDecimal minimum = Collections.min(numbers);
         BigDecimal maximum = Collections.max(numbers);
@@ -3684,6 +3752,14 @@
         return minimumText + "~" + maximum.stripTrailingZeros().toPlainString() + unit;
     }
 
+    /** 鎶ュ憡椤圭洰鍚嶇О涓嶅睍绀烘ā鏉胯绠楄繃绋嬩腑鐨勨�滃钩鍧囧�尖�濆瓧鏍峰強鍏跺悗鐨勫垎闅旈�楀彿銆� */
+    private static String formatExportItemName(String itemName) {
+        if (StringUtils.isBlank(itemName)) {
+            return itemName;
+        }
+        return itemName.replaceAll("骞冲潎鍊糪\s*[锛�,]?\\s*", "");
+    }
+
     private static String getMapText(Map<String, String> map, String... keys) {
         if (map == null) {
             return null;

--
Gitblit v1.9.3