zoukankan      html  css  js  c++  java
  • 工作流 —activiti7网关

    1. 排他网关

        排他网关(也叫异或(XOR)网关,或叫基于数据的排他网关),用来在流程中实现决策。 

      当流程执行到这个网关,所有分支都会判断条件是否为true,如果为 true 则执行该分支,

      注意,排他网关只会选择一个为 true 的分支执行。(即使有两个分支条件都为 true,排他网关也会只选择一条分支去执行)

     

      1.1 定义流程

      

       1.2 部署流程  

    /**
         * 流程部署的方法
         */
        @Test
        public void deployment() {
            //获取ProcessEngine对象
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            //获取RepositoryService对象
            RepositoryService repositoryService = processEngine.getRepositoryService();
            //流程部署
            Deployment deploy = repositoryService.createDeployment()
                    .addClasspathResource("holiday/holidayOld.bpmn")
                    .name("请假流程-排他网关")
                    .deploy();
            System.out.println("流程部署成功:" + deploy.getName());
        }

      1.3 启动流程  当前给的流程变量是5 两个条件都符合

    /**
         * 启动流程实例,设置流程变量的值
         */
        @Test
        public void startInstance() {
            //获取ProcessEngine对象
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            //获取RuntimeService
            RuntimeService runtimeService = processEngine.getRuntimeService();
            //设置流程变量
            Holiday holiday = new Holiday();
            holiday.setNum(5);
            Map<String, Object> assMap = new HashMap<>();
            assMap.put("holiday", holiday);
            //启动流程实例
            ProcessInstance holidayGroup = runtimeService.startProcessInstanceByKey("holidaygetway", assMap);
            System.out.println("流程实例:" + holidayGroup.getId());
        }

      1.4 处理任务

    /**
         * 处理任务
         */
        @Test
        public void commitTask() {
            //获取ProcessEngine对象
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            //获取TaskService对象
            TaskService taskService = processEngine.getTaskService();
            //查询到自己的任务,然后通过任务ID进行提交
            Task task = taskService.createTaskQuery().processDefinitionKey("holidaygetway").taskAssignee("zhangsan").singleResult();
            //处理任务
            taskService.complete(task.getId());
        }

      1.5  处理lisi的任务

    /**
         * 处理任务
         */
        @Test
        public void commitTask() {
            //获取ProcessEngine对象
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            //获取TaskService对象
            TaskService taskService = processEngine.getTaskService();
            //查询到自己的任务,然后通过任务ID进行提交
            Task task = taskService.createTaskQuery().processDefinitionKey("holidaygetway").taskAssignee("lisi").singleResult();
            //处理任务
            taskService.complete(task.getId());
        }

      1.6 处理完lisi的任务时条件两者都符合时选择ID最小的分支

       1.7 查看数据库任务表 

    2. 并行网关

      并行网关允许将流程分成多条分支,也可以把多条分支汇聚到一起,并行网关的功能是基于进 入和外出顺序流的:

       fork 分支:

        并行后的所有外出顺序流,为每个顺序流都创建一个并发分支。

       join 汇聚:

        所有到达并行网关,在此等待的进入分支, 直到所有进入顺序流的分支都到达以后,  流程就会通过汇聚网关。

      注意,如果同一个并行网关有多个进入和多个外出顺序流, 它就同时具有分支和汇聚功能。

      这时, 网关会先汇聚所有进入的顺序流,然后再切分成多个并行分支。 与其他网关的主要区别是,

      并行网关不会解析条件。 即使顺序流中定义了条件,也会被忽略。

      
      2.1 定义流程图

      

       2.2 部署流程

     /**
         * 流程部署
         */
        @Test
        public void deployment(){
            //获取ProcessEngine对象
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            //获取RepositoryService对象
            RepositoryService repositoryService = processEngine.getRepositoryService();
            //流程部署
            Deployment deploy = repositoryService.createDeployment()
                    .addClasspathResource("holiday/holidayPar.bpmn")
                    .name("请假流程-并行网关")
                    .deploy();
            System.out.println("流程部署成功:" + deploy.getName());
        }

      2.3 启动流程

     /**
         * 启动流程实例
         */
        @Test
        public void startInstance() {
            //获取ProcessEngine对象
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            //获取RuntimeService
            RuntimeService runtimeService = processEngine.getRuntimeService();
            //设置流程变量
    
            Map<String, Object> assMap = new HashMap<>();
            assMap.put("num", 3);
            //启动流程实例
            ProcessInstance holidayGroup = runtimeService.startProcessInstanceByKey("holidayPar", assMap);
            System.out.println("流程实例:" + holidayGroup.getId());
        }

      2.4 执行流程zhangsan

    /**
         * 执行流程
         */
        @Test
        public void commitTask() {
            //获取ProcessEngine对象
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            //获取TaskService对象
            TaskService taskService = processEngine.getTaskService();
            //查询到自己的任务,然后通过任务ID进行提交
            Task task = taskService.createTaskQuery().processDefinitionKey("holidayPar").taskAssignee("zhangsan").singleResult();
            //处理任务
            taskService.complete(task.getId());
        }

      2.5 执行lisi任务因为天数为3所以直接到人事存档zhaoliu

    /**
         * 执行流程
         */
        @Test
        public void commitTask() {
            //获取ProcessEngine对象
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            //获取TaskService对象
            TaskService taskService = processEngine.getTaskService();
            //查询到自己的任务,然后通过任务ID进行提交
            Task task = taskService.createTaskQuery().processDefinitionKey("holidayPar").taskAssignee("lisi").singleResult();
            //处理任务
            taskService.complete(task.getId());
        }

      2.6 执行zhaoliu任务后进入并行网关 会有两个待执行任务

    /**
         * 执行流程
         */
        @Test
        public void commitTask() {
            //获取ProcessEngine对象
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            //获取TaskService对象
            TaskService taskService = processEngine.getTaskService();
            //查询到自己的任务,然后通过任务ID进行提交
            Task task = taskService.createTaskQuery().processDefinitionKey("holidayPar").taskAssignee("zhaoliu").singleResult();
            //处理任务
            taskService.complete(task.getId());
        }

      2.7 查看数据库任务表

       2.8 查看数据库历史表

       2.9 执行sunqi任务

     /**
         * 执行流程
         */
        @Test
        public void commitTask() {
            //获取ProcessEngine对象
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            //获取TaskService对象
            TaskService taskService = processEngine.getTaskService();
            //查询到自己的任务,然后通过任务ID进行提交
            Task task = taskService.createTaskQuery().processDefinitionKey("holidayPar").taskAssignee("sunqi").singleResult();
            //处理任务
            taskService.complete(task.getId());
        }

      2.10 查看数据库任务表

       2.11 查看数据库历史表

       2.12 执行sunba任务

    /**
         * 执行流程
         */
        @Test
        public void commitTask() {
            //获取ProcessEngine对象
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            //获取TaskService对象
            TaskService taskService = processEngine.getTaskService();
            //查询到自己的任务,然后通过任务ID进行提交
            Task task = taskService.createTaskQuery().processDefinitionKey("holidayPar").taskAssignee("zhouba").singleResult();
            //处理任务
            taskService.complete(task.getId());
        }

      2.13 查看数据库任务表

      2.14 查看数据库历史表  当并行网关的所有任务都执行完毕后才会进入下一个任务

     

    3. 包含网关 

        包含网关可以看做是排他网关和并行网关的结合体。 和排他网关一样,你可以在外出顺序流上定义条件,

      包含网关会解析它们。 但是主要的区别是包含网关可以选择多于一条顺序流,这和并行网关一样。

      包含网关的功能是基于进入和外出顺序流的

      3.1 流程定义

      

      3.2 部署流程

    /**
         * 流程部署
         */
        @Test
        public void deployment(){
            //获取ProcessEngine对象
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            //获取RepositoryService对象
            RepositoryService repositoryService = processEngine.getRepositoryService();
            //流程部署
            Deployment deploy = repositoryService.createDeployment()
                    .addClasspathResource("medical/medical.bpmn")
                    .name("体检流程-包含网关")
                    .deploy();
            System.out.println("流程部署成功:" + deploy.getName());
        }

      3.3 启动流程实例   当前流程变量为1

     /**
         * 启动流程实例
         */
        @Test
        public void startInstance() {
            //获取ProcessEngine对象
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            //获取RuntimeService
            RuntimeService runtimeService = processEngine.getRuntimeService();
            //设置流程变量
    
            Map<String, Object> assMap = new HashMap<>();
            assMap.put("userType", 1);
            //启动流程实例
            ProcessInstance holidayGroup = runtimeService.startProcessInstanceByKey("medical", assMap);
            System.out.println("流程实例:" + holidayGroup.getId());
        }

      3.4 执行zhangsan任务

    /**
         * 执行流程
         */
        @Test
        public void commitTask() {
            //获取ProcessEngine对象
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            //获取TaskService对象
            TaskService taskService = processEngine.getTaskService();
            //查询到自己的任务,然后通过任务ID进行提交
            Task task = taskService.createTaskQuery().processDefinitionKey("medical").taskAssignee("zhangsan").singleResult();
            //处理任务
            taskService.complete(task.getId());
        }

      3.5 查看数据库任务表

       3.6 执行lisi任务

        /**
         * 执行流程
         */
        @Test
        public void commitTask() {
            //获取ProcessEngine对象
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            //获取TaskService对象
            TaskService taskService = processEngine.getTaskService();
            //查询到自己的任务,然后通过任务ID进行提交
            Task task = taskService.createTaskQuery().processDefinitionKey("medical").taskAssignee("lisi").singleResult();
            //处理任务
            taskService.complete(task.getId());
        }

      3.7 查看数据库任务表

       3.8 执行wangwu任务

     /**
         * 执行流程
         */
        @Test
        public void commitTask() {
            //获取ProcessEngine对象
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            //获取TaskService对象
            TaskService taskService = processEngine.getTaskService();
            //查询到自己的任务,然后通过任务ID进行提交
            Task task = taskService.createTaskQuery().processDefinitionKey("medical").taskAssignee("wangwu").singleResult();
            //处理任务
            taskService.complete(task.getId());
        }

      3.9 查看数据库任务表 包含网关任务

       3.10 查看数据库历史表  都已经执行完毕

      

      

  • 相关阅读:
    BeautifulSoup中的select方法
    BeautifulSoup中的find,find_all
    python中sys.stdout、sys.stdin
    python sort、sorted
    Numpy常用操作
    pandas (loc、iloc、ix)的区别
    小波变化库——Pywalvets学习笔记
    python filter()函数
    Redis数据库总结
    高逼格企业级MySQL数据库备份方案,原来是这样....
  • 原文地址:https://www.cnblogs.com/szhhhh/p/12653478.html
Copyright © 2011-2022 走看看