云
3 天以前 c47c8647f514eaa8c6a7624185b55738e8625c2c
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)) {