From 4313158f488cf4e3e72bd6f9ebd6a6be1c1fa935 Mon Sep 17 00:00:00 2001 From: wangli <274027703@qq.com> Date: Sat, 28 Feb 2026 15:33:04 +0800 Subject: [PATCH] =?UTF-8?q?feat(REQ-7125)=20-=20=E6=9F=A5=E6=89=BE?= =?UTF-8?q?=E5=AE=A1=E6=89=B9=E4=BA=BA=E7=AD=96=E7=95=A5=E5=AE=9E=E7=8E=B0?= =?UTF-8?q?=EF=BC=8C=E9=80=82=E9=85=8D=E2=80=9C=E7=AE=A1=E7=90=86=E5=91=98?= =?UTF-8?q?=E6=8C=87=E5=AE=9A=E5=AE=A1=E6=89=B9=E4=BA=BA=E2=80=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../EngineExecutionStartListener.java | 9 +-- .../AbstractBpmnTaskAssigneeSelector.java | 1 + .../BasedIdentityV2TaskAssigneeSelector.java | 3 +- ...InitiatorLeaderV2TaskAssigneeSelector.java | 3 +- .../BasedPositionV2TaskAssigneeSelector.java | 3 +- .../BasedRoleV2TaskAssigneeSelector.java | 3 +- ...ferToAdminSpecifyTaskAssigneeSelector.java | 56 ------------------- .../TransferToAdminTaskAssigneeSelector.java | 2 + 8 files changed, 16 insertions(+), 64 deletions(-) delete mode 100644 workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/delegate/TransferToAdminSpecifyTaskAssigneeSelector.java 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 d3f457e65..612fcac39 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 @@ -247,9 +247,11 @@ public class EngineExecutionStartListener implements ExecutionListener { if (categoryVersion < 2) { assigners.addAll(approverSelect(ApproverEmptyHandleTypeEnum.transferToAdmin.getType(), userTask, execution, true)); + finalEmptyAssigneeHandle(assigners, userTask, execution, "未找到审批人且转交管理员失败,系统终止", "karma: " + (refreshProperties.getUseNewToAdminApi() ? "api/flow/listTaskAssignerAdmin/v2" : "api/flow/listTaskAssignerAdmin")); + break; } - - finalEmptyAssigneeHandle(assigners, userTask, execution, "未找到审批人且转交管理员失败,系统终止", "karma: " + (refreshProperties.getUseNewToAdminApi() ? "api/flow/listTaskAssignerAdmin/v2" : "api/flow/listTaskAssignerAdmin")); + finalEmptyAssigneeHandle(assigners, userTask, execution, "未找到审批人且转交管理员失败,系统终止", "org-gateway: api/node-user/flow-task-assigner/v2/list"); + // 新版配置,是在上 v2 版本的 selector 中实现的。/api/node-user/flow-task-assigner/v2/list break; case specifyAssignee: assigners.addAll(approverSelect(ApproverEmptyHandleTypeEnum.specifyAssignee.getType(), userTask, @@ -258,8 +260,7 @@ public class EngineExecutionStartListener implements ExecutionListener { break; case transferToAdminSpecify: // REQ-7125 新增管理员指定审批人策略 - assigners.addAll(approverSelect(ApproverEmptyHandleTypeEnum.transferToAdminSpecify.getType(), userTask, execution, true)); - finalEmptyAssigneeHandle(assigners, userTask, execution, "未找到审批人且转交管理员失败,系统终止", "karma: " + (refreshProperties.getUseNewToAdminApi() ? "api/flow/listTaskAssignerAdmin/v2" : "api/flow/listTaskAssignerAdmin")); + finalEmptyAssigneeHandle(assigners, userTask, execution, "未找到审批人且转交管理员失败,系统终止", "org-gateway: api/node-user/flow-task-assigner/v2/list"); break; default: break; 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 eaad192e0..4ee0d88bc 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 @@ -322,6 +322,7 @@ public abstract class AbstractBpmnTaskAssigneeSelector implements BpmnTaskAssign .ouId(String.valueOf(i.getOuId())) .avatar(i.getAvatarUrl()) .nodeId(i.getNodeId()) + // TODO 将接口返回的管理员数据映射到 isTransferToAdminSpecify .build()) .collect(Collectors.toList()); } diff --git a/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/delegate/BasedIdentityV2TaskAssigneeSelector.java b/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/delegate/BasedIdentityV2TaskAssigneeSelector.java index 8d509c38d..9e9b66f58 100644 --- a/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/delegate/BasedIdentityV2TaskAssigneeSelector.java +++ b/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/delegate/BasedIdentityV2TaskAssigneeSelector.java @@ -38,6 +38,7 @@ import static cn.axzo.workflow.common.constant.BpmnConstants.CLOSE_PROCESS_ASSIG import static cn.axzo.workflow.common.constant.BpmnConstants.INTERNAL_INITIATOR; import static cn.axzo.workflow.common.constant.BpmnConstants.TASK_LOG_NODE_HAS_BEEN_HIDDEN; import static cn.axzo.workflow.common.enums.ApproverEmptyHandleTypeEnum.transferToAdmin; +import static cn.axzo.workflow.common.enums.ApproverEmptyHandleTypeEnum.transferToAdminSpecify; import static cn.axzo.workflow.core.common.utils.BpmnMetaParserHelper.getApproverEmptyHandleType; import static cn.axzo.workflow.core.common.utils.BpmnMetaParserHelper.getApproverSpecifyRange; import static cn.axzo.workflow.core.common.utils.BpmnMetaParserHelper.getApproverSpecifyRangeOrgLimit; @@ -82,7 +83,7 @@ public class BasedIdentityV2TaskAssigneeSelector extends AbstractBpmnTaskAssigne .areaCodes(getAreaFilterEnable(flowElement) ? Sets.newHashSet(ListUtils.emptyIfNull(orgDTO.getIncludeAreaCodes())) : Sets.newHashSet()) .specialtyCodes(getSpecialtyFilterEnable(flowElement) ? Sets.newHashSet(ListUtils.emptyIfNull(orgDTO.getIncludeSpecialtyCodes())) : Sets.newHashSet()) .projectIds(getOnlyInProjectEnable(flowElement) ? Sets.newHashSet(ListUtils.emptyIfNull(orgDTO.getProjectIds())) : Sets.newHashSet()) - .querySupervisorWhileMissMatched(getApproverEmptyHandleType(flowElement).filter(type -> Objects.equals(type, transferToAdmin)).isPresent()); + .querySupervisorWhileMissMatched(getApproverEmptyHandleType(flowElement).filter(type -> Objects.equals(type, transferToAdmin) || Objects.equals(type, transferToAdminSpecify)).isPresent()); switch (optRange.get()) { case within_the_project: log.info("executing role v2 with within_the_project"); diff --git a/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/delegate/BasedInitiatorLeaderV2TaskAssigneeSelector.java b/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/delegate/BasedInitiatorLeaderV2TaskAssigneeSelector.java index 4969e0862..922fac2b8 100644 --- a/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/delegate/BasedInitiatorLeaderV2TaskAssigneeSelector.java +++ b/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/delegate/BasedInitiatorLeaderV2TaskAssigneeSelector.java @@ -28,6 +28,7 @@ import static cn.axzo.workflow.common.constant.BpmnConstants.BIZ_ORG_RELATION; import static cn.axzo.workflow.common.constant.BpmnConstants.INTERNAL_INITIATOR; import static cn.axzo.workflow.common.constant.BpmnConstants.TASK_LOG_NODE_HAS_BEEN_HIDDEN; import static cn.axzo.workflow.common.enums.ApproverEmptyHandleTypeEnum.transferToAdmin; +import static cn.axzo.workflow.common.enums.ApproverEmptyHandleTypeEnum.transferToAdminSpecify; import static cn.axzo.workflow.common.enums.ApproverSpecifyRangeUnitEnum.in_project; import static cn.axzo.workflow.core.common.utils.BpmnMetaParserHelper.getApproverEmptyHandleType; import static cn.axzo.workflow.core.common.utils.BpmnMetaParserHelper.getAreaFilterEnable; @@ -75,7 +76,7 @@ public class BasedInitiatorLeaderV2TaskAssigneeSelector extends AbstractBpmnTask .areaCodes(getAreaFilterEnable(flowElement) ? Sets.newHashSet(ListUtils.emptyIfNull(orgDTO.getIncludeAreaCodes())) : Sets.newHashSet()) .specialtyCodes(getSpecialtyFilterEnable(flowElement) ? Sets.newHashSet(ListUtils.emptyIfNull(orgDTO.getIncludeSpecialtyCodes())) : Sets.newHashSet()) .projectIds(getOnlyInProjectEnable(flowElement) ? Sets.newHashSet(ListUtils.emptyIfNull(orgDTO.getProjectIds())) : Sets.newHashSet()) - .querySupervisorWhileMissMatched(getApproverEmptyHandleType(flowElement).filter(type -> Objects.equals(type, transferToAdmin)).isPresent()); + .querySupervisorWhileMissMatched(getApproverEmptyHandleType(flowElement).filter(type -> Objects.equals(type, transferToAdmin) || Objects.equals(type, transferToAdminSpecify)).isPresent()); FlowTaskAssignerV2Req request = v2ReqBuilder.build(); List apiResultUsers = new ArrayList<>(); diff --git a/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/delegate/BasedPositionV2TaskAssigneeSelector.java b/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/delegate/BasedPositionV2TaskAssigneeSelector.java index 24234184c..6fc87c41e 100644 --- a/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/delegate/BasedPositionV2TaskAssigneeSelector.java +++ b/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/delegate/BasedPositionV2TaskAssigneeSelector.java @@ -38,6 +38,7 @@ import static cn.axzo.workflow.common.constant.BpmnConstants.CLOSE_PROCESS_ASSIG import static cn.axzo.workflow.common.constant.BpmnConstants.INTERNAL_INITIATOR; import static cn.axzo.workflow.common.constant.BpmnConstants.TASK_LOG_NODE_HAS_BEEN_HIDDEN; import static cn.axzo.workflow.common.enums.ApproverEmptyHandleTypeEnum.transferToAdmin; +import static cn.axzo.workflow.common.enums.ApproverEmptyHandleTypeEnum.transferToAdminSpecify; import static cn.axzo.workflow.common.enums.ApproverSpecifyRangeUnitEnum.in_project; import static cn.axzo.workflow.core.common.utils.BpmnMetaParserHelper.getApproverEmptyHandleType; import static cn.axzo.workflow.core.common.utils.BpmnMetaParserHelper.getApproverSpecifyRange; @@ -86,7 +87,7 @@ public class BasedPositionV2TaskAssigneeSelector extends AbstractBpmnTaskAssigne .areaCodes(getAreaFilterEnable(flowElement) ? Sets.newHashSet(ListUtils.emptyIfNull(orgDTO.getIncludeAreaCodes())) : Sets.newHashSet()) .specialtyCodes(getSpecialtyFilterEnable(flowElement) ? Sets.newHashSet(ListUtils.emptyIfNull(orgDTO.getIncludeSpecialtyCodes())) : Sets.newHashSet()) .projectIds(getOnlyInProjectEnable(flowElement) ? Sets.newHashSet(ListUtils.emptyIfNull(orgDTO.getProjectIds())) : Sets.newHashSet()) - .querySupervisorWhileMissMatched(getApproverEmptyHandleType(flowElement).filter(type -> Objects.equals(type, transferToAdmin)).isPresent()); + .querySupervisorWhileMissMatched(getApproverEmptyHandleType(flowElement).filter(type -> Objects.equals(type, transferToAdmin) || Objects.equals(type, transferToAdminSpecify)).isPresent()); switch (optRange.get()) { case within_the_project: log.info("executing position v2 with within_the_project"); diff --git a/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/delegate/BasedRoleV2TaskAssigneeSelector.java b/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/delegate/BasedRoleV2TaskAssigneeSelector.java index 35a4cb878..69461a22b 100644 --- a/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/delegate/BasedRoleV2TaskAssigneeSelector.java +++ b/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/delegate/BasedRoleV2TaskAssigneeSelector.java @@ -39,6 +39,7 @@ import static cn.axzo.workflow.common.constant.BpmnConstants.CLOSE_PROCESS_ASSIG import static cn.axzo.workflow.common.constant.BpmnConstants.INTERNAL_INITIATOR; import static cn.axzo.workflow.common.constant.BpmnConstants.TASK_LOG_NODE_HAS_BEEN_HIDDEN; import static cn.axzo.workflow.common.enums.ApproverEmptyHandleTypeEnum.transferToAdmin; +import static cn.axzo.workflow.common.enums.ApproverEmptyHandleTypeEnum.transferToAdminSpecify; import static cn.axzo.workflow.common.enums.ApproverSpecifyRangeUnitEnum.in_project; import static cn.axzo.workflow.core.common.utils.BpmnMetaParserHelper.getApproverEmptyHandleType; import static cn.axzo.workflow.core.common.utils.BpmnMetaParserHelper.getApproverSpecifyRange; @@ -88,7 +89,7 @@ public class BasedRoleV2TaskAssigneeSelector extends AbstractBpmnTaskAssigneeSel .areaCodes(getAreaFilterEnable(flowElement) ? Sets.newHashSet(ListUtils.emptyIfNull(orgDTO.getIncludeAreaCodes())) : Sets.newHashSet()) .specialtyCodes(getSpecialtyFilterEnable(flowElement) ? Sets.newHashSet(ListUtils.emptyIfNull(orgDTO.getIncludeSpecialtyCodes())) : Sets.newHashSet()) .projectIds(getOnlyInProjectEnable(flowElement) ? Sets.newHashSet(ListUtils.emptyIfNull(orgDTO.getProjectIds())) : Sets.newHashSet()) - .querySupervisorWhileMissMatched(getApproverEmptyHandleType(flowElement).filter(type -> Objects.equals(type, transferToAdmin)).isPresent()); + .querySupervisorWhileMissMatched(getApproverEmptyHandleType(flowElement).filter(type -> Objects.equals(type, transferToAdmin) || Objects.equals(type, transferToAdminSpecify)).isPresent()); switch (optRange.get()) { case within_the_project: log.info("executing role v2 with within_the_project"); diff --git a/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/delegate/TransferToAdminSpecifyTaskAssigneeSelector.java b/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/delegate/TransferToAdminSpecifyTaskAssigneeSelector.java deleted file mode 100644 index a317fb8b6..000000000 --- a/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/delegate/TransferToAdminSpecifyTaskAssigneeSelector.java +++ /dev/null @@ -1,56 +0,0 @@ -package cn.axzo.workflow.server.controller.delegate; - -import cn.axzo.workflow.common.enums.ApproverEmptyHandleTypeEnum; -import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskDelegateAssigner; -import cn.axzo.workflow.core.conf.SupportRefreshProperties; -import cn.axzo.workflow.core.deletage.approverscope.ApproverScopeDTO; -import lombok.extern.slf4j.Slf4j; -import org.flowable.bpmn.model.FlowElement; -import org.flowable.engine.delegate.DelegateExecution; -import org.springframework.stereotype.Component; - -import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.List; - -/** - * 基于"转交给管理员"查询审批人 - * - * @author wangli - * @since 2023/11/16 11:44 - */ -@Slf4j -@Component -public class TransferToAdminSpecifyTaskAssigneeSelector extends TransferToAdminTaskAssigneeSelector { - - @Resource - private SupportRefreshProperties supportRefreshProperties; - - @Override - public String getType() { - return ApproverEmptyHandleTypeEnum.transferToAdminSpecify.getType(); - } - - @Override - public List select(FlowElement flowElement, DelegateExecution execution, - Boolean throwException) { - return super.select(flowElement, execution, throwException); - } - - @Override - protected List invokeService(FlowElement flowElement, DelegateExecution execution, - ApproverScopeDTO scopeDto) { - - log.info("transferToAdmin invokeService executing..."); - List assigners = new ArrayList<>(); - if (Boolean.TRUE.equals(supportRefreshProperties.getUseNewToAdminApi())) { - assigners.addAll(invokeNewQuery(flowElement, execution, scopeDto)); - } else { - assigners.addAll(invokeOldQuery(flowElement, execution, scopeDto)); - } - // 这里的审批人仅只能有“指定审批人”按钮的权限 - assigners.forEach(i -> i.setIsTransferToAdminSpecify(true)); - return assigners; - } - -} diff --git a/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/delegate/TransferToAdminTaskAssigneeSelector.java b/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/delegate/TransferToAdminTaskAssigneeSelector.java index 0b9cd7c23..98a718607 100644 --- a/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/delegate/TransferToAdminTaskAssigneeSelector.java +++ b/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/delegate/TransferToAdminTaskAssigneeSelector.java @@ -38,6 +38,8 @@ import static cn.axzo.workflow.common.constant.BpmnConstants.INTERNAL_PROCESS_WO /** * 基于"转交给管理员"查询审批人 * + * 仅适用于旧版本模型配置,新版本配置又 v2 的 selector 实现。 + * * @author wangli * @since 2023/11/16 11:44 */