From 662194d12f785c3269bd0542aec57252ab05113f Mon Sep 17 00:00:00 2001 From: YunaiV Date: Sat, 4 Apr 2026 10:44:18 +0800 Subject: [PATCH] ✨ feat(mes): 重构工单状态管理及验证逻辑 --- yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pro/workorder/vo/MesProWorkorderPageReqVO.java | 3 --- yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/pro/workorder/MesProWorkorderMapper.java | 1 - yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/workorder/MesProWorkorderServiceImpl.java | 40 +++++++++++++++++----------------------- 3 files changed, 17 insertions(+), 27 deletions(-) diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pro/workorder/vo/MesProWorkorderPageReqVO.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pro/workorder/vo/MesProWorkorderPageReqVO.java index 872af5c..357fc31 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pro/workorder/vo/MesProWorkorderPageReqVO.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pro/workorder/vo/MesProWorkorderPageReqVO.java @@ -26,9 +26,6 @@ public class MesProWorkOrderPageReqVO extends PageParam { @Schema(description = "工单类型", example = "1") private Integer type; - @Schema(description = "工单状态", example = "1") - private Integer status; - @Schema(description = "来源单据编号", example = "SO-001") private String orderSourceCode; diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/pro/workorder/MesProWorkorderMapper.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/pro/workorder/MesProWorkorderMapper.java index e84c367..b6f9b09 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/pro/workorder/MesProWorkorderMapper.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/pro/workorder/MesProWorkorderMapper.java @@ -23,7 +23,6 @@ public interface MesProWorkOrderMapper extends BaseMapperX { .likeIfPresent(MesProWorkOrderDO::getCode, reqVO.getCode()) .likeIfPresent(MesProWorkOrderDO::getName, reqVO.getName()) .eqIfPresent(MesProWorkOrderDO::getType, reqVO.getType()) - .eqIfPresent(MesProWorkOrderDO::getStatus, reqVO.getStatus()) .likeIfPresent(MesProWorkOrderDO::getOrderSourceCode, reqVO.getOrderSourceCode()) .eqIfPresent(MesProWorkOrderDO::getProductId, reqVO.getProductId()) .eqIfPresent(MesProWorkOrderDO::getClientId, reqVO.getClientId()) diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/workorder/MesProWorkorderServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/workorder/MesProWorkorderServiceImpl.java index c8133f8..72a195f 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/workorder/MesProWorkorderServiceImpl.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/workorder/MesProWorkorderServiceImpl.java @@ -56,13 +56,8 @@ public class MesProWorkOrderServiceImpl implements MesProWorkOrderService { @Override @Transactional(rollbackFor = Exception.class) public Long createWorkOrder(MesProWorkOrderSaveReqVO createReqVO) { - // TODO @AI:validateXXXSaveData - // 1.1 校验编码唯一 - validateWorkOrderCodeUnique(null, createReqVO.getCode()); - // 1.2 校验产品存在 - itemService.validateItemExists(createReqVO.getProductId()); - // 1.3 校验批次配置 - validateBatchConfig(createReqVO.getProductId(), createReqVO.getClientId()); + // 1. 校验数据 + validateWorkOrderSaveData(null, createReqVO); // 2.1 设置默认值 if (createReqVO.getParentId() == null) { @@ -85,17 +80,13 @@ public class MesProWorkOrderServiceImpl implements MesProWorkOrderService { @Override @Transactional(rollbackFor = Exception.class) public void updateWorkOrder(MesProWorkOrderSaveReqVO updateReqVO) { - // 1.1 校验存在 + // 1.1 校验存在 + 只有草稿状态才能编辑 MesProWorkOrderDO oldWorkOrder = validateWorkOrderExists(updateReqVO.getId()); - // TODO @AI:validateXXXSaveData - // 1.2 只有草稿状态才能编辑 if (ObjUtil.notEqual(oldWorkOrder.getStatus(), MesProWorkOrderStatusEnum.PREPARE.getStatus())) { throw exception(PRO_WORK_ORDER_NOT_PREPARE); } - // 1.3 校验编码唯一 - validateWorkOrderCodeUnique(updateReqVO.getId(), updateReqVO.getCode()); - // 1.4 校验批次配置 - validateBatchConfig(updateReqVO.getProductId(), updateReqVO.getClientId()); + // 1.2 校验数据 + validateWorkOrderSaveData(updateReqVO.getId(), updateReqVO); // 2. 判断产品或数量是否变更,如果变更则重新生成 BOM(updated=true 会先清理旧数据) boolean productChanged = ObjUtil.notEqual(oldWorkOrder.getProductId(), updateReqVO.getProductId()); @@ -222,6 +213,18 @@ public class MesProWorkOrderServiceImpl implements MesProWorkOrderService { // ==================== 校验方法 ==================== + private void validateWorkOrderSaveData(Long id, MesProWorkOrderSaveReqVO reqVO) { + // 1. 校验编码唯一 + validateWorkOrderCodeUnique(id, reqVO.getCode()); + // 2. 校验产品存在 + itemService.validateItemExists(reqVO.getProductId()); + // 3. 校验批次配置(如果产品有 clientFlag=true,则 clientId 必填) + MesMdItemBatchConfigDO batchConfig = itemBatchConfigService.getItemBatchConfigByItemId(reqVO.getProductId()); + if (batchConfig != null && Boolean.TRUE.equals(batchConfig.getClientFlag()) && reqVO.getClientId() == null) { + throw exception(MD_CLIENT_NOT_EXISTS); + } + } + private void validateWorkOrderCodeUnique(Long id, String code) { if (code == null) { return; @@ -235,15 +238,6 @@ public class MesProWorkOrderServiceImpl implements MesProWorkOrderService { } } - private void validateBatchConfig(Long productId, Long clientId) { - // 如果产品有 clientFlag =true,则 clientId 必填 - MesMdItemBatchConfigDO batchConfig = itemBatchConfigService.getItemBatchConfigByItemId(productId); - if (batchConfig != null && Boolean.TRUE.equals(batchConfig.getClientFlag()) && clientId == null) { - // 产品要求批次管理中必须填写客户 - throw exception(MD_CLIENT_NOT_EXISTS); - } - } - @Override public List getWorkOrderList(Integer type) { return workOrderMapper.selectList(new LambdaQueryWrapperX() -- libgit2 0.21.4