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): 新增检测标准方法报告文本功能并优化报告生成 - 委托编号生成逻辑调整为下单时生成并校验唯一性,避免审核时重复 - 新增标准模板价格字段及对应的数据模型和数据库映射 - 订单费用详情查询逻辑重构为基于模板价格计算方式 - 新增标准模板与设备绑定关系的数据结构和管理功能 - 委托编号唯一性校验逻辑增强

---
 basic-server/src/main/java/com/ruoyi/basic/service/impl/StandardTreeServiceImpl.java |   46 +++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 45 insertions(+), 1 deletions(-)

diff --git a/basic-server/src/main/java/com/ruoyi/basic/service/impl/StandardTreeServiceImpl.java b/basic-server/src/main/java/com/ruoyi/basic/service/impl/StandardTreeServiceImpl.java
index 280d3c5..8b5ae45 100644
--- a/basic-server/src/main/java/com/ruoyi/basic/service/impl/StandardTreeServiceImpl.java
+++ b/basic-server/src/main/java/com/ruoyi/basic/service/impl/StandardTreeServiceImpl.java
@@ -18,6 +18,7 @@
 import com.ruoyi.basic.mapper.StandardProductListMapper;
 import com.ruoyi.basic.mapper.StandardTreeMapper;
 import com.ruoyi.basic.mapper.StandardTreeTemplateBindingMapper;
+import com.ruoyi.basic.mapper.StandardTreeTemplateDeviceMapper;
 import com.ruoyi.basic.mapper.StructureItemParameterMapper;
 import com.ruoyi.basic.mapper.StructureTestObjectMapper;
 import com.ruoyi.basic.pojo.Laboratory;
@@ -25,6 +26,7 @@
 import com.ruoyi.basic.pojo.StandardTree;
 import com.ruoyi.basic.pojo.StandardTemplate;
 import com.ruoyi.basic.pojo.StandardTreeTemplateBinding;
+import com.ruoyi.basic.pojo.StandardTreeTemplateDevice;
 import com.ruoyi.basic.pojo.StructureItemParameter;
 import com.ruoyi.basic.pojo.StructureTestObject;
 import com.ruoyi.basic.service.StandardTreeService;
@@ -45,6 +47,7 @@
 import java.util.HashSet;
 import java.util.Comparator;
 import java.util.Set;
