Commit 38915e96f93a056ff521e56fcbcf5078e4deff7d
1 parent
98e4f94c
✨ feat(mes): 新增工单类型过滤和批次编码处理逻辑
在生产工单精简列表接口中新增工单类型参数,支持根据工单类型过滤工单列表。同时,在外协发料单行的创建和更新中,新增批次编码字段,并实现根据批次编码自动解析批次 ID 的功能,提升数据处理的灵活性和准确性。
Showing
6 changed files
with
50 additions
and
4 deletions
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pro/workorder/MesProWorkorderController.java
| ... | ... | @@ -106,10 +106,13 @@ public class MesProWorkOrderController { |
| 106 | 106 | |
| 107 | 107 | @GetMapping("/simple-list") |
| 108 | 108 | @Operation(summary = "获得生产工单精简列表", description = "主要用于前端的下拉选项") |
| 109 | - public CommonResult<List<MesProWorkOrderRespVO>> getWorkOrderSimpleList() { | |
| 110 | - List<MesProWorkOrderDO> list = workOrderService.getWorkOrderList(); | |
| 109 | + @Parameter(name = "type", description = "工单类型", example = "2") | |
| 110 | + public CommonResult<List<MesProWorkOrderRespVO>> getWorkOrderSimpleList( | |
| 111 | + @RequestParam(value = "type", required = false) Integer type) { | |
| 112 | + List<MesProWorkOrderDO> list = workOrderService.getWorkOrderList(type); | |
| 111 | 113 | return success(convertList(list, wo -> new MesProWorkOrderRespVO() |
| 112 | 114 | .setId(wo.getId()).setCode(wo.getCode()).setName(wo.getName()) |
| 115 | + .setType(wo.getType()).setVendorId(wo.getVendorId()) | |
| 113 | 116 | .setStatus(wo.getStatus()))); |
| 114 | 117 | } |
| 115 | 118 | ... | ... |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/outsourceissue/MesWmOutsourceIssueLineController.java
| ... | ... | @@ -10,9 +10,11 @@ import cn.iocoder.yudao.module.mes.controller.admin.wm.outsourceissue.vo.line.Me |
| 10 | 10 | import cn.iocoder.yudao.module.mes.controller.admin.wm.outsourceissue.vo.line.MesWmOutsourceIssueLineSaveReqVO; |
| 11 | 11 | import cn.iocoder.yudao.module.mes.dal.dataobject.md.item.MesMdItemDO; |
| 12 | 12 | import cn.iocoder.yudao.module.mes.dal.dataobject.md.unitmeasure.MesMdUnitMeasureDO; |
| 13 | +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.batch.MesWmBatchDO; | |
| 13 | 14 | import cn.iocoder.yudao.module.mes.dal.dataobject.wm.outsourceissue.MesWmOutsourceIssueLineDO; |
| 14 | 15 | import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService; |
| 15 | 16 | import cn.iocoder.yudao.module.mes.service.md.unitmeasure.MesMdUnitMeasureService; |
| 17 | +import cn.iocoder.yudao.module.mes.service.wm.batch.MesWmBatchService; | |
| 16 | 18 | import cn.iocoder.yudao.module.mes.service.wm.outsourceissue.MesWmOutsourceIssueLineService; |
| 17 | 19 | import io.swagger.v3.oas.annotations.Operation; |
| 18 | 20 | import io.swagger.v3.oas.annotations.Parameter; |
| ... | ... | @@ -26,8 +28,10 @@ import org.springframework.web.bind.annotation.*; |
| 26 | 28 | import java.util.Collections; |
| 27 | 29 | import java.util.List; |
| 28 | 30 | import java.util.Map; |
| 31 | +import java.util.Set; | |
| 29 | 32 | |
| 30 | 33 | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
| 34 | +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap; | |
| 31 | 35 | import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; |
| 32 | 36 | |
| 33 | 37 | /** |
| ... | ... | @@ -50,6 +54,9 @@ public class MesWmOutsourceIssueLineController { |
| 50 | 54 | @Resource |
| 51 | 55 | private MesMdUnitMeasureService unitMeasureService; |
| 52 | 56 | |
| 57 | + @Resource | |
| 58 | + private MesWmBatchService batchService; | |
| 59 | + | |
| 53 | 60 | @PostMapping("/create") |
| 54 | 61 | @Operation(summary = "创建外协发料单行") |
| 55 | 62 | @PreAuthorize("@ss.hasPermission('mes:wm-outsource-issue:create')") |
| ... | ... | @@ -116,6 +123,11 @@ public class MesWmOutsourceIssueLineController { |
| 116 | 123 | convertSet(list, MesWmOutsourceIssueLineDO::getItemId)); |
| 117 | 124 | Map<Long, MesMdUnitMeasureDO> unitMeasureMap = unitMeasureService.getUnitMeasureMap( |
| 118 | 125 | convertSet(itemMap.values(), MesMdItemDO::getUnitMeasureId)); |
| 126 | + // 1.2 获得批次数据 | |
| 127 | + Set<Long> batchIds = convertSet(list, MesWmOutsourceIssueLineDO::getBatchId); | |
| 128 | + batchIds.remove(null); | |
| 129 | + Map<Long, MesWmBatchDO> batchMap = CollUtil.isEmpty(batchIds) ? Collections.emptyMap() | |
| 130 | + : convertMap(batchIds, id -> id, id -> batchService.getBatch(id)); | |
| 119 | 131 | // 2. 构建结果 |
| 120 | 132 | return BeanUtils.toBean(list, MesWmOutsourceIssueLineRespVO.class, vo -> { |
| 121 | 133 | MapUtils.findAndThen(itemMap, vo.getItemId(), item -> { |
| ... | ... | @@ -123,6 +135,7 @@ public class MesWmOutsourceIssueLineController { |
| 123 | 135 | MapUtils.findAndThen(unitMeasureMap, item.getUnitMeasureId(), |
| 124 | 136 | unitMeasure -> vo.setUnitMeasureName(unitMeasure.getName())); |
| 125 | 137 | }); |
| 138 | + MapUtils.findAndThen(batchMap, vo.getBatchId(), batch -> vo.setBatchCode(batch.getCode())); | |
| 126 | 139 | }); |
| 127 | 140 | } |
| 128 | 141 | ... | ... |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/outsourceissue/vo/line/MesWmOutsourceIssueLineSaveReqVO.java
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/ErrorCodeConstants.java
| ... | ... | @@ -415,6 +415,7 @@ public interface ErrorCodeConstants { |
| 415 | 415 | ErrorCode WM_OUTSOURCE_ISSUE_CANCEL_NOT_ALLOWED = new ErrorCode(1_040_707_007, "已完成或已取消的发料单不允许取消"); |
| 416 | 416 | ErrorCode WM_OUTSOURCE_ISSUE_LINE_NOT_EXISTS = new ErrorCode(1_040_707_100, "外协发料单行不存在"); |
| 417 | 417 | ErrorCode WM_OUTSOURCE_ISSUE_DETAIL_NOT_EXISTS = new ErrorCode(1_040_707_200, "外协发料单明细不存在"); |
| 418 | + ErrorCode WM_OUTSOURCE_ISSUE_WORK_ORDER_TYPE_INVALID = new ErrorCode(1_040_707_008, "工单类型不是外协(代工)类型"); | |
| 418 | 419 | |
| 419 | 420 | // ========== MES 仓库管理-生产领料出库单(1-040-708-000) ========== |
| 420 | 421 | ErrorCode WM_PRODUCT_ISSUE_NOT_EXISTS = new ErrorCode(1_040_708_000, "生产领料出库单不存在"); | ... | ... |
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 | +import cn.hutool.core.util.StrUtil; | |
| 3 | 4 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 4 | 5 | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| 5 | 6 | import cn.iocoder.yudao.module.mes.controller.admin.wm.outsourceissue.vo.line.MesWmOutsourceIssueLinePageReqVO; |
| 6 | 7 | import cn.iocoder.yudao.module.mes.controller.admin.wm.outsourceissue.vo.line.MesWmOutsourceIssueLineSaveReqVO; |
| 7 | 8 | import cn.iocoder.yudao.module.mes.dal.dataobject.wm.outsourceissue.MesWmOutsourceIssueLineDO; |
| 8 | 9 | import cn.iocoder.yudao.module.mes.dal.mysql.wm.outsourceissue.MesWmOutsourceIssueLineMapper; |
| 10 | +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.batch.MesWmBatchDO; | |
| 9 | 11 | import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService; |
| 12 | +import cn.iocoder.yudao.module.mes.service.wm.batch.MesWmBatchService; | |
| 10 | 13 | import jakarta.annotation.Resource; |
| 11 | 14 | import org.springframework.context.annotation.Lazy; |
| 12 | 15 | import org.springframework.stereotype.Service; |
| ... | ... | @@ -36,11 +39,15 @@ public class MesWmOutsourceIssueLineServiceImpl implements MesWmOutsourceIssueLi |
| 36 | 39 | private MesWmOutsourceIssueService outsourceIssueService; |
| 37 | 40 | @Resource |
| 38 | 41 | private MesMdItemService itemService; |
| 42 | + @Resource | |
| 43 | + private MesWmBatchService batchService; | |
| 39 | 44 | |
| 40 | 45 | @Override |
| 41 | 46 | public Long createOutsourceIssueLine(MesWmOutsourceIssueLineSaveReqVO createReqVO) { |
| 42 | 47 | // 校验数据 |
| 43 | 48 | validateOutsourceIssueLineSaveData(createReqVO); |
| 49 | + // 根据 batchCode 解析 batchId | |
| 50 | + fillBatchId(createReqVO); | |
| 44 | 51 | |
| 45 | 52 | // 插入 |
| 46 | 53 | MesWmOutsourceIssueLineDO line = BeanUtils.toBean(createReqVO, MesWmOutsourceIssueLineDO.class); |
| ... | ... | @@ -54,6 +61,8 @@ public class MesWmOutsourceIssueLineServiceImpl implements MesWmOutsourceIssueLi |
| 54 | 61 | validateOutsourceIssueLineExists(updateReqVO.getId()); |
| 55 | 62 | // 校验数据 |
| 56 | 63 | validateOutsourceIssueLineSaveData(updateReqVO); |
| 64 | + // 根据 batchCode 解析 batchId | |
| 65 | + fillBatchId(updateReqVO); | |
| 57 | 66 | |
| 58 | 67 | // 更新 |
| 59 | 68 | MesWmOutsourceIssueLineDO updateObj = BeanUtils.toBean(updateReqVO, MesWmOutsourceIssueLineDO.class); |
| ... | ... | @@ -104,4 +113,16 @@ public class MesWmOutsourceIssueLineServiceImpl implements MesWmOutsourceIssueLi |
| 104 | 113 | itemService.validateItemExists(saveReqVO.getItemId()); |
| 105 | 114 | } |
| 106 | 115 | |
| 116 | + /** | |
| 117 | + * 根据 batchCode 解析 batchId | |
| 118 | + */ | |
| 119 | + private void fillBatchId(MesWmOutsourceIssueLineSaveReqVO reqVO) { | |
| 120 | + if (StrUtil.isBlank(reqVO.getBatchCode())) { | |
| 121 | + reqVO.setBatchId(null); | |
| 122 | + return; | |
| 123 | + } | |
| 124 | + MesWmBatchDO batch = batchService.getBatchByCode(reqVO.getBatchCode()); | |
| 125 | + reqVO.setBatchId(batch != null ? batch.getId() : null); | |
| 126 | + } | |
| 127 | + | |
| 107 | 128 | } | ... | ... |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/outsourceissue/MesWmOutsourceIssueServiceImpl.java
| ... | ... | @@ -13,8 +13,10 @@ import cn.iocoder.yudao.module.mes.dal.dataobject.wm.outsourceissue.MesWmOutsour |
| 13 | 13 | import cn.iocoder.yudao.module.mes.dal.dataobject.wm.outsourceissue.MesWmOutsourceIssueDO; |
| 14 | 14 | import cn.iocoder.yudao.module.mes.dal.dataobject.wm.outsourceissue.MesWmOutsourceIssueLineDO; |
| 15 | 15 | import cn.iocoder.yudao.module.mes.dal.mysql.wm.outsourceissue.MesWmOutsourceIssueMapper; |
| 16 | +import cn.iocoder.yudao.module.mes.dal.dataobject.pro.workorder.MesProWorkOrderDO; | |
| 16 | 17 | import cn.iocoder.yudao.module.mes.enums.MesBizTypeConstants; |
| 17 | 18 | import cn.iocoder.yudao.module.mes.enums.md.autocode.MesMdAutoCodeRuleCodeEnum; |
| 19 | +import cn.iocoder.yudao.module.mes.enums.pro.MesProWorkOrderTypeEnum; | |
| 18 | 20 | import cn.iocoder.yudao.module.mes.enums.wm.MesWmOutsourceIssueStatusEnum; |
| 19 | 21 | import cn.iocoder.yudao.module.mes.enums.wm.MesWmTransactionTypeEnum; |
| 20 | 22 | import cn.iocoder.yudao.module.mes.service.md.autocode.MesMdAutoCodeRecordService; |
| ... | ... | @@ -257,8 +259,11 @@ public class MesWmOutsourceIssueServiceImpl implements MesWmOutsourceIssueServic |
| 257 | 259 | if (saveReqVO.getVendorId() != null) { |
| 258 | 260 | vendorService.validateVendorExists(saveReqVO.getVendorId()); |
| 259 | 261 | } |
| 260 | - // 校验工单存在 | |
| 261 | - workOrderService.validateWorkOrderExists(saveReqVO.getWorkOrderId()); | |
| 262 | + // 校验工单存在且类型为外协(代工) | |
| 263 | + MesProWorkOrderDO workOrder = workOrderService.validateWorkOrderExists(saveReqVO.getWorkOrderId()); | |
| 264 | + if (ObjUtil.notEqual(workOrder.getType(), MesProWorkOrderTypeEnum.OUTSOURCE.getType())) { | |
| 265 | + throw exception(WM_OUTSOURCE_ISSUE_WORK_ORDER_TYPE_INVALID); | |
| 266 | + } | |
| 262 | 267 | } |
| 263 | 268 | |
| 264 | 269 | /** | ... | ... |