Activiti流程判断之排他网关和并行网关

目录

    • 排他网关
    • 并行网关

排他网关

业务场景
某一家公司最近在给一个单位做一个财务审批的OA。具体需求是这样的:当部门申请的金额小于一万块的时候,财务部可以直接决策。当部分申请的金额大于一万块并且小于三十万的时候,财务部经理决策,当金额超出了或者等于三十万的时候,需要财务主管来决策。
Activiti流程判断之排他网关和并行网关_第1张图片

当满足某一条件就能通过的业务,我们就能用排他网关来处理
我这个流程图就是模拟这个业务场景画的,第一个是money<5(图画的有误)
Activiti流程判断之排他网关和并行网关_第2张图片
只要有一个人审核通过了,流程也就结束了
测试代码

package com.xy;

import org.activiti.engine.*;
import org.junit.Before;
import org.junit.Test;

import java.util.HashMap;
import java.util.Map;

public class ExclusiveGatewayTest {

    private ProcessEngine processEngine;
    private RepositoryService repositoryService;
    private RuntimeService runtimeService;
    private TaskService taskService;

    @Before
    public void createTable(){
        processEngine = ProcessEngines.getDefaultProcessEngine();
        repositoryService = processEngine.getRepositoryService();
        runtimeService = processEngine.getRuntimeService();
        taskService = processEngine.getTaskService();
    }

    @Test
    public void deploy(){
        repositoryService.createDeployment().name("eee").addClasspathResource("diagrams/exclusive.bpmn").deploy();
    }

    @Test
    public void run(){
        Map<String,Object> map = new HashMap<String, Object>();
        map.put("money",6);
//        runtimeService.startProcessInstanceByKey("exclusive");
        runtimeService.startProcessInstanceByKey("exclusive",map);
    }

    @Test
    public void taskQuery(){
//        System.out.println(taskService.createTaskQuery().taskAssignee("zhangsan").list().size());
        System.out.println(taskService.createTaskQuery().taskCandidateUser("hejiu").list().size());
    }

    @Test
    public void taskComplete(){
        Map<String,Object> map = new HashMap<String, Object>();
        taskService.complete("117506");
//        map.put("money",10);
    }
}

并行网关

业务场景
在一个政府机关的办公OA系统设计的时候,有这么一个需求:政府需要做一个财务呈批的业务,由财务部门发起,然后经过其他所有部门,各部门根据自己的资金需求填写申请表,然后经过各自部门的领导去审核,各自部门领导审核完成,然后合并给财务部领导审核。也就是必须所有人同意流程才能通过
Activiti流程判断之排他网关和并行网关_第3张图片
这个时候我们就能用并行网关来处理这个业务问题
Activiti流程判断之排他网关和并行网关_第4张图片
测试代码,必须要3个人全部审核完毕流程才会结束

package com.xy;

import org.activiti.engine.*;
import org.junit.Before;
import org.junit.Test;

import java.util.HashMap;
import java.util.Map;

/**
 * act_ru_execution 数据是n+1条 当所有节点都执行完毕数据一起消失,但是每当执行完毕一个任务节点,对应的act_id是变化的
 * 变革为下一个并行网关节点id
 * act_ru_task 数据是n条,每当执行完毕一个任务节点,消失对应的一条数据
 * act_ru_identitylink 数据是n条,当所有节点都执行完毕,数据一同消失
 */
public class ParallelGatewayTest {

    private ProcessEngine processEngine;
    private RepositoryService repositoryService;
    private RuntimeService runtimeService;
    private TaskService taskService;

    @Before
    public void createTable(){
        processEngine = ProcessEngines.getDefaultProcessEngine();
        repositoryService = processEngine.getRepositoryService();
        runtimeService = processEngine.getRuntimeService();
        taskService = processEngine.getTaskService();
    }

    @Test
    public void deploy(){
        repositoryService.createDeployment().name("kkk").addClasspathResource("diagrams/parallel.bpmn").deploy();
    }

    @Test
    public void run(){
        Map<String,Object> map = new HashMap<String, Object>();
        map.put("msg",6);
        runtimeService.startProcessInstanceByKey("parallel");
//        runtimeService.startProcessInstanceByKey("parallel",map);
    }

    @Test
    public void taskQuery(){
        System.out.println(taskService.createTaskQuery().taskAssignee("cj").list().size());
//        System.out.println(taskService.createTaskQuery().taskCandidateUser("cj").list().size());
    }

    @Test
    public void taskComplete(){
        Map<String,Object> map = new HashMap<String, Object>();
        taskService.complete("125008");
//        map.put("msg",2);
//        taskService.complete("97504",map);
    }
}

包容网关
其实除了这两个网关还有包容网关,也就是把排他和并行网关结合在一起使用
可以在出口顺序流上定义条件,包容网关会计算它们。然而主要的区别是,包容网关与并行网关一样,可以选择多于一条(出口)顺序流
比如下面的业务
Activiti流程判断之排他网关和并行网关_第5张图片
包容网关两个重要的特性
分支(fork):所有出口顺序流都会被计算,对于计算为true的分支都会被执行。

聚合(join):所有到达包容网关的并行执行,都会在网关处等待,直到每一条具有流程标志的入口顺序流,都有一个执行到达。这是与并行网关的重要区别。换句话说,包容网关只会等待将会被执行的入口顺序流。在合并后,流程穿过合并并行网关继续

end…

你可能感兴趣的:(Activiti)