這是我的項目中使用的一套關於工作流和審批流的配置,算是比較簡單的,這里只寫其中比較核心的思路,算是對之前工作的一個技術總結吧。
以下是數據庫設計;后面再跟據實例分析每個表的作用。
首先是流程配置表:
如果需要用到一個工作流就要先配置,test_workflow_configuration就需要存入該流程的基本信息
test_workflow_details需要存入該流程的工作流配置,需要幾級審核等信息
然后是流程記錄表:
這個表存儲的是流程記錄,每個流程送審之后都會存在這條記錄中,一級審核完在插入下一級記錄
最后是申請單表:
這個表存儲的是申請單信息
ps:這里有一些關聯設計的表被我省略了,只說最核心的思路,下面舉個栗子
現在有一個工單申請需求
首先這個申請單記錄記錄應該存儲在test_order中,包括單據號,創建日期,創建人等信息(相關業務明細另外建表)
然后配置審核流程
test_workflow_configuration中應該存入這個流程的基本信息
test_workflow_details中設置工作流配置(附圖1)
接下來流程開始
第一步:該工單填寫完畢,送審
當點擊【送審】按鈕時后台需要以下操作:
1.將test_order中的status改為1送審狀態
2.流程記錄表test_workflow_records插入工作流第一條記錄(主管審核)
test_workflow_details里的post_id是主管崗位id,test_workflow_records里需要的是主管這個崗位上的人的id,作為assignee_id(該工作流受理人id)
第二步:主管登錄系統,進入審批頁面,跟據主管id/既是當前用戶id(assignee_id)和(is_audit = 0)可以展示當前主管需要審核的所有申請。
主管點擊【審核】按鈕,可根據document_code(申請單據號)展示當前申請的所有詳細信息,選擇【通過】/【駁回】,並填寫意見等,最后點擊【提交】。
此時后台需要做以下操作:
1.更新流程記錄為已審核狀態(is_audit=1)
2.跟據workflow_id查詢該流程分為多少步(幾條記錄就是幾步),取出當前記錄的flow_serialnumber,判斷是否是最后一步
若是最后一步 {
判斷當前記錄是否通過
若通過{
編寫審核通過的業務處理代碼
}
否則 {
直接更新test_order申請狀態為駁回(status=3)
}
}
若不是最后一步{
再判斷當前記錄是否審核通過
若不通過{
直接更新test_order申請狀態為駁回(status=3)
}
若通過(這個栗子就走這種情況)
{
取出flow_serialnumber,+1,查詢下一個節點(經理審核)
流程記錄表test_workflow_records插入工作流第二條記錄(經理審核)
}
}
插入處理方式同上
第三步:同第二步,此時流程走到經理這里,流程繼續進行。
附上幾張截圖:
圖1:工作流配置
圖2:審核記錄詳情