From 85f9e4465f7cf545f3bd2cdc0661a9ce938751dc Mon Sep 17 00:00:00 2001
From: gongchunyi <deslre0381@gmail.com>
Date: 星期五, 18 九月 2026 15:56:39 +0800
Subject: [PATCH] fix: 质检是否入库

---
 src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java |   93 ++++++++++++++++++++++++++++++++++------------
 1 files changed, 69 insertions(+), 24 deletions(-)

diff --git a/src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java b/src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java
index 0f410fd..8a4fe8c 100644
--- a/src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java
+++ b/src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java
@@ -10,8 +10,10 @@
 import com.deepoove.poi.XWPFTemplate;
 import com.deepoove.poi.config.Configure;
 import com.ruoyi.common.enums.StockInQualifiedRecordTypeEnum;
+import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.common.utils.HackLoopTableRenderPolicy;
 import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.framework.web.domain.R;
 import com.ruoyi.procurementrecord.service.ProcurementRecordService;
 import com.ruoyi.procurementrecord.utils.StockUtils;
 import com.ruoyi.quality.dto.QualityInspectDto;
@@ -39,6 +41,7 @@
 import java.math.BigDecimal;
 import java.net.URLEncoder;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.stream.Collectors;
@@ -90,32 +93,32 @@
     @Override
     public int submit(QualityInspect inspect) {
         QualityInspect qualityInspect = qualityInspectMapper.selectById(inspect.getId());
-        //鎻愪氦鍓嶅繀椤诲垽鏂槸鍚﹀悎鏍�
-        if (ObjectUtils.isNull(qualityInspect.getCheckResult())) {
-            throw new RuntimeException("璇峰厛鍒ゆ柇鏄惁鍚堟牸");
+
+        //鎻愪氦鍓嶅繀椤诲垽鏂槸鍚﹀悎鏍硷紙閫氳繃鍚堟牸鏁伴噺鍜屼笉鍚堟牸鏁伴噺鏉ュ垽鏂級
+        if (ObjectUtils.isNull(qualityInspect.getQualifiedQuantity())) {
+            throw new ServiceException("鍚堟牸鏁伴噺涓嶈兘涓虹┖");
         }
 
-        // 鍖哄垎鍚堟牸鏁伴噺浠ュ強涓嶅悎鏍煎鐞嗚繘琛屽搴旂殑澶勭悊
-        Assert.isTrue(qualityInspect.getQuantity().compareTo(qualityInspect.getQualifiedQuantity().add(qualityInspect.getUnqualifiedQuantity())) == 0,"璇锋鏌ュ悎鏍兼暟閲忓拰涓嶅悎鏍兼暟閲忥紝闇�瑕佸悎鏍兼暟閲�+涓嶅悎鏍兼暟閲忎笌鎬绘暟淇濇寔涓�鑷�");
-        if(qualityInspect.getQualifiedQuantity().compareTo(BigDecimal.ZERO) > 0){
-            //鍚堟牸鐩存帴鍏ュ簱
-            // stockUtils.addStock(qualityInspect.getProductModelId(), qualityInspect.getQuantity(), StockInQualifiedRecordTypeEnum.QUALITYINSPECT_STOCK_IN.getCode(), qualityInspect.getId());
-            //浠呮坊鍔犲叆搴撹褰�
-            StockInventoryDto stockInventoryDto = new StockInventoryDto();
-            //濡傛灉鏄噰璐川妫�鍚堟牸鍏ュ簱閫夌敤CUSTOMIZATION_UNSTOCK_OUT,鍏朵綑鍚堟牸鍏ュ簱閫夌敤QUALITYINSPECT_STOCK_IN
-            stockInventoryDto.setRecordType(String.valueOf(StockInQualifiedRecordTypeEnum.QUALITYINSPECT_STOCK_IN.getCode()));
-            if (ObjectUtils.isNotEmpty(qualityInspect.getPurchaseLedgerId())){
-                stockInventoryDto.setRecordType(String.valueOf(StockInQualifiedRecordTypeEnum.CUSTOMIZATION_UNSTOCK_OUT.getCode()));
-            }
-            stockInventoryDto.setRecordId(qualityInspect.getId());
-            stockInventoryDto.setProductModelId(qualityInspect.getProductModelId());
-            stockInventoryDto.setQualitity(qualityInspect.getQualifiedQuantity());
-            stockInventoryDto.setBatchNo(resolveProductionBatchNo(
-                    qualityInspect.getProductMainId(),
-                    qualityInspect.getId(),
-                    qualityInspect.getProductModelId()));
-            stockInventoryService.addStockInRecordOnly(stockInventoryDto);
+        if (ObjectUtils.isNull(qualityInspect.getUnqualifiedQuantity())) {
+            throw new ServiceException("涓嶅悎鏍兼暟閲忎笉鑳戒负绌�");
         }
+
+        // 濡傛灉鍚堟牸鏁伴噺涓虹┖锛岃涓�0
+        if (qualityInspect.getQualifiedQuantity() == null) {
+            qualityInspect.setQualifiedQuantity(BigDecimal.ZERO);
+        }
+
+        // 濡傛灉涓嶅悎鏍兼暟閲忎负绌猴紝璁句负0
+        if (qualityInspect.getUnqualifiedQuantity() == null) {
+            qualityInspect.setUnqualifiedQuantity(BigDecimal.ZERO);
+        }
+
+        // 鍚堟牸鐩存帴鍏ュ簱锛堝凡鐢熸垚杩囧叆搴撹褰曞垯璺宠繃锛岄伩鍏嶇紪杈戝叆搴撳悗鎻愪氦瀵艰嚧閲嶅鍏ュ簱锛�
+        if(qualityInspect.getQualifiedQuantity().compareTo(BigDecimal.ZERO) > 0
+                && !hasStockInRecord(qualityInspect)){
+            stockInQualified(qualityInspect);
+        }
+        // 涓嶅悎鏍煎鐞�
         if(qualityInspect.getUnqualifiedQuantity().compareTo(BigDecimal.ZERO) > 0){
             QualityUnqualified qualityUnqualified = new QualityUnqualified();
             BeanUtils.copyProperties(qualityInspect, qualityUnqualified);
@@ -168,6 +171,40 @@
                         .last("limit 1"),
                 false);
         return inspectRecord == null ? null : inspectRecord.getBatchNo();
+    }
+
+    /**
+     * 鍚堟牸鏁伴噺鐢熸垚鍏ュ簱璁板綍涓庡簱瀛�
+     */
+    private void stockInQualified(QualityInspect qualityInspect) {
+        //浠呮坊鍔犲叆搴撹褰�
+        StockInventoryDto stockInventoryDto = new StockInventoryDto();
+        stockInventoryDto.setRecordType(resolveStockInRecordType(qualityInspect));
+        stockInventoryDto.setRecordId(qualityInspect.getId());
+        stockInventoryDto.setProductModelId(qualityInspect.getProductModelId());
+        stockInventoryDto.setQualitity(qualityInspect.getQualifiedQuantity());
+        stockInventoryDto.setBatchNo(resolveProductionBatchNo(
+                qualityInspect.getProductMainId(),
+                qualityInspect.getId(),
+                qualityInspect.getProductModelId()));
+        stockInventoryService.addStockInRecordOnly(stockInventoryDto);
+    }
+
+    private String resolveStockInRecordType(QualityInspect qualityInspect) {
+        if (ObjectUtils.isNotEmpty(qualityInspect.getPurchaseLedgerId())) {
+            return StockInQualifiedRecordTypeEnum.CUSTOMIZATION_UNSTOCK_OUT.getCode();
+        }
+        return StockInQualifiedRecordTypeEnum.QUALITYINSPECT_STOCK_IN.getCode();
+    }
+
+    /**
+     * 鍒ゆ柇璇ユ楠屽崟鏄惁宸茬敓鎴愯繃鍏ュ簱璁板綍
+     */
+    private boolean hasStockInRecord(QualityInspect qualityInspect) {
+        return stockInRecordService.count(Wrappers.<StockInRecord>lambdaQuery()
+                .eq(StockInRecord::getRecordId, qualityInspect.getId())
+                .eq(StockInRecord::getProductModelId, qualityInspect.getProductModelId())
+                .eq(StockInRecord::getRecordType, resolveStockInRecordType(qualityInspect))) > 0;
     }
 
     /*鐢熸垚妫�楠屾姤鍛�*/
@@ -233,7 +270,15 @@
         }
         QualityInspect qualityInspect = new QualityInspect();
         BeanUtils.copyProperties(qualityInspectDto, qualityInspect);
-        return qualityInspectMapper.updateById(qualityInspect);
+        int result = qualityInspectMapper.updateById(qualityInspect);
+        // 缂栬緫鏃堕�夋嫨"鍏ュ簱"鍒欑敓鎴愬叆搴撹褰曚笌搴撳瓨锛岄�夋嫨"涓嶅叆搴�"鍒欏彧淇濆瓨璐ㄦ璁板綍
+        if (Integer.valueOf(1).equals(qualityInspectDto.getIsStockIn())) {
+            if (hasStockInRecord(qualityInspect)) {
+                throw new ServiceException("璇ユ楠屽崟宸茬敓鎴愯繃鍏ュ簱璁板綍锛岃鍕块噸澶嶅叆搴�");
+            }
+            stockInQualified(qualityInspect);
+        }
+        return result;
     }
 
     @Override

--
Gitblit v1.9.3