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,7 +91,7 @@ public interface ErrorCodeConstants { | ||
| 91 | // ========== MES 日历排班-排班计划(1-040-202-000) ========== | 91 | // ========== MES 日历排班-排班计划(1-040-202-000) ========== |
| 92 | ErrorCode CAL_PLAN_NOT_EXISTS = new ErrorCode(1_040_202_000, "排班计划不存在"); | 92 | ErrorCode CAL_PLAN_NOT_EXISTS = new ErrorCode(1_040_202_000, "排班计划不存在"); |
| 93 | ErrorCode CAL_PLAN_CODE_DUPLICATE = new ErrorCode(1_040_202_001, "排班计划编码已存在"); | 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 | ErrorCode CAL_PLAN_TEAM_COUNT_NOT_MATCH = new ErrorCode(1_040_202_003, "确认排班计划时,分配的班组数量与轮班方式不匹配"); | 95 | ErrorCode CAL_PLAN_TEAM_COUNT_NOT_MATCH = new ErrorCode(1_040_202_003, "确认排班计划时,分配的班组数量与轮班方式不匹配"); |
| 96 | // ========== MES 日历排班-计划班组关联(1-040-202-100) ========== | 96 | // ========== MES 日历排班-计划班组关联(1-040-202-100) ========== |
| 97 | ErrorCode CAL_PLAN_TEAM_NOT_EXISTS = new ErrorCode(1_040_202_100, "计划班组关联不存在"); | 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
| @@ -36,6 +36,13 @@ public interface MesCalPlanService { | @@ -36,6 +36,13 @@ public interface MesCalPlanService { | ||
| 36 | void deletePlan(Long id); | 36 | void deletePlan(Long id); |
| 37 | 37 | ||
| 38 | /** | 38 | /** |
| 39 | + * 校验排班计划为草稿状态(确认后不允许编辑) | ||
| 40 | + * | ||
| 41 | + * @param planId 计划编号 | ||
| 42 | + */ | ||
| 43 | + void validatePlanPrepare(Long planId); | ||
| 44 | + | ||
| 45 | + /** | ||
| 39 | * 获得排班计划 | 46 | * 获得排班计划 |
| 40 | * | 47 | * |
| 41 | * @param id 编号 | 48 | * @param id 编号 |
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,14 +57,16 @@ public class MesCalPlanServiceImpl implements MesCalPlanService { | ||
| 57 | @Override | 57 | @Override |
| 58 | @Transactional(rollbackFor = Exception.class) | 58 | @Transactional(rollbackFor = Exception.class) |
| 59 | public void updatePlan(MesCalPlanSaveReqVO updateReqVO) { | 59 | public void updatePlan(MesCalPlanSaveReqVO updateReqVO) { |
| 60 | - // TODO @AI:需要校验下,plan 未确定;(确认后,不允许编辑) | ||
| 61 | // 1.1 校验存在 | 60 | // 1.1 校验存在 |
| 62 | MesCalPlanDO existPlan = validatePlanExists(updateReqVO.getId()); | 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 | validatePlanCodeUnique(updateReqVO.getId(), updateReqVO.getCode()); | 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 | validateTeamCountForConfirm(updateReqVO.getId(), updateReqVO.getShiftType()); | 70 | validateTeamCountForConfirm(updateReqVO.getId(), updateReqVO.getShiftType()); |
| 69 | } | 71 | } |
| 70 | 72 | ||
| @@ -78,13 +80,8 @@ public class MesCalPlanServiceImpl implements MesCalPlanService { | @@ -78,13 +80,8 @@ public class MesCalPlanServiceImpl implements MesCalPlanService { | ||
| 78 | @Override | 80 | @Override |
| 79 | @Transactional(rollbackFor = Exception.class) | 81 | @Transactional(rollbackFor = Exception.class) |
| 80 | public void deletePlan(Long id) { | 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 | // 2.1 级联删除班次 + 班组关联 | 86 | // 2.1 级联删除班次 + 班组关联 |
| 90 | planShiftService.deletePlanShiftByPlanId(id); | 87 | planShiftService.deletePlanShiftByPlanId(id); |
| @@ -103,6 +100,14 @@ public class MesCalPlanServiceImpl implements MesCalPlanService { | @@ -103,6 +100,14 @@ public class MesCalPlanServiceImpl implements MesCalPlanService { | ||
| 103 | return planMapper.selectPage(pageReqVO); | 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 | private MesCalPlanDO validatePlanExists(Long id) { | 111 | private MesCalPlanDO validatePlanExists(Long id) { |
| 107 | MesCalPlanDO plan = planMapper.selectById(id); | 112 | MesCalPlanDO plan = planMapper.selectById(id); |
| 108 | if (plan == null) { | 113 | if (plan == null) { |