Commit da07eebbcca1376e37349142c829043d29651324

Authored by YunaiV
1 parent 5b61d1be

✨ feat(unit-measure): 新增计量单位引用检查功能

为计量单位添加引用检查,确保在删除计量单位时,能够验证是否被生产任务投料或质检方案指标项引用。新增相关方法以获取引用记录数量,提升数据一致性和安全性。
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/pro/task/MesProTaskIssueMapper.java
@@ -27,6 +27,10 @@ public interface MesProTaskIssueMapper extends BaseMapperX<MesProTaskIssueDO> { @@ -27,6 +27,10 @@ public interface MesProTaskIssueMapper extends BaseMapperX<MesProTaskIssueDO> {
27 .orderByDesc(MesProTaskIssueDO::getId)); 27 .orderByDesc(MesProTaskIssueDO::getId));
28 } 28 }
29 29
  30 + default Long selectCountByUnitMeasureId(Long unitMeasureId) {
  31 + return selectCount(MesProTaskIssueDO::getUnitMeasureId, unitMeasureId);
  32 + }
  33 +
30 default List<MesProTaskIssueDO> selectListByTaskId(Long taskId) { 34 default List<MesProTaskIssueDO> selectListByTaskId(Long taskId) {
31 return selectList(new LambdaQueryWrapperX<MesProTaskIssueDO>() 35 return selectList(new LambdaQueryWrapperX<MesProTaskIssueDO>()
32 .eq(MesProTaskIssueDO::getTaskId, taskId) 36 .eq(MesProTaskIssueDO::getTaskId, taskId)
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/qc/template/MesQcTemplateIndicatorMapper.java
@@ -27,6 +27,10 @@ public interface MesQcTemplateIndicatorMapper extends BaseMapperX&lt;MesQcTemplateI @@ -27,6 +27,10 @@ public interface MesQcTemplateIndicatorMapper extends BaseMapperX&lt;MesQcTemplateI
27 return selectList(MesQcTemplateIndicatorDO::getTemplateId, templateId); 27 return selectList(MesQcTemplateIndicatorDO::getTemplateId, templateId);
28 } 28 }
29 29
  30 + default Long selectCountByUnitMeasureId(Long unitMeasureId) {
  31 + return selectCount(MesQcTemplateIndicatorDO::getUnitMeasureId, unitMeasureId);
  32 + }
  33 +
30 default void deleteByTemplateId(Long templateId) { 34 default void deleteByTemplateId(Long templateId) {
31 delete(new LambdaQueryWrapperX<MesQcTemplateIndicatorDO>() 35 delete(new LambdaQueryWrapperX<MesQcTemplateIndicatorDO>()
32 .eq(MesQcTemplateIndicatorDO::getTemplateId, templateId)); 36 .eq(MesQcTemplateIndicatorDO::getTemplateId, templateId));
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/batch/MesWmBatchMapper.java
@@ -24,6 +24,10 @@ public interface MesWmBatchMapper extends BaseMapperX&lt;MesWmBatchDO&gt; { @@ -24,6 +24,10 @@ public interface MesWmBatchMapper extends BaseMapperX&lt;MesWmBatchDO&gt; {
24 return selectOne(MesWmBatchDO:: getCode, code); 24 return selectOne(MesWmBatchDO:: getCode, code);
25 } 25 }
26 26
  27 + default Long selectCountByToolId(Long toolId) {
  28 + return selectCount(MesWmBatchDO::getToolId, toolId);
  29 + }
  30 +
27 default PageResult<MesWmBatchDO> selectPage(MesWmBatchPageReqVO reqVO) { 31 default PageResult<MesWmBatchDO> selectPage(MesWmBatchPageReqVO reqVO) {
28 return selectPage(reqVO, new LambdaQueryWrapperX<MesWmBatchDO>() 32 return selectPage(reqVO, new LambdaQueryWrapperX<MesWmBatchDO>()
29 .likeIfPresent(MesWmBatchDO::getCode, reqVO.getCode()) 33 .likeIfPresent(MesWmBatchDO::getCode, reqVO.getCode())
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/ErrorCodeConstants.java
@@ -25,6 +25,8 @@ public interface ErrorCodeConstants { @@ -25,6 +25,8 @@ public interface ErrorCodeConstants {
25 ErrorCode MD_UNIT_MEASURE_CODE_DUPLICATE = new ErrorCode(1_040_101_001, "计量单位编码已存在"); 25 ErrorCode MD_UNIT_MEASURE_CODE_DUPLICATE = new ErrorCode(1_040_101_001, "计量单位编码已存在");
26 ErrorCode MD_UNIT_MEASURE_HAS_ITEM = new ErrorCode(1_040_101_002, "该计量单位下存在物料,无法删除"); 26 ErrorCode MD_UNIT_MEASURE_HAS_ITEM = new ErrorCode(1_040_101_002, "该计量单位下存在物料,无法删除");
27 ErrorCode MD_UNIT_MEASURE_HAS_SECONDARY = new ErrorCode(1_040_101_003, "该主单位下存在辅单位,无法删除"); 27 ErrorCode MD_UNIT_MEASURE_HAS_SECONDARY = new ErrorCode(1_040_101_003, "该主单位下存在辅单位,无法删除");
  28 + ErrorCode MD_UNIT_MEASURE_HAS_TASK_ISSUE = new ErrorCode(1_040_101_004, "该计量单位已被生产投料引用,无法删除");
  29 + ErrorCode MD_UNIT_MEASURE_HAS_QC_TEMPLATE_INDICATOR = new ErrorCode(1_040_101_005, "该计量单位已被质检方案指标项引用,无法删除");
28 30
29 // ========== MES 基础数据-物料(1-040-102-000) ========== 31 // ========== MES 基础数据-物料(1-040-102-000) ==========
30 ErrorCode MD_ITEM_NOT_EXISTS = new ErrorCode(1_040_102_000, "物料不存在"); 32 ErrorCode MD_ITEM_NOT_EXISTS = new ErrorCode(1_040_102_000, "物料不存在");
@@ -223,6 +225,7 @@ public interface ErrorCodeConstants { @@ -223,6 +225,7 @@ public interface ErrorCodeConstants {
223 // ========== MES 工具管理-工具台账(1-040-401-000) ========== 225 // ========== MES 工具管理-工具台账(1-040-401-000) ==========
224 ErrorCode TM_TOOL_NOT_EXISTS = new ErrorCode(1_040_401_000, "工具不存在"); 226 ErrorCode TM_TOOL_NOT_EXISTS = new ErrorCode(1_040_401_000, "工具不存在");
225 ErrorCode TM_TOOL_CODE_DUPLICATE = new ErrorCode(1_040_401_001, "工具编码已存在"); 227 ErrorCode TM_TOOL_CODE_DUPLICATE = new ErrorCode(1_040_401_001, "工具编码已存在");
  228 + ErrorCode TM_TOOL_HAS_BATCH = new ErrorCode(1_040_401_002, "该工具已被批次引用,无法删除");
226 229
227 // ========== MES 生产管理-工序(1-040-500-000) ========== 230 // ========== MES 生产管理-工序(1-040-500-000) ==========
228 ErrorCode PRO_PROCESS_NOT_EXISTS = new ErrorCode(1_040_500_000, "工序不存在"); 231 ErrorCode PRO_PROCESS_NOT_EXISTS = new ErrorCode(1_040_500_000, "工序不存在");
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/md/unitmeasure/MesMdUnitMeasureServiceImpl.java
@@ -8,6 +8,9 @@ import cn.iocoder.yudao.module.mes.controller.admin.md.unitmeasure.vo.MesMdUnitM @@ -8,6 +8,9 @@ import cn.iocoder.yudao.module.mes.controller.admin.md.unitmeasure.vo.MesMdUnitM
8 import cn.iocoder.yudao.module.mes.dal.dataobject.md.unitmeasure.MesMdUnitMeasureDO; 8 import cn.iocoder.yudao.module.mes.dal.dataobject.md.unitmeasure.MesMdUnitMeasureDO;
9 import cn.iocoder.yudao.module.mes.dal.mysql.md.unitmeasure.MesMdUnitMeasureMapper; 9 import cn.iocoder.yudao.module.mes.dal.mysql.md.unitmeasure.MesMdUnitMeasureMapper;
10 import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService; 10 import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService;
  11 +import cn.iocoder.yudao.module.mes.service.pro.task.MesProTaskIssueService;
  12 +import cn.iocoder.yudao.module.mes.service.qc.template.MesQcTemplateIndicatorService;
  13 +import org.springframework.context.annotation.Lazy;
11 import jakarta.annotation.Resource; 14 import jakarta.annotation.Resource;
12 import org.springframework.stereotype.Service; 15 import org.springframework.stereotype.Service;
13 import org.springframework.validation.annotation.Validated; 16 import org.springframework.validation.annotation.Validated;
@@ -34,6 +37,12 @@ public class MesMdUnitMeasureServiceImpl implements MesMdUnitMeasureService { @@ -34,6 +37,12 @@ public class MesMdUnitMeasureServiceImpl implements MesMdUnitMeasureService {
34 37
35 @Resource 38 @Resource
36 private MesMdItemService itemService; 39 private MesMdItemService itemService;
  40 + @Resource
  41 + @Lazy
  42 + private MesProTaskIssueService taskIssueService;
  43 + @Resource
  44 + @Lazy
  45 + private MesQcTemplateIndicatorService templateIndicatorService;
37 46
38 @Override 47 @Override
39 public Long createUnitMeasure(MesMdUnitMeasureSaveReqVO createReqVO) { 48 public Long createUnitMeasure(MesMdUnitMeasureSaveReqVO createReqVO) {
@@ -70,6 +79,14 @@ public class MesMdUnitMeasureServiceImpl implements MesMdUnitMeasureService { @@ -70,6 +79,14 @@ public class MesMdUnitMeasureServiceImpl implements MesMdUnitMeasureService {
70 if (itemService.getItemCountByUnitMeasureId(id) > 0) { 79 if (itemService.getItemCountByUnitMeasureId(id) > 0) {
71 throw exception(MD_UNIT_MEASURE_HAS_ITEM); 80 throw exception(MD_UNIT_MEASURE_HAS_ITEM);
72 } 81 }
  82 + // 校验是否被生产任务投料引用
  83 + if (taskIssueService.getTaskIssueCountByUnitMeasureId(id) > 0) {
  84 + throw exception(MD_UNIT_MEASURE_HAS_TASK_ISSUE);
  85 + }
  86 + // 校验是否被质检方案指标项引用
  87 + if (templateIndicatorService.getTemplateIndicatorCountByUnitMeasureId(id) > 0) {
  88 + throw exception(MD_UNIT_MEASURE_HAS_QC_TEMPLATE_INDICATOR);
  89 + }
73 90
74 // 删除 91 // 删除
75 unitMeasureMapper.deleteById(id); 92 unitMeasureMapper.deleteById(id);
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/task/MesProTaskIssueService.java
@@ -61,4 +61,12 @@ public interface MesProTaskIssueService { @@ -61,4 +61,12 @@ public interface MesProTaskIssueService {
61 */ 61 */
62 List<MesProTaskIssueDO> getTaskIssueListByTaskId(Long taskId); 62 List<MesProTaskIssueDO> getTaskIssueListByTaskId(Long taskId);
63 63
  64 + /**
  65 + * 获取指定计量单位的投料记录数量
  66 + *
  67 + * @param unitMeasureId 计量单位编号
  68 + * @return 投料记录数量
  69 + */
  70 + Long getTaskIssueCountByUnitMeasureId(Long unitMeasureId);
  71 +
64 } 72 }
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/task/MesProTaskIssueServiceImpl.java
@@ -83,6 +83,11 @@ public class MesProTaskIssueServiceImpl implements MesProTaskIssueService { @@ -83,6 +83,11 @@ public class MesProTaskIssueServiceImpl implements MesProTaskIssueService {
83 return taskIssueMapper.selectListByTaskId(taskId); 83 return taskIssueMapper.selectListByTaskId(taskId);
84 } 84 }
85 85
  86 + @Override
  87 + public Long getTaskIssueCountByUnitMeasureId(Long unitMeasureId) {
  88 + return taskIssueMapper.selectCountByUnitMeasureId(unitMeasureId);
  89 + }
  90 +
86 private void validateTaskIssueExists(Long id) { 91 private void validateTaskIssueExists(Long id) {
87 if (taskIssueMapper.selectById(id) == null) { 92 if (taskIssueMapper.selectById(id) == null) {
88 throw exception(PRO_TASK_ISSUE_NOT_EXISTS); 93 throw exception(PRO_TASK_ISSUE_NOT_EXISTS);
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/template/MesQcTemplateIndicatorService.java
@@ -68,4 +68,12 @@ public interface MesQcTemplateIndicatorService { @@ -68,4 +68,12 @@ public interface MesQcTemplateIndicatorService {
68 */ 68 */
69 List<MesQcTemplateIndicatorDO> getTemplateIndicatorListByTemplateId(Long templateId); 69 List<MesQcTemplateIndicatorDO> getTemplateIndicatorListByTemplateId(Long templateId);
70 70
  71 + /**
  72 + * 获取指定计量单位的检测指标项数量
  73 + *
  74 + * @param unitMeasureId 计量单位编号
  75 + * @return 检测指标项数量
  76 + */
  77 + Long getTemplateIndicatorCountByUnitMeasureId(Long unitMeasureId);
  78 +
71 } 79 }
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/qc/template/MesQcTemplateIndicatorServiceImpl.java
@@ -87,4 +87,9 @@ public class MesQcTemplateIndicatorServiceImpl implements MesQcTemplateIndicator @@ -87,4 +87,9 @@ public class MesQcTemplateIndicatorServiceImpl implements MesQcTemplateIndicator
87 return templateIndicatorMapper.selectListByTemplateId(templateId); 87 return templateIndicatorMapper.selectListByTemplateId(templateId);
88 } 88 }
89 89
  90 + @Override
  91 + public Long getTemplateIndicatorCountByUnitMeasureId(Long unitMeasureId) {
  92 + return templateIndicatorMapper.selectCountByUnitMeasureId(unitMeasureId);
  93 + }
  94 +
90 } 95 }
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/batch/MesWmBatchService.java
@@ -88,4 +88,12 @@ public interface MesWmBatchService { @@ -88,4 +88,12 @@ public interface MesWmBatchService {
88 */ 88 */
89 MesWmBatchDO validateBatchExists(Long batchId, Long itemId, Long clientId, Long vendorId); 89 MesWmBatchDO validateBatchExists(Long batchId, Long itemId, Long clientId, Long vendorId);
90 90
  91 + /**
  92 + * 获取指定工具的批次数量
  93 + *
  94 + * @param toolId 工具编号
  95 + * @return 批次数量
  96 + */
  97 + Long getBatchCountByToolId(Long toolId);
  98 +
91 } 99 }
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/batch/MesWmBatchServiceImpl.java
@@ -266,4 +266,9 @@ public class MesWmBatchServiceImpl implements MesWmBatchService { @@ -266,4 +266,9 @@ public class MesWmBatchServiceImpl implements MesWmBatchService {
266 return batch; 266 return batch;
267 } 267 }
268 268
  269 + @Override
  270 + public Long getBatchCountByToolId(Long toolId) {
  271 + return batchMapper.selectCountByToolId(toolId);
  272 + }
  273 +
269 } 274 }