From 00b31db4f3677dc919a1c4e1c227fd8fdd65f60f Mon Sep 17 00:00:00 2001
From: yuan <123@>
Date: 星期四, 11 六月 2026 19:30:35 +0800
Subject: [PATCH] fix: 修复采购库存自动提交同一个入库单,多个同一规格入库报错

---
 src/main/java/com/ruoyi/stock/service/impl/StockInRecordServiceImpl.java |   58 +++++++++++++++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 53 insertions(+), 5 deletions(-)

diff --git a/src/main/java/com/ruoyi/stock/service/impl/StockInRecordServiceImpl.java b/src/main/java/com/ruoyi/stock/service/impl/StockInRecordServiceImpl.java
index a84374c..5fbc6b3 100644
--- a/src/main/java/com/ruoyi/stock/service/impl/StockInRecordServiceImpl.java
+++ b/src/main/java/com/ruoyi/stock/service/impl/StockInRecordServiceImpl.java
@@ -52,12 +52,13 @@
     // 鏂板鍏ュ簱
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public int add(StockInRecordDto stockInRecordDto) {
+    public StockInRecord add(StockInRecordDto stockInRecordDto) {
         String no = OrderUtils.countTodayByCreateTime(stockInRecordMapper, "RK","inbound_batches");
         stockInRecordDto.setInboundBatches(no);
         StockInRecord stockInRecord = new StockInRecord();
         BeanUtils.copyProperties(stockInRecordDto, stockInRecord);
-        return stockInRecordMapper.insert(stockInRecord);
+        stockInRecordMapper.insert(stockInRecord);
+        return stockInRecord;
     }
 
     @Override
@@ -69,9 +70,56 @@
             throw new BaseException("璇ュ叆搴撹褰曚笉瀛樺湪,鏃犳硶鏇存柊!!!");
         }
 
+        // 璁板綍淇敼鍓嶇殑 batch_no
+        String oldBatchNo = stockInRecord.getBatchNo();
+        String newBatchNo = stockInRecordDto.getBatchNo();
+
         String[] ignoreProperties = {"id", "inbound_batches"};//鎺掗櫎id灞炴��
         BeanUtils.copyProperties(stockInRecordDto, stockInRecord, ignoreProperties);
-        return stockInRecordMapper.updateById(stockInRecord);
+        int result = stockInRecordMapper.updateById(stockInRecord);
+
+        // 濡傛灉 batch_no 鍙戠敓鍙樺寲锛岄渶瑕佸悓姝ユ洿鏂板叧鑱旇〃
+        if (newBatchNo != null && !newBatchNo.equals(oldBatchNo)) {
+            updateRelatedBatchNo(stockInRecord, oldBatchNo, newBatchNo);
+        }
+
+        return result;
+    }
+
+    /**
+     * 鍚屾鏇存柊鍏宠仈琛ㄧ殑 batch_no
+     * @param stockInRecord 鍏ュ簱璁板綍
+     * @param oldBatchNo 淇敼鍓嶇殑鎵瑰彿
+     * @param newBatchNo 淇敼鍚庣殑鎵瑰彿
+     */
+    private void updateRelatedBatchNo(StockInRecord stockInRecord, String oldBatchNo, String newBatchNo) {
+        // 1. 鏇存柊 stock_inventory 琛紙鍚堟牸搴撳瓨锛�
+        LambdaQueryWrapper<StockInventory> inventoryEq = new LambdaQueryWrapper<StockInventory>()
+                .eq(StockInventory::getProductModelId, stockInRecord.getProductModelId());
+        if (StringUtils.isEmpty(oldBatchNo)) {
+            inventoryEq.isNull(StockInventory::getBatchNo);
+        } else {
+            inventoryEq.eq(StockInventory::getBatchNo, oldBatchNo);
+        }
+        StockInventory stockInventory = stockInventoryMapper.selectOne(inventoryEq);
+        if (stockInventory != null) {
+            stockInventory.setBatchNo(newBatchNo);
+            stockInventoryMapper.updateById(stockInventory);
+        }
+
+        // 2. 鏇存柊 stock_uninventory 琛紙涓嶅悎鏍煎簱瀛橈級
+        LambdaQueryWrapper<StockUninventory> uninventoryEq = new LambdaQueryWrapper<StockUninventory>()
+                .eq(StockUninventory::getProductModelId, stockInRecord.getProductModelId());
+        if (StringUtils.isEmpty(oldBatchNo)) {
+            uninventoryEq.isNull(StockUninventory::getBatchNo);
+        } else {
+            uninventoryEq.eq(StockUninventory::getBatchNo, oldBatchNo);
+        }
+        StockUninventory stockUninventory = stockUninventoryMapper.selectOne(uninventoryEq);
+        if (stockUninventory != null) {
+            stockUninventory.setBatchNo(newBatchNo);
+            stockUninventoryMapper.updateById(stockUninventory);
+        }
     }
 
     @Override
@@ -216,9 +264,9 @@
             if (stockInRecord == null) {
                 throw new BaseException("鍏ュ簱璁板綍涓嶅瓨鍦�,鏃犳硶瀹℃壒!!!");
             }
-            if (stockInRecord.getApprovalStatus() != null && !ReviewStatusEnum.PENDING_REVIEW.getCode().equals(stockInRecord.getApprovalStatus())) {
+            /*if (stockInRecord.getApprovalStatus() != null && !ReviewStatusEnum.PENDING_REVIEW.getCode().equals(stockInRecord.getApprovalStatus())) {
                 throw new BaseException("鍙湁寰呭鎵圭姸鎬佺殑璁板綍鎵嶈兘瀹℃壒,鍏ュ簱鎵规:" + stockInRecord.getInboundBatches());
-            }
+            }*/
             stockInRecord.setApprovalStatus(approvalStatus);
             stockInRecordMapper.updateById(stockInRecord);
 

--
Gitblit v1.9.3