From 02047d917004c8f7dc44627c847583e54c297226 Mon Sep 17 00:00:00 2001
From: huminmin <mac@MacBook-Pro.local>
Date: 星期五, 29 五月 2026 15:16:18 +0800
Subject: [PATCH] 入库管理的审批,支持修改入库数量

---
 src/main/java/com/ruoyi/stock/controller/StockInRecordController.java               |    6 +++---
 src/main/java/com/ruoyi/production/service/impl/ProductionOrderPickServiceImpl.java |    7 +++++--
 src/main/java/com/ruoyi/stock/service/StockInRecordService.java                     |    2 +-
 src/main/java/com/ruoyi/stock/service/impl/StockInRecordServiceImpl.java            |   30 +++++++++++++++++++++++-------
 src/main/java/com/ruoyi/stock/dto/StockInRecordDto.java                             |   14 ++++++++++++++
 5 files changed, 46 insertions(+), 13 deletions(-)

diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductionOrderPickServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductionOrderPickServiceImpl.java
index 554b95e..5b566b2 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductionOrderPickServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductionOrderPickServiceImpl.java
@@ -18,6 +18,7 @@
 import com.ruoyi.production.pojo.ProductionOrderPick;
 import com.ruoyi.production.pojo.ProductionOrderPickRecord;
 import com.ruoyi.production.service.ProductionOrderPickService;
+import com.ruoyi.stock.dto.StockInRecordDto;
 import com.ruoyi.stock.dto.StockInventoryDto;
 import com.ruoyi.stock.mapper.StockInventoryMapper;
 import com.ruoyi.stock.pojo.StockInRecord;
@@ -726,9 +727,11 @@
             if (stockInRecord == null || stockInRecord.getId() == null) {
                 throw new ServiceException("鍥炶ˉ搴撳瓨澶辫触锛氭湭鎵惧埌瀵瑰簲鍏ュ簱鐢宠璁板綍");
             }
+            StockInRecordDto.StockInRecordApproveItemDto approveItem = new StockInRecordDto.StockInRecordApproveItemDto();
+            approveItem.setId(stockInRecord.getId());
             stockInRecordService.batchApprove(
-                    Collections.singletonList(stockInRecord.getId()),
-                    ReviewStatusEnum.APPROVED.getCode()
+                    ReviewStatusEnum.APPROVED.getCode(),
+                    Collections.singletonList(approveItem)
             );
         } catch (ServiceException ex) {
             throw ex;
diff --git a/src/main/java/com/ruoyi/stock/controller/StockInRecordController.java b/src/main/java/com/ruoyi/stock/controller/StockInRecordController.java
index f4ca0cc..774a95c 100644
--- a/src/main/java/com/ruoyi/stock/controller/StockInRecordController.java
+++ b/src/main/java/com/ruoyi/stock/controller/StockInRecordController.java
@@ -61,12 +61,12 @@
 
     @PostMapping("/approve")
     @Log(title = "鍏ュ簱绠$悊-瀹℃壒鍏ュ簱", businessType = BusinessType.UPDATE)
-    @Operation(summary = "鎵归噺瀹℃壒鍏ュ簱璁板綍")
+    @Operation(summary = "鎵归噺瀹℃壒鍏ュ簱璁板綍锛堟敮鎸佷慨鏀瑰叆搴撴暟閲忥級")
     public AjaxResult approve(@RequestBody StockInRecordDto approveDto) {
-        if(CollectionUtils.isEmpty(approveDto.getIds())){
+        if(CollectionUtils.isEmpty(approveDto.getItems())){
             return AjaxResult.error("璇烽�夋嫨鑷冲皯涓�鏉℃暟鎹�");
         }
-        stockInRecordService.batchApprove(approveDto.getIds(), approveDto.getApprovalStatus());
+        stockInRecordService.batchApprove(approveDto.getApprovalStatus(), approveDto.getItems());
         return AjaxResult.success();
     }
 
diff --git a/src/main/java/com/ruoyi/stock/dto/StockInRecordDto.java b/src/main/java/com/ruoyi/stock/dto/StockInRecordDto.java
index f4f03ba..a4a6101 100644
--- a/src/main/java/com/ruoyi/stock/dto/StockInRecordDto.java
+++ b/src/main/java/com/ruoyi/stock/dto/StockInRecordDto.java
@@ -4,6 +4,7 @@
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
+import java.math.BigDecimal;
 import java.util.List;
 
 
@@ -43,4 +44,17 @@
     @Schema(description = "婧愬崟鍙�")
     private String sourceOrderNo;
 
+    private List<StockInRecordApproveItemDto> items;
+
+    @Data
+    @Schema(description = "鍏ュ簱瀹℃壒鏄庣粏椤�")
+    public static class StockInRecordApproveItemDto {
+
+        @Schema(description = "鍏ュ簱璁板綍ID")
+        private Long id;
+
+        @Schema(description = "鍏ュ簱鏁伴噺")
+        private BigDecimal stockInNum;
+
+    }
 }
diff --git a/src/main/java/com/ruoyi/stock/service/StockInRecordService.java b/src/main/java/com/ruoyi/stock/service/StockInRecordService.java
index 117b70f..9742c3a 100644
--- a/src/main/java/com/ruoyi/stock/service/StockInRecordService.java
+++ b/src/main/java/com/ruoyi/stock/service/StockInRecordService.java
@@ -22,7 +22,7 @@
 
     void exportStockInRecord(HttpServletResponse response, StockInRecordDto stockInRecordDto);
 
-    int batchApprove(List<Long> ids, Integer approvalStatus);
+    int batchApprove(Integer approvalStatus, List<StockInRecordDto.StockInRecordApproveItemDto> items);
 
     int batchReAudit(List<Long> ids);
 }
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 7facfcf..2436940 100644
--- a/src/main/java/com/ruoyi/stock/service/impl/StockInRecordServiceImpl.java
+++ b/src/main/java/com/ruoyi/stock/service/impl/StockInRecordServiceImpl.java
@@ -207,14 +207,18 @@
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public int batchApprove(List<Long> ids, Integer approvalStatus) {
-        if (CollectionUtils.isEmpty(ids)) {
+    public int batchApprove(Integer approvalStatus, List<StockInRecordDto.StockInRecordApproveItemDto> items) {
+        if (CollectionUtils.isEmpty(items)) {
             throw new BaseException("璇烽�夋嫨鑷冲皯涓�鏉℃暟鎹�");
         }
         if (approvalStatus == null || (!ReviewStatusEnum.APPROVED.getCode().equals(approvalStatus) && !ReviewStatusEnum.REJECTED.getCode().equals(approvalStatus))) {
             throw new BaseException("瀹℃壒鐘舵�佸�兼棤鏁�");
         }
-        for (Long id : ids) {
+        for (StockInRecordDto.StockInRecordApproveItemDto item : items) {
+            Long id = item.getId();
+            if (id == null) {
+                throw new BaseException("鍏ュ簱璁板綍ID涓嶈兘涓虹┖");
+            }
             StockInRecord stockInRecord = stockInRecordMapper.selectById(id);
             if (stockInRecord == null) {
                 throw new BaseException("鍏ュ簱璁板綍涓嶅瓨鍦�,鏃犳硶瀹℃壒!!!");
@@ -222,6 +226,17 @@
             if (stockInRecord.getApprovalStatus() != null && !ReviewStatusEnum.PENDING_REVIEW.getCode().equals(stockInRecord.getApprovalStatus())) {
                 throw new BaseException("鍙湁寰呭鎵圭姸鎬佺殑璁板綍鎵嶈兘瀹℃壒,鍏ュ簱鎵规:" + stockInRecord.getInboundBatches());
             }
+
+            // 鑾峰彇瀹℃壒鏃朵慨鏀圭殑鍏ュ簱鏁伴噺锛屽鏋滄病鏈変慨鏀瑰垯浣跨敤鍘熸暟閲�
+            final BigDecimal finalStockInNum;
+            if (item.getStockInNum() != null && item.getStockInNum().compareTo(BigDecimal.ZERO) > 0) {
+                finalStockInNum = item.getStockInNum();
+                // 鏇存柊鍏ュ簱璁板綍鐨勫叆搴撴暟閲�
+                stockInRecord.setStockInNum(finalStockInNum);
+            } else {
+                finalStockInNum = stockInRecord.getStockInNum();
+            }
+
             stockInRecord.setApprovalStatus(approvalStatus);
             stockInRecordMapper.updateById(stockInRecord);
 
@@ -237,10 +252,11 @@
                     // 鍚堟牸鍏ュ簱 -> 鍏堟煡搴撳瓨锛屽瓨鍦ㄥ垯鏇存柊锛屼笉瀛樺湪鍒欐柊澧�
                     StockInventory stockInventory = getStockInventory(stockInRecord.getProductModelId(), stockInRecord.getBatchNo());
                     StockInventoryDto stockInventoryDto = getStockInventoryDto(stockInRecord);
+                    stockInventoryDto.setQualitity(finalStockInNum);
                     if (stockInventory == null) {
                         stockInventoryMapper.insert(new StockInventory() {{
                             setProductModelId(stockInRecord.getProductModelId());
-                            setQualitity(stockInRecord.getStockInNum());
+                            setQualitity(finalStockInNum);
                             setBatchNo(stockInRecord.getBatchNo());
                             setRemark(stockInRecord.getRemark());
                             setWarnNum(stockInRecord.getWarnNum());
@@ -257,14 +273,14 @@
                     StockUninventoryDto stockUninventoryDto = new StockUninventoryDto();
                     stockUninventoryDto.setProductModelId(stockInRecord.getProductModelId());
                     stockUninventoryDto.setBatchNo(stockInRecord.getBatchNo());
-                    stockUninventoryDto.setQualitity(stockInRecord.getStockInNum());
+                    stockUninventoryDto.setQualitity(finalStockInNum);
                     stockUninventoryDto.setRemark(stockInRecord.getRemark());
                     stockUninventoryDto.setManufacturerId(stockInRecord.getManufacturerId());
                     stockUninventoryDto.setSource(stockInRecord.getSource());
                     if (stockUninventory == null) {
                         stockUninventoryMapper.insert(new StockUninventory() {{
                             setProductModelId(stockInRecord.getProductModelId());
-                            setQualitity(stockInRecord.getStockInNum());
+                            setQualitity(finalStockInNum);
                             setBatchNo(stockInRecord.getBatchNo());
                             setRemark(stockInRecord.getRemark());
                             setManufacturerId(stockInRecord.getManufacturerId());
@@ -277,7 +293,7 @@
                 }
             }
         }
-        return ids.size();
+        return items.size();
     }
 
     private static @NonNull StockInventoryDto getStockInventoryDto(StockInRecord stockInRecord) {

--
Gitblit v1.9.3