于海浩,黃成哲,孫 栩
(黑龍江工程學院 計算機科學與技術(shù)學院,哈爾濱 150050)
目前,信息化已經(jīng)廣泛地融入人們的日常工作中。人們通過信息系統(tǒng)提高了工作效率,但在實際工作中經(jīng)常遇到部門或者崗位調(diào)整,管理流程需要優(yōu)化的情況[1]。而這種業(yè)務(wù)流程變更需要修改信息系統(tǒng)程序,即增加了系統(tǒng)的運維成本,又影響開發(fā)效率[2]。針對這一問題,工作流技術(shù)的引入是解決上述問題的良好方案。
文中采用目前廣泛應(yīng)用的開源工作流Activiti[3]作為工作流引擎,在深入研究其內(nèi)部架構(gòu)和設(shè)計思路基礎(chǔ)上,結(jié)合SpringBoot等web開發(fā)技術(shù),設(shè)計了一個工作流管理平臺,該平臺屏蔽業(yè)務(wù)流程修改對信息系統(tǒng)的影響,減少業(yè)務(wù)流程和業(yè)務(wù)邏輯的耦合度,提高系統(tǒng)的健壯性和穩(wěn)定性。
該平臺使用SpringBoot[4]、SpringMVC[5]、Mybatis[6]等作為平臺的主體框架。整體框架如圖1所示,其中,數(shù)據(jù)庫采用MySQL,用來保存工作流實例的運行數(shù)據(jù)和歷史數(shù)據(jù)以及相應(yīng)業(yè)務(wù)系統(tǒng)的業(yè)務(wù)數(shù)據(jù)。持久層采用Mybatis,主要實現(xiàn)對數(shù)據(jù)庫的增、刪、改、查操作,并實現(xiàn)對象關(guān)系映射。業(yè)務(wù)邏輯層是系統(tǒng)的核心,利用SpringBoot將SpringMVC、Activiti工作流引擎、安全認證(Apache Shiro)框架整合在一起,共同完成業(yè)務(wù)邏輯。視圖層系統(tǒng)使用Bootstrap結(jié)合Thymeleaf框架,利用html相關(guān)技術(shù),提供用戶與系統(tǒng)的交互界面,Activiti Modeler是圖形化業(yè)務(wù)流程設(shè)計器。
圖1 系統(tǒng)總體框架
1.2.1 流程設(shè)計器
如圖2所示,流程設(shè)計器系統(tǒng)采用Activiti Modeler,它是基于Angular的web流程圖形化設(shè)計器,主要用于保存業(yè)務(wù)流程模型注解(Business Process Modeling Notation,BPMN)規(guī)范相關(guān)的對象,例如將模型轉(zhuǎn)換為相應(yīng)的流程圖對象。業(yè)務(wù)人員可以利用流程設(shè)計器進行在線工作流程圖設(shè)計。流程設(shè)計器完全符合BPMN2.0規(guī)范,BPMN是業(yè)務(wù)流程模型的一種國標標準圖形注解,通過提供給用戶容易理解的標準圖形符號,完成從創(chuàng)建業(yè)務(wù)流程到實現(xiàn)流程以及監(jiān)控流程的全過程設(shè)計和運行管理[7]。 文中的流程設(shè)計器標準符號如表1所示。
圖2 流程設(shè)計器
表1 流程設(shè)計器標準符號
1.2.2 工作流引擎
工作流引擎的主要工作是流程部署、流程解析、流程實例化和流程跳轉(zhuǎn)[8-10]。Activiti工作流引擎的實例對象是ProcessEngine,提供7個接口,開發(fā)者可以通過GetXXXService獲得相應(yīng)的接口實例,具體功能如表2所示。
表2 工作流引擎接口
1.2.3 Activiti工作流與SpringBoot整合
Activiti工作流與SpringBoot的整合主要過程如下:
1)在SpringBoot工程中引入Activiti需要的相關(guān)依賴。利用maven的項目對象模型自動從maven中央資料庫中下載相關(guān)依賴包,具體內(nèi)容如下:
2)導入Activiti需要的數(shù)據(jù)庫環(huán)境。首先將Activiti需要的數(shù)據(jù)庫表導入到MySQL數(shù)據(jù)庫,并在工程application.xml文件中配置數(shù)據(jù)庫的鏈接,具體內(nèi)容如下:
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driverClassName: com.mysql.cj.jdbc.Driver
druid:
master:
url: jdbc:mysql://localhost:3306/ry_act6?useUnicode=true&character
Encoding=utf8
username: root
password: 123456
3)整合Activiti與系統(tǒng)的角色和用戶權(quán)限。Activiti支持的用戶、角色功能比較簡單,不符合系統(tǒng)的權(quán)限管理要求,平臺利用Apache shiro安全框架重新開發(fā)了角色和用戶權(quán)限管理功能。因此,刪除了Activiti數(shù)據(jù)庫中自帶的act_id_group、act_id_membership、act_id_user 3個表,建立3個同名和結(jié)構(gòu)的視圖,與系統(tǒng)自建的用戶與權(quán)限管理功能進行關(guān)聯(lián)。
4)實例化工作流引擎和其它的接口實例。平臺利用SpringBoot的依賴注入功能在系統(tǒng)啟動時實例化ProcessEngine和其它的接口實例,利用SpringMVC架構(gòu)實現(xiàn)Model層、Controler層到Service層的整合開發(fā),實現(xiàn)包括創(chuàng)建流程圖、發(fā)布流程、啟動流程、查詢代辦任務(wù)、領(lǐng)取任務(wù)、任務(wù)處理和查詢歷史任務(wù)的核心功能,如圖3所示。
圖3 Activiti與SpringBoot整合過程
由平臺總體架構(gòu)和具體實現(xiàn)可知,業(yè)務(wù)流程定義與流程的流轉(zhuǎn)是在Activiti工作流中進行,并與具體業(yè)務(wù)邏輯處理分開。業(yè)務(wù)邏輯處理節(jié)點不需要知曉流程執(zhí)行到哪一步、如何根據(jù)條件進行下一步流程的流轉(zhuǎn),業(yè)務(wù)邏輯只負責給Activiti工作流傳遞當前業(yè)務(wù)處理中的審批參數(shù),例如:是否同意等條件。工作流根據(jù)當前節(jié)點的審批參數(shù)自行判斷怎樣進行工作流程的流轉(zhuǎn),例如:修改請假流程,對原來的請假流程進行修改,增加一個審批節(jié)點即總經(jīng)理審批。具體驗證過程如下:
1)利用流程設(shè)計器修改業(yè)務(wù)流程,增加總經(jīng)理審批任務(wù)節(jié)點,將總經(jīng)理審批任務(wù)節(jié)點的處理人角色定義為總經(jīng)理角色,流轉(zhuǎn)條件定義為同意或不同意的布爾條件。對修改流程進行重新發(fā)布,如圖4所示。
圖4 請假業(yè)務(wù)流程修改
2)在系統(tǒng)中增加總經(jīng)理角色和總經(jīng)理角色的登陸用戶,如圖5所示。
圖5 增加角色和登陸用戶界面
3)申請人重新申請請假業(yè)務(wù),如圖6所示,點擊第一條記錄中的進度查看按鈕,出現(xiàn)圖形化的審批進度,其中,綠色框表示已經(jīng)通過的審批節(jié)點,從審批進度中可以看到部門領(lǐng)導和人事部門已經(jīng)審批通過,當前流程是總經(jīng)理審批(系統(tǒng)用紅字框表示)。從本示例可知,業(yè)務(wù)流程的修改沒有進行任何代碼修改,消除了業(yè)務(wù)流程的變更對業(yè)務(wù)邏輯的影響。
圖6 平臺界面展示示例
文中實現(xiàn)了一個基于Activiti的工作流管理平臺,利用SpringBoot、SpringMVC與Activiti的整合,實現(xiàn)了從圖形化界面設(shè)計與發(fā)布流程、流程啟動到相應(yīng)業(yè)務(wù)處理的全過程管理。業(yè)務(wù)流程變更只需要重新修改業(yè)務(wù)流程設(shè)計、改變用戶角色、修改用戶角色與任務(wù)和流轉(zhuǎn)條件之間的關(guān)系即可滿足用戶的要求。實際應(yīng)用證明,該平臺具有一定的通用性,可以針對不同的業(yè)務(wù)設(shè)計多個業(yè)務(wù)流程,業(yè)務(wù)流程與業(yè)務(wù)邏輯耦合性低,具有快速適應(yīng)業(yè)務(wù)流程變化的能力。