Commit b6a9b5dda9f518b2cdc180759157b0562cb564a4

Authored by lizhixian
1 parent 4054e5fd

fix: 校验第一个用户任务节点的规则类型是否为“审批人自选”

yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/BpmModelServiceImpl.java
@@ -40,6 +40,7 @@ import org.springframework.stereotype.Service; @@ -40,6 +40,7 @@ import org.springframework.stereotype.Service;
40 import org.springframework.transaction.annotation.Transactional; 40 import org.springframework.transaction.annotation.Transactional;
41 import org.springframework.validation.annotation.Validated; 41 import org.springframework.validation.annotation.Validated;
42 42
  43 +import java.util.ArrayList;
43 import java.util.List; 44 import java.util.List;
44 import java.util.Map; 45 import java.util.Map;
45 import java.util.Objects; 46 import java.util.Objects;
@@ -243,24 +244,19 @@ public class BpmModelServiceImpl implements BpmModelService { @@ -243,24 +244,19 @@ public class BpmModelServiceImpl implements BpmModelService {
243 if (startEvent == null) { 244 if (startEvent == null) {
244 throw exception(MODEL_DEPLOY_FAIL_BPMN_START_EVENT_NOT_EXISTS); 245 throw exception(MODEL_DEPLOY_FAIL_BPMN_START_EVENT_NOT_EXISTS);
245 } 246 }
246 - // 2. 校验第一个用户任务的规则类型是否为“审批人自选”,如果是则抛出异常。原因是,流程发起后,直接进入第一个用户任务,会出现无审批人的情况  
247 - List<SequenceFlow> outgoingFlows = startEvent.getOutgoingFlows();  
248 - // TODO @小北:可能极端情况下,startEvent 后面接了个 serviceTask,接着才是 userTask。。。  
249 - // TODO @小北:simple 因为第一个任务是发起人,可能要找第二个任务???  
250 - if (CollUtil.isNotEmpty(outgoingFlows)) {  
251 - FlowElement targetFlowElement = outgoingFlows.get(0).getTargetFlowElement();  
252 - Integer candidateStrategy = parseCandidateStrategy(targetFlowElement);  
253 - if (Objects.equals(candidateStrategy, BpmTaskCandidateStrategyEnum.APPROVE_USER_SELECT.getStrategy())) {  
254 - throw exception(MODEL_DEPLOY_FAIL_FIRST_USER_TASK_CANDIDATE_STRATEGY_ERROR, targetFlowElement.getName());  
255 - }  
256 - }  
257 - // 3. 校验 UserTask 的 name 都配置了 247 + // 2. 校验 UserTask 的 name 都配置了
258 List<UserTask> userTasks = BpmnModelUtils.getBpmnModelElements(bpmnModel, UserTask.class); 248 List<UserTask> userTasks = BpmnModelUtils.getBpmnModelElements(bpmnModel, UserTask.class);
259 userTasks.forEach(userTask -> { 249 userTasks.forEach(userTask -> {
260 if (StrUtil.isEmpty(userTask.getName())) { 250 if (StrUtil.isEmpty(userTask.getName())) {
261 throw exception(MODEL_DEPLOY_FAIL_BPMN_USER_TASK_NAME_NOT_EXISTS, userTask.getId()); 251 throw exception(MODEL_DEPLOY_FAIL_BPMN_USER_TASK_NAME_NOT_EXISTS, userTask.getId());
262 } 252 }
263 }); 253 });
  254 + // 3. 校验第一个用户任务节点的规则类型是否为“审批人自选”
  255 + UserTask userTask = userTasks.get(0);
  256 + Integer candidateStrategy = parseCandidateStrategy(userTask);
  257 + if (Objects.equals(candidateStrategy, BpmTaskCandidateStrategyEnum.APPROVE_USER_SELECT.getStrategy())) {
  258 + throw exception(MODEL_DEPLOY_FAIL_FIRST_USER_TASK_CANDIDATE_STRATEGY_ERROR, userTask.getName());
  259 + }
264 } 260 }
265 261
266 @Override 262 @Override