From da29cbd5e09878202dcb1d5e75f5a7d3900c2f35 Mon Sep 17 00:00:00 2001 From: yangqicheng Date: Wed, 10 Jul 2024 18:05:02 +0800 Subject: [PATCH] =?UTF-8?q?REQ-2516-=E8=B0=83=E6=95=B4=E4=BA=BA=E5=91=98?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E6=88=AA=E5=8F=96=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/engine/cmd/helper/CustomTaskHelper.java | 16 ++++++++++++++++ .../listener/EngineExecutionStartListener.java | 12 +++++++----- .../AbstractBpmnTaskAssigneeSelector.java | 15 +-------------- .../BasedFixedPersonTaskAssigneeSelector.java | 2 +- 4 files changed, 25 insertions(+), 20 deletions(-) diff --git a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/cmd/helper/CustomTaskHelper.java b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/cmd/helper/CustomTaskHelper.java index 85e63eb32..bbd438a49 100644 --- a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/cmd/helper/CustomTaskHelper.java +++ b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/cmd/helper/CustomTaskHelper.java @@ -379,6 +379,22 @@ public class CustomTaskHelper { .values()); } + /** + * 获取指定数量元素 + * + * @param assigners 原始列表列表 + * @return 截取后的列表 + */ + public static List getLimitedElementList(List assigners, Integer limitNumber) { + if (limitNumber == null || limitNumber <= 0) { + throw new IllegalArgumentException("limit number must be greater than 0"); + } + if (CollectionUtils.isEmpty(assigners) || assigners.size() <= limitNumber) { + return assigners; + } + return assigners.subList(0, limitNumber); + } + public static List getHistoryOperationUsers(CommandContext commandContext, String processInstanceId, BpmnHistoricTaskInstanceConverter historicTaskInstanceConverter, String serviceVersion) { diff --git a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/listener/EngineExecutionStartListener.java b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/listener/EngineExecutionStartListener.java index b110445a1..3c8689c7c 100644 --- a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/listener/EngineExecutionStartListener.java +++ b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/listener/EngineExecutionStartListener.java @@ -37,6 +37,7 @@ import java.util.Map; import java.util.Objects; import java.util.Optional; +import static cn.axzo.workflow.common.constant.BpmnConstants.ASSIGNER_LIMIT_NUMBER; import static cn.axzo.workflow.common.constant.BpmnConstants.BPM_ALLOW_SKIP_USER_TASK; import static cn.axzo.workflow.common.constant.BpmnConstants.DUMMY_ASSIGNEE; import static cn.axzo.workflow.common.constant.BpmnConstants.DUMMY_ASSIGNEE_TYPE; @@ -53,6 +54,7 @@ import static cn.axzo.workflow.core.common.utils.BpmnMetaParserHelper.getApprove import static cn.axzo.workflow.core.common.utils.BpmnMetaParserHelper.getApproverSpecify; import static cn.axzo.workflow.core.common.utils.BpmnMetaParserHelper.getNodeType; import static cn.axzo.workflow.core.common.utils.BpmnMetaParserHelper.getProcessServerVersion; +import static cn.axzo.workflow.core.engine.cmd.helper.CustomTaskHelper.getLimitedElementList; import static cn.axzo.workflow.core.engine.cmd.helper.CustomTaskHelper.removeDuplicateByPersonId; @@ -148,13 +150,13 @@ public class EngineExecutionStartListener implements ExecutionListener { // 审批候选人为空时的兜底 emptyAssigneeHandle(assigners, userTask, execution); - - for (BpmnTaskDelegateAssigner user : assigners) { + List resultAssigners = getLimitedElementList(assigners, ASSIGNER_LIMIT_NUMBER); + for (BpmnTaskDelegateAssigner user : resultAssigners) { assigneeIdList.add(user.buildAssigneeId()); } execution.setVariable(INTERNAL_ACTIVITY_RELATION_ASSIGNEE_LIST_INFO_SNAPSHOT + currentActivityId, - assigners); + resultAssigners); break; } // UserTask 多实例, 该变量用于引擎 @@ -249,8 +251,8 @@ public class EngineExecutionStartListener implements ExecutionListener { }); } - // 按 personId 去重 - return removeDuplicateByPersonId(assigners); + // 按 personId 去重,再截取指定个数 + return getLimitedElementList(removeDuplicateByPersonId(assigners), ASSIGNER_LIMIT_NUMBER); } /** 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 0e296d4e9..7b30457d5 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 @@ -73,7 +73,7 @@ public abstract class AbstractBpmnTaskAssigneeSelector implements BpmnTaskAssign ApproverScopeEnum processor = ((NoticeFlowElement) flowElement).getProcessor(); assigners.addAll(privateSelector(processor, flowElement, execution, throwException)); } - return getLimitedAssignerList(assigners.stream().filter(i -> StringUtils.hasText(i.getPersonId())).collect(Collectors.toList())); + return assigners.stream().filter(i -> StringUtils.hasText(i.getPersonId())).collect(Collectors.toList()); } private List privateSelector(ApproverScopeEnum processorType, FlowElement flowElement, @@ -175,19 +175,6 @@ 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 706553795..1934a672e 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 getLimitedAssignerList(assigners); + return assigners; } }