From 381e02b9eccbe953b31d09f2af1c2ce77c816140 Mon Sep 17 00:00:00 2001
From: liu <2021943741@qq.com>
Date: 星期六, 07 十一月 2026 14:51:05 +0800
Subject: [PATCH] fix(mes): 隔离设备物料并支持销售产品映射

---
 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/productissue/MesWmProductIssueLineServiceImpl.java |   18 +++++++++++++++++-
 1 files changed, 17 insertions(+), 1 deletions(-)

diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/productissue/MesWmProductIssueLineServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/productissue/MesWmProductIssueLineServiceImpl.java
index b264b98..0485b38 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/productissue/MesWmProductIssueLineServiceImpl.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/productissue/MesWmProductIssueLineServiceImpl.java
@@ -6,6 +6,8 @@
 import cn.iocoder.yudao.module.mes.controller.admin.wm.productissue.vo.line.MesWmProductIssueLinePageReqVO;
 import cn.iocoder.yudao.module.mes.controller.admin.wm.productissue.vo.line.MesWmProductIssueLineSaveReqVO;
 import cn.iocoder.yudao.module.mes.dal.dataobject.pro.workorder.MesProWorkOrderBomDO;
+import cn.iocoder.yudao.module.mes.dal.dataobject.pro.task.MesProTaskDO;
+import cn.iocoder.yudao.module.mes.service.pro.task.MesProTaskService;
 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.productissue.MesWmProductIssueDO;
 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.productissue.MesWmProductIssueLineDO;
 import cn.iocoder.yudao.module.mes.dal.mysql.wm.productissue.MesWmProductIssueLineMapper;
@@ -17,6 +19,7 @@
 import org.springframework.validation.annotation.Validated;
 
 import java.util.List;
+import java.util.Objects;
 
 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
 import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.WM_PRODUCT_ISSUE_LINE_ITEM_NOT_IN_BOM;
@@ -39,6 +42,8 @@
     private MesMdmItemService mdmItemService;
     @Resource
     private MesProWorkOrderBomService workOrderBomService;
+    @Resource
+    private MesProTaskService taskService;
     @Resource
     @Lazy
     private MesWmProductIssueDetailService issueDetailService;
@@ -114,12 +119,23 @@
         // 鏍¢獙鐗╂枡鍦ㄥ伐鍗� BOM 涓�
         validateItemInWorkOrderBom(reqVO.getIssueId(), reqVO.getItemId());
         // 鏍¢獙鐗╂枡瀛樺湪
-        mdmItemService.validateItemExistsAndEnable(reqVO.getItemId());
+        mdmItemService.mesValidateItemExists(reqVO.getItemId());
     }
 
     private void validateItemInWorkOrderBom(Long issueId, Long itemId) {
         // 鏍¢獙棰嗘枡鍗曞瓨鍦紝骞惰幏鍙栧伐鍗曠紪鍙�
         MesWmProductIssueDO issue = issueService.validateProductIssueExists(issueId);
+        if (issue.getTaskId() != null) {
+            MesProTaskDO task = taskService.validateTaskExists(issue.getTaskId());
+            if (task.getWorkOrderId() == null || task.getProcessId() == null
+                    || !Objects.equals(issue.getWorkOrderId(), task.getWorkOrderId())
+                    || workOrderBomService.getWorkOrderBomListByWorkOrderId(task.getWorkOrderId()).stream()
+                    .noneMatch(bom -> Objects.equals(bom.getProcessId(), task.getProcessId())
+                            && Objects.equals(bom.getItemId(), itemId))) {
+                throw exception(WM_PRODUCT_ISSUE_LINE_ITEM_NOT_IN_BOM);
+            }
+            return;
+        }
         // 鏍¢獙鐗╂枡鏄惁鍦ㄥ伐鍗� BOM 涓紙闃查敊鏂欙級
         List<MesProWorkOrderBomDO> workOrderBoms = workOrderBomService.getWorkOrderBomListByWorkOrderId(issue.getWorkOrderId());
         if (CollUtil.isEmpty(workOrderBoms)) {

--
Gitblit v1.9.3