From c47c8647f514eaa8c6a7624185b55738e8625c2c Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期四, 05 十一月 2026 13:37:31 +0800
Subject: [PATCH] feat(product-issue): 支持按任务工序校验和选择领料物料

---
 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/productissue/MesWmProductIssueLineServiceImpl.java |   16 ++++++++++++++++
 1 files changed, 16 insertions(+), 0 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 4ed4684..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;
@@ -120,6 +125,17 @@
     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