说明

流程中如果需要并行审批的话,我们可以使用并行网关来进行处理,例如下面的流程图:

xml信息如下:

<?xml version="1.0" encoding="UTF-8"?>
<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="Definitions_1n8y69f" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Activiti Modeler" exporterVersion="3.2.3"><bpmn:process id="Process_2aplvep" name="并行网关2" isExecutable="true"><bpmn:startEvent id="StartEvent_1" name="start"><bpmn:outgoing>SequenceFlow_0c2pil9</bpmn:outgoing></bpmn:startEvent><bpmn:parallelGateway id="ExclusiveGateway_0844kui"><bpmn:incoming>SequenceFlow_1f2fg8q</bpmn:incoming><bpmn:outgoing>SequenceFlow_1hmea8p</bpmn:outgoing><bpmn:outgoing>SequenceFlow_1jugour</bpmn:outgoing></bpmn:parallelGateway><bpmn:sequenceFlow id="SequenceFlow_0c2pil9" sourceRef="StartEvent_1" targetRef="Task_1sngwtw" /><bpmn:sequenceFlow id="SequenceFlow_1hmea8p" sourceRef="ExclusiveGateway_0844kui" targetRef="Task_192utdd" /><bpmn:sequenceFlow id="SequenceFlow_1f2fg8q" sourceRef="Task_1sngwtw" targetRef="ExclusiveGateway_0844kui" /><bpmn:exclusiveGateway id="ExclusiveGateway_09fakrp"><bpmn:incoming>SequenceFlow_17aq8lk</bpmn:incoming><bpmn:outgoing>SequenceFlow_1wtykc2</bpmn:outgoing><bpmn:outgoing>SequenceFlow_1wig4cz</bpmn:outgoing></bpmn:exclusiveGateway><bpmn:sequenceFlow id="SequenceFlow_17aq8lk" sourceRef="Task_0cohxnk" targetRef="ExclusiveGateway_09fakrp" /><bpmn:sequenceFlow id="SequenceFlow_1wtykc2" name="同意" sourceRef="ExclusiveGateway_09fakrp" targetRef="ExclusiveGateway_00xcx0f"><bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">${status==1}</bpmn:conditionExpression></bpmn:sequenceFlow><bpmn:parallelGateway id="ExclusiveGateway_00xcx0f"><bpmn:incoming>SequenceFlow_1wtykc2</bpmn:incoming><bpmn:incoming>SequenceFlow_007ko9l</bpmn:incoming><bpmn:outgoing>SequenceFlow_11tofc3</bpmn:outgoing></bpmn:parallelGateway><bpmn:sequenceFlow id="SequenceFlow_007ko9l" sourceRef="Task_192utdd" targetRef="ExclusiveGateway_00xcx0f" /><bpmn:sequenceFlow id="SequenceFlow_11tofc3" sourceRef="ExclusiveGateway_00xcx0f" targetRef="Task_04q1eiq" /><bpmn:userTask id="Task_0cohxnk" name="ddd审批" activiti:assignee="bbb"><bpmn:incoming>SequenceFlow_0m21w2m</bpmn:incoming><bpmn:outgoing>SequenceFlow_17aq8lk</bpmn:outgoing></bpmn:userTask><bpmn:userTask id="Task_192utdd" name="ccc并审" activiti:assignee="ccc"><bpmn:incoming>SequenceFlow_1hmea8p</bpmn:incoming><bpmn:outgoing>SequenceFlow_007ko9l</bpmn:outgoing></bpmn:userTask><bpmn:userTask id="Task_04q1eiq" name="ddd总审" activiti:assignee="ddd"><bpmn:incoming>SequenceFlow_11tofc3</bpmn:incoming><bpmn:outgoing>SequenceFlow_1rhjcy1</bpmn:outgoing></bpmn:userTask><bpmn:userTask id="Task_1sngwtw" name="用户提交申请表单" activiti:assignee="aaa"><bpmn:incoming>SequenceFlow_0c2pil9</bpmn:incoming><bpmn:outgoing>SequenceFlow_1f2fg8q</bpmn:outgoing></bpmn:userTask><bpmn:endEvent id="EndEvent_1bb9yrt" name="End"><bpmn:incoming>SequenceFlow_1rhjcy1</bpmn:incoming></bpmn:endEvent><bpmn:sequenceFlow id="SequenceFlow_1rhjcy1" sourceRef="Task_04q1eiq" targetRef="EndEvent_1bb9yrt" /><bpmn:userTask id="Task_0sals6h" name="bbb审批" activiti:assignee="bbb"><bpmn:incoming>SequenceFlow_1wig4cz</bpmn:incoming><bpmn:incoming>SequenceFlow_1jugour</bpmn:incoming><bpmn:outgoing>SequenceFlow_0m21w2m</bpmn:outgoing></bpmn:userTask><bpmn:sequenceFlow id="SequenceFlow_0m21w2m" sourceRef="Task_0sals6h" targetRef="Task_0cohxnk" /><bpmn:sequenceFlow id="SequenceFlow_1wig4cz" name="驳回" sourceRef="ExclusiveGateway_09fakrp" targetRef="Task_0sals6h"><bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">${status!=1}</bpmn:conditionExpression></bpmn:sequenceFlow><bpmn:sequenceFlow id="SequenceFlow_1jugour" sourceRef="ExclusiveGateway_0844kui" targetRef="Task_0sals6h" /></bpmn:process><bpmndi:BPMNDiagram id="BPMNDiagram_1"><bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="Process_2aplvep"><bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="StartEvent_1"><dc:Bounds x="122" y="322" width="36" height="36" /><bpmndi:BPMNLabel><dc:Bounds x="129" y="365" width="23" height="14" /></bpmndi:BPMNLabel></bpmndi:BPMNShape><bpmndi:BPMNShape id="ParallelGateway_1xoycei_di" bpmnElement="ExclusiveGateway_0844kui"><dc:Bounds x="375" y="315" width="50" height="50" /></bpmndi:BPMNShape><bpmndi:BPMNEdge id="SequenceFlow_0c2pil9_di" bpmnElement="SequenceFlow_0c2pil9"><di:waypoint x="158" y="340" /><di:waypoint x="220" y="340" /></bpmndi:BPMNEdge><bpmndi:BPMNEdge id="SequenceFlow_1hmea8p_di" bpmnElement="SequenceFlow_1hmea8p"><di:waypoint x="400" y="365" /><di:waypoint x="400" y="490" /><di:waypoint x="480" y="490" /></bpmndi:BPMNEdge><bpmndi:BPMNEdge id="SequenceFlow_1f2fg8q_di" bpmnElement="SequenceFlow_1f2fg8q"><di:waypoint x="320" y="340" /><di:waypoint x="375" y="340" /></bpmndi:BPMNEdge><bpmndi:BPMNShape id="ExclusiveGateway_09fakrp_di" bpmnElement="ExclusiveGateway_09fakrp" isMarkerVisible="true"><dc:Bounds x="755" y="195" width="50" height="50" /></bpmndi:BPMNShape><bpmndi:BPMNEdge id="SequenceFlow_17aq8lk_di" bpmnElement="SequenceFlow_17aq8lk"><di:waypoint x="720" y="220" /><di:waypoint x="755" y="220" /></bpmndi:BPMNEdge><bpmndi:BPMNEdge id="SequenceFlow_1wtykc2_di" bpmnElement="SequenceFlow_1wtykc2"><di:waypoint x="780" y="245" /><di:waypoint x="780" y="340" /><di:waypoint x="825" y="340" /><bpmndi:BPMNLabel><dc:Bounds x="784" y="290" width="22" height="14" /></bpmndi:BPMNLabel></bpmndi:BPMNEdge><bpmndi:BPMNShape id="ParallelGateway_0bzo5c0_di" bpmnElement="ExclusiveGateway_00xcx0f"><dc:Bounds x="825" y="315" width="50" height="50" /></bpmndi:BPMNShape><bpmndi:BPMNEdge id="SequenceFlow_007ko9l_di" bpmnElement="SequenceFlow_007ko9l"><di:waypoint x="580" y="490" /><di:waypoint x="850" y="490" /><di:waypoint x="850" y="365" /></bpmndi:BPMNEdge><bpmndi:BPMNEdge id="SequenceFlow_11tofc3_di" bpmnElement="SequenceFlow_11tofc3"><di:waypoint x="875" y="340" /><di:waypoint x="930" y="340" /></bpmndi:BPMNEdge><bpmndi:BPMNShape id="UserTask_14wprwz_di" bpmnElement="Task_0cohxnk"><dc:Bounds x="620" y="180" width="100" height="80" /></bpmndi:BPMNShape><bpmndi:BPMNShape id="UserTask_1rqfm55_di" bpmnElement="Task_192utdd"><dc:Bounds x="480" y="450" width="100" height="80" /></bpmndi:BPMNShape><bpmndi:BPMNShape id="UserTask_1408z3i_di" bpmnElement="Task_04q1eiq"><dc:Bounds x="930" y="300" width="100" height="80" /></bpmndi:BPMNShape><bpmndi:BPMNShape id="UserTask_0h4eaek_di" bpmnElement="Task_1sngwtw"><dc:Bounds x="220" y="300" width="100" height="80" /></bpmndi:BPMNShape><bpmndi:BPMNShape id="EndEvent_1bb9yrt_di" bpmnElement="EndEvent_1bb9yrt"><dc:Bounds x="1082" y="322" width="36" height="36" /><bpmndi:BPMNLabel><dc:Bounds x="1090" y="365" width="20" height="14" /></bpmndi:BPMNLabel></bpmndi:BPMNShape><bpmndi:BPMNEdge id="SequenceFlow_1rhjcy1_di" bpmnElement="SequenceFlow_1rhjcy1"><di:waypoint x="1030" y="340" /><di:waypoint x="1082" y="340" /></bpmndi:BPMNEdge><bpmndi:BPMNShape id="UserTask_0mp1d6n_di" bpmnElement="Task_0sals6h"><dc:Bounds x="480" y="180" width="100" height="80" /></bpmndi:BPMNShape><bpmndi:BPMNEdge id="SequenceFlow_0m21w2m_di" bpmnElement="SequenceFlow_0m21w2m"><di:waypoint x="580" y="220" /><di:waypoint x="620" y="220" /></bpmndi:BPMNEdge><bpmndi:BPMNEdge id="SequenceFlow_1wig4cz_di" bpmnElement="SequenceFlow_1wig4cz"><di:waypoint x="780" y="195" /><di:waypoint x="780" y="110" /><di:waypoint x="550" y="110" /><di:waypoint x="550" y="180" /><bpmndi:BPMNLabel><dc:Bounds x="654" y="92" width="22" height="14" /></bpmndi:BPMNLabel></bpmndi:BPMNEdge><bpmndi:BPMNEdge id="SequenceFlow_1jugour_di" bpmnElement="SequenceFlow_1jugour"><di:waypoint x="400" y="315" /><di:waypoint x="400" y="210" /><di:waypoint x="480" y="210" /></bpmndi:BPMNEdge></bpmndi:BPMNPlane></bpmndi:BPMNDiagram>
</bpmn:definitions>

