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 d39497a57..1db454aa7 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 @@ -11,6 +11,7 @@ import cn.axzo.workflow.core.deletage.approverscope.ApproverScopeDTO; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import com.alibaba.fastjson.JSON; +import com.google.common.collect.Lists; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.ListUtils; import org.flowable.bpmn.model.FlowElement; @@ -27,6 +28,9 @@ import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; +import static cn.axzo.workflow.common.constant.BpmnConstants.INTERNAL_INITIATOR; +import static cn.axzo.workflow.common.constant.BpmnConstants.INTERNAL_PROCESS_WORKSPACE_TYPE; + /** * 基于"转交给管理员"查询审批人 * @@ -59,6 +63,7 @@ public class TransferToAdminTaskAssigneeSelector extends AbstractBpmnTaskAssigne Optional approverScope = BpmnMetaParserHelper.getApproverScope((UserTask) flowElement); Optional optSpecify = BpmnMetaParserHelper.getApproverSpecify((UserTask) flowElement); + // 如果是项目部,且审批人指定的配法不是岗位或角色,则默认直接返回空集合,走转交管理员后为空的最终兜底逻辑 if (optSpecify.isPresent() && approverScope.isPresent() && Objects.equals(ApproverScopeEnum.projectWorkspace, approverScope.get()) && !Objects.equals(ApproverSpecifyEnum.position, optSpecify.get()) @@ -80,6 +85,12 @@ public class TransferToAdminTaskAssigneeSelector extends AbstractBpmnTaskAssigne ListFlowTaskAssignerReq req = builder.workspaceAdmin(false).build(); req.setProcInstId(execution.getProcessInstanceId()); req.setCooperateTypes(getCooperationTypes(flowElement)); + // 发起人主管找其超管时,需要将发起人的数据包装进 orgScope + if (Objects.equals(ApproverSpecifyEnum.initiatorLeader, optSpecify.get())) { + BpmnTaskDelegateAssigner initiator = BpmnTaskDelegateAssigner.toObjectCompatible(execution.getVariable(INTERNAL_INITIATOR, String.class)); + Integer workspaceType = execution.getVariable(INTERNAL_PROCESS_WORKSPACE_TYPE, Integer.class); + req.setOrgScopes(Lists.newArrayList(new ListFlowTaskAssignerReq.OrgScope(workspaceType, Long.parseLong(initiator.getTenantId()), Long.parseLong(initiator.getOuId()), null))); + } approverScope.ifPresent(i -> { if (Objects.equals(i, ApproverScopeEnum.projectWorkspace)) { req.setWorkspaceAdmin(true);