成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

體驗一把 Flowable 三種常見網關

開發 前端
今天松哥就來和小伙伴們聊一聊這三種網關,一起來體驗一把這三種網關各自的特征。

Flowable 中網關類型其實也不少,常見的主要有三種類型,分別是:

  • 排他網關
  • 并行網關
  • 包容網關

這三個里邊最常用的當然就是排他網關了,今天松哥就來和小伙伴們聊一聊這三種網關,一起來體驗一把這三種網關各自的特征。

1. 排他網關

首先就是排他網關了,這個也叫互斥網關,長得像下圖這樣:

排他網關可以有 N 個入口,但是只有一個有效出口。

松哥舉一個例子:

假設我有一個請假流程,請假 1 天,組長審批,請假小于 3 天,項目經理審批,請假大于 3 天,總監審批,據此,我們可以繪制如下流程圖:

圖片

在這個流程圖中,當流程從排他網關出來的時候,我們設置一個變量,根據變量的值,來決定下一個走哪一個 Task,例如組長審批,我們做如下配置:

圖片

這個流條件表示當 days 這個變量的值小于等于 1 的時候,就會進入到組長審批這個 Task。

按照類似的方式,我們來設置經理審批:

圖片

最后,總監審批的條件如下:

圖片

最終,我們來看下這個流程對應的 XML 文件,如下:

<process id="demo01" name="測試流程" isExecutable="true">
<documentation>測試流程</documentation>
<startEvent id="startEvent1" flowable:formFieldValidation="true"></startEvent>
<exclusiveGateway id="sid-C4E389D6-C507-4B8E-8469-2288AA5B44A5"></exclusiveGateway>
<sequenceFlow id="sid-DF97CC8B-3AD5-447D-AE67-1082CAB7B189" sourceRef="startEvent1" targetRef="sid-C4E389D6-C507-4B8E-8469-2288AA5B44A5"></sequenceFlow>
<userTask id="sid-B4CD08AF-52B5-44F2-AC45-B2F5E154A5F0" name="組長審批" flowable:formFieldValidation="true"></userTask>
<userTask id="sid-07B7951C-4E76-4639-989C-407C610C5BA8" name="經理審批" flowable:formFieldValidation="true"></userTask>
<userTask id="sid-1A81B40F-D8D4-4158-B0B9-26DB8FB7DD2E" name="總監審批" flowable:formFieldValidation="true"></userTask>
<endEvent id="sid-0F56FE56-1A8C-4B47-8F0D-196700DDF7B8"></endEvent>
<sequenceFlow id="sid-E4B4B580-F078-4BB9-B5D3-966E80737C4C" sourceRef="sid-B4CD08AF-52B5-44F2-AC45-B2F5E154A5F0" targetRef="sid-0F56FE56-1A8C-4B47-8F0D-196700DDF7B8"></sequenceFlow>
<endEvent id="sid-F05670CB-A8F4-44A3-B53D-46CFB6F65581"></endEvent>
<sequenceFlow id="sid-3EC62E5D-ACDA-480E-93B4-C24D8F6E9042" sourceRef="sid-07B7951C-4E76-4639-989C-407C610C5BA8" targetRef="sid-F05670CB-A8F4-44A3-B53D-46CFB6F65581"></sequenceFlow>
<endEvent id="sid-52711414-1769-4EC3-9AE5-6BA426123095"></endEvent>
<sequenceFlow id="sid-C81500B2-D1EA-429F-8402-A3D8C8CA0E29" sourceRef="sid-1A81B40F-D8D4-4158-B0B9-26DB8FB7DD2E" targetRef="sid-52711414-1769-4EC3-9AE5-6BA426123095"></sequenceFlow>
<sequenceFlow id="sid-807C7B79-4AFA-4525-847F-4D0FE1C0F0F3" name="小于1天" sourceRef="sid-C4E389D6-C507-4B8E-8469-2288AA5B44A5" targetRef="sid-B4CD08AF-52B5-44F2-AC45-B2F5E154A5F0">
<conditionExpression xsi:type="tFormalExpression"><![CDATA[${days<=1}]]></conditionExpression>
</sequenceFlow>
<sequenceFlow id="sid-3D3DF742-BF47-4536-9EE9-747CD284A1BA" name="1-3天" sourceRef="sid-C4E389D6-C507-4B8E-8469-2288AA5B44A5" targetRef="sid-07B7951C-4E76-4639-989C-407C610C5BA8">
<conditionExpression xsi:type="tFormalExpression"><![CDATA[${days>1 && days<=3}]]></conditionExpression>
</sequenceFlow>
<sequenceFlow id="sid-2AD41E43-AFEC-47A1-B8D1-0B4299434BF8" name="大于3天" sourceRef="sid-C4E389D6-C507-4B8E-8469-2288AA5B44A5" targetRef="sid-1A81B40F-D8D4-4158-B0B9-26DB8FB7DD2E">
<conditionExpression xsi:type="tFormalExpression"><![CDATA[${days>3}]]></conditionExpression>
</sequenceFlow>
</process>

可以看到,在 sequenceFlow 標簽中,有一個 conditionExpression 標簽,這個標簽的內容就是具體的條件了。

