From 51786b723d0a91d11476776d9ce50af7994dc4bd Mon Sep 17 00:00:00 2001
From: liding <756868258@qq.com>
Date: 星期三, 23 九月 2026 15:58:53 +0800
Subject: [PATCH] feat(inspect): 完善检验订单状态管理和样品接收流程

---
 inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderPlanServiceImpl.java |   87 ++++++++++++++++++++++++-------------------
 1 files changed, 49 insertions(+), 38 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 1b0aee8..5cfeb47 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
@@ -46,6 +46,7 @@
 import com.ruoyi.inspect.service.*;
 import com.ruoyi.inspect.util.HackLoopTableRenderPolicy;
 import com.ruoyi.inspect.util.PreserveReportPicturePlaceholderHandler;
+import com.ruoyi.inspect.util.ReportSignaturePictureUtils;
 import com.ruoyi.inspect.vo.InsOrderPlanTaskSwitchVo;
 import com.ruoyi.inspect.vo.InsOrderPlanVO;
 import com.ruoyi.inspect.vo.InsSampleUserVO;
@@ -273,11 +274,11 @@
         // 鏌ヨ璁㈠崟Id
         InsOrder order = insOrderMapper.selectFirstSubmit(dto.getId());
         if (order == null) {
-            return BeanUtil.isEmpty(insProducts) ? null : insProducts;
+            return BeanUtil.isEmpty(insProducts) ? Collections.emptyList() : insProducts;
         }
         insProducts = mergeDirectTemplateSnapshots(order, dto.getId(), dto.getLaboratory(), insProducts);
         if (BeanUtil.isEmpty(insProducts)) {
-            return null;
+            return Collections.emptyList();
         }
         getTemplateThing(order, insProducts, dto.getLaboratory());
         return insProducts;
@@ -299,14 +300,6 @@
         if (snapshots.isEmpty()) {
             return source;
         }
-        InsSample sample = insSampleMapper.selectById(sampleId);
-        boolean directTemplateOrder = source.stream()
-                .anyMatch(product -> product.getTemplateRowIndex() != null)
-                || isDirectTemplateSample(order, sample);
-        if (!directTemplateOrder) {
-            return source;
-        }
-
         Map<Integer, List<InsProduct>> productsByTemplate = source.stream()
                 .filter(product -> product.getTemplateId() != null)
                 .collect(Collectors.groupingBy(InsProduct::getTemplateId, LinkedHashMap::new, Collectors.toList()));
@@ -1217,13 +1210,12 @@
                 .last("FOR UPDATE"));
         boolean isInspectionReport = Objects.equals(INSPECTION_REPORT, reportType);
         registerInsResults = isInspectionReport && Boolean.TRUE.equals(registerInsResults);
-        // 1. 鍒ゆ柇鏄惁鏈夐噸澶嶇紪鍙�, 鏈夐噸澶嶇紪鍙峰仛鎻愰啋
+        // 1. 濮旀墭缂栧彿鍏ㄥ眬鍞竴锛屾彁浜ゅ鏍告椂鍐嶆鏍¢獙锛岄槻姝㈠苟鍙戞垨鍘嗗彶鏁版嵁缁曡繃鐢熸垚鏍¢獙銆�
         Long codeCount = insOrderMapper.selectCount(Wrappers.<InsOrder>lambdaQuery()
-                .ne(InsOrder::getState, -1)
-                .ne(InsOrder::getIfsInventoryId, order.getIfsInventoryId())
+                .ne(InsOrder::getId, orderId)
                 .eq(InsOrder::getEntrustCode, order.getEntrustCode()));
         if (codeCount > 0) {
-            throw new ErrorException("褰撳墠缂栧彿鏈夐噸澶�, 璇峰厛鍘讳慨鏀归噸澶嶇紪鍙�");
+            throw new ErrorException("鏍峰搧/濮旀墭鍗曞凡瀛樺湪锛岃纭鏍峰搧缂栧彿");
         }
 
         // 2. 鍒ゆ柇璇ヨ鍗曟槸鍚︽槸绗竴娆$敓浜�(鍚庣画鎶ュ憡鐢熸垚鍙彇绗竴娆℃彁浜ゆ椂闂�)
