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 |   46 ++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 40 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 04b8c37..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;
     }
 
     /**
@@ -152,4 +181,9 @@
         }
     }
 
+    @Override
+    public void createSalesNoticeLine(MesWmSalesNoticeLineDO line) {
+        salesNoticeLineMapper.insert(line);
+    }
+
 }

--
Gitblit v1.9.3