Commit 73de28909c8527b36910d3e3d4e4199325fa7eef

Authored by YunaiV
1 parent 4da4ddc1

✨ feat(mes): 新增点检方案设备和项目的重复校验逻辑

新增设备和项目在同一方案下的重复校验,避免用户重复添加相同设备或项目。同时,增强了点检方案停用时的状态校验,确保只有已启用的方案才能被停用。
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/dv/checkplan/MesDvCheckPlanMachineryMapper.java
... ... @@ -32,4 +32,10 @@ public interface MesDvCheckPlanMachineryMapper extends BaseMapperX<MesDvCheckPla
32 32 return selectCount(MesDvCheckPlanMachineryDO::getMachineryId, machineryId);
33 33 }
34 34  
  35 + default MesDvCheckPlanMachineryDO selectByPlanIdAndMachineryId(Long planId, Long machineryId) {
  36 + return selectOne(new LambdaQueryWrapperX<MesDvCheckPlanMachineryDO>()
  37 + .eq(MesDvCheckPlanMachineryDO::getPlanId, planId)
  38 + .eq(MesDvCheckPlanMachineryDO::getMachineryId, machineryId));
  39 + }
  40 +
35 41 }
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/dv/checkplan/MesDvCheckPlanSubjectMapper.java
... ... @@ -32,4 +32,10 @@ public interface MesDvCheckPlanSubjectMapper extends BaseMapperX&lt;MesDvCheckPlanS
32 32 return selectCount(MesDvCheckPlanSubjectDO::getSubjectId, subjectId);
33 33 }
34 34  
  35 + default MesDvCheckPlanSubjectDO selectByPlanIdAndSubjectId(Long planId, Long subjectId) {
  36 + return selectOne(new LambdaQueryWrapperX<MesDvCheckPlanSubjectDO>()
  37 + .eq(MesDvCheckPlanSubjectDO::getPlanId, planId)
  38 + .eq(MesDvCheckPlanSubjectDO::getSubjectId, subjectId));
  39 + }
  40 +
35 41 }
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/ErrorCodeConstants.java
... ... @@ -166,10 +166,13 @@ public interface ErrorCodeConstants {
166 166 ErrorCode DV_CHECK_PLAN_NOT_PREPARE = new ErrorCode(1_040_302_002, "点检保养方案已启用,不允许修改或删除");
167 167 ErrorCode DV_CHECK_PLAN_NO_MACHINERY = new ErrorCode(1_040_302_003, "启用方案时,至少需要关联一台设备");
168 168 ErrorCode DV_CHECK_PLAN_NO_SUBJECT = new ErrorCode(1_040_302_004, "启用方案时,至少需要关联一个点检保养项目");
  169 + ErrorCode DV_CHECK_PLAN_NOT_ENABLED = new ErrorCode(1_040_302_005, "点检保养方案未启用,不允许停用");
169 170 // ========== MES 设备管理-点检方案设备(1-040-302-100) ==========
170 171 ErrorCode DV_CHECK_PLAN_MACHINERY_NOT_EXISTS = new ErrorCode(1_040_302_100, "点检保养方案设备不存在");
  172 + ErrorCode DV_CHECK_PLAN_MACHINERY_DUPLICATE = new ErrorCode(1_040_302_101, "该设备已关联到当前方案,请勿重复添加");
171 173 // ========== MES 设备管理-点检方案项目(1-040-302-200) ==========
172 174 ErrorCode DV_CHECK_PLAN_SUBJECT_NOT_EXISTS = new ErrorCode(1_040_302_200, "点检保养方案项目不存在");
  175 + ErrorCode DV_CHECK_PLAN_SUBJECT_DUPLICATE = new ErrorCode(1_040_302_201, "该项目已关联到当前方案,请勿重复添加");
173 176  
174 177 // ========== MES 设备管理-维修工单(1-040-303-000) ==========
175 178 ErrorCode DV_REPAIR_NOT_EXISTS = new ErrorCode(1_040_303_000, "维修工单不存在");
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/dv/checkplan/MesDvCheckPlanMachineryServiceImpl.java
... ... @@ -38,6 +38,10 @@ public class MesDvCheckPlanMachineryServiceImpl implements MesDvCheckPlanMachine
38 38 checkPlanService.validateCheckPlanPrepare(createReqVO.getPlanId());
39 39 // 1.2 校验设备存在
40 40 machineryService.validateMachineryExists(createReqVO.getMachineryId());
  41 + // 1.3 校验同一方案下设备不重复
  42 + if (checkPlanMachineryMapper.selectByPlanIdAndMachineryId(createReqVO.getPlanId(), createReqVO.getMachineryId()) != null) {
  43 + throw exception(DV_CHECK_PLAN_MACHINERY_DUPLICATE);
  44 + }
41 45  
42 46 // 2. 插入
43 47 MesDvCheckPlanMachineryDO planMachinery = BeanUtils.toBean(createReqVO, MesDvCheckPlanMachineryDO.class);
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/dv/checkplan/MesDvCheckPlanServiceImpl.java
... ... @@ -91,8 +91,11 @@ public class MesDvCheckPlanServiceImpl implements MesDvCheckPlanService {
91 91  
92 92 @Override
93 93 public void disableCheckPlan(Long id) {
94   - // 1. 校验存在
95   - validateCheckPlanExists(id);
  94 + // 1. 校验存在 + 校验已启用状态
  95 + MesDvCheckPlanDO plan = doValidateCheckPlanExists(id);
  96 + if (ObjUtil.notEqual(MesDvCheckPlanStatusEnum.ENABLED.getStatus(), plan.getStatus())) {
  97 + throw exception(DV_CHECK_PLAN_NOT_ENABLED);
  98 + }
96 99  
97 100 // 2. 更新状态为草稿
98 101 checkPlanMapper.updateById(new MesDvCheckPlanDO().setId(id)
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/dv/checkplan/MesDvCheckPlanSubjectServiceImpl.java
... ... @@ -38,6 +38,10 @@ public class MesDvCheckPlanSubjectServiceImpl implements MesDvCheckPlanSubjectSe
38 38 checkPlanService.validateCheckPlanPrepare(createReqVO.getPlanId());
39 39 // 1.2 校验项目存在
40 40 subjectService.validateSubjectExists(createReqVO.getSubjectId());
  41 + // 1.3 校验同一方案下项目不重复
  42 + if (checkPlanSubjectMapper.selectByPlanIdAndSubjectId(createReqVO.getPlanId(), createReqVO.getSubjectId()) != null) {
  43 + throw exception(DV_CHECK_PLAN_SUBJECT_DUPLICATE);
  44 + }
41 45  
42 46 // 2. 插入
43 47 MesDvCheckPlanSubjectDO planSubject = BeanUtils.toBean(createReqVO, MesDvCheckPlanSubjectDO.class);
... ...