@@ -1985,13 +1977,13 @@
                 || report.getExamineTime() != null;
         if (submitted) {
             User writer = getReportSigner(report.getWriteUserId(), "缂栧埗浜�");
-            marks.put("writeUrl", Pictures.ofLocal(imgUrl + "/" + writer.getSignatureUrl()).create());
+            marks.put("writeUrl", ReportSignaturePictureUtils.create(imgUrl, writer.getSignatureUrl()));
             marks.put("writeDateUrl", Pictures.ofStream(DateImageUtil.createDateImage(report.getWriteTime())).create());
-            marks.put("insUrl", Pictures.ofLocal(imgUrl + "/" + writer.getSignatureUrl()).create());
+            marks.put("insUrl", ReportSignaturePictureUtils.create(imgUrl, writer.getSignatureUrl()));
         }
         if (Objects.equals(report.getIsExamine(), 1)) {
             User examiner = getReportSigner(report.getExamineUserId(), "瀹℃牳浜�");
-            marks.put("examineUrl", Pictures.ofLocal(imgUrl + "/" + examiner.getSignatureUrl()).create());
+            marks.put("examineUrl", ReportSignaturePictureUtils.create(imgUrl, examiner.getSignatureUrl()));
             marks.put("examineDateUrl", Pictures.ofStream(DateImageUtil.createDateImage(report.getExamineTime())).create());
         }
         return marks;
@@ -2536,13 +2528,18 @@
         enterFactoryReport.setLotBatchNo(ifsInventoryQuantity.getUpdateBatchNo());
 
         // 妫�娴嬩緷鎹�
-        Set<String> standardMethod = new HashSet<>();
+        Set<String> standardMethod = new LinkedHashSet<>();
         StringBuilder standardMethod2 = new StringBuilder();
-        standardMethod.add(baseMapper.getStandardMethodCode(insSample.getStandardMethodListId()));
+        String reportStandardMethod = baseMapper.getStandardMethodReportText(insSample.getStandardMethodListId());
+        if (StringUtils.isNotBlank(reportStandardMethod)) {
+            standardMethod.add(reportStandardMethod);
+        }
         for (String s : standardMethod) {
             standardMethod2.append("銆�").append(s);
         }
-        standardMethod2.replace(0, 1, "");
+        if (standardMethod2.length() > 0) {
+            standardMethod2.deleteCharAt(0);
+        }
 
         // 鏍峰搧绫诲瀷
         String orderType = iSysDictTypeService.selectLabelByDict(DictDataConstants.CHECK_TYPE, insOrder.getOrderType());
@@ -3214,7 +3211,7 @@
         insReport.setReportType(reportType);
         boolean showResult = Objects.equals(reportType, INSPECTION_REPORT);
         List<Map<String, Object>> tables = new ArrayList<>();
-        Set<String> standardMethod = new HashSet<>();
+        Set<String> standardMethod = new LinkedHashSet<>();
         Set<String> deviceSet = new HashSet<>();
         Set<String> models = new HashSet<>();
         // 鏌ヨ妫�楠岄」鏁伴噺
