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

This commit is contained in:
lizhixian 2025-03-11 10:22:21 +08:00
parent 4054e5fdec
commit b6a9b5dda9
1 changed files with 8 additions and 12 deletions

View File

@ -40,6 +40,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects; import java.util.Objects;
@ -243,24 +244,19 @@ public class BpmModelServiceImpl implements BpmModelService {
if (startEvent == null) { if (startEvent == null) {
throw exception(MODEL_DEPLOY_FAIL_BPMN_START_EVENT_NOT_EXISTS); throw exception(MODEL_DEPLOY_FAIL_BPMN_START_EVENT_NOT_EXISTS);
} }
// 2. 校验第一个用户任务的规则类型是否为审批人自选如果是则抛出异常原因是流程发起后直接进入第一个用户任务会出现无审批人的情况 // 2. 校验 UserTask name 都配置了
List<SequenceFlow> outgoingFlows = startEvent.getOutgoingFlows();
// TODO @小北可能极端情况下startEvent 后面接了个 serviceTask接着才是 userTask
// TODO @小北simple 因为第一个任务是发起人可能要找第二个任务
if (CollUtil.isNotEmpty(outgoingFlows)) {
FlowElement targetFlowElement = outgoingFlows.get(0).getTargetFlowElement();
Integer candidateStrategy = parseCandidateStrategy(targetFlowElement);
if (Objects.equals(candidateStrategy, BpmTaskCandidateStrategyEnum.APPROVE_USER_SELECT.getStrategy())) {
throw exception(MODEL_DEPLOY_FAIL_FIRST_USER_TASK_CANDIDATE_STRATEGY_ERROR, targetFlowElement.getName());
}
}
// 3. 校验 UserTask name 都配置了
List<UserTask> userTasks = BpmnModelUtils.getBpmnModelElements(bpmnModel, UserTask.class); List<UserTask> userTasks = BpmnModelUtils.getBpmnModelElements(bpmnModel, UserTask.class);
userTasks.forEach(userTask -> { userTasks.forEach(userTask -> {
if (StrUtil.isEmpty(userTask.getName())) { if (StrUtil.isEmpty(userTask.getName())) {
throw exception(MODEL_DEPLOY_FAIL_BPMN_USER_TASK_NAME_NOT_EXISTS, userTask.getId()); throw exception(MODEL_DEPLOY_FAIL_BPMN_USER_TASK_NAME_NOT_EXISTS, userTask.getId());
} }
}); });
// 3. 校验第一个用户任务节点的规则类型是否为审批人自选
UserTask userTask = userTasks.get(0);
Integer candidateStrategy = parseCandidateStrategy(userTask);
if (Objects.equals(candidateStrategy, BpmTaskCandidateStrategyEnum.APPROVE_USER_SELECT.getStrategy())) {
throw exception(MODEL_DEPLOY_FAIL_FIRST_USER_TASK_CANDIDATE_STRATEGY_ERROR, userTask.getName());
}
} }
@Override @Override