diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pro/workorder/vo/MesProWorkorderSaveReqVO.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pro/workorder/vo/MesProWorkorderSaveReqVO.java index 74de03b..b8527bc 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pro/workorder/vo/MesProWorkorderSaveReqVO.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pro/workorder/vo/MesProWorkorderSaveReqVO.java @@ -70,4 +70,4 @@ public class MesProWorkOrderSaveReqVO { @Schema(description = "备注", example = "备注") private String remark; - } +} diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/ErrorCodeConstants.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/ErrorCodeConstants.java index 4319c09..0fea051 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/ErrorCodeConstants.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/ErrorCodeConstants.java @@ -238,8 +238,9 @@ public interface ErrorCodeConstants { // ========== MES 生产管理-生产工单(1-040-502-000) ========== ErrorCode PRO_WORK_ORDER_NOT_EXISTS = new ErrorCode(1_040_502_000, "生产工单不存在"); ErrorCode PRO_WORK_ORDER_CODE_DUPLICATE = new ErrorCode(1_040_502_001, "生产工单编码已存在"); - ErrorCode PRO_WORK_ORDER_NOT_PREPARE = new ErrorCode(1_040_502_002, "只能删除草稿状态的工单"); + ErrorCode PRO_WORK_ORDER_NOT_PREPARE = new ErrorCode(1_040_502_002, "只有草稿状态的工单才能执行此操作"); ErrorCode PRO_WORK_ORDER_NOT_CONFIRMED = new ErrorCode(1_040_502_003, "只有已确认状态的工单才能执行此操作"); + ErrorCode PRO_WORK_ORDER_HAS_CHILDREN = new ErrorCode(1_040_502_004, "存在子工单,无法删除"); ErrorCode PRO_WORK_ORDER_BOM_NOT_EXISTS = new ErrorCode(1_040_502_100, "生产工单BOM不存在"); // ========== MES 生产管理-生产任务(1-040-503-000) ========== diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/md/autocode/MesMdAutoCodeRuleCodeEnum.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/md/autocode/MesMdAutoCodeRuleCodeEnum.java index c0c4d9d..aa700cd 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/md/autocode/MesMdAutoCodeRuleCodeEnum.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/md/autocode/MesMdAutoCodeRuleCodeEnum.java @@ -44,7 +44,8 @@ public enum MesMdAutoCodeRuleCodeEnum { DV_REPAIR_CODE("DV_REPAIR_CODE", "维修单编码"), WM_SALES_NOTICE_CODE("WM_SALES_NOTICE_CODE", "发货通知单编码"), WM_RETURN_SALES_CODE("WM_RETURN_SALES_CODE", "销售退货单编码"), - WM_MISC_ISSUE_CODE("WM_MISC_ISSUE_CODE", "杂项出库单编码"); + WM_MISC_ISSUE_CODE("WM_MISC_ISSUE_CODE", "杂项出库单编码"), + PRO_WORK_ORDER_CODE("PRO_WORK_ORDER_CODE", "生产工单编码"); /** * 规则代码 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 26e0184..c8133f8 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,6 +56,7 @@ 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 校验产品存在 @@ -69,9 +70,7 @@ public class MesProWorkOrderServiceImpl implements MesProWorkOrderService { } // 2.2 插入工单 MesProWorkOrderDO workOrder = BeanUtils.toBean(createReqVO, MesProWorkOrderDO.class); - if (workOrder.getStatus() == null) { - workOrder.setStatus(MesProWorkOrderStatusEnum.PREPARE.getStatus()); - } + workOrder.setStatus(MesProWorkOrderStatusEnum.PREPARE.getStatus()); workOrderMapper.insert(workOrder); // 3. 自动生成 BOM:根据产品 BOM 生成工单 BOM @@ -88,9 +87,14 @@ public class MesProWorkOrderServiceImpl implements MesProWorkOrderService { public void updateWorkOrder(MesProWorkOrderSaveReqVO updateReqVO) { // 1.1 校验存在 MesProWorkOrderDO oldWorkOrder = validateWorkOrderExists(updateReqVO.getId()); - // 1.2 校验编码唯一 + // 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.3 校验批次配置 + // 1.4 校验批次配置 validateBatchConfig(updateReqVO.getProductId(), updateReqVO.getClientId()); // 2. 判断产品或数量是否变更,如果变更则重新生成 BOM(updated=true 会先清理旧数据) @@ -114,6 +118,11 @@ public class MesProWorkOrderServiceImpl implements MesProWorkOrderService { if (ObjUtil.notEqual(workOrder.getStatus(), MesProWorkOrderStatusEnum.PREPARE.getStatus())) { throw exception(PRO_WORK_ORDER_NOT_PREPARE); } + // 1.3 校验是否有子工单 + Long childCount = workOrderMapper.selectCount(MesProWorkOrderDO::getParentId, id); + if (childCount > 0) { + throw exception(PRO_WORK_ORDER_HAS_CHILDREN); + } // 2. 删除工单 + BOM workOrderMapper.deleteById(id); @@ -227,7 +236,7 @@ public class MesProWorkOrderServiceImpl implements MesProWorkOrderService { } private void validateBatchConfig(Long productId, Long clientId) { - // 如果产品有 clientFlag=true,则 clientId 必填 + // 如果产品有 clientFlag =true,则 clientId 必填 MesMdItemBatchConfigDO batchConfig = itemBatchConfigService.getItemBatchConfigByItemId(productId); if (batchConfig != null && Boolean.TRUE.equals(batchConfig.getClientFlag()) && clientId == null) { // 产品要求批次管理中必须填写客户