張 健, 張云華
(浙江理工大學 信息學院,杭州 310018)
工作流技術起源于上個世紀 70 年代中期辦公自動化領域的研究工作,通過將工作分解定義良好的任務角色,按一定的規則和過程來執行這些任務并對它們進行監控來提高辦事效率降低生產成本,提高企業生產經營管理水平和企業競爭力[1]. Activiti是一個業務流程管理(BPM)和工作流系統,適用于開發人員和系統管理員. 其核心是超快速,穩定的BPMN2流程引擎. 它易于與Spring框架集成使用.
JAVA語言Spring框架是一個輕量級的控制反轉(IoC)和面向切面(AOP)的容器框架. 低侵入式設計,代碼污染極低,同時獨立于各種應用服務器Spring的DI機制降低了業務對象替換的復雜性,提高了組件之間的解耦; Spring[2]的AOP支持允許將一些通用任務如安全、事務、日志等進行集中式管理,從而提供了更好的復用; Spring的ORM和DAO提供了與第三方持久層框架的良好整合,并簡化了底層的數據庫訪問;Spring并不強制應用完全依賴于Spring,開發者可自由選用Spring框架的部分或全部.
JAVA語言[3]Struts框架具有組件的模塊化,靈活性和重用性的優點,同時簡化了基于MVC的web應用程序的開發. Struts可以清晰地區分控制,事務邏輯和外觀,從而簡化了開發應用程序的過程. Struts[4]提供的類使得開發工作更加簡單,這些類包括: 實現和執行程序事務邏輯的類自定義的標記庫使得創建和驗證HTML表單更加容易.
針對當前企業環境微生物檢測中的問題,設計了一套基于工作流的企業環境微生物檢測平臺系統.
在當前企業環境微生物檢測平臺中,操作人員手工處理數據很繁瑣,工作量繁重,尤其在檢測過程中,數據流轉不合理,不規范的問題,致使客戶和操作人員都無法及時準確地獲取檢測項目的進度和結果,甚至可能會帶來嚴重的經濟損失. 由此,設計開發一套邏輯嚴密,結構穩定的微生物監測系統,進而可以提高工作效率和準確率,帶來經濟效益,減少不必要的經濟損失.
系統整體業務流程如圖1所示.

