珍惜当下 展望未来!

下一个节点多个的情况,任意选择一个节点跳转实现

下一个节点多个的情况,任意选择一个节点跳转实现

场景:如下:在节点1的位置,选择跳转节点2三个中的任意一个节点执行

image-20220705100134142

实现思路:

  • 查询当前节点所有流程方向的节点列表,再选择其中一个节点执行。。
  • 每个节点标识一个唯一的id,对应task表的字段TASK_DEF_KEY_,设置连线跳转条件${condition== "T8S0b4A5"}(condition为流程变量)
  • 流程运行过程中,设置condition的值,流程就会自动扭转了

image-20220705101623187

image-20220705101631959

条件的写法

${condition=="node2.2"}

代码实现:

 @GetMapping("/findNextNodeList")
    @ApiOperation("查询下一个指向的所有节点(当前节点所有接下来的流向)")
    public Object findNextNodeList(String taskId) {

        Task ruTask = taskService.createTaskQuery().taskId(taskId).singleResult();

        //流程定义id
        String processDefinitionId = ruTask.getProcessDefinitionId();
        BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinitionId);
        Process process = bpmnModel.getProcesses().get(0);

        //根据流程定义id获取所有任务节点(整条流程)
        List<UserTask> userTaskList = process.findFlowElementsOfType(UserTask.class);
        for (UserTask userTask : userTaskList) {
            if (userTask.getId().equals(ruTask.getTaskDefinitionKey())){
                //代表当前任务id 对应的节点就是userTask
                //当前任务节点流向的节点
                List<SequenceFlow> outgoingFlows = userTask.getOutgoingFlows();
                return outgoingFlows;

            }
        }
        return userTaskList;
    }




    @GetMapping("/completeTaskAndSetVariables")
    @ApiOperation(value = "完成任务并设置流程变量")
    public void completeTaskAndSetVariables(String taskId,String condition) {
        //任务id
        Map<String,Object> map = new HashMap<>();
        map.put("condition",condition);
        taskService.complete(taskId,map);
    }

posted @ 2022-07-05 10:19  嘿嘿-  阅读(143)  评论(0编辑  收藏  举报