根据流程变量预判下一个审批节点

flowable 根据流程变量预判下一个审批节点

public List<String> queryNextTaskCandidateGroup(String instanceId){
        List<String> candidateGroupIds = new ArrayList<>();
        ProcessInstance processInstance = runtimeService.createProcessInstanceQuery()
                .processInstanceId(instanceId)
                .singleResult();
        Task task = taskService.createTaskQuery().processInstanceId(instanceId).singleResult();
        BpmnModel bpmnModel = repositoryService.getBpmnModel(processInstance.getProcessDefinitionId());
        FlowElement flowElement = bpmnModel.getFlowElement(task.getTaskDefinitionKey());
        List<SequenceFlow> outgoingFlows = ((UserTask)flowElement).getOutgoingFlows();
        for (SequenceFlow outgoingFlow : outgoingFlows) {
            FlowElement targetElement = outgoingFlow.getTargetFlowElement();
            if (targetElement instanceof UserTask) {
                UserTask nextUserTask = (UserTask) targetElement;
                // 获取下一个用户任务的详细信息
                candidateGroupIds = nextUserTask.getCandidateGroups();
                break;
            }else if(targetElement instanceof ExclusiveGateway){
                ExclusiveGateway gateway = (ExclusiveGateway) targetElement;
                List<SequenceFlow> outgoingFlows1 = gateway.getOutgoingFlows();
                Map<String, Object> variables = runtimeService.getVariables(instanceId);
                variables.put("state","agree");//设置审批通过时的流程变量
                for (SequenceFlow item : outgoingFlows1) {
                    String conditionExpression = item.getConditionExpression();
                    // 评估条件表达式
                    ProcessEngineConfigurationImpl processEngineConfiguration = (ProcessEngineConfigurationImpl) processEngine.getProcessEngineConfiguration();
                    ExpressionManager expressionManager = processEngineConfiguration.getExpressionManager();
                    Expression expression = expressionManager.createExpression(conditionExpression);
                    MapVariableContainer container = new MapVariableContainer(variables);
                    boolean result = (Boolean) expression.getValue(container);
                    System.out.println("Expression result: " + result);
                    if(conditionExpression !=null && result){
                        FlowElement targetFlowElement = item.getTargetFlowElement();
                        if(targetFlowElement instanceof UserTask){
                            UserTask nextUserTask = (UserTask) targetFlowElement;
                            // 获取下一个用户任务的详细信息
                            candidateGroupIds= nextUserTask.getCandidateGroups();

                        }
                    }
                }
            }
        }
        List<String> roleIds = candidateGroupIds.stream().map(item -> item.replace("ROLE", "")).collect(Collectors.toList());
        return roleIds;
    }
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值