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,4 +32,10 @@ public interface MesDvCheckPlanMachineryMapper extends BaseMapperX<MesDvCheckPla
32 return selectCount(MesDvCheckPlanMachineryDO::getMachineryId, machineryId); 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,4 +32,10 @@ public interface MesDvCheckPlanSubjectMapper extends BaseMapperX&lt;MesDvCheckPlanS
32 return selectCount(MesDvCheckPlanSubjectDO::getSubjectId, subjectId); 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,10 +166,13 @@ public interface ErrorCodeConstants {
166 ErrorCode DV_CHECK_PLAN_NOT_PREPARE = new ErrorCode(1_040_302_002, "点检保养方案已启用,不允许修改或删除"); 166 ErrorCode DV_CHECK_PLAN_NOT_PREPARE = new ErrorCode(1_040_302_002, "点检保养方案已启用,不允许修改或删除");
167 ErrorCode DV_CHECK_PLAN_NO_MACHINERY = new ErrorCode(1_040_302_003, "启用方案时,至少需要关联一台设备"); 167 ErrorCode DV_CHECK_PLAN_NO_MACHINERY = new ErrorCode(1_040_302_003, "启用方案时,至少需要关联一台设备");
168 ErrorCode DV_CHECK_PLAN_NO_SUBJECT = new ErrorCode(1_040_302_004, "启用方案时,至少需要关联一个点检保养项目"); 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 // ========== MES 设备管理-点检方案设备(1-040-302-100) ========== 170 // ========== MES 设备管理-点检方案设备(1-040-302-100) ==========
170 ErrorCode DV_CHECK_PLAN_MACHINERY_NOT_EXISTS = new ErrorCode(1_040_302_100, "点检保养方案设备不存在"); 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 // ========== MES 设备管理-点检方案项目(1-040-302-200) ========== 173 // ========== MES 设备管理-点检方案项目(1-040-302-200) ==========
172 ErrorCode DV_CHECK_PLAN_SUBJECT_NOT_EXISTS = new ErrorCode(1_040_302_200, "点检保养方案项目不存在"); 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 // ========== MES 设备管理-维修工单(1-040-303-000) ========== 177 // ========== MES 设备管理-维修工单(1-040-303-000) ==========
175 ErrorCode DV_REPAIR_NOT_EXISTS = new ErrorCode(1_040_303_000, "维修工单不存在"); 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,6 +38,10 @@ public class MesDvCheckPlanMachineryServiceImpl implements MesDvCheckPlanMachine
38 checkPlanService.validateCheckPlanPrepare(createReqVO.getPlanId()); 38 checkPlanService.validateCheckPlanPrepare(createReqVO.getPlanId());
39 // 1.2 校验设备存在 39 // 1.2 校验设备存在
40 machineryService.validateMachineryExists(createReqVO.getMachineryId()); 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 // 2. 插入 46 // 2. 插入
43 MesDvCheckPlanMachineryDO planMachinery = BeanUtils.toBean(createReqVO, MesDvCheckPlanMachineryDO.class); 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,8 +91,11 @@ public class MesDvCheckPlanServiceImpl implements MesDvCheckPlanService {
91 91
92 @Override 92 @Override
93 public void disableCheckPlan(Long id) { 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 // 2. 更新状态为草稿 100 // 2. 更新状态为草稿
98 checkPlanMapper.updateById(new MesDvCheckPlanDO().setId(id) 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,6 +38,10 @@ public class MesDvCheckPlanSubjectServiceImpl implements MesDvCheckPlanSubjectSe
38 checkPlanService.validateCheckPlanPrepare(createReqVO.getPlanId()); 38 checkPlanService.validateCheckPlanPrepare(createReqVO.getPlanId());
39 // 1.2 校验项目存在 39 // 1.2 校验项目存在
40 subjectService.validateSubjectExists(createReqVO.getSubjectId()); 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 // 2. 插入 46 // 2. 插入
43 MesDvCheckPlanSubjectDO planSubject = BeanUtils.toBean(createReqVO, MesDvCheckPlanSubjectDO.class); 47 MesDvCheckPlanSubjectDO planSubject = BeanUtils.toBean(createReqVO, MesDvCheckPlanSubjectDO.class);