From 618030e495a9520291ebfd709c80c4c8a8b73451 Mon Sep 17 00:00:00 2001
From: quxin <592870522@qq.com>
Date: 星期五, 04 九月 2026 11:36:26 +0800
Subject: [PATCH] 修复: 生产领料后的退料应该是选择领料的记录,不是选择库存的记录(同时库存数据需要根据领料退料变动,比如库存100,领用80,然后领用80中退料30,库存应由原来的20变成50)
---
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/transaction/MesWmTransactionServiceImpl.java | 37 ++++++++++++++++++++++++++++++++++---
1 files changed, 34 insertions(+), 3 deletions(-)
diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/transaction/MesWmTransactionServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/transaction/MesWmTransactionServiceImpl.java
index 9459550..775a75e 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/transaction/MesWmTransactionServiceImpl.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/transaction/MesWmTransactionServiceImpl.java
@@ -77,9 +77,14 @@
// 1.5 鍏宠仈浜嬪姟鏍¢獙
checkRelatedTransaction(reqDTO);
- // 2.1 鑾峰彇鎴栧垱寤哄簱瀛樿褰曪紙濡傛灉浼犲叆浜� materialStockId 鍒欑洿鎺ヤ娇鐢紝閬垮厤閲嶆柊鍖归厤锛�
+ // 2.1 鑾峰彇搴撳瓨璁板綍
MesWmMaterialStockDO materialStock;
+ MesWmTransactionTypeEnum transactionType = MesWmTransactionTypeEnum.valueOf(reqDTO.getType());
+ boolean isInbound = transactionType != null && transactionType.isInbound();
+ boolean forceCreateNewStock = Boolean.TRUE.equals(reqDTO.getForceCreateNewStock());
+
if (reqDTO.getMaterialStockId() != null) {
+ // 浼犲叆浜� materialStockId锛岀洿鎺ヤ娇鐢�
materialStock = materialStockService.getMaterialStock(reqDTO.getMaterialStockId());
if (materialStock == null) {
throw exception(WM_MATERIAL_STOCK_NOT_EXISTS);
@@ -91,10 +96,36 @@
|| ObjUtil.notEqual(materialStock.getAreaId(), reqDTO.getAreaId())) {
throw exception(WM_MATERIAL_STOCK_SELECTION_MISMATCH);
}
+ } else if (isInbound) {
+ // 鍏ュ簱浜嬪姟锛氭牴鎹� forceCreateNewStock 鏍囧織鍐冲畾鏄垱寤烘柊璁板綍杩樻槸鏌ユ壘/鍒涘缓
+ if (forceCreateNewStock) {
+ materialStock = materialStockService.createMaterialStock(
+ reqDTO.getItemId(), reqDTO.getWarehouseId(), reqDTO.getLocationId(), reqDTO.getAreaId(),
+ reqDTO.getBatchId(), reqDTO.getBatchCode(), reqDTO.getVendorId(), reqDTO.getReceiptTime());
+ } else {
+ materialStock = materialStockService.getOrCreateMaterialStock(
+ reqDTO.getItemId(), reqDTO.getWarehouseId(), reqDTO.getLocationId(), reqDTO.getAreaId(),
+ reqDTO.getBatchId(), reqDTO.getBatchCode(), reqDTO.getVendorId(), reqDTO.getReceiptTime());
+ }
} else {
- materialStock = materialStockService.getOrCreateMaterialStock(
+ // 鍑哄簱浜嬪姟锛氬簱瀛樿褰曞繀椤诲凡瀛樺湪锛屼笉鍏佽鑷姩鍒涘缓锛堥櫎闈� checkFlag=false 鍏佽璐熷簱瀛橈級
+ materialStock = materialStockService.getMaterialStockByCompositeKey(
reqDTO.getItemId(), reqDTO.getWarehouseId(), reqDTO.getLocationId(), reqDTO.getAreaId(),
- reqDTO.getBatchId(), reqDTO.getBatchCode(), reqDTO.getVendorId(), reqDTO.getReceiptTime());
+ reqDTO.getBatchId(), reqDTO.getVendorId());
+ if (materialStock == null) {
+ // checkFlag=false 鏃跺厑璁歌礋搴撳瓨锛岃嚜鍔ㄥ垱寤哄簱瀛樿褰曪紙鏁伴噺灏嗕粠 0 鎵e噺涓鸿礋鏁帮級
+ boolean allowNegative = !ObjUtil.defaultIfNull(reqDTO.getCheckFlag(), true);
+ if (allowNegative) {
+ materialStock = materialStockService.getOrCreateMaterialStock(
+ reqDTO.getItemId(), reqDTO.getWarehouseId(), reqDTO.getLocationId(), reqDTO.getAreaId(),
+ reqDTO.getBatchId(), reqDTO.getBatchCode(), reqDTO.getVendorId(), reqDTO.getReceiptTime());
+ } else {
+ throw exception(WM_MATERIAL_STOCK_NOT_EXISTS);
+ }
+ }
+ }
+ if (materialStock == null || materialStock.getId() == null) {
+ throw exception(WM_MATERIAL_STOCK_NOT_EXISTS);
}
// 2.2 鍐荤粨鏍¢獙锛堜粨搴撱�佸簱鍖恒�佸簱浣嶃�佸簱瀛樿褰曪級
checkFrozen(reqDTO, materialStock);
--
Gitblit v1.9.3