需求:
審批的每個節點可以有多個審覈人,有一個失敗則視爲審批失敗
審批的過程可以自由前進後退:
當發文到達某個節點失敗後,會自動被打回到上一個節點.
上一個節點可以選擇修改後繼續提交,或者再打回到上一個節點.
整個審批可以看成是三種狀態:
來自兩種情況:1.發起人剛起草審覈.2.審覈被第一個審覈人打回
此狀態下發起人可自由修改發文
2.審批中:
不管是正常審批,審批失敗往回打,還是修改後重新提交.都放入這一個狀態作爲發起人:只可查看當前審批狀態.
作爲審批者:只可查看審批流程節點輪到自己的發文
3.審批完成:
一.如何確定一套流程
這裏使用2個表,一對多的關係,用來表示一套流程
舉例:
現在要確定一套流程,他的名字叫做 "前期部審批流程"
這套流程需要走4道手續,其中有第3道手續需要2個部門同時通過纔算是通過.
這個時候需要往定製流程表裏插入一條數據
往流程表插入5條數據
*
其中的deptId是指由哪個部門來審批,node表示它在流程中是第幾個輪到的,node相同的就說明是由多個人共同決定的
二.如何發起一套流程
上面講的,確定一套流程,那隻不過是一個模版,一個流程確定了,以後就可以根據這個模版來,
至於實際的某個發文用到了流程,那該怎麼辦?
新建一個如下的流程表
然後把對應的流程的一個個節點全部搬到審批流程表中來.
需要幾個部門來審覈,就往審批流程表裏插入幾條數據.
舉例:
還是上面的情景,現在要發起一套上面的流程,數據庫情況如下:
上表中的flowId是完全冗餘沒用了,,就當沒這個把
可以看到把node deptId都拷過來了,另外還加入了checkCommon,用於記錄每個節點的審批意見;checkResult,用於記錄每個節點的審批結果.
這裏還有一個baseProjectId,用來標記這是哪個項目對應的流程,後面再說.
現在的狀態是審批到了第3個節點.
前面1.2都是同意的.3中的其中一個人是同意的,3中的另一個人是不同意的
所以說現在的狀態應該是打回到2,讓2決定是繼續回滾還是修改後繼續提交.
但是如果2修改後提交了,表中的狀態還是:
1.2同意,3同意不同意各一個....這就出問題了
怎麼確定現在的狀態是3剛打回去,還是2修改後重新提交的呢???
下回分解.....