敖麗敏 苗吳瓊 劉斌
摘要:針對(duì)目前工作票管理系統(tǒng)存在的開發(fā)成本和系統(tǒng)性能不能得到保證等問(wèn)題,該文通過(guò)分析JBPM工作流引擎的系統(tǒng)架構(gòu)和使用方法,提出了一個(gè)將JBPM應(yīng)用到電氣工作票自動(dòng)化管理中的設(shè)計(jì)方案?;贘BPM的電氣工作票管理系統(tǒng),既提高了電力部門的辦公效率又降低了系統(tǒng)的開發(fā)費(fèi)用。
關(guān)鍵詞:工作票;工作流技術(shù);工作流引擎;JBPM
中圖分類號(hào):TP311文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1009-3044(2012)01-0064-06
Study and Design of Electrical Work-orders Management System Based on JBPM
AO Li-min1,MIAO Wu-qiong1, LIU Bin2
(1.Information Engineer Institute, Northeast Dianli University, Jilin 132012 , China; 2.Baishan Power Supply Company, Baishan 134300, China)
Abstract: In order to solve the problems of high development costs, low system performance and other issues in current electrical work-orders management system, this paper put forward a design of electrical work-orders automated management system based on the open-source workflow engine JBPM, by studying the system architecture and the use. Electrical work-orders management system based on JBPM, can not only enhance the office efficiency of the power department and decrease the system development costs.
Key words: electrical work-orders; workflow; workflow engine; JBPM
工作票制度是電力系統(tǒng)保障安全的重要把關(guān)之一,辦好工作票,是電力安全施工的第一步[1]。傳統(tǒng)的工作票管理模式以手工填票為主,并由專人在各地之間傳遞,不僅工作量大、效率低、周期長(zhǎng),而且容易出現(xiàn)疏漏,影響電網(wǎng)的安全運(yùn)行,已越來(lái)越不能滿足現(xiàn)代化電力系統(tǒng)的需要[2]。
目前多數(shù)電氣工作票管理系統(tǒng),只是實(shí)現(xiàn)計(jì)算機(jī)輔助開票的功能,在一定程度上減少了人員工作量,降低筆誤[3,4];參考部分電廠的工作票管理系統(tǒng),雖然進(jìn)一步使用基于流程化處理的系統(tǒng)開發(fā)方法,但工作票流程仍采用硬編碼的方式固化在系統(tǒng)之中,缺乏適應(yīng)流程變化的靈活性,并不適合企業(yè)級(jí)應(yīng)用[5]。
工作流是一類能夠完全或者部分自動(dòng)執(zhí)行的業(yè)務(wù)過(guò)程,它可以按照為實(shí)現(xiàn)完整業(yè)務(wù)目標(biāo)而定義的一系列過(guò)程規(guī)則,在不同的參與者之間傳遞文檔、信息或任務(wù)并執(zhí)行[6,7]。引入工作流技術(shù),能對(duì)各種工作票的流程進(jìn)行靈活的設(shè)置和管理,實(shí)現(xiàn)工作票的靈活流轉(zhuǎn)。JBoss jBPM提供了一個(gè)完整的工作流管理系統(tǒng)實(shí)現(xiàn),簡(jiǎn)單靈活,采用獨(dú)立的流程定義語(yǔ)言,能夠方便地與企業(yè)應(yīng)用程序集成,為設(shè)計(jì)和開發(fā)工作流和業(yè)務(wù)流程管理系統(tǒng)提供了一個(gè)先進(jìn)的平臺(tái)。
基于JBPM所設(shè)計(jì)的電氣工作票管理系統(tǒng),有效避免了因工作票誤填而可能發(fā)生的事故,靈活適應(yīng)工作流程的變化,進(jìn)一步提高人員工作效率,降低開發(fā)成本,使系統(tǒng)在可重用性、可維護(hù)性和可擴(kuò)展性等方面得以改善。
1 JBPM簡(jiǎn)介
1.1 JBPM系統(tǒng)架構(gòu)
JBPM(Java Business Process Management),是一個(gè)基于J2EE的輕量級(jí)工作流管理系統(tǒng)[8]。JBPM主要包括以下組件:基于Eclipse的流程設(shè)計(jì)器GPD(Graphical Designed)、用于流程管理和監(jiān)控的Web控制臺(tái)JBPM Web Console以及JBPM核心組件JPDL(JBoss JBPM Process Definition Language)核心庫(kù)。圖1展示了JBPM組件庫(kù)結(jié)構(gòu)。
JPDL是建立在JBPM框架之上的一種流程定義語(yǔ)言,其語(yǔ)法結(jié)構(gòu)包括結(jié)點(diǎn)、變遷和動(dòng)作等。JBPM結(jié)合應(yīng)用了狀態(tài)機(jī)、UML2.0活動(dòng)圖和Petri網(wǎng)算法三方面的知識(shí),利用了狀態(tài)機(jī)中用于控制工作流狀態(tài)的變遷,把UML2.0中的動(dòng)作改名為狀態(tài)(State),同時(shí)引進(jìn)了轉(zhuǎn)移(Transition)的概念,借鑒了Petri網(wǎng)算法的Token思想,從而能夠迅速而準(zhǔn)確的定位當(dāng)前流程狀態(tài),同時(shí)又?jǐn)U充了Token的功能,使它具有維護(hù)父子關(guān)系的能力,以解決流程并
行執(zhí)行的情況[9]。
1.2 JBPM使用方法
使用JBPM開發(fā)工作流管理系統(tǒng)一般包括以下幾個(gè)步驟:
1)配置JBPM數(shù)據(jù)源。
JBPM本身使用Hibernate管理數(shù)據(jù),理論上來(lái)說(shuō),任何Hibernate支持的數(shù)據(jù)庫(kù)都可以用于系統(tǒng)的開發(fā)。數(shù)據(jù)源配置有兩種方法,一種是使用JBPM開發(fā)包jbpm-jpdl-3.2.3db目錄下自帶的對(duì)應(yīng)各種類型數(shù)據(jù)庫(kù)的SQL腳本,一種是通過(guò)配置hibernate.cfg.xml文件逆向創(chuàng)建數(shù)據(jù)庫(kù)。
2)安裝JBPM流程設(shè)計(jì)工具GPD,在Eclipse中作相應(yīng)配置。
3)設(shè)計(jì)業(yè)務(wù)流程。
GPD安裝配置完成后即可進(jìn)行流程定義??梢暬M瓿珊?,即可得到流程的格式化輸出,即流程定義文件processdefinition. xml。同樣,也可以直接在該文件中進(jìn)行流程定義。
4)部署并運(yùn)行業(yè)務(wù)流程。
流程定義完成后需要部署流程定義到數(shù)據(jù)庫(kù),才可以使用JBPM操作流程定義和流程實(shí)例。
2基于JBPM的電氣工作票管理系統(tǒng)的設(shè)計(jì)
設(shè)計(jì)本系統(tǒng)首先要在了解實(shí)際工作票流轉(zhuǎn)過(guò)程的基礎(chǔ)上使用JPDL流程設(shè)計(jì)語(yǔ)言進(jìn)行流程定義,然后為任務(wù)指定參與者,擴(kuò)展流程流轉(zhuǎn)邏輯,開發(fā)業(yè)務(wù)流程執(zhí)行相關(guān)細(xì)節(jié),最后將流程部署到系統(tǒng)客戶端操作頁(yè)面,用戶即可對(duì)流程定義進(jìn)行相關(guān)操作,如新建流程實(shí)例,完成任務(wù)實(shí)例等。
2.1工作票流程分析
電氣工作票主要包括變電站第一種工作票、變電站第二種工作票、線路第一種工作票和線路第二種工作票,功能包括填票、簽發(fā)、收票、許可、確認(rèn)、終結(jié)和廢票等。以變電一種工作票為例說(shuō)明工作票的執(zhí)行過(guò)程:首先由工作負(fù)責(zé)人填寫新建工作票,然后由工作票簽發(fā)人決定是否簽發(fā),當(dāng)工作票簽發(fā)人完成簽票后由值班負(fù)責(zé)人收票審核,工作負(fù)責(zé)人確認(rèn)收票后交予工作許可人回應(yīng),再由值班負(fù)責(zé)人確認(rèn)回應(yīng)(值班負(fù)責(zé)人可以隨時(shí)查看回應(yīng)情況,值班負(fù)責(zé)人確認(rèn)回應(yīng)后工作許可人不可以再回應(yīng)),工作開始時(shí)由工作負(fù)責(zé)人和工作許可人許可工作開始,工作票簽發(fā)人可以更改工作負(fù)責(zé)人,工作負(fù)責(zé)人可以延期,工作終結(jié)時(shí)由工作負(fù)責(zé)人和工作許可人確認(rèn)工作終結(jié),最后由工作許可人終結(jié)工作票。
2.2工作票流程定義
結(jié)合上節(jié)流程分析,變電一種工作票流程定義如圖2所示。
2.3工作票流程定義說(shuō)明
由圖2可以看出,流程定義就是由一系列的結(jié)點(diǎn)和變遷組成,這些結(jié)點(diǎn)主要包括開始和結(jié)束結(jié)點(diǎn)(Start State、End State)、任務(wù)結(jié)點(diǎn)(Task Node)、動(dòng)作結(jié)點(diǎn)(Node)、決策結(jié)點(diǎn)(Decision)、分支結(jié)點(diǎn)(Fork)和匯聚結(jié)點(diǎn)(Join)。其中,任務(wù)結(jié)點(diǎn)包含一個(gè)或多個(gè)任務(wù);決策結(jié)點(diǎn)用于選擇流程的執(zhí)行路徑;分支匯聚結(jié)點(diǎn)解決并發(fā)執(zhí)行問(wèn)題;動(dòng)作結(jié)點(diǎn)含有計(jì)算機(jī)自動(dòng)執(zhí)行的任務(wù);開始和結(jié)束結(jié)點(diǎn)分別表示流程的開始和結(jié)束。
在發(fā)電一種工作票流程定義中主要完成的工作有:
1)給角色分配任務(wù)。
以本系統(tǒng)中工作票簽發(fā)人簽票為例。工作負(fù)責(zé)人填票完成后要將工作票提交給本部門工作票簽發(fā)人簽票。也就是說(shuō),“簽票”這個(gè)任務(wù)只有擁有“工作票簽發(fā)人”這個(gè)角色的用戶才可以擁有。在本系統(tǒng)流程定義中由“填票”任務(wù)結(jié)點(diǎn)來(lái)完成填票的工作,由“簽票”任務(wù)結(jié)點(diǎn)來(lái)完成簽票的工作。在流程實(shí)例運(yùn)行時(shí),任務(wù)結(jié)點(diǎn)創(chuàng)建任務(wù)實(shí)例并將任務(wù)實(shí)例分配給特定的參與者。例如:
當(dāng)流程實(shí)例流轉(zhuǎn)到“簽票”這個(gè)任務(wù)結(jié)點(diǎn)時(shí),JBPM創(chuàng)建任務(wù)實(shí)例后會(huì)首先調(diào)用QianPAssignmentHandler類來(lái)進(jìn)行任務(wù)分配。QianPAssignmentHandler類實(shí)現(xiàn)了JBPM工作流引擎的任務(wù)分配處理器接口AssignmentHandler,該任務(wù)分配處理器聲明了一個(gè)as? sign(Assignable assignable, ExecutionContext executionContext)方法用于指定當(dāng)前任務(wù)的參與者。參數(shù)assignable是任務(wù)實(shí)例的引用,executionContext是流程實(shí)例上下文,調(diào)用assignable.setActorId(String userid)即可將任務(wù)分配給userid代表的用戶,或者調(diào)用assign? able.setPooledActors(pooledActors)將任務(wù)分配給一組用戶。
2)給多個(gè)參與者分配任務(wù),且任務(wù)全部完成后流程才可以進(jìn)行運(yùn)轉(zhuǎn)。
工作需通過(guò)工作負(fù)責(zé)人和工作許可人的許可才可以開始,如果其中一個(gè)人不許可工作開始,則這項(xiàng)工作不能往下進(jìn)行。工作終結(jié)也是如此。JBPM提供的Generalized AND-Join模式實(shí)現(xiàn)了該功能。Fork結(jié)點(diǎn)和Join結(jié)點(diǎn)提供了該模式的語(yǔ)義支持。例如:
圖2發(fā)電一種工作票流程定義
name="to工作許可人許可">
流程執(zhí)行到Fork結(jié)點(diǎn)后分割成“工作負(fù)責(zé)人許可”和“工作許可人許可”兩條相互獨(dú)立的并發(fā)執(zhí)行的子路徑,當(dāng)這些子路徑全部完成到Join結(jié)點(diǎn)匯合后工作流引擎才可以繼續(xù)執(zhí)行流程,如果還有任何一個(gè)子路徑?jīng)]有完成,則Join結(jié)點(diǎn)必須等待。
給多個(gè)參與者分配任務(wù),且其中一個(gè)分支完成后,流程繼續(xù)向下流轉(zhuǎn)。
工作許可人回應(yīng)工作票的同時(shí),值班負(fù)責(zé)人可以隨時(shí)確認(rèn)回應(yīng),值班負(fù)責(zé)人確認(rèn)回應(yīng)后工作許可人不可以再進(jìn)行回應(yīng),也就是說(shuō)此時(shí)流程必須繼續(xù)向下運(yùn)轉(zhuǎn)。JPDL語(yǔ)言在JBPM3中沒(méi)有提供對(duì)此種模式的支持,需要流程實(shí)例化后代碼實(shí)現(xiàn)。本系統(tǒng)的解決方法是給一個(gè)分支綁定ActionHandler,在離開結(jié)點(diǎn)事件中,結(jié)束其他分支的任務(wù)。如: