From 370185978832d8d71a0f9f33be15a6a49b92eb37 Mon Sep 17 00:00:00 2001
From: liding <756868258@qq.com>
Date: 星期三, 13 五月 2026 16:08:17 +0800
Subject: [PATCH] fix:1. 报工报废入库不合格 2.同一报工批号一致,质检(合格或者不不合格)也一样

---
 src/main/java/com/ruoyi/quality/service/impl/QualityUnqualifiedServiceImpl.java |   51 +++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 47 insertions(+), 4 deletions(-)

diff --git a/src/main/java/com/ruoyi/quality/service/impl/QualityUnqualifiedServiceImpl.java b/src/main/java/com/ruoyi/quality/service/impl/QualityUnqualifiedServiceImpl.java
index c82886e..b3d93b8 100644
--- a/src/main/java/com/ruoyi/quality/service/impl/QualityUnqualifiedServiceImpl.java
+++ b/src/main/java/com/ruoyi/quality/service/impl/QualityUnqualifiedServiceImpl.java
@@ -23,6 +23,8 @@
 import com.ruoyi.quality.mapper.QualityUnqualifiedMapper;
 import com.ruoyi.quality.pojo.QualityInspect;
 import com.ruoyi.quality.pojo.QualityUnqualified;
+import com.ruoyi.stock.pojo.StockInRecord;
+import com.ruoyi.stock.service.StockInRecordService;
 import com.ruoyi.quality.service.IQualityInspectService;
 import com.ruoyi.quality.service.IQualityUnqualifiedService;
 import com.ruoyi.stock.service.StockUninventoryService;
@@ -33,6 +35,7 @@
 import java.math.BigDecimal;
 import java.time.LocalDate;
 import java.time.format.DateTimeFormatter;
+import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -50,6 +53,7 @@
     private final ProductionOrderRoutingOperationMapper productionOrderRoutingOperationMapper;
     private final ProductionOperationTaskMapper productionOperationTaskMapper;
     private final StockUninventoryService stockUninventoryService;
+    private final StockInRecordService stockInRecordService;
 
     @Override
     public IPage<QualityUnqualified> qualityUnqualifiedListPage(Page page, QualityUnqualified qualityUnqualified) {
@@ -67,6 +71,8 @@
     public int deal(QualityUnqualified qualityUnqualified) {
         QualityUnqualified unqualified = qualityUnqualifiedMapper.selectById(qualityUnqualified.getId());
         QualityInspect qualityInspect = qualityInspectService.getById(unqualified.getInspectId());
+        String batchNo = qualityInspect == null ? null
+                : resolveProductionBatchNo(qualityInspect.getProductMainId(), qualityInspect.getId(), qualityInspect.getProductModelId());
         if (ObjectUtils.isNotNull(qualityInspect) && qualityInspect.getInspectType() != 0) {
             switch (qualityUnqualified.getDealResult()) {
                 case "杩斾慨":
@@ -80,12 +86,12 @@
                     }
                     break;
                 case "鎶ュ簾":
-                    stockUtils.addUnStock(qualityInspect.getProductModelId(), unqualified.getQuantity(),
-                            StockInQualifiedRecordTypeEnum.DEFECTIVE_SCRAP.getCode(), unqualified.getId());
+                    stockUtils.addUnStockWithBatchNo(qualityInspect.getProductModelId(), unqualified.getQuantity(),
+                            StockInQualifiedRecordTypeEnum.DEFECTIVE_SCRAP.getCode(), unqualified.getId(), batchNo);
                     break;
                 case "璁╂鏀捐":
-                    stockUtils.addStock(qualityInspect.getProductModelId(), unqualified.getQuantity(),
-                            StockInQualifiedRecordTypeEnum.DEFECTIVE_PASS.getCode(), unqualified.getId());
+                    stockUtils.addStockWithBatchNo(qualityInspect.getProductModelId(), unqualified.getQuantity(),
+                            StockInQualifiedRecordTypeEnum.DEFECTIVE_PASS.getCode(), unqualified.getId(), batchNo);
                     break;
                 default:
                     break;
@@ -219,4 +225,41 @@
     private BigDecimal defaultDecimal(BigDecimal value) {
         return value == null ? BigDecimal.ZERO : value;
     }
+
+    private String resolveProductionBatchNo(Long productionProductMainId,
+                                            Long qualityInspectId,
+                                            Long productModelId) {
+        if (productModelId == null) {
+            return null;
+        }
+        if (productionProductMainId != null) {
+            StockInRecord productionRecord = stockInRecordService.getOne(
+                    Wrappers.<StockInRecord>lambdaQuery()
+                            .eq(StockInRecord::getRecordId, productionProductMainId)
+                            .eq(StockInRecord::getProductModelId, productModelId)
+                            .in(StockInRecord::getRecordType, Arrays.asList(
+                                    StockInQualifiedRecordTypeEnum.PRODUCTION_REPORT_STOCK_IN.getCode(),
+                                    StockInQualifiedRecordTypeEnum.PRODUCTION_SCRAP.getCode()))
+                            .isNotNull(StockInRecord::getBatchNo)
+                            .orderByDesc(StockInRecord::getId)
+                            .last("limit 1"),
+                    false);
+            if (productionRecord != null) {
+                return productionRecord.getBatchNo();
+            }
+        }
+        if (qualityInspectId == null) {
+            return null;
+        }
+        StockInRecord inspectRecord = stockInRecordService.getOne(
+                Wrappers.<StockInRecord>lambdaQuery()
+                        .eq(StockInRecord::getRecordId, qualityInspectId)
+                        .eq(StockInRecord::getProductModelId, productModelId)
+                        .eq(StockInRecord::getRecordType, StockInQualifiedRecordTypeEnum.QUALITYINSPECT_STOCK_IN.getCode())
+                        .isNotNull(StockInRecord::getBatchNo)
+                        .orderByDesc(StockInRecord::getId)
+                        .last("limit 1"),
+                false);
+        return inspectRecord == null ? null : inspectRecord.getBatchNo();
+    }
 }

--
Gitblit v1.9.3