diff --git a/workflow-engine-common/src/main/java/cn/axzo/workflow/common/constant/BpmnConstants.java b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/constant/BpmnConstants.java index c5e3c7be3..ef594a474 100644 --- a/workflow-engine-common/src/main/java/cn/axzo/workflow/common/constant/BpmnConstants.java +++ b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/constant/BpmnConstants.java @@ -156,4 +156,9 @@ public interface BpmnConstants { * 用于 MQ 的 Header, 记录当前事件的归属应用 */ String MQ_OWNERSHIP_APP = "MQ_OWNERSHIP_APPLICATION"; + + /** + * 审批人数量限制 + */ + Integer ASSIGNER_LIMIT_NUMBER = 60; } diff --git a/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/delegate/AbstractBpmnTaskAssigneeSelector.java b/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/delegate/AbstractBpmnTaskAssigneeSelector.java index 0d32c68cf..0e296d4e9 100644 --- a/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/delegate/AbstractBpmnTaskAssigneeSelector.java +++ b/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/delegate/AbstractBpmnTaskAssigneeSelector.java @@ -35,6 +35,7 @@ import java.util.List; import java.util.function.Supplier; import java.util.stream.Collectors; +import static cn.axzo.workflow.common.constant.BpmnConstants.ASSIGNER_LIMIT_NUMBER; import static cn.axzo.workflow.core.common.code.BpmnTaskRespCode.CALC_TASK_ASSIGNEE_ERROR; import static cn.axzo.workflow.core.common.code.ConvertorRespCode.CONVERTOR_META_DATA_FORMAT_ERROR; import static cn.axzo.workflow.core.common.code.FlowableEngineRespCode.ENGINE_USER_TASK_CALC_ERROR; @@ -72,7 +73,7 @@ public abstract class AbstractBpmnTaskAssigneeSelector implements BpmnTaskAssign ApproverScopeEnum processor = ((NoticeFlowElement) flowElement).getProcessor(); assigners.addAll(privateSelector(processor, flowElement, execution, throwException)); } - return assigners.stream().filter(i -> StringUtils.hasText(i.getPersonId())).collect(Collectors.toList()); + return getLimitedAssignerList(assigners.stream().filter(i -> StringUtils.hasText(i.getPersonId())).collect(Collectors.toList())); } private List privateSelector(ApproverScopeEnum processorType, FlowElement flowElement, @@ -174,6 +175,19 @@ public abstract class AbstractBpmnTaskAssigneeSelector implements BpmnTaskAssign } } + /** + * 获取指定数量审批人 + * + * @param assigners 原始的审批人列表 + * @return 截取后的审批人列表 + */ + protected List getLimitedAssignerList(List assigners) { + if (CollectionUtils.isEmpty(assigners) || assigners.size() <= ASSIGNER_LIMIT_NUMBER) { + return assigners; + } + return assigners.subList(0, ASSIGNER_LIMIT_NUMBER); + } + @Override public void setApplicationContext(ApplicationContext context) throws BeansException { this.applicationContext = context; diff --git a/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/delegate/BasedFixedPersonTaskAssigneeSelector.java b/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/delegate/BasedFixedPersonTaskAssigneeSelector.java index 1934a672e..706553795 100644 --- a/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/delegate/BasedFixedPersonTaskAssigneeSelector.java +++ b/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/delegate/BasedFixedPersonTaskAssigneeSelector.java @@ -39,7 +39,7 @@ public class BasedFixedPersonTaskAssigneeSelector extends AbstractBpmnTaskAssign } BpmnMetaParserHelper.getApproverSpecifyValue((UserTask) flowElement) .ifPresent(s -> assigners.addAll(JSON.parseArray(s, BpmnTaskDelegateAssigner.class))); - return assigners; + return getLimitedAssignerList(assigners); } }