1. 程式人生 > >一個最符合中國國情的工作流設計參考(包括PHP實現)

一個最符合中國國情的工作流設計參考(包括PHP實現)

工作流很少有讓人滿意的,即便是國內用的比較多的jbpm,用起來也會覺得很便扭。再加上PHP中沒有什麼好用的工作流,於是乾脆自己設計一個,設計的原則如下:

1 根據80/20原則,只使用wfmc模型中最符合自身應用的20%功能

2 充分吸收國內使用jbpm開發BOSS中遇到的問題,工作流引擎只負責引數的收集和流程的流轉,具體和業務的控制,交給每個流程定製的控制類去實現。

3 表單採用簡單的html+控制標籤的方法實現

4 許可權和模板引擎,以及其它輔助函式直接使用辦公系統自帶的框架

5 充分利用PHP語言的特點,流程設計是基於資料庫的,程式上使用OO設計,但採用重物件的方法

6 不把視覺化設計流程的工作交給最終客戶,而且由設計時完成,因此不考慮流程版本更新的問題

一、工作流資料表設計

tbl_workflow_defination:工作流定義表

defination_id

流程id

defination_name

流程名稱

defination_handler

流程處理輔助檔案,每個工作流一個檔案

自定義處理檔案,及其物件。例如workflow-proporsal-handler.php,其中定義物件proposal

tbl_workflow_node:流程結點步驟表

node_id

結點id

defination_id

流程id

node_index

結點序號

結點的step

node_name

結點名稱

node_type

結點型別

1人為決策,2自動處理(直接執行execute_function)3等待外部響應(例如外部WS觸發),4分支,5彙總 6結束結點(此結點執行時候自動終止程序)

init_function

流程初始函式

run_function

流程執行函式

save_function

流程儲存函式

transit_function

流程流轉函式

prev_node_index

前結點序號

例如1。開始結點沒有

執行前,通過此來校驗一下流程

next_node_index

後結點序號

例如[同意]3,[不同意]4。尾結點或要結束的結點沒有,若沒有,直接呼叫end

executor

執行角色,組,人

role[1,2] group[1,2] user[1,2],為空由執行時決定

execute_type

執行型別

0需所有人執行 1只需一人執行

remind

提醒

0不提醒 1郵件 2簡訊 3郵件和簡訊

field

可編輯的欄位

name,content

max_day

最長時間()

tbl_workflow_process :流程執行程序表

process_id

程序id

defination_id

流程id

process_desc

程序描述

顯示在我的工作臺中

context

上下文

存放上下文變數,例如業務表的id

current_node_index

當前結點序號

start_time

流程啟動時間

如遇分支、匯合顯示為:

1=》3,4=》3,5=》6

finish_time

流程完成時間

state

狀態

1執行 2結束

start_user

發起人

發起人,用於顯示自己的流程

tbl_workflow_thread :流程執行執行緒表

thread_id

執行緒id

process_id

程序id

process_desc

程序描述

node_id

結點id

node_name

結點名稱

executor