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 1 package cn.iocoder.yudao.module.mes.service.wm.outsourceissue;
2 2  
3 3 import cn.hutool.core.util.StrUtil;
  4 +import cn.hutool.core.collection.CollUtil;
4 5 import cn.iocoder.yudao.framework.common.pojo.PageResult;
5 6 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
6 7 import cn.iocoder.yudao.module.mes.controller.admin.wm.outsourceissue.vo.line.MesWmOutsourceIssueLinePageReqVO;
7 8 import cn.iocoder.yudao.module.mes.controller.admin.wm.outsourceissue.vo.line.MesWmOutsourceIssueLineSaveReqVO;
8 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 11 import cn.iocoder.yudao.module.mes.dal.mysql.wm.outsourceissue.MesWmOutsourceIssueLineMapper;
10 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 14 import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService;
  15 +import cn.iocoder.yudao.module.mes.service.pro.workorder.MesProWorkOrderBomService;
12 16 import cn.iocoder.yudao.module.mes.service.wm.batch.MesWmBatchService;
13 17 import jakarta.annotation.Resource;
14 18 import org.springframework.context.annotation.Lazy;
... ... @@ -19,6 +23,8 @@ import java.util.List;
19 23  
20 24 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
21 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 30 * MES 外协发料单行 Service 实现类
... ... @@ -41,6 +47,8 @@ public class MesWmOutsourceIssueLineServiceImpl implements MesWmOutsourceIssueLi
41 47 private MesMdItemService itemService;
42 48 @Resource
43 49 private MesWmBatchService batchService;
  50 + @Resource
  51 + private MesProWorkOrderBomService workOrderBomService;
44 52  
45 53 @Override
46 54 public Long createOutsourceIssueLine(MesWmOutsourceIssueLineSaveReqVO createReqVO) {
... ... @@ -108,9 +116,31 @@ public class MesWmOutsourceIssueLineServiceImpl implements MesWmOutsourceIssueLi
108 116  
109 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 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 /**
... ...