Commit c82e0937f7f72e71d9cf7a313d405d59dc61edb4
1 parent
15e6c5d3
fix(mes-cal): 排班计划抽取 validatePlanPrepare 校验方法,确认后禁止修改删除
1. MesCalPlanService 新增 validatePlanPrepare 接口方法 2. MesCalPlanServiceImpl 实现 validatePlanPrepare,供子资源 Service 调用 3. updatePlan 增加已确认状态校验,阻止修改已确认的计划 4. deletePlan 改用 validatePlanPrepare 替代内联校验 5. ErrorCodeConstants 调整 CAL_PLAN_NOT_PREPARE 消息 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Showing
3 changed files
with
25 additions
and
13 deletions
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/ErrorCodeConstants.java
| ... | ... | @@ -91,7 +91,7 @@ public interface ErrorCodeConstants { |
| 91 | 91 | // ========== MES 日历排班-排班计划(1-040-202-000) ========== |
| 92 | 92 | ErrorCode CAL_PLAN_NOT_EXISTS = new ErrorCode(1_040_202_000, "排班计划不存在"); |
| 93 | 93 | ErrorCode CAL_PLAN_CODE_DUPLICATE = new ErrorCode(1_040_202_001, "排班计划编码已存在"); |
| 94 | - ErrorCode CAL_PLAN_NOT_PREPARE = new ErrorCode(1_040_202_002, "只能删除草稿状态的排班计划"); | |
| 94 | + ErrorCode CAL_PLAN_NOT_PREPARE = new ErrorCode(1_040_202_002, "排班计划已确认,不允许修改或删除"); | |
| 95 | 95 | ErrorCode CAL_PLAN_TEAM_COUNT_NOT_MATCH = new ErrorCode(1_040_202_003, "确认排班计划时,分配的班组数量与轮班方式不匹配"); |
| 96 | 96 | // ========== MES 日历排班-计划班组关联(1-040-202-100) ========== |
| 97 | 97 | ErrorCode CAL_PLAN_TEAM_NOT_EXISTS = new ErrorCode(1_040_202_100, "计划班组关联不存在"); | ... | ... |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/cal/plan/MesCalPlanService.java
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/cal/plan/MesCalPlanServiceImpl.java
| ... | ... | @@ -57,14 +57,16 @@ public class MesCalPlanServiceImpl implements MesCalPlanService { |
| 57 | 57 | @Override |
| 58 | 58 | @Transactional(rollbackFor = Exception.class) |
| 59 | 59 | public void updatePlan(MesCalPlanSaveReqVO updateReqVO) { |
| 60 | - // TODO @AI:需要校验下,plan 未确定;(确认后,不允许编辑) | |
| 61 | 60 | // 1.1 校验存在 |
| 62 | 61 | MesCalPlanDO existPlan = validatePlanExists(updateReqVO.getId()); |
| 63 | - // 1.2 校验编码唯一 | |
| 62 | + // 1.2 校验计划未确认(已确认不允许编辑) | |
| 63 | + if (MesCalPlanStatusEnum.CONFIRMED.getStatus().equals(existPlan.getStatus())) { | |
| 64 | + throw exception(CAL_PLAN_NOT_PREPARE); | |
| 65 | + } | |
| 66 | + // 1.3 校验编码唯一 | |
| 64 | 67 | validatePlanCodeUnique(updateReqVO.getId(), updateReqVO.getCode()); |
| 65 | - // 1.3 若 status 变为 CONFIRMED,校验班组数量 | |
| 66 | - if (MesCalPlanStatusEnum.CONFIRMED.getStatus().equals(updateReqVO.getStatus()) | |
| 67 | - && !MesCalPlanStatusEnum.CONFIRMED.getStatus().equals(existPlan.getStatus())) { | |
| 68 | + // 1.4 若 status 变为 CONFIRMED,校验班组数量 | |
| 69 | + if (MesCalPlanStatusEnum.CONFIRMED.getStatus().equals(updateReqVO.getStatus())) { | |
| 68 | 70 | validateTeamCountForConfirm(updateReqVO.getId(), updateReqVO.getShiftType()); |
| 69 | 71 | } |
| 70 | 72 | |
| ... | ... | @@ -78,13 +80,8 @@ public class MesCalPlanServiceImpl implements MesCalPlanService { |
| 78 | 80 | @Override |
| 79 | 81 | @Transactional(rollbackFor = Exception.class) |
| 80 | 82 | public void deletePlan(Long id) { |
| 81 | - // 1.1 校验存在 | |
| 82 | - MesCalPlanDO plan = validatePlanExists(id); | |
| 83 | - // 1.2 校验状态为草稿 | |
| 84 | - // TODO @AI:需要校验下,plan 未确定;(确认后,不允许编辑)【最好抽成一个方法,各个地方可以调用】 | |
| 85 | - if (ObjUtil.notEqual(MesCalPlanStatusEnum.PREPARE.getStatus(), plan.getStatus())) { | |
| 86 | - throw exception(CAL_PLAN_NOT_PREPARE); | |
| 87 | - } | |
| 83 | + // 1.1 校验存在 + 校验状态为草稿 | |
| 84 | + validatePlanPrepare(id); | |
| 88 | 85 | |
| 89 | 86 | // 2.1 级联删除班次 + 班组关联 |
| 90 | 87 | planShiftService.deletePlanShiftByPlanId(id); |
| ... | ... | @@ -103,6 +100,14 @@ public class MesCalPlanServiceImpl implements MesCalPlanService { |
| 103 | 100 | return planMapper.selectPage(pageReqVO); |
| 104 | 101 | } |
| 105 | 102 | |
| 103 | + @Override | |
| 104 | + public void validatePlanPrepare(Long planId) { | |
| 105 | + MesCalPlanDO plan = validatePlanExists(planId); | |
| 106 | + if (ObjUtil.notEqual(MesCalPlanStatusEnum.PREPARE.getStatus(), plan.getStatus())) { | |
| 107 | + throw exception(CAL_PLAN_NOT_PREPARE); | |
| 108 | + } | |
| 109 | + } | |
| 110 | + | |
| 106 | 111 | private MesCalPlanDO validatePlanExists(Long id) { |
| 107 | 112 | MesCalPlanDO plan = planMapper.selectById(id); |
| 108 | 113 | if (plan == null) { | ... | ... |