+import java.util.stream.Collectors;
 
 /**
  * @author Administrator
@@ -68,6 +71,8 @@
     private LaboratoryMapper laboratoryMapper;
 
     private StandardTreeTemplateBindingMapper standardTreeTemplateBindingMapper;
+
+    private StandardTreeTemplateDeviceMapper standardTreeTemplateDeviceMapper;
 
     private StandardTemplateService standardTemplateService;
 
@@ -204,6 +209,8 @@
         }
         standardTreeTemplateBindingMapper.delete(Wrappers.<StandardTreeTemplateBinding>lambdaQuery()
                 .eq(StandardTreeTemplateBinding::getStandardTreeId, standardTree.getId()));
+        standardTreeTemplateDeviceMapper.delete(Wrappers.<StandardTreeTemplateDevice>lambdaQuery()
+                .eq(StandardTreeTemplateDevice::getStandardTreeId, standardTree.getId()));
         standardTreeMapper.deleteById(standardTree.getId());
         standardProductListMapper.delete(Wrappers.<StandardProductList>lambdaQuery()
                 .eq(StandardProductList::getLaboratory, industry)
@@ -384,6 +391,15 @@
                 Wrappers.<StandardTreeTemplateBinding>lambdaQuery()
                         .eq(StandardTreeTemplateBinding::getStandardTreeId, standardTreeId)
                         .orderByAsc(StandardTreeTemplateBinding::getSort, StandardTreeTemplateBinding::getId));
+        Map<Integer, List<Integer>> deviceIdsByTemplate = standardTreeTemplateDeviceMapper.selectList(
+                        Wrappers.<StandardTreeTemplateDevice>lambdaQuery()
+                                .eq(StandardTreeTemplateDevice::getStandardTreeId, standardTreeId)
+                                .orderByAsc(StandardTreeTemplateDevice::getSort,
+                                        StandardTreeTemplateDevice::getId))
+                .stream().collect(Collectors.groupingBy(
+                        StandardTreeTemplateDevice::getTemplateId,
+                        LinkedHashMap::new,
+                        Collectors.mapping(StandardTreeTemplateDevice::getDeviceId, Collectors.toList())));
         List<StandardTreeTemplateBindingVo> result = new ArrayList<>();
         for (StandardTreeTemplateBinding binding : bindings) {
             StandardTemplate template = standardTemplateService.getById(binding.getTemplateId());
@@ -396,6 +412,7 @@
             vo.setNumber(template.getNumber());
             vo.setRemark(template.getRemark());
             vo.setSort(binding.getSort());
+            vo.setDeviceIds(deviceIdsByTemplate.getOrDefault(template.getId(), new ArrayList<>()));
             result.add(vo);
         }
         return result;
@@ -410,6 +427,7 @@
         ensureTwoLevelStandard(dto.getStandardTreeId());
         List<TemplateBindingItemDto> templates = dto.getTemplates() == null ? new ArrayList<>() : dto.getTemplates();
         Set<Integer> templateIds = new HashSet<>();
+        Set<Integer> allDeviceIds = new HashSet<>();
         List<StandardTreeTemplateBinding> bindings = new ArrayList<>();
         int index = 0;
         for (TemplateBindingItemDto item : templates) {
@@ -425,12 +443,38 @@
             binding.setTemplateId(item.getTemplateId());
             binding.setSort(item.getSort() == null ? index : item.getSort());
             bindings.add(binding);
+            if (item.getDeviceIds() != null) {
+                allDeviceIds.addAll(item.getDeviceIds().stream()
+                        .filter(Objects::nonNull).collect(Collectors.toSet()));
+            }
             index++;
         }
+        if (!allDeviceIds.isEmpty()) {
+            List<Integer> requestedDeviceIds = new ArrayList<>(allDeviceIds);
+            if (standardTreeTemplateDeviceMapper.selectExistingDeviceIds(requestedDeviceIds).size()
+                    != requestedDeviceIds.size()) {
+                throw new BaseException("鎵�閫夎澶囦笉瀛樺湪锛岃鍒锋柊璁惧鍒楄〃鍚庨噸璇�");
+            }
+        }
+        standardTreeTemplateDeviceMapper.delete(Wrappers.<StandardTreeTemplateDevice>lambdaQuery()
+                .eq(StandardTreeTemplateDevice::getStandardTreeId, dto.getStandardTreeId()));
         standardTreeTemplateBindingMapper.delete(Wrappers.<StandardTreeTemplateBinding>lambdaQuery()
                 .eq(StandardTreeTemplateBinding::getStandardTreeId, dto.getStandardTreeId()));
-        for (StandardTreeTemplateBinding binding : bindings) {
+        for (int bindingIndex = 0; bindingIndex < bindings.size(); bindingIndex++) {
+            StandardTreeTemplateBinding binding = bindings.get(bindingIndex);
             standardTreeTemplateBindingMapper.insert(binding);
+            TemplateBindingItemDto item = templates.get(bindingIndex);
+            List<Integer> deviceIds = item.getDeviceIds() == null ? new ArrayList<>()
+                    : item.getDeviceIds().stream().filter(Objects::nonNull).distinct()
+                            .collect(Collectors.toList());
+            for (int deviceIndex = 0; deviceIndex < deviceIds.size(); deviceIndex++) {
+                StandardTreeTemplateDevice relation = new StandardTreeTemplateDevice();
+                relation.setStandardTreeId(dto.getStandardTreeId());
+                relation.setTemplateId(item.getTemplateId());
+                relation.setDeviceId(deviceIds.get(deviceIndex));
+                relation.setSort(deviceIndex);
+                standardTreeTemplateDeviceMapper.insert(relation);
+            }
         }
         return true;
     }

--
Gitblit v1.9.3