From 7bd10d34e8a8dc2437ec8551eb511e37634d7306 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期一, 02 十一月 2026 16:51:52 +0800
Subject: [PATCH] feat(mes): 生产计划审批改走协同办公,修复工单领料与产成品入库校验
---
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/transaction/MesWmTransactionServiceImpl.java | 35 +++++++++++++++++++++++++++++++++--
1 files changed, 33 insertions(+), 2 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 775a75e..7cb1721 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
@@ -18,8 +18,10 @@
import cn.iocoder.yudao.module.mes.service.mdm.MesMdmItemService;
import cn.iocoder.yudao.module.mes.service.wm.batch.MesWmBatchService;
import cn.iocoder.yudao.module.mes.service.wm.materialstock.MesWmMaterialStockService;
+import cn.iocoder.yudao.module.mes.service.wm.stockwarning.MesWmStockWarningService;
import cn.iocoder.yudao.module.mes.service.wm.transaction.dto.MesWmTransactionSaveReqDTO;
import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseAreaService;
+import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseDefaultService;
import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseLocationService;
import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseService;
import jakarta.annotation.Resource;
@@ -30,6 +32,8 @@
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
+
+import cn.iocoder.yudao.framework.common.exception.ServiceException;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*;
@@ -56,6 +60,10 @@
private MesWmWarehouseLocationService locationService;
@Resource
private MesWmWarehouseAreaService areaService;
+ @Resource
+ private MesWmWarehouseDefaultService warehouseDefaultService;
+ @Resource
+ private MesWmStockWarningService stockWarningService;
@Override
@Transactional(rollbackFor = Exception.class)
@@ -70,6 +78,10 @@
checkQuantity(reqDTO, inbound);
// 1.3 鍏ュ簱浜嬪姟锛氭壒娆″彿鏍¢獙 + batchId/batchCode 浜掕ˉ
checkBatch(reqDTO, inbound);
+ // 1.3.1 鍏ュ簱浜嬪姟鏈寚瀹氬簱鍖�/搴撲綅鏃讹紝鑷姩钀藉埌浠撳簱榛樿搴撳尯/搴撲綅锛堝鎴锋湭鍚敤搴撳尯/搴撲綅绠$悊锛�
+ if (inbound) {
+ fillDefaultLocationAndArea(reqDTO);
+ }
// 1.4 鍏ュ簱浜嬪姟锛氬簱浣嶆贩鏀捐鍒欐牎楠�
if (inbound) {
materialStockService.checkAreaMixingRule(reqDTO.getAreaId(), reqDTO.getItemId(), reqDTO.getBatchId());
@@ -89,12 +101,14 @@
if (materialStock == null) {
throw exception(WM_MATERIAL_STOCK_NOT_EXISTS);
}
- // 鏍¢獙鐗╂枡銆佹壒娆°�佷粨搴撶瓑缁村害涓�鑷达紙闃叉浼犲叆閿欒鐨� materialStockId锛�
+ // 鏍¢獙鐗╂枡銆佹壒娆°�佷粨搴撶瓑缁村害涓�鑷达紙闃叉浼犲叆閿欒鐨� materialStockId锛夈��
+ // 鑻ユ澶勪笉涓�鑷达紝閫氬父鏄搴撳瓨宸茶绉诲簱/鍚堝苟/鎷嗗垎锛岄渶閫�鍥為噸鏂版嫞璐э紝鏁呯粰鍑洪拡瀵规�ф彁绀�
if (ObjUtil.notEqual(materialStock.getItemId(), reqDTO.getItemId())
|| ObjUtil.notEqual(materialStock.getWarehouseId(), reqDTO.getWarehouseId())
|| ObjUtil.notEqual(materialStock.getLocationId(), reqDTO.getLocationId())
|| ObjUtil.notEqual(materialStock.getAreaId(), reqDTO.getAreaId())) {
- throw exception(WM_MATERIAL_STOCK_SELECTION_MISMATCH);
+ throw new ServiceException(WM_MATERIAL_STOCK_SELECTION_MISMATCH.getCode(),
+ "璇ュ簱瀛樿褰曞凡鍙樺姩锛堝彲鑳借绉诲簱/鍚堝苟/鎷嗗垎锛夛紝涓庡嚭搴撴槑缁嗕笉涓�鑷达紝鏃犳硶鎵e噺锛岃閫�鍥為噸鏂版嫞璐�");
}
} else if (isInbound) {
// 鍏ュ簱浜嬪姟锛氭牴鎹� forceCreateNewStock 鏍囧織鍐冲畾鏄垱寤烘柊璁板綍杩樻槸鏌ユ壘/鍒涘缓
@@ -132,6 +146,8 @@
// 2.3 鏇存柊搴撳瓨鏁伴噺
boolean checkFlag = ObjUtil.defaultIfNull(reqDTO.getCheckFlag(), true);
materialStockService.updateMaterialStockQuantity(materialStock.getId(), reqDTO.getQuantity(), checkFlag);
+ // 2.4 搴撳瓨棰勮鏍¢獙锛氭湰娆″彉鍔ㄥ鑷村簱瀛樿法瓒婁笂涓嬮檺鏃讹紝鑷姩鍙戦�佺珯鍐呴�氱煡锛堥渶姹� 5.1鈶★級
+ stockWarningService.checkAfterStockChange(reqDTO.getItemId(), reqDTO.getWarehouseId(), reqDTO.getQuantity());
// 3. 鎻掑叆浜嬪姟娴佹按
MesWmTransactionDO transaction = MesWmTransactionDO.builder()
@@ -162,6 +178,21 @@
// ==================== 绉佹湁鏍¢獙鏂规硶 ====================
/**
+ * 鍏ュ簱浜嬪姟鏈寚瀹氬簱鍖�/搴撲綅鏃讹紝鑷姩浣跨敤浠撳簱鐨勯粯璁ゅ簱鍖�/榛樿搴撲綅
+ *
+ * 瀹㈡埛鏈惎鐢ㄥ簱鍖�/搴撲綅绠$悊锛屽墠绔笉鍐嶈鐢ㄦ埛閫夋嫨锛屽簱瀛樹粛闇�瑕佸畬鏁寸殑浠撳簱-搴撳尯-搴撲綅缁村害銆�
+ */
+ private void fillDefaultLocationAndArea(MesWmTransactionSaveReqDTO reqDTO) {
+ if (reqDTO.getWarehouseId() == null
+ || (reqDTO.getLocationId() != null && reqDTO.getAreaId() != null)) {
+ return;
+ }
+ MesWmWarehouseAreaDO defaultArea = warehouseDefaultService.getOrCreateDefaultArea(reqDTO.getWarehouseId());
+ reqDTO.setLocationId(defaultArea.getLocationId());
+ reqDTO.setAreaId(defaultArea.getId());
+ }
+
+ /**
* 鏍¢獙鏁伴噺姝h礋鍙蜂笌浜嬪姟鏂瑰悜涓�鑷�
*/
private void checkQuantity(MesWmTransactionSaveReqDTO reqDTO, boolean inbound) {
--
Gitblit v1.9.3