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/InsProductServiceImpl.java |  109 +++++++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 102 insertions(+), 7 deletions(-)

diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsProductServiceImpl.java b/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsProductServiceImpl.java
index 63619a2..b5d0e0f 100644
--- a/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsProductServiceImpl.java
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsProductServiceImpl.java
@@ -7,15 +7,22 @@
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.basic.mapper.StandardProductListMapper;
 import com.ruoyi.basic.pojo.StandardProductList;
+import com.ruoyi.basic.utils.StandardTreePathParser;
 import com.ruoyi.framework.exception.ErrorException;
 import com.ruoyi.inspect.dto.InsProductBindingDto;
+import com.ruoyi.inspect.dto.WriteInspectionConditionDto;
 import com.ruoyi.inspect.mapper.InsOrderMapper;
+import com.ruoyi.inspect.mapper.InsOrderStandardTemplateMapper;
+import com.ruoyi.inspect.mapper.InsOrderTemplateDeviceMapper;
 import com.ruoyi.inspect.mapper.InsProductMapper;
 import com.ruoyi.inspect.mapper.InsSampleMapper;
 import com.ruoyi.inspect.pojo.InsOrder;
+import com.ruoyi.inspect.pojo.InsOrderStandardTemplate;
+import com.ruoyi.inspect.pojo.InsOrderTemplateDevice;
 import com.ruoyi.inspect.pojo.InsProduct;
 import com.ruoyi.inspect.pojo.InsSample;
 import com.ruoyi.inspect.service.InsProductService;
+import com.ruoyi.performance.pojo.AuxiliaryOutputWorkingHours;
 import lombok.AllArgsConstructor;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
@@ -38,6 +45,10 @@
 
     private StandardProductListMapper standardProductListMapper;
 
+    private InsOrderStandardTemplateMapper insOrderStandardTemplateMapper;
+
+    private InsOrderTemplateDeviceMapper insOrderTemplateDeviceMapper;
+
     @Override
     public int selectOrderManDay(Integer orderId) {
         return insProductMapper.selectOrderManDay(orderId);
@@ -53,7 +64,69 @@
     }
 
     @Override
