From fbd4ecb70baf2e671876ca809a81f6e6fe7342ee Mon Sep 17 00:00:00 2001
From: liding <756868258@qq.com>
Date: 星期日, 20 九月 2026 19:52:50 +0800
Subject: [PATCH] feat(inspect): 新增检测标准方法报告文本功能并优化报告生成 - 委托编号生成逻辑调整为下单时生成并校验唯一性,避免审核时重复 - 新增标准模板价格字段及对应的数据模型和数据库映射 - 订单费用详情查询逻辑重构为基于模板价格计算方式 - 新增标准模板与设备绑定关系的数据结构和管理功能 - 委托编号唯一性校验逻辑增强

---
 inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderPlanServiceImpl.java |   51 +++++++++++++++++++++++++++++++--------------------
 1 files changed, 31 insertions(+), 20 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..dff3ad5 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;
@@ -1217,13 +1218,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 +1985,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 +2536,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 +3219,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 +3232,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 +3584,14 @@
         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 testStartDate = firstInspectDate.format(DateTimeFormatter.ofPattern("yyyy骞碝M鏈坉d鏃�"));
+        String testEndDate = submitTime.format(DateTimeFormatter.ofPattern("yyyy骞碝M鏈坉d鏃�"));
 
         String insTimeEn = monthNames[firstInspectDate.getMonthValue() - 1] + " " + firstInspectDate.format(DateTimeFormatter.ofPattern("dd, yyyy")) + "-"
                 + monthNames[submitTime.getMonthValue() - 1] + " " + submitTime.format(DateTimeFormatter.ofPattern("dd, yyyy"));
@@ -3636,11 +3648,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"))
@@ -3729,6 +3738,8 @@
                     put("batch", finalBatchNo);
                     put("phone", defaultReportText(insOrder.getPhone(), "/"));
                     put("testDate", insTime);
+                    put("testStartDate", testStartDate);
+                    put("testEndDate", testEndDate);
                     put("entrustNo", defaultReportText(insOrder.getEntrustCode(), "/"));
                     put("sampling", "/");
                     put("standard", finalStandardMethodText);

--
Gitblit v1.9.3