@@ -3227,11 +3224,13 @@
         /*鍩虹鎶ュ憡(鏍规嵁缁樺埗鐨勫師濮嬭褰曟ā鐗堝舰鎴�)*/
         samples.forEach(a -> {
             models.add(a.getModel());
-            String standardMethodCode = baseMapper.getStandardMethodCode(a.getStandardMethodListId());
-            if (StrUtil.isNotBlank(a.getSpecialStandardMethod())) {
-                standardMethodCode = standardMethodCode + "+" + a.getSpecialStandardMethod();
+            String standardMethodCode = baseMapper.getStandardMethodReportText(a.getStandardMethodListId());
+            if (StrUtil.isNotBlank(standardMethodCode)) {
+                if (StrUtil.isNotBlank(a.getSpecialStandardMethod())) {
+                    standardMethodCode = standardMethodCode + "+" + a.getSpecialStandardMethod();
+                }
+                standardMethod.add(standardMethodCode);
             }
-            standardMethod.add(standardMethodCode);
             for (InsProduct b : a.getInsProduct()) {
                 if (b.getInsProductResult() != null) {
                     List<JSONObject> jsonObjects = JSON.parseArray(b.getInsProductResult().getEquipValue(), JSONObject.class);
@@ -3577,9 +3576,11 @@
         if (firstInspectDate == null) {
             firstInspectDate = insOrder.getSendTime();
         }
+        if (firstInspectDate == null) {
+            firstInspectDate = submitTime;
+        }
 
-        String insTime = firstInspectDate.format(DateTimeFormatter.ofPattern("yyyy骞碝M鏈坉d鏃�")) + "-"
-                + submitTime.format(DateTimeFormatter.ofPattern("yyyy骞碝M鏈坉d鏃�"));
+        String insTime = formatReportTestDate(firstInspectDate, submitTime);
 
         String insTimeEn = monthNames[firstInspectDate.getMonthValue() - 1] + " " + firstInspectDate.format(DateTimeFormatter.ofPattern("dd, yyyy")) + "-"
                 + monthNames[submitTime.getMonthValue() - 1] + " " + submitTime.format(DateTimeFormatter.ofPattern("dd, yyyy"));
@@ -3636,11 +3637,8 @@
                 productionDate = insOrder.getProductionDate().format(DateTimeFormatter.ofPattern("yyyy骞碝M鏈坉d鏃�"));
             }
             batchNo = defaultReportText(insOrder.getProductionBatch(), "/");
-            standardMethodText = templateSnapshots.stream()
-                    .map(InsOrderStandardTemplate::getRemark)
-                    .filter(StringUtils::isNotBlank)
-                    .distinct()
-                    .collect(Collectors.joining("锛�"));
+            standardMethodText = defaultReportText(
+                    baseMapper.getStandardMethodReportTextByCode(insOrder.getSample()), insOrder.getSample());
         }
         boolean containsOrganicChlorine = detectionResultRows.stream()
                 .map(row -> row.get("itemName"))
@@ -3943,16 +3941,21 @@
         if (CollectionUtils.isEmpty(deviceList)) {
             return "/";
         }
-        Set<String> lines = new LinkedHashSet<>();
-        int sequence = 1;
+        Set<String> equipmentItems = new LinkedHashSet<>();
         for (Map<String, String> device : deviceList) {
             String name = getMapText(device, "deviceName", "device_name");
             String managementNumber = getMapText(device, "managementNumber", "management_number");
-            String line = sequence++ + ". " + defaultReportText(name, "/");
+            String item = defaultReportText(name, "/");
             if (StringUtils.isNotBlank(managementNumber)) {
-                line += "锛�" + managementNumber;
+                item += "锛�" + managementNumber;
             }
-            lines.add(line);
+            equipmentItems.add(item);
+        }
+        List<String> items = new ArrayList<>(equipmentItems);
+        List<String> lines = new ArrayList<>();
+        for (int i = 0; i < items.size(); i++) {
+            String punctuation = i == items.size() - 1 ? "銆�" : "锛�";
+            lines.add((i + 1) + ". " + items.get(i) + punctuation);
         }
         return String.join("\n", lines);
     }
@@ -3973,7 +3976,7 @@
                 .collect(Collectors.toList());
 
         String temperature = formatConditionRange(temperatures, order.getTemperature(), "鈩�");
-        String humidity = formatConditionRange(humidities, order.getHumidity(), "%");
+        String humidity = formatConditionRange(humidities, order.getHumidity(), "%RH");
         return Stream.of(temperature, humidity)
                 .filter(StringUtils::isNotBlank)
                 .collect(Collectors.joining(" "));
@@ -4046,6 +4049,14 @@
         return StringUtils.isNotBlank(fallback) ? fallback : "/";
     }
 
+    private static String formatReportTestDate(LocalDateTime startTime, LocalDateTime endTime) {
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy骞碝M鏈坉d鏃�");
+        if (startTime.toLocalDate().equals(endTime.toLocalDate())) {
+            return startTime.format(formatter);
+        }
+        return startTime.format(formatter) + "鑷�" + endTime.format(formatter);
+    }
+
     /**
      * 璁$畻琛ㄦ牸鍒楀搴�
      *

--
Gitblit v1.9.3