現在,我們部署一下這個流程,然后按照如下方式來啟動:

@Test
void test01(){
Map<String, Object> variables = new HashMap<>();
variables.put("days", 3);
ProcessInstance pi = runtimeService.startProcessInstanceByKey("demo01", variables);
logger.info("id:{},activityId:{}", pi.getId(), pi.getActivityId());
}

注意,這個啟動的時候,傳入一個 days 變量,系統將來會根據這個變量來決定這個流程要走到哪一個 Task。流程啟動成功之后,我們去觀察 ACT_RU_TASK 表,就可以看到流程的執行是否和我們所預想的一致。

2. 并行網關

并行網關,從名字上大概也能看出來,這種網關一般用在并行任務上,并行網關如下圖:

圖片

并行網關一般是成對出現的,一個出現的并行網關用來分流,第二個出現的并行網關用來聚合。

我畫一個簡單的并行網關的例子,如下圖:

圖片

小伙伴們看到,這是一個簡化的生產筆記本的流程圖,當屏幕和鍵盤都生產好之后,再進行組裝,整個流程圖中存在兩個并行網關(成對出現)。

在這個流程圖中,連接線上是不需要設置條件的(不同于拍他網關),這里即使你設置了條件,這個條件也是不會生效的。

我們來看下這個并行網關流程圖對應的 XML 文件,如下:

<process id="demo01" name="測試流程" isExecutable="true">
<documentation>測試流程</documentation>
<startEvent id="sid-4F7F76BA-526A-4D8C-B45A-02FC1C56CA47" flowable:formFieldValidation="true"></startEvent>
<sequenceFlow id="sid-11130848-EA1F-458A-A45D-49CBC49428C8" sourceRef="sid-4F7F76BA-526A-4D8C-B45A-02FC1C56CA47" targetRef="sid-6D01D4BE-C475-4270-8745-92752EA2C038"></sequenceFlow>
<parallelGateway id="sid-6D01D4BE-C475-4270-8745-92752EA2C038"></parallelGateway>
<userTask id="sid-54DD6BFA-FE6C-4DE7-9038-3DEEAF85002C" name="生產屏幕" flowable:assignee="zhangsan" flowable:formFieldValidation="true">
<extensionElements>
<modeler:initiator-can-complete xmlns:modeler="http://flowable.org/modeler"><![CDATA[false]]></modeler:initiator-can-complete>
</extensionElements>
</userTask>
<sequenceFlow id="sid-8DD3383C-45D1-4EAF-9A22-702A5B9D0869" sourceRef="sid-6D01D4BE-C475-4270-8745-92752EA2C038" targetRef="sid-54DD6BFA-FE6C-4DE7-9038-3DEEAF85002C"></sequenceFlow>
<userTask id="sid-7797ED55-155F-4D17-8EA5-DE40434C421B" name="生產鍵盤" flowable:assignee="lisi" flowable:formFieldValidation="true">
<extensionElements>
<modeler:initiator-can-complete xmlns:modeler="http://flowable.org/modeler"><![CDATA[false]]></modeler:initiator-can-complete>
</extensionElements>
</userTask>
<sequenceFlow id="sid-6E992E8B-CF71-411D-B537-42FEDF4F4209" sourceRef="sid-6D01D4BE-C475-4270-8745-92752EA2C038" targetRef="sid-7797ED55-155F-4D17-8EA5-DE40434C421B"></sequenceFlow>
<sequenceFlow id="sid-8DCA9516-FFED-4781-9ACC-530DC6E63755" sourceRef="sid-7797ED55-155F-4D17-8EA5-DE40434C421B" targetRef="sid-98D3C336-9AD9-4964-9CCB-496C850EE40F"></sequenceFlow>
<sequenceFlow id="sid-EE80AE42-D021-4B9F-A91E-BD37C512EE65" sourceRef="sid-54DD6BFA-FE6C-4DE7-9038-3DEEAF85002C" targetRef="sid-98D3C336-9AD9-4964-9CCB-496C850EE40F"></sequenceFlow>
<userTask id="sid-4FFE361A-E2AF-4481-BACF-1E618E8C4A26" name="組裝" flowable:assignee="javaboy" flowable:formFieldValidation="true">
<extensionElements>
<modeler:initiator-can-complete xmlns:modeler="http://flowable.org/modeler"><![CDATA[false]]></modeler:initiator-can-complete>
</extensionElements>
</userTask>
<sequenceFlow id="sid-8CABC6E8-E36A-4814-B897-817D4A9F231C" sourceRef="sid-98D3C336-9AD9-4964-9CCB-496C850EE40F" targetRef="sid-4FFE361A-E2AF-4481-BACF-1E618E8C4A26"></sequenceFlow>
<endEvent id="sid-BF02170B-8138-4867-AE01-E3B29505183D"></endEvent>
<sequenceFlow id="sid-F72B2A15-913F-436E-8AD7-6A6FB190E197" sourceRef="sid-4FFE361A-E2AF-4481-BACF-1E618E8C4A26" targetRef="sid-BF02170B-8138-4867-AE01-E3B29505183D"></sequenceFlow>
<parallelGateway id="sid-98D3C336-9AD9-4964-9CCB-496C850EE40F"></parallelGateway>
</process>

