天天看點

也談基于Web的含工作流項目的一般開發流程

該項目包含的通用子產品代碼等我有時間一并剝離貢獻出來(基于WebSocket的通知引擎,工作流整合子產品,自定義表單,基于RBAC權限設計),最近太忙了,Web項目有一段時間沒碰,有點生疏的感覺,主要在忙GQT項目,一套基于桌面開發的架構,寫代碼寫的有點手酸的感覺。

基于Web的含工作流的項目看起來并不如想象的那麼簡單,主要需求:

靈活定制工作流,并跟蹤流程進度;

每個Order含有曆史軌迹記錄,可在曆史中檢視;

工作流的Action靈活,認領任務不一定非要先提取表單,因為很多節點都隻有幾個動作,直接按鈕操作即可;

待辦事宜清單在不重新整理頁面情況下也能變動;

項目要求:

操作簡單高效;

權限細節到按鈕級别;

并發數少,不超過3000個線上使用者;

主要可能使用到技術:

工作流引擎,我這裡選用Activiti5,很靈活好用;

權限使用Spring Security,基于标簽式管理權限很友善;

通知引擎使用WebSocket,基于Flash實時通信,基于socket.io;

權限粒度基于經典的RBAC;

總體架構Spring MVC+Mybatis;

實作的WebSocket的總體思路:

WebSocket Server獨立于Web項目,Web Server與WebSocket Server之間的區域網路通信基于簡單的Socket通信,這樣這個元件可以完全解耦和通用;

當Web項目要Push消息到Client時,通過Web Server的Socket Client向WebSocket Server的Socker Server發送消息,然後WebSocket Server收到消息後解碼,廣播到所有浏覽器;

我們實作的事件通知非常簡單,設定全局變量并讓浏覽器偵聽:

在需要偵聽WebSocket接受Web Server推送消息的地方加上一個函數即可:

這樣的結構要擴充推送服務很簡單,比如按頻道推送等,都可以很容易的擴充。

再看看看工作流,我們實作了activiti通用的申請送出任務流程和自定義表單功能,提取跟蹤流程圖功能等,這樣你要設計一個新流程也變得非常簡單,隻需要在eclipse裡劃上工作流圖,在背景釋出,然後通過SpringMVC的RestAPI啟動執行個體流程,申領完成任務等,如下圖:

流程走到了分支的兩個節點上,這樣對後續新增的工作流提供了極大的周遊。

最後說說Spring Security,基于RBAC的權限體系搭建好後(可以用在任何管理系統中),要在頁面中通路一個資源,首先判斷一下是否有權限,如下HTML:

前台由于項目比較小,沒有用到js的MVC架構,如backbone等,這裡就不再記錄了。