From 781c5f73033ad1ae8c350210c46b4e24925d427b Mon Sep 17 00:00:00 2001
From: liding <756868258@qq.com>
Date: 星期四, 17 九月 2026 17:29:16 +0800
Subject: [PATCH] fix:委托编号更改

---
 inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderServiceImpl.java |   92 +++++++++++++++++++++++++++++++++++-----------
 1 files changed, 70 insertions(+), 22 deletions(-)

diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderServiceImpl.java b/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderServiceImpl.java
index c62c2ce..d7c0021 100644
--- a/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderServiceImpl.java
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderServiceImpl.java
@@ -84,6 +84,8 @@
 public class InsOrderServiceImpl extends ServiceImpl<InsOrderMapper, InsOrder>
         implements InsOrderService {
 
+    private static final String DIRECT_TEMPLATE_LABORATORY = "鏂拌仛";
+
     private InsOrderMapper insOrderMapper;
     private InsSampleService insSampleService;
     private InsSampleMapper insSampleMapper;
@@ -137,36 +139,52 @@
         insOrderMapper.updateById(insOrder);
         List<InsSample> insSamples = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery().eq(InsSample::getInsOrderId, orderId));
         List<Integer> ids = insSamples.stream().map(InsSample::getId).collect(Collectors.toList());
-        List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
-                .in(InsProduct::getInsSampleId, ids)
-                .eq(InsProduct::getState, 1)
-                .select(InsProduct::getSonLaboratory).groupBy(InsProduct::getSonLaboratory));
+        List<InsProduct> insProducts = ids.isEmpty()
+                ? Collections.emptyList()
+                : insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
+                        .in(InsProduct::getInsSampleId, ids)
+                        .eq(InsProduct::getState, 1)
+                        .select(InsProduct::getSonLaboratory).groupBy(InsProduct::getSonLaboratory));
+
+        InsOrder order = insOrderMapper.selectById(orderId);
+        boolean directTemplateOrder = isDirectTemplateOrder(order, insSamples);
+        Set<String> taskLaboratories = directTemplateOrder
+                ? Collections.singleton(DIRECT_TEMPLATE_LABORATORY)
+                : insProducts.stream()
+                        .map(InsProduct::getSonLaboratory)
+                        .filter(StringUtils::isNotBlank)
+                        .collect(Collectors.toCollection(LinkedHashSet::new));
+        if (!directTemplateOrder && taskLaboratories.size() != insProducts.size()) {
+            throw new ErrorException("璇ユ楠屽崟鏈夋湭缁存姢瀹為獙瀹ょ殑妫�楠岄」鐩�");
+        }
 
         // 鎵归噺娣诲姞妫�楠屼换鍔$姸鎬佽〃
