From 1ba0dbfde5634c8bf2ec20891d6b226b996f6b59 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期三, 02 九月 2026 14:24:38 +0800
Subject: [PATCH] refactor(mes): 优化MES生产扫码入库功能支持多类型扫码
---
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/salesnotice/MesWmSalesNoticeLineServiceImpl.java | 41 +++++++++++++++++++++++++++++++++++------
1 files changed, 35 insertions(+), 6 deletions(-)
diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/salesnotice/MesWmSalesNoticeLineServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/salesnotice/MesWmSalesNoticeLineServiceImpl.java
index a5f08ff..fed11df 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/salesnotice/MesWmSalesNoticeLineServiceImpl.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/salesnotice/MesWmSalesNoticeLineServiceImpl.java
@@ -7,16 +7,19 @@
import cn.iocoder.yudao.module.mes.controller.admin.wm.salesnotice.vo.line.MesWmSalesNoticeLinePageReqVO;
import cn.iocoder.yudao.module.mes.controller.admin.wm.salesnotice.vo.line.MesWmSalesNoticeLineSaveReqVO;
import cn.iocoder.yudao.module.mes.dal.dataobject.wm.batch.MesWmBatchDO;
+import cn.iocoder.yudao.module.mes.dal.dataobject.wm.materialstock.MesWmMaterialStockDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.wm.salesnotice.MesWmSalesNoticeDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.wm.salesnotice.MesWmSalesNoticeLineDO;
import cn.iocoder.yudao.module.mes.dal.mysql.wm.salesnotice.MesWmSalesNoticeLineMapper;
-import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService;
+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 jakarta.annotation.Resource;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
+import java.math.BigDecimal;
import java.util.List;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
@@ -39,7 +42,9 @@
@Resource
private MesWmBatchService batchService;
@Resource
- private MesMdItemService itemService;
+ private MesWmMaterialStockService materialStockService;
+ @Resource
+ private MesMdmItemService mdmItemService;
@Override
public Long createSalesNoticeLine(MesWmSalesNoticeLineSaveReqVO createReqVO) {
@@ -118,12 +123,36 @@
}
private void validateLineSaveData(MesWmSalesNoticeLineSaveReqVO reqVO) {
- // 鏍¢獙鐖跺崟鎹瓨鍦ㄤ笖涓鸿崏绋跨姸鎬�
validateNoticeStatusDraft(reqVO.getNoticeId());
- // 鏍¢獙鐗╂枡瀛樺湪
- if (reqVO.getItemId() != null) {
- itemService.validateItemExistsAndEnable(reqVO.getItemId());
+ mdmItemService.validateItemExistsAndEnable(reqVO.getItemId());
+
+ MesWmBatchDO batch = resolveBatch(reqVO);
+ if (batch == null) {
+ throw exception(WM_MATERIAL_STOCK_NOT_EXISTS);
}
+ if (ObjUtil.notEqual(batch.getItemId(), reqVO.getItemId())) {
+ throw exception(WM_MATERIAL_STOCK_NOT_EXISTS);
+ }
+ BigDecimal qualifiedQuantity = materialStockService
+ .getQualifiedMaterialStockListByItemAndBatch(reqVO.getItemId(), batch.getId()).stream()
+ .map(MesWmMaterialStockDO::getQuantity)
+ .filter(quantity -> quantity != null)
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
+ if (qualifiedQuantity.compareTo(reqVO.getQuantity()) < 0) {
+ throw exception(WM_MATERIAL_STOCK_INSUFFICIENT);
+ }
+ reqVO.setBatchId(batch.getId());
+ reqVO.setBatchCode(batch.getCode());
+ }
+
+ private MesWmBatchDO resolveBatch(MesWmSalesNoticeLineSaveReqVO reqVO) {
+ if (reqVO.getBatchId() != null) {
+ return batchService.getBatch(reqVO.getBatchId());
+ }
+ if (StrUtil.isNotBlank(reqVO.getBatchCode())) {
+ return batchService.getBatchByCode(reqVO.getBatchCode());
+ }
+ return null;
}
/**
--
Gitblit v1.9.3