Commit 509e11a7b0cdbd3d32087fca4142b731c11f871b

Authored by YunaiV
1 parent 066f57e5

流程定义在创建时,增加 key 和 name 的校验,进一步保证 Model、Deployment、ProcessDefinition 的匹配性

yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/BpmErrorCodeConstants.java
@@ -23,18 +23,21 @@ public interface BpmErrorCodeConstants { @@ -23,18 +23,21 @@ public interface BpmErrorCodeConstants {
23 ErrorCode OA_HR_POST_NOT_EXISTS = new ErrorCode(1009001006, "HR岗位未设置"); 23 ErrorCode OA_HR_POST_NOT_EXISTS = new ErrorCode(1009001006, "HR岗位未设置");
24 ErrorCode OA_DAY_LEAVE_ERROR = new ErrorCode(1009001007, "请假天数必须>=1"); 24 ErrorCode OA_DAY_LEAVE_ERROR = new ErrorCode(1009001007, "请假天数必须>=1");
25 25
26 - // ========== OA 工作流模块 1-009-002-000 ==========  
27 - ErrorCode BPM_MODEL_KEY_EXISTS = new ErrorCode(1009002000, "已经存在流程标识为【{}】的流程");  
28 - ErrorCode BPMN_MODEL_NOT_EXISTS = new ErrorCode(1009002001, "流程模型不存在");  
29 - ErrorCode BPMN_MODEL_KEY_VALID = new ErrorCode(1009002002, "流程标识格式不正确,需要以字母或下划线开头,后接任意字母、数字、中划线、下划线、句点!"); 26 + // ========== 流程模型 1-009-002-000 ==========
  27 + ErrorCode MODEL_KEY_EXISTS = new ErrorCode(1009002000, "已经存在流程标识为【{}】的流程");
  28 + ErrorCode MODEL_NOT_EXISTS = new ErrorCode(1009002001, "流程模型不存在");
  29 + ErrorCode MODEL_KEY_VALID = new ErrorCode(1009002002, "流程标识格式不正确,需要以字母或下划线开头,后接任意字母、数字、中划线、下划线、句点!");
30 30
  31 + // ========== 流程模型 1-009-003-000 ==========
  32 + ErrorCode DEFINITION_KEY_NOT_MATCH = new ErrorCode(1009003000, "流程定义的标识期望是({}),当前是({}),请修改 BPMN 流程图");
  33 + ErrorCode DEFINITION_NAME_NOT_MATCH = new ErrorCode(1009003000, "流程定义的名字期望是({}),当前是({}),请修改 BPMN 流程图");
31 34
32 - ErrorCode BPMN_MODEL_ERROR = new ErrorCode(1004001002, "工作流模型异常"); 35 + ErrorCode BPMN = new ErrorCode(1004001002, "工作流模型异常");
33 ErrorCode BPMN_MODEL_PROCESS_NOT_EXISTS = new ErrorCode(1004001009, "流程数据为空"); 36 ErrorCode BPMN_MODEL_PROCESS_NOT_EXISTS = new ErrorCode(1004001009, "流程数据为空");
34 ErrorCode BPMN_PROCESS_DEFINITION_NOT_EXISTS = new ErrorCode(1004001004, "流程定义不存在"); 37 ErrorCode BPMN_PROCESS_DEFINITION_NOT_EXISTS = new ErrorCode(1004001004, "流程定义不存在");
35 38
36 - // ========== 动态表单模块 1-009-003-000 ==========  
37 - ErrorCode BPM_FORM_NOT_EXISTS = new ErrorCode(1009003000, "动态表单不存在");  
38 - ErrorCode BPM_FORM_FIELD_REPEAT = new ErrorCode(1009003000, "表单项({}) 和 ({}) 使用了相同的字段名({})"); 39 + // ========== 动态表单模块 1-009-004-000 ==========
  40 + ErrorCode FORM_NOT_EXISTS = new ErrorCode(1009004000, "动态表单不存在");
  41 + ErrorCode FORM_FIELD_REPEAT = new ErrorCode(1009004000, "表单项({}) 和 ({}) 使用了相同的字段名({})");
39 42
40 } 43 }
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmDefinitionServiceImpl.java
@@ -29,6 +29,9 @@ import org.springframework.validation.annotation.Validated; @@ -29,6 +29,9 @@ import org.springframework.validation.annotation.Validated;
29 import javax.annotation.Resource; 29 import javax.annotation.Resource;
30 import java.util.*; 30 import java.util.*;
31 31
  32 +import static cn.iocoder.yudao.adminserver.modules.bpm.enums.BpmErrorCodeConstants.DEFINITION_KEY_NOT_MATCH;
  33 +import static cn.iocoder.yudao.adminserver.modules.bpm.enums.BpmErrorCodeConstants.DEFINITION_NAME_NOT_MATCH;
  34 +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
32 import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList; 35 import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList;
33 36
34 /** 37 /**
@@ -144,6 +147,15 @@ public class BpmDefinitionServiceImpl implements BpmDefinitionService { @@ -144,6 +147,15 @@ public class BpmDefinitionServiceImpl implements BpmDefinitionService {
144 // 设置 ProcessDefinition 的 category 分类 147 // 设置 ProcessDefinition 的 category 分类
145 ProcessDefinition definition = repositoryService.createProcessDefinitionQuery().deploymentId(deploy.getId()).singleResult(); 148 ProcessDefinition definition = repositoryService.createProcessDefinitionQuery().deploymentId(deploy.getId()).singleResult();
146 repositoryService.setProcessDefinitionCategory(definition.getId(), createReqDTO.getCategory()); 149 repositoryService.setProcessDefinitionCategory(definition.getId(), createReqDTO.getCategory());
  150 + // 注意 1,ProcessDefinition 的 key 和 name 是通过 BPMN 中的 <bpmn2:process /> 的 id 和 name 决定
  151 + // 注意 2,目前该项目的设计上,需要保证 Model、Deployment、ProcessDefinition 使用相同的 key,保证关联性。
  152 + // 否则,会导致 ProcessDefinition 的分页无法查询到。
  153 + if (!Objects.equals(definition.getKey(), createReqDTO.getKey())) {
  154 + throw exception(DEFINITION_KEY_NOT_MATCH, createReqDTO.getKey(), definition.getKey());
  155 + }
  156 + if (!Objects.equals(definition.getName(), createReqDTO.getName())) {
  157 + throw exception(DEFINITION_NAME_NOT_MATCH, createReqDTO.getName(), definition.getName());
  158 + }
147 159
148 // 插入拓展表 160 // 插入拓展表
149 BpmProcessDefinitionDO definitionDO = BpmDefinitionConvert.INSTANCE.convert2(createReqDTO) 161 BpmProcessDefinitionDO definitionDO = BpmDefinitionConvert.INSTANCE.convert2(createReqDTO)