現在我們把這個流程部署并啟動。

流程啟動成功之后,我們發現在 ACT_RU_TASK 表中有兩個需要執行的 Task,如下圖:

圖片

這兩個 Task,如果只執行掉其中一個,那么還剩下另外一個 Task,如果兩個都執行了,那么你就會看到一個新的 Task,如下圖(兩個并行任務執行完成后,進入到下一個任務):

圖片

好啦,這就是并行網關。

3. 包容網關

包容網關,有時候也叫相容網關、兼容網關等,如下圖:

包容誰呢?包容排他網關和并行網關。也就是說,這種包容網關可以根據實際條件轉為排他網關或者并行網關。

舉個栗子:

假如說報銷金額大于 500,zhangsan 審批,報銷金額大于 1000,則需要 zhangsan 和 lisi 同時審批,且 zhangsan 和 lisi 審批無先后順序。

據此,我繪制如下流程圖:

圖片

在報銷金額大于 500 上設置如下條件:

圖片

大于 1000 上設置如下條件:

接下來我們來部署好這個流程。

部署好之后,我們首先來啟動流程,第一次啟動的時候,我們設置報銷金額為 666,如下:

@Test
void test01(){
Map<String, Object> variables = new HashMap<>();
variables.put("money", 666);
ProcessInstance pi = runtimeService.startProcessInstanceByKey("demo01", variables);
logger.info("id:{},activityId:{}", pi.getId(), pi.getActivityId());
}

流程啟動之后,我們在 ACT_RU_TASK 表中可以看到,該 zhangsan 審批了,如下:

圖片

zhangsan 審批之后,就是 wangwu 審批了,我就不演示了。

假設我們啟動流程的時候,報銷金額為 2000,如下:

@Test
void test01(){
Map<String, Object> variables = new HashMap<>();
variables.put("money", 2000);
ProcessInstance pi = runtimeService.startProcessInstanceByKey("demo01", variables);
logger.info("id:{},activityId:{}", pi.getId(), pi.getActivityId());
}

那么此時你就會看到,在 ACT_RU_TASK 表中,出現了兩條記錄,分別是 zhangsan 審批和 lisi 審批,此時這兩個審批就是一個并行任務了:

圖片

接下來就按并行任務的模式來,這兩個人都審批了,才會進入到 wangwu 審批。

這就是兼容網關的特點,即根據實際情況,會變成排他網關或者并行網關。

好啦,三種常見的網關就和小伙伴們分享完啦,感興趣的小伙伴趕緊試一試吧~

責任編輯:武曉燕 來源: 江南一點雨
相關推薦

2021-10-26 00:01:59

Spring方式代碼

2022-10-18 10:41:44

Flowable服務任務

2024-04-18 08:00:23

openInula?React響應式 API

2017-12-29 08:26:28

存儲引擎MySQL

2009-08-04 09:09:56

Java常見異常

2009-11-10 13:19:09

動態路由協議

2021-08-10 10:14:14

存儲接口存儲設備存儲

2022-01-11 17:43:34

特斯拉自動駕駛技術

2009-12-21 13:37:43

WCF消息交換

2010-08-24 09:43:33

2010-09-25 15:07:08

SQL插入語句

2019-11-07 22:40:33

威脅檢測欺騙技術攻擊

2011-09-15 15:08:27

2011-04-14 09:36:57

Java

2022-01-27 08:44:58

調度系統開源

2019-12-17 09:01:35

網絡犯罪網絡攻擊網絡安全

2016-02-22 10:10:03

云應用云陷阱云安全

2010-02-25 17:01:48

Linux配置文件

2011-08-05 13:12:18

2024-11-26 07:47:41

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 五月综合久久 | 午夜精品久久久 | 久久日韩粉嫩一区二区三区 | 成人av一区 | 亚洲日韩中文字幕一区 | 毛片在线免费 | 精品综合久久 | 亚洲国产情侣 | 自拍偷拍第一页 | 欧洲一区视频 | 国产精品久久久久久久久久久免费看 | 91精品国产综合久久精品 | 欧美jizzhd精品欧美巨大免费 | 久久一区| 国产一区二区三区 | 国产成人免费视频网站视频社区 | 久久亚洲精品国产精品紫薇 | 日韩视频区| 一级毛片色一级 | 日韩高清av | 亚洲国产成人精品久久 | 日韩国产中文字幕 | 精品国产乱码久久久久久蜜退臀 | 91高清在线视频 | 久热爱 | 91大神在线资源观看无广告 | a毛片| 欧美视频第二页 | 婷婷狠狠 | 欧美 日韩 国产 成人 | 一区二区三区影院 | 精品九九九| 中文字幕日韩欧美一区二区三区 | 久久成人免费视频 | 欧美久久久久久 | 免费在线视频一区二区 | 麻豆av网| 国产精品日韩在线观看 | 欧美一级α片 | 99久久婷婷国产综合精品首页 | 国产精品日日夜夜 |