張 健, 張云華
(浙江理工大學(xué) 信息學(xué)院,杭州 310018)
工作流技術(shù)起源于上個世紀(jì) 70 年代中期辦公自動化領(lǐng)域的研究工作,通過將工作分解定義良好的任務(wù)角色,按一定的規(guī)則和過程來執(zhí)行這些任務(wù)并對它們進(jìn)行監(jiān)控來提高辦事效率降低生產(chǎn)成本,提高企業(yè)生產(chǎn)經(jīng)營管理水平和企業(yè)競爭力[1]. Activiti是一個業(yè)務(wù)流程管理(BPM)和工作流系統(tǒng),適用于開發(fā)人員和系統(tǒng)管理員. 其核心是超快速,穩(wěn)定的BPMN2流程引擎. 它易于與Spring框架集成使用.
JAVA語言Spring框架是一個輕量級的控制反轉(zhuǎn)(IoC)和面向切面(AOP)的容器框架. 低侵入式設(shè)計,代碼污染極低,同時獨(dú)立于各種應(yīng)用服務(wù)器Spring的DI機(jī)制降低了業(yè)務(wù)對象替換的復(fù)雜性,提高了組件之間的解耦; Spring[2]的AOP支持允許將一些通用任務(wù)如安全、事務(wù)、日志等進(jìn)行集中式管理,從而提供了更好的復(fù)用; Spring的ORM和DAO提供了與第三方持久層框架的良好整合,并簡化了底層的數(shù)據(jù)庫訪問;Spring并不強(qiáng)制應(yīng)用完全依賴于Spring,開發(fā)者可自由選用Spring框架的部分或全部.
JAVA語言[3]Struts框架具有組件的模塊化,靈活性和重用性的優(yōu)點(diǎn),同時簡化了基于MVC的web應(yīng)用程序的開發(fā). Struts可以清晰地區(qū)分控制,事務(wù)邏輯和外觀,從而簡化了開發(fā)應(yīng)用程序的過程. Struts[4]提供的類使得開發(fā)工作更加簡單,這些類包括: 實(shí)現(xiàn)和執(zhí)行程序事務(wù)邏輯的類自定義的標(biāo)記庫使得創(chuàng)建和驗證HTML表單更加容易.
針對當(dāng)前企業(yè)環(huán)境微生物檢測中的問題,設(shè)計了一套基于工作流的企業(yè)環(huán)境微生物檢測平臺系統(tǒng).
在當(dāng)前企業(yè)環(huán)境微生物檢測平臺中,操作人員手工處理數(shù)據(jù)很繁瑣,工作量繁重,尤其在檢測過程中,數(shù)據(jù)流轉(zhuǎn)不合理,不規(guī)范的問題,致使客戶和操作人員都無法及時準(zhǔn)確地獲取檢測項目的進(jìn)度和結(jié)果,甚至可能會帶來嚴(yán)重的經(jīng)濟(jì)損失. 由此,設(shè)計開發(fā)一套邏輯嚴(yán)密,結(jié)構(gòu)穩(wěn)定的微生物監(jiān)測系統(tǒng),進(jìn)而可以提高工作效率和準(zhǔn)確率,帶來經(jīng)濟(jì)效益,減少不必要的經(jīng)濟(jì)損失.
系統(tǒng)整體業(yè)務(wù)流程如圖1所示.
圖1 系統(tǒng)業(yè)務(wù)流程圖
① 從客戶提交訂單后開始,同時產(chǎn)生一個唯一的流程編號,由工作流引擎將表單傳給銷售部門. ② 銷售部接受到訂單任務(wù)后,檢查訂單,發(fā)現(xiàn)有誤可以進(jìn)行修改,無法修改時可以打回給客戶,通知其重新修改訂單提交. 確認(rèn)無誤后,將訂單傳遞到綜合管理部門. ③ 綜合管理部門接收檢查訂單信息以后,發(fā)現(xiàn)問題同樣可以進(jìn)行打回,直至無誤后,將訂單樣品進(jìn)行接收,任務(wù)進(jìn)程進(jìn)入到實(shí)驗部. ④ 實(shí)驗部獲取到樣品,可以進(jìn)行對應(yīng)實(shí)驗并填寫實(shí)驗數(shù)據(jù). 實(shí)驗完成后,任務(wù)流程到達(dá)信息部. ⑤ 信息部上傳實(shí)驗匯總數(shù)據(jù),外部程序獲取到上傳實(shí)驗數(shù)據(jù)后,進(jìn)行驗證分析,得出結(jié)果. ⑥ 將結(jié)果返回到服務(wù)器數(shù)據(jù)中,系統(tǒng)程序自動檢測到結(jié)果數(shù)據(jù)后,根據(jù)結(jié)果生成實(shí)驗報告,信息部將所得實(shí)驗結(jié)果發(fā)送到綜合運(yùn)營部門. ⑦ 綜合運(yùn)營部門對實(shí)驗報告進(jìn)行審核,審核不通過,可以打回到信息部門,審核通過,可以將報告送到實(shí)驗室主任. ⑧ 實(shí)驗室主任對報告進(jìn)行最后確認(rèn),決定是否進(jìn)行簽發(fā)操作. ⑨ 簽發(fā)后,數(shù)據(jù)報告到銷售部門,銷售部將報告發(fā)放給客戶. ⑩ 最后客戶接收到報告后流程結(jié)束.
在系統(tǒng)整個流程中,任何部門都可以隨時查詢到訂單的進(jìn)度情況,信息能夠?qū)崿F(xiàn)共享同時每一個訂單都能在部門之間準(zhǔn)確的流轉(zhuǎn).
基于當(dāng)前紙質(zhì)化的微生物檢測流程,建立一個環(huán)境微生物檢測平臺勢必存在一些挑戰(zhàn)和困難,主要包括以下幾個方面.
1) 如何將項目流程進(jìn)度與部門聯(lián)系起來,并實(shí)時查看項目所處部門,獲取項目進(jìn)度;
2) 如何解決實(shí)驗步驟的控制和動態(tài)修改;
3) 報告審核過程中,每一個樣本都要生成報告,然后并上傳到服務(wù)器,由于每個樣本都存在大量數(shù)據(jù),生成報告和上傳需要都消耗大量時間. 如何優(yōu)化報告審核功能.
4) 如何控制不同用戶在不同地點(diǎn)登錄權(quán)限問題.
針對上述問題,主要的解決辦法如下.
1) 首先將所有的項目狀態(tài)規(guī)范定義并與相關(guān)部門進(jìn)行關(guān)聯(lián). 然后統(tǒng)計不同類型項目步驟總數(shù),項目每完成一步或者打回時,項目狀態(tài)立即發(fā)生改變,并計算當(dāng)前狀態(tài)處于項目哪一步驟,確定進(jìn)度值.
2) 首先需要設(shè)計好所有類型項目的實(shí)驗步驟頁面并對其進(jìn)行編碼,針對不同的項目的實(shí)驗步驟,可以進(jìn)行排序以及調(diào)整. 項目實(shí)驗進(jìn)行過程中,通過當(dāng)前項目類型和項目當(dāng)前實(shí)驗步驟,從而可以得到下一步實(shí)驗步驟編碼和對應(yīng)URL地址,通過URL地址就可定位到對應(yīng)實(shí)驗步驟頁面.
3) 報告審核時需要服務(wù)器中其他程序進(jìn)行審核判斷的,所以需要將一個項目中的所有樣本數(shù)據(jù)生成對應(yīng)的樣本報告并上傳到FTP服務(wù)器. 這需要消耗大量的時間,用戶在此過程中無法進(jìn)行其他操作,用戶的體驗很差. 本系統(tǒng)在原有的基礎(chǔ)上,設(shè)置一個循環(huán)定時器,定時的去獲取上傳進(jìn)度,直至完成后,銷毀定時器. 之前的流程在后臺自動進(jìn)行,從而給用戶很好操作體驗.
4) 由于數(shù)據(jù)安全性的問題,除了銷售部門成員和客戶. 其他部門人員只能在公司內(nèi)部進(jìn)行登錄. 而銷售部門人員由于業(yè)務(wù)的需求,不能經(jīng)常在公司內(nèi)部,此時需要設(shè)置權(quán)限認(rèn)證用戶進(jìn)行登錄. 公司內(nèi)網(wǎng)采用是用VPN (Virtual Private Network),即“虛擬專用網(wǎng)絡(luò)”,是虛擬出來的企業(yè)內(nèi)部專線.
為外網(wǎng)登錄用戶分配登錄權(quán)限. 當(dāng)用戶進(jìn)行登錄,首先判斷當(dāng)前網(wǎng)絡(luò)是公司內(nèi)網(wǎng)還是外部網(wǎng)絡(luò). 若為內(nèi)網(wǎng),賬號密碼無誤后,直接登錄. 而處于外網(wǎng),賬號密碼無誤后,判斷是否有登錄權(quán)限,若有權(quán)限,登錄成功. 若無權(quán)限,登錄失敗.
Eclipse是著名的跨平臺的自由集成開發(fā)環(huán)境(IDE),是一個開放源代碼的、基于Java的可擴(kuò)展開發(fā)平臺. 就其本身而言,它只是一個框架和一組服務(wù),用于通過插件組件構(gòu)建開發(fā)環(huán)境. 因此環(huán)境微生物監(jiān)測平臺的設(shè)計采用Eclipse開發(fā)環(huán)境.
MySQL數(shù)據(jù)庫簡稱MySQL,是一款由瑞典MySQL AB公司開發(fā)并且廣泛應(yīng)用在于小型企業(yè)或者組織中的小型數(shù)據(jù)管理系統(tǒng),MySQL數(shù)據(jù)庫因其體積小、速度快、總體擁有成本低等優(yōu)點(diǎn).
MySQL數(shù)據(jù)庫是基于Linux操作系統(tǒng)開發(fā)出來的數(shù)據(jù)庫,眾所周知Linux是開放源碼的操作系統(tǒng),所以MySQL數(shù)據(jù)庫也是開放源碼的免費(fèi)數(shù)據(jù)庫,這也是MySQL數(shù)據(jù)庫的優(yōu)點(diǎn). 基于以上的優(yōu)點(diǎn),本系統(tǒng)使用就是Mysql數(shù)據(jù)庫.
系統(tǒng)的設(shè)計采用的是MVC模式[5]. MVC是一種開發(fā)模式,是很強(qiáng)大,應(yīng)用很廣泛的. 是面向?qū)ο蟮幕A(chǔ)的常見開發(fā)模式.
MVC 定義: 即 Model-View-Controller,把一個應(yīng)用的輸入、處理、輸出流程按照Model、View、Controller的方式進(jìn)行分離,這樣一個應(yīng)用被分成3層,即模型層、視圖層、控制層.
系統(tǒng)中后臺設(shè)計采用分層結(jié)構(gòu)來實(shí)現(xiàn),主要分為3層: 行為(Action)層,業(yè)務(wù)邏輯層,數(shù)據(jù)交換層.
其中Action層使用的是Struts技術(shù). ActionServlet是Struts中核心的控制器,所有的用戶請求都必須通過ActionServlet的處理,ActionServlet通過配置文件把用戶的請求發(fā)送到對應(yīng)的Action控制器中. 所以,所有從前端向后臺發(fā)送的請求方法,都是在Action控制器中進(jìn)行編寫,而Action全部交由Spring去管理. 數(shù)據(jù)庫中獲取的數(shù)據(jù)要先回到Action層,通過HttpServletResponse將數(shù)據(jù)返回到前端. 由于篇幅原因,Struts配置文件部分代碼如下:
業(yè)務(wù)邏輯層和數(shù)據(jù)交換層使用的是Spring技術(shù),Action層的獲取的到前臺Ajax請求后,會先到業(yè)務(wù)邏輯層進(jìn)行對應(yīng)處理,同時事務(wù)管理是通過Spring中的AOP模塊來控制,它是將一個或多個操作放在同一個事務(wù)下,最終統(tǒng)一進(jìn)行提交或者回滾. 而數(shù)據(jù)交換層,即與數(shù)據(jù)庫的交互,是通過Spring DAO中的JdbcTemplate模塊來實(shí)現(xiàn). Spring的IOC特性可以很好的管理Action層,業(yè)務(wù)邏輯(Service)層,數(shù)據(jù)交互(Dao)層. 部分管理代碼如下:
整個系統(tǒng)基礎(chǔ)數(shù)據(jù)的傳輸交互流程如圖2所示.由于本系統(tǒng)的分層設(shè)計,使得各層內(nèi)部的能獨(dú)立變化,而整體不受影響.
圖2 數(shù)據(jù)傳輸流程圖
Activiti流程[6,7]引擎重點(diǎn)關(guān)注在系統(tǒng)開發(fā)的易用性和輕量性上. 每一項BPM[8]業(yè)務(wù)功能Activiti流程引擎都以服務(wù)的形式提供給開發(fā)人員. 通過使用這些服務(wù),開發(fā)人員能夠構(gòu)建出功能豐富、輕便且高效的BPM應(yīng)用程序. 圖3是Activiti引擎的系統(tǒng)服務(wù)結(jié)構(gòu)圖,該圖顯示了引擎提供的所有功能組件.
本系統(tǒng)要實(shí)現(xiàn)流程的控制,主要是使用了RuntimeService和TaskService. 每當(dāng)一個流程定義被啟動一次之后,都會生成一個相應(yīng)的流程對象實(shí)例.RuntimeService提供了啟動流程、查詢流程實(shí)例、設(shè)置獲取流程實(shí)例變量等功能. 此外它還提供了對流程部署,流程定義和流程實(shí)例的存取服務(wù).
在Activiti中業(yè)務(wù)流程定義中的每一個執(zhí)行節(jié)點(diǎn)被稱為一個Task,對流程中的數(shù)據(jù)存取,狀態(tài)變更等操作均需要在Task中完成. TaskService提供了對用戶Task相關(guān)的操作. 它提供了運(yùn)行時任務(wù)查詢、領(lǐng)取、完成、刪除以及變量設(shè)置等功能.
圖3 Activiti引擎的系統(tǒng)服務(wù)結(jié)構(gòu)圖
本系統(tǒng)的工作流引擎接口放在業(yè)務(wù)邏輯層來進(jìn)行處理,這樣帶來的好處是,系統(tǒng)在工作流中出現(xiàn)的異常時,Spring中事務(wù)管理都可以方便的進(jìn)行回滾,從而避免因為異常帶來的錯誤. 下面簡單介紹下任務(wù)流程開啟和領(lǐng)取并完成個人任務(wù)代碼:
客戶通過頁面點(diǎn)擊提交訂單按鈕,調(diào)用流程開啟代碼,啟動一次任務(wù)流程,企業(yè)操作人員通過依次領(lǐng)取個人任務(wù),完成任務(wù),直至任務(wù)流程最終完成,客戶獲得檢測報告.
圖4是根據(jù)系統(tǒng)業(yè)務(wù)流程設(shè)計的工作流流程圖.
圖4 企業(yè)微生物檢測系統(tǒng)工作流流程圖
未引入本系統(tǒng)時,由于整個流程是通過紙質(zhì)方式來傳輸?shù)?人工完成一個微生物檢測項目流程所需時間平均為10-15天,而當(dāng)通過引入本系統(tǒng)后,作者測試了50個項目,每個項目100個樣本,完成一個項目流程時間縮短為1-2天.
本文設(shè)計的一種基于工作流的企業(yè)環(huán)境微生物檢測系統(tǒng),將Spring和Struts框架與工作流很好的整合為一個整體,運(yùn)用在了企業(yè)環(huán)境微生物檢測中,使得信息能夠共享,極大方便了企業(yè)客戶項目進(jìn)度的查詢和獲取,同時也大大的提高了企業(yè)工作效率,減少了手工帶來的誤差和不便,方便了管理,提高了經(jīng)濟(jì)效益.
1范玉順. 工作流管理技術(shù)基礎(chǔ). 北京: 清華大學(xué)出版社,2001.
2王幸福. 基于Spring和Struts的輕量級J2EE通用框架的研究與應(yīng)用[碩士學(xué)位論文]. 武漢: 武漢理工大學(xué),2007.
3Eckel B. Thinking in Java. Upper Saddle River,NJ,USA:Prentice Hall,2006.
4林琴,譚駿珊. 基于Struts框架的Web報表展示的設(shè)計與實(shí)現(xiàn). 計算機(jī)系統(tǒng)應(yīng)用,2006,15(11): 25-28. [doi: 10.3969/j.issn.1003-3254.2006.11.007]
5易可可,陳志剛. 基于MVC模式的Web OA系統(tǒng)設(shè)計與研究. 計算機(jī)工程與應(yīng)用,2005,41(4): 112-115.
6唐華云,郭芬,桑英碩. 工作流管理平臺的設(shè)計及其在自助服務(wù)中的應(yīng)用. 計算機(jī)系統(tǒng)應(yīng)用,2016,25(7): 89-95. [doi: 10.15888/j.cnki.csa.005316]
7湯幸江,姚明海. 工作流系統(tǒng)在離散制造業(yè)的應(yīng)用. 計算機(jī)系統(tǒng)應(yīng)用,2010,19(8): 146-151.
8王鵬. 一種輕量級BPM引擎功能擴(kuò)展模型的研究[碩士學(xué)位論文]. 哈爾濱: 哈爾濱工程大學(xué),2015.