-    public boolean write(InsOrder insOrder) {
+    public boolean write(WriteInspectionConditionDto dto) {
+        if (dto == null || dto.getId() == null) {
+            throw new ErrorException("璁㈠崟ID涓嶈兘涓虹┖");
+        }
+        if (dto.getTemplateId() != null) {
+            InsOrderStandardTemplate snapshot = insOrderStandardTemplateMapper.selectOne(
+                    Wrappers.<InsOrderStandardTemplate>lambdaQuery()
+                            .eq(InsOrderStandardTemplate::getInsOrderId, dto.getId())
+                            .eq(InsOrderStandardTemplate::getTemplateId, dto.getTemplateId())
+                            .last("limit 1"));
+            if (snapshot == null) {
+                throw new ErrorException("鏈壘鍒板綋鍓嶆ā鏉跨殑鍘熷璁板綍蹇収");
+            }
+            boolean hasSnapshotField = dto.isTemperaturePresent() || dto.isHumidityPresent()
+                    || dto.isDetectionTimePresent() || dto.isDetectionPlacePresent()
+                    || dto.isInsResultPresent();
+            if (hasSnapshotField) {
+                insOrderStandardTemplateMapper.update(null,
+                        Wrappers.<InsOrderStandardTemplate>lambdaUpdate()
+                                .eq(InsOrderStandardTemplate::getId, snapshot.getId())
+                                .set(dto.isTemperaturePresent(),
+                                        InsOrderStandardTemplate::getTemperature, dto.getTemperature())
+                                .set(dto.isHumidityPresent(),
+                                        InsOrderStandardTemplate::getHumidity, dto.getHumidity())
+                                .set(dto.isDetectionTimePresent(),
+                                        InsOrderStandardTemplate::getDetectionTime, dto.getDetectionTime())
+                                .set(dto.isDetectionPlacePresent(),
+                                        InsOrderStandardTemplate::getDetectionPlace, dto.getDetectionPlace())
+                                .set(dto.isInsResultPresent(),
+                                        InsOrderStandardTemplate::getInsResult, dto.getInsResult()));
+            }
+            if (dto.isDeviceIdsPresent()) {
+                insOrderTemplateDeviceMapper.delete(
+                        Wrappers.<InsOrderTemplateDevice>lambdaQuery()
+                                .eq(InsOrderTemplateDevice::getInsOrderId, dto.getId())
+                                .eq(InsOrderTemplateDevice::getTemplateId, dto.getTemplateId()));
+                List<Integer> deviceIds = dto.getDeviceIds() == null
+                        ? Collections.emptyList()
+                        : dto.getDeviceIds().stream()
+                                .filter(Objects::nonNull)
+                                .distinct()
+                                .collect(Collectors.toList());
+                if (!deviceIds.isEmpty()
+                        && insOrderTemplateDeviceMapper.selectExistingDeviceIds(deviceIds).size() != deviceIds.size()) {
+                    throw new ErrorException("鎵�閫夎澶囦笉瀛樺湪锛岃鍒锋柊璁惧鍒楄〃鍚庨噸璇�");
+                }
+                for (int index = 0; index < deviceIds.size(); index++) {
+                    InsOrderTemplateDevice relation = new InsOrderTemplateDevice();
+                    relation.setInsOrderId(dto.getId());
+                    relation.setTemplateId(dto.getTemplateId());
+                    relation.setDeviceId(deviceIds.get(index));
+                    relation.setSort(index);
+                    insOrderTemplateDeviceMapper.insert(relation);
+                }
+            }
+            if (!hasSnapshotField && !dto.isDeviceIdsPresent()) {
+                throw new ErrorException("娌℃湁闇�瑕佷繚瀛樼殑妯℃澘妫�楠屾潯浠�");
+            }
+            return true;
+        }
+        InsOrder insOrder = new InsOrder();
+        insOrder.setId(dto.getId());
+        insOrder.setRemark(dto.getRemark());
         insOrderMapper.updateById(insOrder);
         return true;
     }
@@ -117,11 +190,18 @@
     public List<InsProduct> getProductTreeByProductId(Integer productId) {
         // 鏌ヨ妫�楠岄」淇℃伅
         InsProduct insProduct = insProductMapper.selectById(productId);
-        String tree = insProduct.getFactory() + " - " +
-                insProduct.getLaboratory() + " - " +
-                insProduct.getSampleType() + " - " +
-                insProduct.getSample() + " - " +
-                insProduct.getModel();
+        String tree;
+        if (insProduct.getSampleType() == null && insProduct.getModel() == null
+                && StringUtils.isNotBlank(insProduct.getLaboratory())
+                && StringUtils.isNotBlank(insProduct.getSample())) {
+            tree = StandardTreePathParser.canonical(insProduct.getLaboratory(), insProduct.getSample());
+        } else {
+            tree = insProduct.getFactory() + " - " +
+                    insProduct.getLaboratory() + " - " +
+                    insProduct.getSampleType() + " - " +
+                    insProduct.getSample() + " - " +
+                    insProduct.getModel();
+        }
         // 鏌ヨ鏍囧噯鏍�
         List<StandardProductList> standardProductLists = standardProductListMapper.selectList(Wrappers.<StandardProductList>lambdaQuery()
                 .eq(StandardProductList::getStandardMethodListId, insProduct.getStandardMethodListId())
@@ -134,7 +214,8 @@
             product.setTemplate(null);
             product.setStyle(null);
             return product;
-        }).collect(Collectors.toList());
+        }).sorted((o1, o2) -> (o1.getSort() == null ? 0 : o1.getSort())
+                - (o2.getSort() == null ? 0 : o2.getSort())).collect(Collectors.toList());
         return insProducts;
     }
 
@@ -213,6 +294,20 @@
         return false;
     }
 
+    @Override
+    public List<InsProduct> getRevocationInsProductList(Integer orderId) {
+        InsOrder insOrder = insOrderMapper.selectById(orderId);
+        if(Objects.isNull(insOrder)){
+            throw new RuntimeException("鏈壘鍒拌璁㈠崟");
+        }
+        String revocationInsProductIds = insOrder.getRevocationInsProductIds();
+        List<Integer> ids = new ArrayList<>();
+        if(StringUtils.isNotBlank(revocationInsProductIds)){
+            ids = Arrays.asList(revocationInsProductIds.split(",")).stream().map(Integer::parseInt).collect(Collectors.toList());
+        }
+        return baseMapper.getRevocationInsProductList(ids);
+    }
+
 
 }
 

--
Gitblit v1.9.3