feat(REQ-2924) - 调整岗位、角色后,查询转交的超管后的逻辑优化

This commit is contained in:
wangli 2024-09-24 14:04:01 +08:00
parent 27d1efaa34
commit 333abc1cb4
5 changed files with 43 additions and 3 deletions

View File

@ -4,6 +4,7 @@ import cn.axzo.workflow.common.constant.BpmnConstants;
import cn.axzo.workflow.common.enums.ApproverEmptyHandleTypeEnum;
import cn.axzo.workflow.common.enums.ApproverSpecifyEnum;
import cn.axzo.workflow.common.enums.BpmnFlowNodeType;
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceAbortDTO;
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskDelegateAssigner;
import cn.axzo.workflow.core.common.utils.BpmnMetaParserHelper;
import cn.axzo.workflow.core.conf.SupportRefreshProperties;
@ -11,6 +12,8 @@ import cn.axzo.workflow.core.deletage.BpmnTaskAssigneeSelector;
import cn.axzo.workflow.core.deletage.BpmnTaskCalculateDTO;
import cn.axzo.workflow.core.deletage.BpmnTaskDelegate;
import cn.axzo.workflow.core.deletage.MockTaskAssigneeSelector;
import cn.axzo.workflow.core.engine.cmd.CustomAbortProcessInstanceAsyncCmd;
import cn.axzo.workflow.core.service.ExtAxHiTaskInstService;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSON;
import com.google.common.collect.Lists;
@ -21,9 +24,9 @@ import org.flowable.bpmn.model.Process;
import org.flowable.bpmn.model.UserTask;
import org.flowable.engine.delegate.DelegateExecution;
import org.flowable.engine.delegate.ExecutionListener;
import org.flowable.engine.impl.util.CommandContextUtil;
import org.flowable.engine.impl.util.ProcessDefinitionUtil;
import org.springframework.beans.factory.ObjectProvider;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Component;
@ -183,6 +186,13 @@ public class EngineExecutionStartListener implements ExecutionListener {
case transferToAdmin:
assigners.addAll(approverSelect(ApproverEmptyHandleTypeEnum.transferToAdmin.getType(), userTask,
execution, true));
if (CollectionUtils.isEmpty(assigners)) {
BpmnProcessInstanceAbortDTO abortDTO = new BpmnProcessInstanceAbortDTO();
abortDTO.setProcessInstanceId(execution.getProcessInstanceId());
abortDTO.setReason("转交管理员失败,系统中止");
CommandContextUtil.getProcessEngineConfiguration().getCommandExecutor()
.execute(new CustomAbortProcessInstanceAsyncCmd(abortDTO));
}
break;
case specifyAssignee:
List<BpmnTaskDelegateAssigner> emptyAssignees =

View File

@ -54,7 +54,7 @@ public class BasedIdentityTaskAssigneeSelector extends AbstractBpmnTaskAssigneeS
.collect(Collectors.toList()))
.identityCodes(super.getTypes(flowElement))
.build();
req.setProcInstId(execution.getProcessInstanceId());
List<FlowTaskAssignerResp> flowTaskAssigners =
parseApiResult(() -> flowSupportApi.listTaskAssignerByIdentity(req),
"审批节点: " + flowElement.getId() + ", 通过身份查询审批人",

View File

@ -68,7 +68,6 @@ public class BasedInitiatorLeaderTaskAssigneeSelector extends AbstractBpmnTaskAs
.identityId(Long.valueOf(initiator.getAssignee()))
.identityType(Integer.valueOf(initiator.getAssigneeType())).build())
.build();
List<FlowTaskAssigner> flowTaskAssigners =
parseApiResult(() -> organizationalNodeUserApi.listFlowTaskAssigner(req),
"审批节点: " + flowElement.getId() + ", 通过发起人主管查询审批人",

View File

@ -88,6 +88,7 @@ public class BasedRoleTaskAssigneeSelector extends AbstractBpmnTaskAssigneeSelec
.variables(variables)
.build();
req.setProcInstId(execution.getProcessInstanceId());
List<FlowTaskAssignerResp> flowTaskAssigners = parseApiResult(() -> flowSupportApi.listTaskAssignerByRoles(req),
"审批节点: " + flowElement.getId() + ", 通过角色查询审批人",
"cn.axzo.karma.client.feign.FlowSupportApi.listTaskAssignerByRoles", req);

View File

@ -4,11 +4,13 @@ import cn.axzo.karma.client.model.request.ListFlowTaskAssignerReq;
import cn.axzo.karma.client.model.response.FlowTaskAssignerResp;
import cn.axzo.workflow.common.enums.ApproverEmptyHandleTypeEnum;
import cn.axzo.workflow.common.enums.ApproverScopeEnum;
import cn.axzo.workflow.common.enums.ApproverSpecifyEnum;
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskDelegateAssigner;
import cn.axzo.workflow.core.common.utils.BpmnMetaParserHelper;
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 lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.ListUtils;
import org.flowable.bpmn.model.FlowElement;
@ -17,8 +19,12 @@ import org.flowable.engine.delegate.DelegateExecution;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;
/**
@ -51,6 +57,13 @@ public class TransferToAdminTaskAssigneeSelector extends AbstractBpmnTaskAssigne
protected List<BpmnTaskDelegateAssigner> invokeService(FlowElement flowElement, DelegateExecution execution,
ApproverScopeDTO scopeDto) {
Optional<ApproverSpecifyEnum> optSpecify = BpmnMetaParserHelper.getApproverSpecify((UserTask) flowElement);
if (optSpecify.isPresent()
&& !Objects.equals(ApproverSpecifyEnum.position, optSpecify.get())
&& !Objects.equals(ApproverSpecifyEnum.role, optSpecify.get())) {
return Collections.emptyList();
}
ListFlowTaskAssignerReq.ListFlowTaskAssignerReqBuilder builder = ListFlowTaskAssignerReq.builder();
if (!CollectionUtils.isEmpty(scopeDto.getOrgScopes())) {
builder.orgScopes(ListUtils.emptyIfNull(scopeDto.getOrgScopes()).stream()
@ -63,6 +76,8 @@ public class TransferToAdminTaskAssigneeSelector extends AbstractBpmnTaskAssigne
.collect(Collectors.toList()));
}
ListFlowTaskAssignerReq req = builder.workspaceAdmin(false).build();
req.setProcInstId(execution.getProcessInstanceId());
req.setCooperateTypes(getCooperationTypes(flowElement));
BpmnMetaParserHelper.getApproverScope((UserTask) flowElement)
.ifPresent(i -> {
if (Objects.equals(i, ApproverScopeEnum.projectWorkspace)) {
@ -80,4 +95,19 @@ public class TransferToAdminTaskAssigneeSelector extends AbstractBpmnTaskAssigne
}
return BeanUtil.copyToList(flowTaskAssigners, BpmnTaskDelegateAssigner.class);
}
public Set<Integer> getCooperationTypes(FlowElement flowElement) {
return BpmnMetaParserHelper.getApproverSpecifyValue((UserTask) flowElement)
.map(value -> JSON.parseArray(value, String.class)
.stream().map(JSON::parseObject)
.map(i -> i.getString("type"))
.collect(Collectors.toList())
.stream()
.flatMap(s -> Arrays.stream(s.split(",")))
.map(Integer::parseInt)
.collect(Collectors.toSet())
)
.orElse(Collections.emptySet());
}
}