feat(REQ-2924) - 调整岗位、角色后,查询转交的超管后的逻辑优化
This commit is contained in:
parent
27d1efaa34
commit
333abc1cb4
@ -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 =
|
||||
|
||||
@ -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() + ", 通过身份查询审批人",
|
||||
|
||||
@ -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() + ", 通过发起人主管查询审批人",
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user