首先是因?yàn)樽约耗壳暗捻?xiàng)目中需要用到工作流,因?yàn)閬?lái)公司之前就已經(jīng)選好了:Flowable。這一次也是對(duì)自己這兩天學(xué)習(xí)flowable的記錄。希望也能幫助到有需要的朋友們。
因?yàn)橹白约簩W(xué)習(xí)的時(shí)候在網(wǎng)上找的資料都比較雜,要么這篇文章缺這個(gè),要么那篇文章卻那個(gè),導(dǎo)致自己很多東西不理解,只看到別人貼出的結(jié)果圖,卻不知道怎么做出來(lái)的。
1. 我用的IDEA創(chuàng)建SpringBoot項(xiàng)目,我的項(xiàng)目版本是:2.2.0.RELEASE,這一步我就不貼出來(lái)了,
2. 然后在pom文件中引入jar包:

3. 添加一個(gè)數(shù)據(jù)源,我這里添加的mysql,F(xiàn)lowable需要持久化數(shù)據(jù)。這個(gè)是我的配置文件 application.yml:

4. 啟動(dòng)項(xiàng)目,可以看到數(shù)據(jù)庫(kù)中創(chuàng)建了很多flowable默認(rèn)的表,其中有flowable歷史流程相關(guān)的(eg: ACT_HI開(kāi)頭的...),運(yùn)行中相關(guān)的(eg: ACT_RU開(kāi)頭的....),用戶用戶組信息相關(guān)(eg: ACT_ID開(kāi)頭的...):?

5. 將springboot與flowable整合完成之后,就可以進(jìn)行工作流的開(kāi)發(fā)了,
flowable建議采用業(yè)界標(biāo)準(zhǔn)BPMN2.0的XML來(lái)描述需要定義的工作流。所以我們需要在項(xiàng)目中創(chuàng)建一個(gè)流程定義,下面這個(gè)是我創(chuàng)建的一個(gè)xml定義, 截圖不全,源碼中有:

看到這里是不是覺(jué)得這個(gè)文件很復(fù)雜,至少對(duì)于之前沒(méi)有用過(guò)工作流的我來(lái)說(shuō)看著很復(fù)雜的,看不懂。然后在晚上一系列搜索,有的說(shuō)可以用eclipse的自帶插件生成,我用的又是IDEA,
所以找到一篇文章:flowable+tomcat部署flowable項(xiàng)目,在線畫(huà)流程圖。原文鏈接:https://www.wandouip.com/t5i212543/
在我們下載安裝好tomcat之后,可以通過(guò):https://github.com/flowable/flowable-engine/releases/download/flowable-6.4.0/flowable-6.4.0.zip? 下載flowable的zip文件
下載下來(lái)解壓之后,我們把flowable-6.4.0/wars 下的所有war包復(fù)制到tomcat/webapps下面:

復(fù)制過(guò)去之后,啟動(dòng)tomcat,上面紅線圈起來(lái)的文件夾是tomcat啟動(dòng)之后自動(dòng)解壓生成的:

啟動(dòng)過(guò)程可能有點(diǎn)慢,要全部啟動(dòng)flowable的這幾個(gè)服務(wù),看到下面這個(gè)就啟動(dòng)完成了:

啟動(dòng)成功之后,可以登陸創(chuàng)建流程:http://localhost:8080/flowable-modeler?:

可以開(kāi)始創(chuàng)建:

這個(gè)就是我創(chuàng)建的一個(gè)流程:

審批流程:1.創(chuàng)建流程->ApproveRequest->通過(guò)審批->執(zhí)行SuccessService業(yè)務(wù)->流程到firstApproveTask節(jié)點(diǎn)........結(jié)束。??ApproveRequest->審批不通過(guò)->執(zhí)行失敗業(yè)務(wù)->結(jié)束
創(chuàng)建完成之后:可以導(dǎo)出BPMN2:

可以打開(kāi)下載的文件,自動(dòng)轉(zhuǎn)成xml格式,是不是很方便,不用自己全部寫(xiě):

然后再把這個(gè)下載文件拷貝項(xiàng)目中: resources/processes/? 目錄下:

然后可以在Controller文件中創(chuàng)建接口測(cè)試這個(gè)工作流:

這些是我引入的flowable相關(guān)的,接下來(lái)創(chuàng)建流程:

userId: 創(chuàng)建人id, days:請(qǐng)假天數(shù) , reason:請(qǐng)假原因。
方法里邊把這些參數(shù)傳入map中的key就是流程變量,后面的方法可以取出來(lái)使用。holidayRequest: 就是xml文件中<process>標(biāo)簽的id,就是之前創(chuàng)建的流程定義。
接下來(lái)可以在postman中測(cè)試一下:


可以看到postman測(cè)試成功,數(shù)據(jù)庫(kù)表中有了相應(yīng)數(shù)據(jù)。
然后可以創(chuàng)建顯示流程圖的接口:

在postman中傳入流程id測(cè)試一下:

大家可以看到查詢(xún)出了之前在flowable中創(chuàng)建的流程定義,并且可以看到當(dāng)前流程在Approverequest這個(gè)節(jié)點(diǎn)(紅線圈起來(lái)的),因?yàn)橹爸皇怯脩籼峤涣藢徟鞒?。所以現(xiàn)在到了第二個(gè)節(jié)點(diǎn)。
接著創(chuàng)建審批通過(guò)接口:


可以看到接口中的approved,就是流程定義中${approved}變量,畫(huà)流程圖的時(shí)候可以定義。如果傳入的為true則執(zhí)行上面的流程邏輯,false則執(zhí)行下面的。
接著我們?cè)贉y(cè)試一下,可以看到審批通過(guò):

再看一下流程圖:

可以看到同一個(gè)流程實(shí)例,流程又到了下一個(gè)節(jié)點(diǎn)。
我們可以查詢(xún)一個(gè)指定用戶/用戶組的任務(wù)列表:


xml中的flowable:candidateGroups = "first" 說(shuō)明這個(gè)任務(wù)只有用戶組為first的用戶才可以執(zhí)行、查詢(xún)。
上面可以看到流程已經(jīng)到了firstApprovedTask節(jié)點(diǎn),說(shuō)明只有first用戶組才可以查詢(xún)或執(zhí)行。我們?cè)贉y(cè)試一下:


大家可以看到當(dāng)傳入 managers的時(shí)候,是查不出來(lái)任務(wù)數(shù)據(jù)的,傳入first的時(shí)候就可以查詢(xún)出來(lái)了。說(shuō)明是正確的。
Controller中還有一些其他方法,我就沒(méi)有全部貼出來(lái):
包括:1. 查詢(xún)歷史流程記錄,2.?駁回流程實(shí)例 , 3.??終止流程實(shí)例 ,4.??掛起流程實(shí)例
? ? ? ? ? ?5. 恢復(fù)(喚醒)被掛起的流程實(shí)例, 6.?判斷傳入流程實(shí)例在運(yùn)行中是否存在
? ? ?7.?判斷流程實(shí)例在歷史記錄中是否存在?
其他的功能還在探索,以上就是我學(xué)習(xí)flowable這兩天的一些收獲。如果某些地方不對(duì)的,還請(qǐng)大家指出來(lái),謝謝。