Commit fc72fbfc0ed507d32ace908b5d4141df53dd308a

Authored by YunaiV
1 parent 7df27df3

✨ feat(mes): 新增物料在工单 BOM 中的校验逻辑

yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/outsourceissue/MesWmOutsourceIssueLineServiceImpl.java
1 package cn.iocoder.yudao.module.mes.service.wm.outsourceissue; 1 package cn.iocoder.yudao.module.mes.service.wm.outsourceissue;
2 2
3 import cn.hutool.core.util.StrUtil; 3 import cn.hutool.core.util.StrUtil;
  4 +import cn.hutool.core.collection.CollUtil;
4 import cn.iocoder.yudao.framework.common.pojo.PageResult; 5 import cn.iocoder.yudao.framework.common.pojo.PageResult;
5 import cn.iocoder.yudao.framework.common.util.object.BeanUtils; 6 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
6 import cn.iocoder.yudao.module.mes.controller.admin.wm.outsourceissue.vo.line.MesWmOutsourceIssueLinePageReqVO; 7 import cn.iocoder.yudao.module.mes.controller.admin.wm.outsourceissue.vo.line.MesWmOutsourceIssueLinePageReqVO;
7 import cn.iocoder.yudao.module.mes.controller.admin.wm.outsourceissue.vo.line.MesWmOutsourceIssueLineSaveReqVO; 8 import cn.iocoder.yudao.module.mes.controller.admin.wm.outsourceissue.vo.line.MesWmOutsourceIssueLineSaveReqVO;
8 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.outsourceissue.MesWmOutsourceIssueLineDO; 9 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.outsourceissue.MesWmOutsourceIssueLineDO;
  10 +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.outsourceissue.MesWmOutsourceIssueDO;
9 import cn.iocoder.yudao.module.mes.dal.mysql.wm.outsourceissue.MesWmOutsourceIssueLineMapper; 11 import cn.iocoder.yudao.module.mes.dal.mysql.wm.outsourceissue.MesWmOutsourceIssueLineMapper;
10 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.batch.MesWmBatchDO; 12 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.batch.MesWmBatchDO;
  13 +import cn.iocoder.yudao.module.mes.dal.dataobject.pro.workorder.MesProWorkOrderBomDO;
11 import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService; 14 import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService;
  15 +import cn.iocoder.yudao.module.mes.service.pro.workorder.MesProWorkOrderBomService;
12 import cn.iocoder.yudao.module.mes.service.wm.batch.MesWmBatchService; 16 import cn.iocoder.yudao.module.mes.service.wm.batch.MesWmBatchService;
13 import jakarta.annotation.Resource; 17 import jakarta.annotation.Resource;
14 import org.springframework.context.annotation.Lazy; 18 import org.springframework.context.annotation.Lazy;
@@ -19,6 +23,8 @@ import java.util.List; @@ -19,6 +23,8 @@ import java.util.List;
19 23
20 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; 24 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
21 import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.WM_OUTSOURCE_ISSUE_LINE_NOT_EXISTS; 25 import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.WM_OUTSOURCE_ISSUE_LINE_NOT_EXISTS;
  26 +import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.WM_OUTSOURCE_ISSUE_LINE_ITEM_NOT_IN_BOM;
  27 +import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.WM_OUTSOURCE_ISSUE_NOT_EXISTS;
22 28
23 /** 29 /**
24 * MES 外协发料单行 Service 实现类 30 * MES 外协发料单行 Service 实现类
@@ -41,6 +47,8 @@ public class MesWmOutsourceIssueLineServiceImpl implements MesWmOutsourceIssueLi @@ -41,6 +47,8 @@ public class MesWmOutsourceIssueLineServiceImpl implements MesWmOutsourceIssueLi
41 private MesMdItemService itemService; 47 private MesMdItemService itemService;
42 @Resource 48 @Resource
43 private MesWmBatchService batchService; 49 private MesWmBatchService batchService;
  50 + @Resource
  51 + private MesProWorkOrderBomService workOrderBomService;
44 52
45 @Override 53 @Override
46 public Long createOutsourceIssueLine(MesWmOutsourceIssueLineSaveReqVO createReqVO) { 54 public Long createOutsourceIssueLine(MesWmOutsourceIssueLineSaveReqVO createReqVO) {
@@ -108,9 +116,31 @@ public class MesWmOutsourceIssueLineServiceImpl implements MesWmOutsourceIssueLi @@ -108,9 +116,31 @@ public class MesWmOutsourceIssueLineServiceImpl implements MesWmOutsourceIssueLi
108 116
109 private void validateOutsourceIssueLineSaveData(MesWmOutsourceIssueLineSaveReqVO saveReqVO) { 117 private void validateOutsourceIssueLineSaveData(MesWmOutsourceIssueLineSaveReqVO saveReqVO) {
110 // 校验关联的发料单存在 118 // 校验关联的发料单存在
111 - outsourceIssueService.getOutsourceIssue(saveReqVO.getIssueId()); 119 + MesWmOutsourceIssueDO issue = outsourceIssueService.getOutsourceIssue(saveReqVO.getIssueId());
  120 + if (issue == null) {
  121 + throw exception(WM_OUTSOURCE_ISSUE_NOT_EXISTS);
  122 + }
112 // 校验关联的物料存在 123 // 校验关联的物料存在
113 itemService.validateItemExists(saveReqVO.getItemId()); 124 itemService.validateItemExists(saveReqVO.getItemId());
  125 + // 校验物料是否在工单 BOM 中
  126 + validateItemInWorkOrderBom(issue.getWorkOrderId(), saveReqVO.getItemId());
  127 + }
  128 +
  129 + private void validateItemInWorkOrderBom(Long workOrderId, Long itemId) {
  130 + if (workOrderId == null) {
  131 + return;
  132 + }
  133 + // 获取当前外协工单的 BOM 列表
  134 + List<MesProWorkOrderBomDO> workOrderBoms = workOrderBomService.getWorkOrderBomListByWorkOrderId(workOrderId);
  135 + if (CollUtil.isEmpty(workOrderBoms)) {
  136 + return;
  137 + }
  138 + // 检查发料的物料是否在 BOM 列表中
  139 + MesProWorkOrderBomDO workOrderBom = CollUtil.findOne(workOrderBoms,
  140 + bom -> bom.getItemId().equals(itemId));
  141 + if (workOrderBom == null) {
  142 + throw exception(WM_OUTSOURCE_ISSUE_LINE_ITEM_NOT_IN_BOM);
  143 + }
114 } 144 }
115 145
116 /** 146 /**