圖1 系統業務流程圖
① 從客戶提交訂單后開始,同時產生一個唯一的流程編號,由工作流引擎將表單傳給銷售部門. ② 銷售部接受到訂單任務后,檢查訂單,發現有誤可以進行修改,無法修改時可以打回給客戶,通知其重新修改訂單提交. 確認無誤后,將訂單傳遞到綜合管理部門. ③ 綜合管理部門接收檢查訂單信息以后,發現問題同樣可以進行打回,直至無誤后,將訂單樣品進行接收,任務進程進入到實驗部. ④ 實驗部獲取到樣品,可以進行對應實驗并填寫實驗數據. 實驗完成后,任務流程到達信息部. ⑤ 信息部上傳實驗匯總數據,外部程序獲取到上傳實驗數據后,進行驗證分析,得出結果. ⑥ 將結果返回到服務器數據中,系統程序自動檢測到結果數據后,根據結果生成實驗報告,信息部將所得實驗結果發送到綜合運營部門. ⑦ 綜合運營部門對實驗報告進行審核,審核不通過,可以打回到信息部門,審核通過,可以將報告送到實驗室主任. ⑧ 實驗室主任對報告進行最后確認,決定是否進行簽發操作. ⑨ 簽發后,數據報告到銷售部門,銷售部將報告發放給客戶. ⑩ 最后客戶接收到報告后流程結束.
在系統整個流程中,任何部門都可以隨時查詢到訂單的進度情況,信息能夠實現共享同時每一個訂單都能在部門之間準確的流轉.
基于當前紙質化的微生物檢測流程,建立一個環境微生物檢測平臺勢必存在一些挑戰和困難,主要包括以下幾個方面.
1) 如何將項目流程進度與部門聯系起來,并實時查看項目所處部門,獲取項目進度;
2) 如何解決實驗步驟的控制和動態修改;
3) 報告審核過程中,每一個樣本都要生成報告,然后并上傳到服務器,由于每個樣本都存在大量數據,生成報告和上傳需要都消耗大量時間. 如何優化報告審核功能.
4) 如何控制不同用戶在不同地點登錄權限問題.
針對上述問題,主要的解決辦法如下.
1) 首先將所有的項目狀態規范定義并與相關部門進行關聯. 然后統計不同類型項目步驟總數,項目每完成一步或者打回時,項目狀態立即發生改變,并計算當前狀態處于項目哪一步驟,確定進度值.
2) 首先需要設計好所有類型項目的實驗步驟頁面并對其進行編碼,針對不同的項目的實驗步驟,可以進行排序以及調整. 項目實驗進行過程中,通過當前項目類型和項目當前實驗步驟,從而可以得到下一步實驗步驟編碼和對應URL地址,通過URL地址就可定位到對應實驗步驟頁面.
3) 報告審核時需要服務器中其他程序進行審核判斷的,所以需要將一個項目中的所有樣本數據生成對應的樣本報告并上傳到FTP服務器. 這需要消耗大量的時間,用戶在此過程中無法進行其他操作,用戶的體驗很差. 本系統在原有的基礎上,設置一個循環定時器,定時的去獲取上傳進度,直至完成后,銷毀定時器. 之前的流程在后臺自動進行,從而給用戶很好操作體驗.
4) 由于數據安全性的問題,除了銷售部門成員和客戶. 其他部門人員只能在公司內部進行登錄. 而銷售部門人員由于業務的需求,不能經常在公司內部,此時需要設置權限認證用戶進行登錄. 公司內網采用是用VPN (Virtual Private Network),即“虛擬專用網絡”,是虛擬出來的企業內部專線.
為外網登錄用戶分配登錄權限. 當用戶進行登錄,首先判斷當前網絡是公司內網還是外部網絡. 若為內網,賬號密碼無誤后,直接登錄. 而處于外網,賬號密碼無誤后,判斷是否有登錄權限,若有權限,登錄成功. 若無權限,登錄失敗.
Eclipse是著名的跨平臺的自由集成開發環境(IDE),是一個開放源代碼的、基于Java的可擴展開發平臺. 就其本身而言,它只是一個框架和一組服務,用于通過插件組件構建開發環境. 因此環境微生物監測平臺的設計采用Eclipse開發環境.
MySQL數據庫簡稱MySQL,是一款由瑞典MySQL AB公司開發并且廣泛應用在于小型企業或者組織中的小型數據管理系統,MySQL數據庫因其體積小、速度快、總體擁有成本低等優點.
MySQL數據庫是基于Linux操作系統開發出來的數據庫,眾所周知Linux是開放源碼的操作系統,所以MySQL數據庫也是開放源碼的免費數據庫,這也是MySQL數據庫的優點. 基于以上的優點,本系統使用就是Mysql數據庫.
系統的設計采用的是MVC模式[5]. MVC是一種開發模式,是很強大,應用很廣泛的. 是面向對象的基礎的常見開發模式.
MVC 定義: 即 Model-View-Controller,把一個應用的輸入、處理、輸出流程按照Model、View、Controller的方式進行分離,這樣一個應用被分成3層,即模型層、視圖層、控制層.
系統中后臺設計采用分層結構來實現,主要分為3層: 行為(Action)層,業務邏輯層,數據交換層.
其中Action層使用的是Struts技術. ActionServlet是Struts中核心的控制器,所有的用戶請求都必須通過ActionServlet的處理,ActionServlet通過配置文件把用戶的請求發送到對應的Action控制器中. 所以,所有從前端向后臺發送的請求方法,都是在Action控制器中進行編寫,而Action全部交由Spring去管理. 數據庫中獲取的數據要先回到Action層,通過HttpServletResponse將數據返回到前端. 由于篇幅原因,Struts配置文件部分代碼如下:


業務邏輯層和數據交換層使用的是Spring技術,Action層的獲取的到前臺Ajax請求后,會先到業務邏輯層進行對應處理,同時事務管理是通過Spring中的AOP模塊來控制,它是將一個或多個操作放在同一個事務下,最終統一進行提交或者回滾. 而數據交換層,即與數據庫的交互,是通過Spring DAO中的JdbcTemplate模塊來實現. Spring的IOC特性可以很好的管理Action層,業務邏輯(Service)層,數據交互(Dao)層. 部分管理代碼如下:

整個系統基礎數據的傳輸交互流程如圖2所示.由于本系統的分層設計,使得各層內部的能獨立變化,而整體不受影響.

圖2 數據傳輸流程圖
Activiti流程[6,7]引擎重點關注在系統開發的易用性和輕量性上. 每一項BPM[8]業務功能Activiti流程引擎都以服務的形式提供給開發人員. 通過使用這些服務,開發人員能夠構建出功能豐富、輕便且高效的BPM應用程序. 圖3是Activiti引擎的系統服務結構圖,該圖顯示了引擎提供的所有功能組件.
本系統要實現流程的控制,主要是使用了RuntimeService和TaskService. 每當一個流程定義被啟動一次之后,都會生成一個相應的流程對象實例.RuntimeService提供了啟動流程、查詢流程實例、設置獲取流程實例變量等功能. 此外它還提供了對流程部署,流程定義和流程實例的存取服務.
在Activiti中業務流程定義中的每一個執行節點被稱為一個Task,對流程中的數據存取,狀態變更等操作均需要在Task中完成. TaskService提供了對用戶Task相關的操作. 它提供了運行時任務查詢、領取、完成、刪除以及變量設置等功能.

圖3 Activiti引擎的系統服務結構圖
本系統的工作流引擎接口放在業務邏輯層來進行處理,這樣帶來的好處是,系統在工作流中出現的異常時,Spring中事務管理都可以方便的進行回滾,從而避免因為異常帶來的錯誤. 下面簡單介紹下任務流程開啟和領取并完成個人任務代碼:


客戶通過頁面點擊提交訂單按鈕,調用流程開啟代碼,啟動一次任務流程,企業操作人員通過依次領取個人任務,完成任務,直至任務流程最終完成,客戶獲得檢測報告.
圖4是根據系統業務流程設計的工作流流程圖.

圖4 企業微生物檢測系統工作流流程圖
未引入本系統時,由于整個流程是通過紙質方式來傳輸的,人工完成一個微生物檢測項目流程所需時間平均為10-15天,而當通過引入本系統后,作者測試了50個項目,每個項目100個樣本,完成一個項目流程時間縮短為1-2天.
本文設計的一種基于工作流的企業環境微生物檢測系統,將Spring和Struts框架與工作流很好的整合為一個整體,運用在了企業環境微生物檢測中,使得信息能夠共享,極大方便了企業客戶項目進度的查詢和獲取,同時也大大的提高了企業工作效率,減少了手工帶來的誤差和不便,方便了管理,提高了經濟效益.
1范玉順. 工作流管理技術基礎. 北京: 清華大學出版社,2001.
2王幸福. 基于Spring和Struts的輕量級J2EE通用框架的研究與應用[碩士學位論文]. 武漢: 武漢理工大學,2007.
3Eckel B. Thinking in Java. Upper Saddle River,NJ,USA:Prentice Hall,2006.
4林琴,譚駿珊. 基于Struts框架的Web報表展示的設計與實現. 計算機系統應用,2006,15(11): 25-28. [doi: 10.3969/j.issn.1003-3254.2006.11.007]
5易可可,陳志剛. 基于MVC模式的Web OA系統設計與研究. 計算機工程與應用,2005,41(4): 112-115.
6唐華云,郭芬,桑英碩. 工作流管理平臺的設計及其在自助服務中的應用. 計算機系統應用,2016,25(7): 89-95. [doi: 10.15888/j.cnki.csa.005316]
7湯幸江,姚明海. 工作流系統在離散制造業的應用. 計算機系統應用,2010,19(8): 146-151.
8王鵬. 一種輕量級BPM引擎功能擴展模型的研究[碩士學位論文]. 哈爾濱: 哈爾濱工程大學,2015.