Commit c82e0937f7f72e71d9cf7a313d405d59dc61edb4

Authored by YunaiV
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>
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
... ... @@ -36,6 +36,13 @@ public interface MesCalPlanService {
36 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 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 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) {
... ...