-        List<InsOrderState> insOrderStateList = insProducts.stream().map(insProduct -> {
+        List<InsOrderState> insOrderStateList = taskLaboratories.stream()
+                .filter(laboratory -> insOrderStateService.count(Wrappers.<InsOrderState>lambdaQuery()
+                        .eq(InsOrderState::getInsOrderId, orderId)
+                        .eq(InsOrderState::getLaboratory, laboratory)) == 0)
+                .map(laboratory -> {
             InsOrderState insOrderState = new InsOrderState();
             insOrderState.setInsOrderId(orderId);
-            try {
-                insOrderState.setLaboratory(insProduct.getSonLaboratory());
-            } catch (NullPointerException e) {
-                throw new ErrorException("璇ユ楠屽崟鏈夋湭缁存姢瀹為獙瀹ょ殑妫�楠岄」鐩�");
-            }
+            insOrderState.setLaboratory(laboratory);
             insOrderState.setInsState(0);
             return insOrderState;
         }).collect(Collectors.toList());
-        insOrderStateService.saveBatch(insOrderStateList);
+        if (!insOrderStateList.isEmpty()) {
+            insOrderStateService.saveBatch(insOrderStateList);
+        }
 
         if (userId != null) {
             InsSampleUser insSampleUser = new InsSampleUser();
             insSampleUser.setState(0);
             insSampleUser.setUserId(userId);
             insSampleUser.setInsSampleId(orderId);
-            insSampleUser.setSonLaboratory(sonLaboratory);
+            insSampleUser.setSonLaboratory(directTemplateOrder
+                    ? DIRECT_TEMPLATE_LABORATORY : sonLaboratory);
             insSampleUserMapper.insert(insSampleUser);
         }
 
         // 鍒ゆ柇璁㈠崟鏈夋病鏈夌粦瀹氭娊鏍疯鍒�
-        InsOrder order = insOrderMapper.selectById(orderId);
         if (order.getQuarterItemId() != null) {
            // 闇�瑕佹坊鍔犱笅鍙戞椂闂村埌鎶芥牱鏃堕棿, 鍙栨牱浜哄憳灏辨槸妫�娴嬩汉
             SpotCheckQuarterItem spotCheckQuarterItem = spotCheckQuarterItemMapper.selectById(order.getQuarterItemId());
@@ -177,6 +195,22 @@
         }
 
         return 1;
+    }
+
+    private boolean isDirectTemplateOrder(InsOrder order, List<InsSample> samples) {
+        if (order == null || CollectionUtils.isEmpty(samples)) {
+            return false;
+        }
+        Long snapshotCount = insOrderStandardTemplateMapper.selectCount(
+                Wrappers.<InsOrderStandardTemplate>lambdaQuery()
+                        .eq(InsOrderStandardTemplate::getInsOrderId, order.getId()));
+        return snapshotCount > 0 && samples.stream().anyMatch(sample ->
+                sample.getStandardMethodListId() == null
+                        && StringUtils.isBlank(sample.getFactory())
+                        && StringUtils.isBlank(sample.getSampleType())
+                        && StringUtils.isBlank(sample.getModel())
+                        && StringUtils.isBlank(order.getFactory())
+                        && StringUtils.isBlank(order.getSampleType()));
     }
 
 
@@ -430,6 +464,10 @@
         if (dto == null || dto.getInsOrder() == null || dto.getStandardTreeId() == null) {
             throw new ErrorException("涓嬪崟淇℃伅鎴栨爣鍑嗕笉鑳戒负绌�");
         }
+        String sampleCode = StringUtils.trim(dto.getSampleCode());
+        if (StringUtils.isBlank(sampleCode) || sampleCode.length() < 2) {
+            throw new ErrorException("鏍峰搧缂栧彿涓嶈兘涓虹┖涓斾笉鑳藉皯浜�2浣�");
+        }
         StandardTree standard = standardTreeService.getById(dto.getStandardTreeId());
         if (standard == null || StringUtils.isBlank(standard.getSample())
                 || standard.getSampleType() != null || standard.getModel() != null) {
@@ -506,7 +544,7 @@
 
         InsSample sample = new InsSample();
         sample.setInsOrderId(order.getId());
-        sample.setSampleCode(dto.getSampleCode());
+        sample.setSampleCode(sampleCode);
         sample.setFactory(null);
         sample.setLaboratory(standard.getLaboratory());
         sample.setSampleType(null);
@@ -530,7 +568,7 @@
             product.setModel(null);
             product.setTemplateId(item.getTemplateId());
             product.setTemplateRowIndex(item.getTemplateRowIndex());
-            product.setSonLaboratory("鏂拌仛");
+            product.setSonLaboratory(DIRECT_TEMPLATE_LABORATORY);
             product.setState(1);
             product.setSort(productSort++);
             insProductMapper.insert(product);
@@ -639,15 +677,28 @@
         if (insOrder.getState() == 1) {
             //瀹℃牳閫氳繃鎵嶄細鐢熸垚濮旀墭缂栧彿
             InsOrder order = this.getById(insOrder.getId());
-            // 濮旀墭缂栧彿鎸夐�佹牱鏃ユ湡鐙珛娴佹按锛屼緥濡傦細LMSY-20260909-01銆�
+            List<InsSample> insSamples = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery()
+                    .eq(InsSample::getInsOrderId, insOrder.getId())
+                    .orderByAsc(InsSample::getId));
+            // 濮旀墭缂栧彿鎸夐�佹牱鏃ユ湡鐢熸垚锛涙柊鑱氬崟鏍峰搧璁㈠崟鐨勬湯涓や綅鍙栨牱鍝佺紪鍙锋湯涓や綅銆�
             // 鍘嗗彶/澶栭儴璁㈠崟鏈~鍐欓�佹牱鏃ユ湡鏃跺洖閫�鍒板綋澶╋紝閬垮厤褰卞搷鍘熸湁娴佺▼銆�
             LocalDate entrustDate = order.getSampleDate() == null ? LocalDate.now() : order.getSampleDate();
             String entrustCodePrefix = "LMSY-"
                     + entrustDate.format(DateTimeFormatter.BASIC_ISO_DATE)
                     + "-";
-            String no = numberGenerator.generateNumberWithPrefix(2,
-                    entrustCodePrefix,
-                    InsOrder::getEntrustCode);
+            String no;
+            if (isDirectTemplateOrder(order, insSamples)) {
+                String sampleCode = insSamples.get(0).getSampleCode();
+                if (StringUtils.isBlank(sampleCode) || sampleCode.trim().length() < 2) {
+                    throw new ErrorException("鏍峰搧缂栧彿涓嶈兘涓虹┖涓斾笉鑳藉皯浜�2浣�");
+                }
+                sampleCode = sampleCode.trim();
+                no = entrustCodePrefix + sampleCode.substring(sampleCode.length() - 2);
+            } else {
+                no = numberGenerator.generateNumberWithPrefix(2,
+                        entrustCodePrefix,
+                        InsOrder::getEntrustCode);
+            }
             // 鍒ゆ柇鏄惁鏄搴︽楠�, 鏄搴︽楠屽彇娑堝師鏉愭枡瀛e害妫�楠屼笅鍗�
             if (InsOrderTypeConstants.QUARTERLY_TEST.equals(order.getOrderType())) {
                 ifsInventoryQuantityMapper.update(null,  Wrappers.<IfsInventoryQuantity>lambdaUpdate()
@@ -665,9 +716,6 @@
             }
 
             int count = 1;
-            // 鏌ヨ鏍峰搧琛�
-            List<InsSample> insSamples = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery()
-                    .eq(InsSample::getInsOrderId, insOrder.getId()));
             for (InsSample insSample : insSamples) {
                 if (StringUtils.isBlank(insSample.getSampleCode())) {
                     // 濡傛灉鍙湁涓�涓牱鍝佸氨涓嶉渶瑕佹嫾鎺ユ暟瀛�

--
Gitblit v1.9.3