快速开始

其实实现逻辑和上一节的节点数据流转方式非常相似,我们只需要在并行网关前和并行网关后设置流程变量来记录信息就行了,下面的图表示流程变量的设置

具体实现如下:

编写处理用户提交表单的complete Service

    @Autowiredprivate TaskService taskService;public BaseDTO complete(Task task, Integer status, Map<String, String> map) {System.out.println("用户8的service");/*** 用户逻辑写在这*/map.put("taskId", task.getId());List<Map<String, String>> list = new ArrayList<>();TaskDTO taskDTO = new TaskDTO();taskDTO.setStatus(status);taskDTO.setAgreeId(task.getId());taskDTO.setRejectId("");list.add(map);taskDTO.setListMap(list);taskService.setVariable(task.getId(), "taskDTO", JSON.toJSONString(taskDTO));taskService.complete(task.getId());return null;}

bbb审批的complete Service

    @Autowiredprivate TaskService taskService;public BaseDTO complete(Task task, Integer status, Map<String, String> map) {System.out.println("用户bbb的service");/*** 用户逻辑写在这*/String taskDtoBeforeName="taskDTO";String taskDtoAfterName="taskDTO1";String str;// 如果使用之后的流程变量名能取到值,说明该任务是被驳回的,流程信息应该从之后的id里取而不是并行网关前传下来的id,否则就从之前的网关传来的id取值if (null == taskService.getVariable(task.getId(), taskDtoAfterName))str = (String) taskService.getVariable(task.getId(), taskDtoBeforeName);else str = (String) taskService.getVariable(task.getId(), taskDtoAfterName);TaskDTO taskDTO = JSON.parseObject(str, TaskDTO.class);map.put("taskId", task.getId());HashMap<String, Object> variables = new HashMap<>();// 分支条件判断 驳回或同意variables.put("status", status);taskDTO.setStatus(status);// 不同意0&同意1if (status == 0) {taskDTO.setRejectId(task.getId());taskDTO.setAgreeId("");} else {taskDTO.setAgreeId(task.getId());taskDTO.setRejectId("");}taskDTO.getListMap().add(map);taskService.setVariable(task.getId(), taskDtoAfterName, JSON.toJSONString(taskDTO));taskService.complete(task.getId(), variables);return null;}

ddd审批和bbb审批类似,不写了

ccc审批只是修改taskDtoAfterName为taskDTO2,也不重复写了

ddd总审的时候也是按照原来的方式走就行,需要获取前面节点的数据的话就通过下面的方式就能获取到

taskService.getVariable(task.getId(), "taskDTO1");
taskService.getVariable(task.getId(), "taskDTO2");

上述操作改动到关键的Activiti表为:

act_ru_variable:正在执行的流程变量表
act_hi_varinst:流程变量历史表


并行网关处理完了,下一节来讲一下关于组的操作o(゚Д゚)っ!

Activiti6在Springboot下的使用 6 并行网关的处理相关推荐

  1. activiti学习(十六)——并行网关、排他网关、包含网关

    网关和分支是流程图中相当重要的一环.毕竟不可能所有流程都是一条直线走到底的,可能需要并行处理,也可能需要根据条件的不同选择对应的路由,网关的作用正是在此.本文主要探索一下这几种网关的常用方法,以及一些 ...

  2. 网站性能分析(下)-让网站并行加载但顺序执行JS

    如果网站不支持JavaScript,复杂的功能将无法正常工作.在开发当中通常有几个脚本会写在HTML文件的头部.你嵌入的越多,网站的速度潜在的变得越慢.因此提高并行加载速度变得非常有必要,在前面的文章 ...

  3. springboot下使用mybatis配置

    springboot下使用mybatis配置 1. 依赖安装 pom.xml文件 <dependency><groupId>org.mybatis.spring.boot< ...

  4. springboot下整合各种配置文件

    本博是在springboot下整合其他中间件,比如,mq,redis,durid,日志...等等  以后遇到再更.springboot真是太便捷了,让我们赶紧涌入到springboot的怀抱吧. ap ...

  5. Docker下redis与springboot三部曲之三:springboot下访问redis哨兵

    在< Docker下redis与springboot三部曲之二:安装redis主从和哨兵>一文中,我们在docker下搭建了redis主从和哨兵,本章我们开发一个基于springboot的 ...

  6. springboot下配置druid监控

    springboot下配置druid监控 在springboot中引用的包 相关配置 页面访问 获取druid监控数据 官方介绍如下:Druid是Java语言中最好的数据库连接池.Druid能够提供强 ...

  7. SpringBoot下的策略模式,消灭了大量的ifelse,真香!

    前言 项目中有这样一个场景,在公园放置了用来拍摄人像的识别杆,根据用户在不同识别杆之间采集的图象来计算用户的运动距离.由于涉及到许多公园,每个公园的布局不同,识别杆之间距离不同,算法也不同.但代码中每 ...

  8. springBoot下的ftp下载

    springBoot下的ftp下载 springboot-Environment ftp登录.退出 打包下载 本实例将创建一个ftp打包文件的工具类 Environment类获取配置信息 spring ...

  9. springBoot下java代码mysql数据库定时任务(创建表)

    springBoot下用java代码创建表 首先找到application.yml配置文件进行数据库连接配置 2-编写初始化数据库表类 这里就先写个demo用作测试 在项目目下新建一个包,报名任意,在 ...

  10. 【activiti 入门】activiti6.0之并行网关

    首先是环境搭建可参考之前的博客,而且有具体demo提供下载  https://download.csdn.net/download/qq_33333654/11790823 demo中仅涵盖了排他网关 ...

最新文章

  1. 【题型探究】公约数之和
  2. 清华、中科大实现了量子版本的GAN,平均保真度98.8%
  3. 数据挖掘学习05 - 使用R对文本进行hierarchical cluster并验证结果
  4. mysql最大值最小值_mysql最大值,最小值,总和查询与计数查询
  5. webview取java的参数值_Android 显示 WebView ,加载URL 时,向webview的 header 里面传递参数...
  6. 下拉框value ,selectedIndex
  7. F - Warm up - hdu 4612(缩点+求树的直径)
  8. 爬虫----Scrapy框架
  9. Y-Combinator不同语言实现方案
  10. 经典逻辑题笔试题和答案(不断更新)
  11. html简单图片轮播的实现
  12. PTX-NPs 纳米粒子修饰紫杉醇/与桦木酸PEG/邻硝基苯丙酸紫杉醇偶联物的制备
  13. 赚钱大师小程序【最新版5.9.9】商城/佣金即时提现/分销推广/话费充值/美团饿了么外卖
  14. 源于小程序智能名片的两点思考
  15. 【阅读笔记】《深度学习》第一章:引言
  16. 使用CvvImage类在MFC的static控件显示图片
  17. 删除mysql数据库中某表中的某个字段的数据
  18. 2017年手机html5的发展,HTML5明年年中发展成熟 或带来行业洗牌
  19. valueOf() 方法
  20. android夏令时,android 对夏令时的处理

热门文章

  1. 产品经理的自我修养—认知模式
  2. 程序员合同日期不到想辞职_辞职理由怎么说才合适?实话实说,随便编一个都不行...
  3. 1970年图灵奖--詹姆斯·威尔金森生平
  4. css折角的简单实现 真实项目实践
  5. QA智能问答(QQ匹配)
  6. DWM安装及简略配置教程
  7. 【腾讯TMQ】TBS主线众测实践之路
  8. http://localhost:8080/login的密码和账号的问题
  9. 支付宝和微信支付用户付款码条码规则
  10. tableau中快速实现环比增长率计算