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

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

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

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

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

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

啟動過程可能有點慢,要全部啟動flowable的這幾個服務(wù),看到下面這個就啟動完成了:

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

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

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

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

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

然后再把這個下載文件拷貝項目中: resources/processes/? 目錄下:

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

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

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


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

在postman中傳入流程id測試一下:

大家可以看到查詢出了之前在flowable中創(chuàng)建的流程定義,并且可以看到當(dāng)前流程在Approverequest這個節(jié)點(紅線圈起來的),因為之前只是用戶提交了審批流程。所以現(xiàn)在到了第二個節(jié)點。
接著創(chuàng)建審批通過接口:


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

再看一下流程圖:

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


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


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