From 67c5d3ea86cfaad45c0150b96949dbcb6729b4d0 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期一, 13 七月 2026 11:58:11 +0800
Subject: [PATCH] 1.仓储物流-库存可用量管理

---
 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/productissue/MesWmProductIssueServiceImpl.java |   30 ++++++++++++++++++++++++++++--
 1 files changed, 28 insertions(+), 2 deletions(-)

diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/productissue/MesWmProductIssueServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/productissue/MesWmProductIssueServiceImpl.java
index e794078..b193252 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/productissue/MesWmProductIssueServiceImpl.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/productissue/MesWmProductIssueServiceImpl.java
@@ -14,9 +14,11 @@
 import cn.iocoder.yudao.module.mes.dal.mysql.wm.productissue.MesWmProductIssueMapper;
 import cn.iocoder.yudao.module.mes.enums.MesBizTypeConstants;
 import cn.iocoder.yudao.module.mes.enums.wm.MesWmProductIssueStatusEnum;
+import cn.iocoder.yudao.module.mes.enums.wm.MesWmStockReserveBizTypeEnum;
 import cn.iocoder.yudao.module.mes.enums.wm.MesWmTransactionTypeEnum;
 import cn.iocoder.yudao.module.mes.service.md.workstation.MesMdWorkstationService;
 import cn.iocoder.yudao.module.mes.service.pro.workorder.MesProWorkOrderService;
+import cn.iocoder.yudao.module.mes.service.wm.stockreserve.MesWmStockReserveService;
 import cn.iocoder.yudao.module.mes.service.wm.transaction.MesWmTransactionService;
 import cn.iocoder.yudao.module.mes.service.wm.transaction.dto.MesWmTransactionSaveReqDTO;
 import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseAreaService;
@@ -63,6 +65,8 @@
     private MesWmWarehouseLocationService locationService;
     @Resource
     private MesWmWarehouseAreaService areaService;
+    @Resource
+    private MesWmStockReserveService stockReserveService;
 
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -143,6 +147,22 @@
             throw exception(WM_PRODUCT_ISSUE_DETAIL_QUANTITY_MISMATCH);
         }
 
+        // 鍒涘缓搴撳瓨鍗犵敤锛堟寜鏄庣粏鍗犵敤搴撳瓨锛�
+        List<MesWmProductIssueDetailDO> details = issueDetailService.getProductIssueDetailListByIssueId(id);
+        for (MesWmProductIssueDetailDO detail : details) {
+            if (detail.getMaterialStockId() != null && detail.getQuantity() != null) {
+                stockReserveService.createReserve(
+                        detail.getMaterialStockId(),
+                        MesWmStockReserveBizTypeEnum.PRODUCT_ISSUE.getType(),
+                        id,
+                        issue.getCode(),
+                        detail.getId(),
+                        detail.getItemId(),
+                        detail.getQuantity()
+                );
+            }
+        }
+
         // 鎵ц鎷h揣锛堝緟鎷h揣 鈫� 寰呮墽琛岄鍑猴級
         issueMapper.updateById(new MesWmProductIssueDO()
                 .setId(id).setStatus(MesWmProductIssueStatusEnum.APPROVED.getStatus()));
@@ -166,10 +186,13 @@
             throw exception(WM_PRODUCT_ISSUE_DETAIL_QUANTITY_MISMATCH);
         }
 
-        // 2. 閬嶅巻鎵�鏈夋槑缁嗭紝鍒涘缓搴撳瓨浜嬪姟锛堟墸鍑忓簱瀛� + 璁板綍娴佹按锛�
+        // 2. 纭鍗犵敤杞嚭搴擄紙閲婃斁鍗犵敤閲忥級
+        stockReserveService.confirmReserveToOutbound(MesWmStockReserveBizTypeEnum.PRODUCT_ISSUE.getType(), id);
+
+        // 3. 閬嶅巻鎵�鏈夋槑缁嗭紝鍒涘缓搴撳瓨浜嬪姟锛堟墸鍑忓簱瀛� + 璁板綍娴佹按锛�
         createTransactionList(issue);
 
-        // 3. 鏇存柊鍑哄簱鍗曠姸鎬� + 棰嗘枡鏃ユ湡
+        // 4. 鏇存柊鍑哄簱鍗曠姸鎬� + 棰嗘枡鏃ユ湡
         issueMapper.updateById(new MesWmProductIssueDO()
                 .setId(id).setStatus(MesWmProductIssueStatusEnum.FINISHED.getStatus())
                 .setIssueDate(LocalDateTime.now()));
@@ -216,6 +239,9 @@
             throw exception(WM_PRODUCT_ISSUE_CANCEL_NOT_ALLOWED);
         }
 
+        // 閲婃斁搴撳瓨鍗犵敤
+        stockReserveService.releaseReserve(MesWmStockReserveBizTypeEnum.PRODUCT_ISSUE.getType(), id);
+
         // 鍙栨秷
         issueMapper.updateById(new MesWmProductIssueDO()
                 .setId(id).setStatus(MesWmProductIssueStatusEnum.CANCELED.getStatus()));

--
Gitblit v1.9.3