DOI:10.16644/j.cnki.cn33-1094/tp.2016.02.022
摘 ?要: 針對(duì)大學(xué)考勤工作過(guò)程管理自動(dòng)化、智能化和整合的需求,設(shè)計(jì)實(shí)現(xiàn)了基于Activiti的考勤工作流系統(tǒng)。以服務(wù)對(duì)象為中心梳理出系統(tǒng)核心業(yè)務(wù),并使用Activiti Modeler完成了業(yè)務(wù)建模。介紹了系統(tǒng)的數(shù)據(jù)通信模式和控制數(shù)據(jù)、相關(guān)數(shù)據(jù)和應(yīng)用數(shù)據(jù)的分類(lèi)及作用。通過(guò)Java示例代碼描述了Activiti流程部署與啟動(dòng)執(zhí)行的步驟,并給出了基于事務(wù)內(nèi)存的異常處理模式。該系統(tǒng)將考勤業(yè)務(wù)梳理后制定成業(yè)務(wù)流程規(guī)范,為校園信息化建設(shè)提供一定的參考。
關(guān)鍵詞: Activiti; 考勤; 工作流; 事務(wù)內(nèi)存
中圖分類(lèi)號(hào):TP302 ? ? ? ? ?文獻(xiàn)標(biāo)志碼:A ? ? 文章編號(hào):1006-8228(2016)02-75-04
Design and implementation of attendance workflow system based on Activiti
Sun Yong
(Department of Information Technology, Zhejiang Institute of Communications, Hangzhou, Zhejiang 311112, China)
Abstract: According to the requirement for automation, intelligence and integration in the college attendance process management, a work flow system based on Activiti is designed and realized. Focusing on the service object, teasing out the system's core business, Activiti Modeler is used to complete the business modeling. The data communication mode and the classification and function of control data, related data and application data are introduced in this paper. The steps of Activiti process deployment and implementation are described by Java sample code, and the exception handling mode based on transactional memory is given. The system sets up a business process specification by combing the attendance process, and can provide a reference for the campus information construction.
Key words: Activiti; attendance; work flow; transaction memory
0 引言
云計(jì)算、大數(shù)據(jù)、物聯(lián)網(wǎng)與移動(dòng)互聯(lián)網(wǎng)是當(dāng)前IT界的四大發(fā)展趨勢(shì),其中移動(dòng)互聯(lián)網(wǎng)是最接地氣的,也是最有生命力的,無(wú)論是國(guó)家層面還是各大企業(yè),都紛紛部署移動(dòng)信息化平臺(tái)。
“繽紛校園App”是一款面向大學(xué)校園的多時(shí)段、多主體、多類(lèi)型、多模塊的基于LBS的即時(shí)考勤手機(jī)App,用于助力校園安全管理,提升平安校園品質(zhì)。由于它的大多數(shù)業(yè)務(wù)均涉及到多個(gè)參與者(例如,請(qǐng)假流程涉及了學(xué)生、輔導(dǎo)員、分管領(lǐng)導(dǎo)等角色),所以引入工作流系統(tǒng)[1]進(jìn)行任務(wù)的分工協(xié)作成為必然。針對(duì)它的業(yè)務(wù)流程管理問(wèn)題,我們?cè)O(shè)計(jì)了一種基于Activiti[2]的工作流系統(tǒng),以信息技術(shù)驅(qū)動(dòng)考勤流程的自動(dòng)化,以業(yè)務(wù)流程為中心全面串聯(lián)學(xué)校的考勤管理工作。Activiti是一個(gè)針對(duì)企業(yè)用戶(hù)、開(kāi)發(fā)人員、系統(tǒng)管理員的輕量級(jí)工作流業(yè)務(wù)管理平臺(tái)。其核心是使用Java開(kāi)發(fā)的快速、穩(wěn)定的BPMN2.0[3]流程引擎。它可以運(yùn)行在任何類(lèi)型的Java程序中,如服務(wù)器、集群、云服務(wù)等,其設(shè)計(jì)非常簡(jiǎn)約。Activiti在全球得到了廣泛的應(yīng)用,在中國(guó)也不例外,已經(jīng)成為目前最主流的流程引擎。
1 系統(tǒng)設(shè)計(jì)
1.1 以服務(wù)對(duì)象為中心確定核心業(yè)務(wù)
業(yè)務(wù)流程必須從業(yè)務(wù)角度去審視,沒(méi)有業(yè)務(wù)也就沒(méi)有流程。所以,做工作流系統(tǒng)設(shè)計(jì)的第一前提就是清楚系統(tǒng)的核心業(yè)務(wù)是什么。而服務(wù)對(duì)象是業(yè)務(wù)的重要要素,所以那些為服務(wù)對(duì)象創(chuàng)造價(jià)值的業(yè)務(wù)就是核心業(yè)務(wù)。例如,國(guó)稅、地稅的繳稅業(yè)務(wù),房管局為房地產(chǎn)從業(yè)者及社會(huì)公眾提供的各種房屋證件的辦理業(yè)務(wù)等。對(duì)于“繽紛校園App”,其服務(wù)對(duì)象是大學(xué)師生及其管理者,核心業(yè)務(wù)即為請(qǐng)假和點(diǎn)名(包括課堂點(diǎn)名、晨點(diǎn)名、晚點(diǎn)名等)。
流程是由活動(dòng)集組成的,確定好業(yè)務(wù)之后,需要對(duì)業(yè)務(wù)流程中的活動(dòng)進(jìn)一步地規(guī)范化。如果流程中所有活動(dòng)雜亂而不遵循任何規(guī)范,那么流程是無(wú)法進(jìn)行優(yōu)化的。
1.1.1 活動(dòng)本身的規(guī)范化
一個(gè)活動(dòng)代表著某個(gè)完整的流程上下文中一個(gè)細(xì)分的業(yè)務(wù)環(huán)節(jié),此業(yè)務(wù)環(huán)節(jié)可以逐級(jí)分解為多個(gè)更細(xì)的業(yè)務(wù)環(huán)節(jié),直到不能分解為止。應(yīng)將這個(gè)業(yè)務(wù)環(huán)節(jié)上對(duì)應(yīng)的與流程相關(guān)的所有屬性(包括這個(gè)活動(dòng)本身的屬性以及與此活動(dòng)相關(guān)的業(yè)務(wù)屬性)封裝為一個(gè)完整活動(dòng)。具體如下:
⑴ 活動(dòng)的基本屬性(名稱(chēng));
⑵ 活動(dòng)的參與者屬性(人工活動(dòng));
⑶ 活動(dòng)的時(shí)間屬性;
⑷ 活動(dòng)的業(yè)務(wù)屬性,包括表單、規(guī)則、事件、權(quán)限、KPI績(jī)效指標(biāo)等,行業(yè)不同還會(huì)有很多其他特定屬性。
通過(guò)上面的分析可知,活動(dòng)本身的規(guī)范化內(nèi)容很多,這些內(nèi)容直接影響流程的分類(lèi)、簡(jiǎn)化及重用,例如活動(dòng)的時(shí)間屬性,在人工活動(dòng)的大多數(shù)場(chǎng)景下需要對(duì)每個(gè)活動(dòng)定義一個(gè)辦理期限,那么對(duì)于同崗位、同業(yè)務(wù)操作的同一個(gè)活動(dòng),都應(yīng)該遵循相同的辦理期限,而不應(yīng)該有各種各樣的理由來(lái)對(duì)期限進(jìn)行延期。同樣的,對(duì)于活動(dòng)的業(yè)務(wù)屬性也要制定相應(yīng)的規(guī)范,以達(dá)到整個(gè)業(yè)務(wù)流程規(guī)范化的目的。
1.1.2 活動(dòng)之間的作用
活動(dòng)之間的作用是指活動(dòng)與活動(dòng)之間的轉(zhuǎn)移邏輯及交互邏輯。通過(guò)結(jié)合流程實(shí)際運(yùn)行數(shù)據(jù),統(tǒng)計(jì)流程中重復(fù)的活動(dòng)、活動(dòng)占用的資源和時(shí)間、活動(dòng)所耗費(fèi)的成本等,來(lái)對(duì)活動(dòng)本身的業(yè)務(wù)屬性進(jìn)行分析,就可以調(diào)整活動(dòng)之間各種控制模式。例如,將兩個(gè)串行連接的活動(dòng),改為并行連接,這就是流程優(yōu)化中最常采用和最有效的策略。
1.2 核心業(yè)務(wù)建模
建模就是將設(shè)計(jì)好的業(yè)務(wù)流程模型化,并持久化地形成抽象通用的模型的過(guò)程。本文采用Activiti的Modeler作為建模器,創(chuàng)建符合BPMN2.0規(guī)范的業(yè)務(wù)模型,并將模型文件存儲(chǔ)在數(shù)據(jù)庫(kù)的模型庫(kù)中,以便工作流和業(yè)務(wù)系統(tǒng)訪問(wèn)。請(qǐng)假業(yè)務(wù)工作流如圖1所示。
對(duì)于請(qǐng)假流程中的“審批”環(huán)節(jié),由于請(qǐng)假時(shí)間不同,負(fù)責(zé)人不同,所以需要一個(gè)分支路由的節(jié)點(diǎn)。同時(shí)為支持客戶(hù)需求的靈活變化,將審批決策硬編碼在業(yè)務(wù)系統(tǒng)中就不合適了,而應(yīng)采用Activiti中的規(guī)則引擎來(lái)自動(dòng)進(jìn)行審批決策,并支持客戶(hù)對(duì)審批規(guī)則的實(shí)時(shí)修改。利用規(guī)則引擎可以將業(yè)務(wù)規(guī)則脫離應(yīng)用單獨(dú)處理,使用預(yù)定義的規(guī)則文件語(yǔ)法編寫(xiě)業(yè)務(wù)規(guī)則,把業(yè)務(wù)數(shù)據(jù)交給規(guī)則引擎解釋?zhuān)缓蠓祷靥幚斫Y(jié)果,根據(jù)返回的結(jié)果就可以判定業(yè)務(wù)的處理方式了(例如,當(dāng)前的請(qǐng)假申請(qǐng)是應(yīng)該由輔導(dǎo)員還是由分管領(lǐng)導(dǎo)負(fù)責(zé)審批)。
晚點(diǎn)名業(yè)務(wù)工作流如圖2所示(其他點(diǎn)名流程相對(duì)簡(jiǎn)單,不再贅述)。
紀(jì)檢委是學(xué)校中負(fù)責(zé)考勤工作的組織,由于學(xué)生人數(shù)多,所以需要并行出多個(gè)流程活動(dòng)(并行活動(dòng)的最大個(gè)數(shù)由紀(jì)檢委中的可用核查執(zhí)行單位最大個(gè)數(shù)決定)以提高核查工作效率,并將結(jié)果匯總至輔導(dǎo)員。需要注意的是,在系統(tǒng)中,核查工作除了被動(dòng)方式(紀(jì)檢委檢查學(xué)生)外,還接受學(xué)生通過(guò)手機(jī)App主動(dòng)發(fā)送位置信息(屬于另一個(gè)工作流,不再詳述),以減輕紀(jì)檢委的人工核查工作。
學(xué)生處可視情況對(duì)檢查結(jié)果進(jìn)行復(fù)審并通知學(xué)生家長(zhǎng),也可以直接忽略某次核查結(jié)果。
1.3 數(shù)據(jù)通信
工作流系統(tǒng)和業(yè)務(wù)系統(tǒng)作為一個(gè)整體,在流程與業(yè)務(wù)之間、流程與流程之間均需進(jìn)行數(shù)據(jù)通信。系統(tǒng)數(shù)據(jù)通信模式如圖3所示。
⑴ 控制數(shù)據(jù):工作流系統(tǒng)管理的內(nèi)部控制數(shù)據(jù),這些數(shù)據(jù)包括了與流程實(shí)例和活動(dòng)實(shí)例相關(guān)的執(zhí)行數(shù)據(jù)和狀態(tài)數(shù)據(jù),例如流程實(shí)例的狀態(tài)和執(zhí)行時(shí)間、活動(dòng)實(shí)例執(zhí)行者、活動(dòng)執(zhí)行時(shí)間和狀態(tài)、緊急程度等。
⑵ 相關(guān)數(shù)據(jù):工作流系統(tǒng)使用相關(guān)數(shù)據(jù)來(lái)確定流程實(shí)例的流轉(zhuǎn)條件,并選擇下一個(gè)將執(zhí)行的活動(dòng),相關(guān)數(shù)據(jù)由業(yè)務(wù)系統(tǒng)訪問(wèn)并更新。例如請(qǐng)假流程中的“請(qǐng)假天數(shù)”,這個(gè)數(shù)據(jù)會(huì)決定該流程的審批路徑,不同的請(qǐng)假天數(shù),路徑也可能不同。
⑶ 應(yīng)用數(shù)據(jù):業(yè)務(wù)系統(tǒng)管理的業(yè)務(wù)數(shù)據(jù),有些業(yè)務(wù)應(yīng)用數(shù)據(jù)需要傳遞給工作流引擎,作為人工UI的列表顯示使用。
2 系統(tǒng)實(shí)現(xiàn)
“繽紛校園App”采用Spring MVC作為開(kāi)發(fā)框架,Activiti從最開(kāi)始設(shè)計(jì)時(shí)就考慮了與Spring的集成,從引擎的默認(rèn)配置文件(activiti.cfg.xml)可以看出,Activiti的配置文件解析及XML規(guī)范都是基于Spring擴(kuò)展的,這一特點(diǎn)對(duì)于將Activiti和“繽紛校園App”業(yè)務(wù)系統(tǒng)的集成可以說(shuō)是水到渠成。下面以請(qǐng)假業(yè)務(wù)為例,介紹工作流的實(shí)現(xiàn)。
2.1 部署流程
由于工作流系統(tǒng)中一般都存在多個(gè)流程,Activiti允許把一批資源打包部署,為開(kāi)發(fā)者提供了便利。例如,假設(shè)請(qǐng)假與晚點(diǎn)名工作流文件分別為“l(fā)eave.bpmn”和“night.bpmn”,可先使用zip格式將兩個(gè)文件壓縮為“bfxy.bar”文件(擴(kuò)展名bar為Activiti專(zhuān)用),然后將壓縮包放置在服務(wù)器的Java classpath中即可部署,部分Java代碼如下。
@Autowired //注入Activiti流程庫(kù)服務(wù)
private RepositoryService rs;
public void zipWorkflowDeploy() {
//讀取流程文件壓縮包
InputStream zipStream=getClass().
getClassLoader().getResourceAsStream("bfxy.bar");
//將流程部署到引擎中
DeploymentBuilder db=rs.createDeployment();
db.addZipInputStream(new ZipInputStream(zipStream));
db.deploy();
}
2.2 在Spring容器中啟動(dòng)請(qǐng)假流程的部分Java代碼
@Service
@Transactional //啟用事務(wù)管理器
public class LeaveWorkFlowService {
@Autowired //注入業(yè)務(wù)實(shí)體管理對(duì)象
LeaveManager leaveManager;
@Autowired //注入Activiti相關(guān)服務(wù)
private IdentityService identityService;
@Autowired
private RuntimeService runtimeService;
//保存請(qǐng)假實(shí)體并啟動(dòng)流程的方法
public ProcessInstance startWorkflow(Leave entity,
String userId, Map<String,Object>variables) {
//持久化請(qǐng)假實(shí)體
leaveManager.save(entity);
//實(shí)體保存后的ID作為流程業(yè)務(wù)key
String businessKey=entity.getId().toString();
//設(shè)置啟動(dòng)流程的人員ID
identityService.setAuthenticatedUserId(userId);
//啟動(dòng)流程并返回
return runtimeService.startProcessInstanceByKey
(businessKey);
}
}
2.3 異常處理
一個(gè)穩(wěn)定健壯的應(yīng)用系統(tǒng)離不開(kāi)良好的異常處理機(jī)制,程序語(yǔ)言只提供了最基本的異常處理機(jī)制,在實(shí)際開(kāi)發(fā)中,往往需要設(shè)計(jì)者給出更加易用、友好、統(tǒng)一的異??蚣茉O(shè)計(jì)。本文基于筆者前期研究成果,設(shè)計(jì)了一種基于事務(wù)內(nèi)存的工作流異常處理機(jī)制[4]。事務(wù)內(nèi)存是一種通過(guò)事務(wù)來(lái)實(shí)現(xiàn)并發(fā)控制的編程范式,事務(wù)的ACID特性由事務(wù)內(nèi)存引擎來(lái)保證,無(wú)需開(kāi)發(fā)者關(guān)心。與其他并發(fā)控制方法(例如鎖)相比,事務(wù)內(nèi)存具有安全、易用等優(yōu)點(diǎn),近年來(lái)在學(xué)術(shù)界受到了廣泛關(guān)注。
若在每個(gè)流程活動(dòng)執(zhí)行過(guò)程中,出現(xiàn)的異常使得整個(gè)活動(dòng)不能繼續(xù)執(zhí)行下去,此時(shí)即采取事務(wù)內(nèi)存的回滾操作,以保證活動(dòng)的所有行為(活動(dòng)本身的執(zhí)行、此活動(dòng)節(jié)點(diǎn)綁定的事件或服務(wù)的執(zhí)行、任務(wù)的分配等)都處于一個(gè)原子事務(wù)中;若活動(dòng)成功執(zhí)行,則需“提交”整個(gè)事務(wù)。
2.4 程序界面
“繽紛校園App”中學(xué)生請(qǐng)假與晚點(diǎn)名業(yè)務(wù)的手機(jī)客戶(hù)端界面如圖4所示。圖中,左側(cè)按鈕“就寢簽到”將創(chuàng)建一個(gè)學(xué)生主動(dòng)點(diǎn)名的工作流,并觸發(fā)相應(yīng)活動(dòng),該工作流應(yīng)由學(xué)生本人發(fā)起執(zhí)行,并只在紀(jì)檢委規(guī)定的點(diǎn)名時(shí)間內(nèi)有效;右側(cè)按鈕“提交”則將創(chuàng)建一個(gè)“請(qǐng)假”工作流,并觸發(fā)相應(yīng)活動(dòng)。
3 總結(jié)
本文設(shè)計(jì)了一套基于Activiti、面向“繽紛校園App”的工作流系統(tǒng)。并從業(yè)務(wù)梳理與優(yōu)化、流程建模、數(shù)據(jù)通信、流程部署與執(zhí)行和異常處理等角度對(duì)考勤工作流系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)的方法進(jìn)行了介紹。利用該系統(tǒng),將原本散亂甚至混亂的考勤業(yè)務(wù)梳理后制定成業(yè)務(wù)流程規(guī)范,進(jìn)而約束了考勤業(yè)務(wù)的規(guī)范化處理和運(yùn)轉(zhuǎn),保障了校園安全管理,提升了平安校園品質(zhì)。
目前系統(tǒng)部署成功后流程即可正常使用,但是對(duì)于復(fù)雜流程的遷移尚存在問(wèn)題,例如遷移后的流程圖顯示不準(zhǔn)確等。下一步的工作是深入完善考勤工作流框架的設(shè)計(jì),使該系統(tǒng)具有更廣泛的適用性和擴(kuò)展性。
參考文獻(xiàn)(References):
[1] 阿爾斯特.工作流管理:模型方法和系統(tǒng)[M].清華大學(xué)出版
社,2004.
[2] 閆洪磊.Activiti實(shí)戰(zhàn)[M].機(jī)械工業(yè)出版社,2015.
[3] 江東明,薛錦云.基于BPMN的Web服務(wù)并發(fā)交互機(jī)制[J].計(jì)
算機(jī)科學(xué),2014.8:50-54
[4] 林菲,孫勇.自穩(wěn)定的分布式事務(wù)內(nèi)存模型及算法[J].計(jì)算機(jī)
研究與發(fā)展,2014.51(9):2046-2057