ACTIVITI6实现预测下一个节点的名称

1291

实现预测下一节点名称

需要根据排他网关进行逻辑代码的更改,我这里只是用了变量isPass判断是否通过还是驳回

 public String getNextTaskGroup(String instanceId) {
        Task task = taskService.createTaskQuery().processInstanceId(instanceId).singleResult();
        if (task == null) {
            throw new RuntimeException("流程未启动或已执行完成");
        }
        // 取得已提交的任务
        HistoricTaskInstance historicTaskInstance = historyService.createHistoricTaskInstanceQuery()
                .taskId(task.getId()).singleResult();
        //获取流程定义
        ProcessDefinition processDefinition = repositoryService.getProcessDefinition(historicTaskInstance.getProcessDefinitionId());
        //获得当前流程的活动ID
        Execution execution = runtimeService.createExecutionQuery().executionId(historicTaskInstance.getExecutionId()).singleResult();
        String activityId = execution.getActivityId();
        UserTask userTask = null;
        int count = 0;
        while (true) {
            //根据活动节点获取当前的组件信息
            count++;
            FlowNode flowNode;
            try {
                flowNode = getFlowNode(processDefinition.getId(), activityId);
            } catch (RuntimeException e) {
                continue;
            }
            //获取该流程组件的之后/之前的组件信息
            List<SequenceFlow> sequenceFlowListOutGoing = flowNode.getOutgoingFlows();
            //获取的下个节点不一定是userTask的任务节点,所以要判断是否是任务节点
            //sequenceFlowListOutGoing数量可能大于1,可以自己做判断,此处只取第一个
            FlowElement flowElement = null;
            if (sequenceFlowListOutGoing.size() == 1) {
                flowElement = sequenceFlowListOutGoing.get(0).getTargetFlowElement();
            } else {
                for (SequenceFlow item : sequenceFlowListOutGoing) {
                    String conditionExpression = item.getConditionExpression();
                    if ("${isPass}".equals(conditionExpression)) {
                        flowElement = item.getTargetFlowElement();
                    }
                }
            }
            if (flowElement instanceof UserTask) {
                userTask = (UserTask) flowElement;
                return userTask.getName();
            } else {
                //下一节点不是任务userTask的任务节点,所以要获取再下一个节点的信息,直到获取到userTask任务节点信息
                activityId = flowElement.getId();
            }
            if (count > 5) {
                //极限寻找5次,超过5次直接返回
                return "";
            }
        }
    }