Commit 3aac40a51e6dcdd449e4ea5d0418ca837de5a2da

Authored by YunaiV
1 parent d36c0dce

fix:【BPM 工作流】流程模型分类删除时,额外校验是否被流程模型所使用。

yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/enums/ErrorCodeConstants.java
... ... @@ -74,6 +74,7 @@ public interface ErrorCodeConstants {
74 74 ErrorCode CATEGORY_NOT_EXISTS = new ErrorCode(1_009_012_000, "流程分类不存在");
75 75 ErrorCode CATEGORY_NAME_DUPLICATE = new ErrorCode(1_009_012_001, "流程分类名字【{}】重复");
76 76 ErrorCode CATEGORY_CODE_DUPLICATE = new ErrorCode(1_009_012_002, "流程分类编码【{}】重复");
  77 + ErrorCode CATEGORY_DELETE_FAIL_MODEL_USED = new ErrorCode(1_009_012_003, "删除失败,流程分类【{}】已被流程模型使用,请先删除对应的流程模型");
77 78  
78 79 // ========== BPM 流程监听器 1-009-013-000 ==========
79 80 ErrorCode PROCESS_LISTENER_NOT_EXISTS = new ErrorCode(1_009_013_000, "流程监听器不存在");
... ...
yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/BpmCategoryServiceImpl.java
... ... @@ -34,6 +34,9 @@ public class BpmCategoryServiceImpl implements BpmCategoryService {
34 34 @Resource
35 35 private BpmCategoryMapper bpmCategoryMapper;
36 36  
  37 + @Resource
  38 + private BpmModelService modelService;
  39 +
37 40 @Override
38 41 public Long createCategory(BpmCategorySaveReqVO createReqVO) {
39 42 // 校验唯一
... ... @@ -77,15 +80,22 @@ public class BpmCategoryServiceImpl implements BpmCategoryService {
77 80 @Override
78 81 public void deleteCategory(Long id) {
79 82 // 校验存在
80   - validateCategoryExists(id);
  83 + BpmCategoryDO category = validateCategoryExists(id);
  84 + // 校验是否被流程模型使用
  85 + Long count = modelService.getModelCountByCategory(category.getCode());
  86 + if (count > 0) {
  87 + throw exception(CATEGORY_DELETE_FAIL_MODEL_USED, category.getName());
  88 + }
81 89 // 删除
82 90 bpmCategoryMapper.deleteById(id);
83 91 }
84 92  
85   - private void validateCategoryExists(Long id) {
86   - if (bpmCategoryMapper.selectById(id) == null) {
  93 + private BpmCategoryDO validateCategoryExists(Long id) {
  94 + BpmCategoryDO category = bpmCategoryMapper.selectById(id);
  95 + if (category == null) {
87 96 throw exception(CATEGORY_NOT_EXISTS);
88 97 }
  98 + return category;
89 99 }
90 100  
91 101 @Override
... ...
yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/BpmModelService.java
... ... @@ -25,6 +25,14 @@ public interface BpmModelService {
25 25 List<Model> getModelList(String name);
26 26  
27 27 /**
  28 + * 根据分类编码获得流程模型数量
  29 + *
  30 + * @param category 分类编码
  31 + * @return 流程模型数量
  32 + */
  33 + Long getModelCountByCategory(String category);
  34 +
  35 + /**
28 36 * 创建流程模型
29 37 *
30 38 * @param modelVO 创建信息
... ...
yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/BpmModelServiceImpl.java
... ... @@ -89,6 +89,14 @@ public class BpmModelServiceImpl implements BpmModelService {
89 89 }
90 90  
91 91 @Override
  92 + public Long getModelCountByCategory(String category) {
  93 + return repositoryService.createModelQuery()
  94 + .modelCategory(category)
  95 + .modelTenantId(FlowableUtils.getTenantId())
  96 + .count();
  97 + }
  98 +
  99 + @Override
92 100 @Transactional(rollbackFor = Exception.class)
93 101 public String createModel(@Valid BpmModelSaveReqVO createReqVO) {
94 102 if (!ValidationUtils.isXmlNCName(createReqVO.getKey())) {
... ...