工作流程,就是商務資訊資料在多個環節模組之間的流轉。按照工作流程管理同盟定義,工作流程指的是“業務過程的部分或全部在電腦應用環境下的 自動化”。在實際應用過程中,為了實現對業務過程的工作流程管理,需要對商務程序及其各個步驟之間商務規則的抽象,概括,做成一個統一通用的流程管理軟體系統,這種軟體系統就是工作流程管理系統。
公司要求做工單系統,以工作流程的方式來做。一開始時因為沒接觸過工作流程機制,完全的理解錯誤了,第一版設計出來的完全不是工作流程的方式。後來上網查詢學習,看工作流程開源引擎說明文檔,才慢慢地有了個瞭解。後來又花了一段時間做了一個原型圖設計文檔出來,發給主管看了。他們也不知道什麼時候做了討論,只給我說太複雜,給“哢嚓”掉了。聽到這個回複,我也沒驚訝,心裡只是有點小失望。從開始說要做個,到過程中的學習設計,到最後的原型圖出來了,也是花了不少時間。沒驚訝,是因為,瞭解工作流程的機制後,發現要做一個完善點的好點的工作流程的機制挺複雜,特別是要用到工單模組裡。這個複雜度,可能在後期維護起來會得不償失。沒瞭解過工作流程的人,維護起來也會一頭霧水。上網查詢工單工作流程,發現原來碩士研究生畢業論文也在搞個東西,於是我就想,要是我把這個做出來了,自己最少也是研究生畢業了。而且自己總是想嘗試做一些新的東西難一點的東西,總是重複做那些列表添加修改查詢,無聊透頂了,完全沒有意思。在評估這個工單工作流程的可行性的時候,就有了點私心,不想去管後期維護的事,做出來再說。做出來了,也就獲得了一些很難得的經驗。其他公司web開發中不知用工作流程這種方式做工單模組的多不多,感覺應該不多吧。
下面是當時設計的資料庫,沒實際做開發。但應該可以滿足工作流程了。索引還沒做。
CREATE TABLE `workflow_baseinfo` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '流水號', `wb_name` varchar(50) NOT NULL COMMENT '流程名稱', `wb_desc` varchar(2000) DEFAULT NULL COMMENT '流程描述', `wb_type` tinyint(1) NOT NULL DEFAULT '-1' COMMENT '是否是子流程(1是-1否)', `wb_searcher` varchar(1000) DEFAULT NULL COMMENT '流程管理監控人員id(多人以逗號分隔)', `wb_queryer` varchar(1000) DEFAULT NULL COMMENT '流程查詢人員id(多人以逗號分隔)', `wb_status` int(2) NOT NULL DEFAULT '1' COMMENT '流程運行狀態(-1停用1啟用)', `wb_limit_minute` int(11) DEFAULT NULL COMMENT '流程限時(分鐘)', `wb_add_user_id` int(11) NOT NULL COMMENT '此記錄添加人', `wb_add_time` int(11) NOT NULL COMMENT '此記錄添加時間', PRIMARY KEY (`id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='工作流程屬性工作表'
CREATE TABLE `workflow_step` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '流水號', `ws_baseinfo_id` int(11) NOT NULL COMMENT '工作流程屬性工作表id', `ws_name` varchar(50) NOT NULL COMMENT '名稱', `ws_desc` varchar(2000) DEFAULT NULL COMMENT '描述', `ws_order` int(3) DEFAULT NULL COMMENT '序號', `ws_is_runer` tinyint(1) NOT NULL DEFAULT '-1' COMMENT '是否需要指定經辦人(1是-1否)', `ws_run_user_id` varchar(200) DEFAULT NULL COMMENT '經辦所有者(使用者id)', `ws_run_role_id` varchar(100) DEFAULT NULL COMMENT '經辦所有者(角色id)', `ws_run_department_id` varchar(100) DEFAULT NULL COMMENT '經辦所有者(部門id)', `ws_run_type` tinyint(1) NOT NULL DEFAULT '1' COMMENT '執行類型(1人工節點2自動節點)', `ws_notice_sms` tinyint(1) NOT NULL DEFAULT '-1' COMMENT '是否簡訊通知(-1否1是)', `ws_notice_email` tinyint(1) NOT NULL DEFAULT '-1' COMMENT '是否郵件通知(-1否1是)', `ws_type` tinyint(1) NOT NULL COMMENT '節點類型(1開始結點2結束結點3過程節點)', `ws_limit_time` int(11) DEFAULT NULL COMMENT '時限(秒)', `ws_int_api_id` varchar(20) DEFAULT NULL COMMENT '節點初始事件id(多個以逗號分隔)', `ws_run_api_id` varchar(20) DEFAULT NULL COMMENT '節點運行事件id(多個以逗號分隔)', `ws_save_api_id` varchar(20) NOT NULL COMMENT '節點儲存事件id(多個以逗號分隔)', `ws_turn_api_id` varchar(20) DEFAULT NULL COMMENT '節點流轉事件id(多個以逗號分隔)', `ws_is_sync` tinyint(1) NOT NULL DEFAULT '1' COMMENT '是否同步(1是-1否)', `ws_add_user_id` int(11) DEFAULT NULL COMMENT '此記錄添加人id', `ws_add_time` int(11) DEFAULT NULL COMMENT '此記錄添加時間', `ws_son_baseinfo_id` int(11) DEFAULT NULL COMMENT '子工作流程id', `ws_listpage_show` tinyint(1) NOT NULL DEFAULT '-1' COMMENT '列表是顯示該操作(1是-1否)', `ws_show_fields` varchar(200) DEFAULT NULL COMMENT '當前節點中可視的欄位id(多個以逗號分隔)', `ws_edit_fields` varchar(200) DEFAULT NULL COMMENT '當前節點中編輯的欄位id(多個以逗號分隔)', PRIMARY KEY (`id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='工作流程節點步驟表'
CREATE TABLE `workflow_line` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '流水號', `wl_start_step_id` int(11) NOT NULL COMMENT '線路開始節點id', `wl_end_step_id` int(11) NOT NULL COMMENT '線路結束節點id', PRIMARY KEY (`id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='工作流程線路表'
CREATE TABLE `workflow_fields` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '流水號', `wf_baseinfo_id` int(11) NOT NULL COMMENT '工作流程屬性工作表id', `wf_step_id` int(11) DEFAULT NULL COMMENT '工作流程節點表id', `wf_cnname` varchar(20) NOT NULL COMMENT '表單欄位中文名稱', `wf_enname` varchar(20) DEFAULT NULL COMMENT '表單欄位英文名稱', `wf_desc` varchar(100) DEFAULT NULL COMMENT '欄位備忘', `wf_default_value` varchar(1000) DEFAULT NULL COMMENT '欄位預設值', `wf_searchpage_show` tinyint(1) NOT NULL DEFAULT '1' COMMENT '查詢頁面是否可視(1是-1否)', `wf_addpage_show` tinyint(1) NOT NULL DEFAULT '1' COMMENT '添加頁面是否可視(1是-1否)', `wf_editpage_show` tinyint(1) NOT NULL DEFAULT '1' COMMENT '編輯頁面是否可視(1是-1否)', `wf_listpage_show` tinyint(1) NOT NULL DEFAULT '1' COMMENT '列表頁面是否可視(1是-1否)', `wf_is_empty` tinyint(1) NOT NULL DEFAULT '-1' COMMENT '是否可以為空白(1是-1否)', `wf_is_edit` tinyint(1) NOT NULL DEFAULT '1' COMMENT '是否可編輯(1是-1否)', `wf_is_global` tinyint(1) NOT NULL DEFAULT '-1' COMMENT '是否全域變數(1是-1否)', `wf_type` tinyint(1) NOT NULL DEFAULT '1' COMMENT '欄位顯示類型(1編輯框2單選框3多選框4下拉框5文字框)', `wf_value_type` tinyint(1) NOT NULL DEFAULT '1' COMMENT '數實值型別(1字串型2數值型3隻允許英文4 email型5datetime型 )', `wf_link_type` int(5) DEFAULT NULL COMMENT '關聯多項實值型別(1部門2角色)', PRIMARY KEY (`id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='表單欄位表'
CREATE TABLE `workflow_option` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '流水號', `wo_fields_id` int(11) NOT NULL COMMENT '欄位表id', `wo_key` varchar(40) NOT NULL COMMENT '選項標識', `wo_value` varchar(100) NOT NULL COMMENT '選項值', PRIMARY KEY (`id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='自訂的選項資料'
CREATE TABLE `workflow_rule` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '流水號', `wr_line_id` int(11) NOT NULL COMMENT '工作流程線路id', `wr_field_name` varchar(30) DEFAULT NULL COMMENT '變數欄位表id', `wr_param_name` varchar(30) DEFAULT NULL COMMENT '參數值', `wr_rule` tinyint(1) DEFAULT NULL COMMENT '變數與參數值的關係(1大於2小於3等於4大於或等於5小於或等於6包含7不包含)', `wr_type` tinyint(1) NOT NULL DEFAULT '-1' COMMENT '規則類型,是否自訂規則(1是-1否)', `wr_custom_rule` text COMMENT '自訂的規則的內容', `wr_desc` varchar(500) DEFAULT NULL COMMENT '規則說明', PRIMARY KEY (`id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='工作流程規則表'
CREATE TABLE `workflow_api` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '流水號', `wa_name` varchar(20) NOT NULL COMMENT '介面名稱', `wa_desc` varchar(500) DEFAULT NULL COMMENT '介面描述', `wa_path` varchar(1000) NOT NULL COMMENT '介面路徑', `wa_module_name` varchar(50) DEFAULT NULL COMMENT '模組名稱', `wa_function_name` varchar(50) NOT NULL COMMENT '執行函數名稱', PRIMARY KEY (`id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='工作流程事件表'
CREATE TABLE `workflow_api_fields` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '流水號', `waf_api_id` int(11) NOT NULL COMMENT '介面表id', `waf_cn_name` varchar(30) NOT NULL COMMENT '中文名稱', `waf_en_name` varchar(50) NOT NULL COMMENT '英文名稱', `waf_value_type` tinyint(1) NOT NULL DEFAULT '1' COMMENT '變數類型(1字元型2數值型3布爾型4數組型)', `waf_defalue_value` text COMMENT '變數預設值', `waf_fields_to` int(11) DEFAULT NULL COMMENT '介面變數對應的欄位變數表id', `waf_desc` varchar(200) DEFAULT NULL COMMENT '變數說明', PRIMARY KEY (`id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='介面變數表'
CREATE TABLE `workflow_instance` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '流水號', `wi_baseinfo_id` int(11) NOT NULL COMMENT '工作流程屬性工作表id', `wi_name` varchar(100) NOT NULL COMMENT '執行個體名字', `wi_status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '狀態(-1未啟動1啟動2運行中3結束)', `wi_run_user_id` int(11) DEFAULT NULL COMMENT '執行個體啟動人id', `wi_run_time` int(11) DEFAULT NULL COMMENT '啟動時間', PRIMARY KEY (`id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='工作流程執行個體表'
CREATE TABLE `workflow_instance_datas` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '流水號', `wif_instance_id` int(11) NOT NULL COMMENT '工作流程執行個體id', `wif_fields_id` int(11) NOT NULL COMMENT '表單欄位表id', `wif_data` varchar(1000) DEFAULT NULL COMMENT '欄位值', PRIMARY KEY (`id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='表單資料表'
CREATE TABLE `workflow_instance_step` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '流水號', `wis_instance_id` int(11) NOT NULL COMMENT '工作流程執行個體表id', `wis_step_id` int(11) NOT NULL COMMENT '節點步驟id', `wis_run_user_id` int(11) DEFAULT NULL COMMENT '執行人id(-1為系統)', `wis_run_start_time` int(11) DEFAULT NULL COMMENT '執行開始時間', `wis_run_end_time` int(11) DEFAULT NULL COMMENT '執行結束時間', `wis_status` tinyint(1) DEFAULT '1' COMMENT '狀態(1執行中2已結束)', `wis_turn_desc` varchar(1000) DEFAULT NULL COMMENT '流轉備忘', `wis_accept_user_id` int(11) DEFAULT NULL COMMENT '接收人id(-1為系統)', PRIMARY KEY (`id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='執行個體節點步驟表'
CREATE TABLE `workflow_log_instance_step` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '流水號', `wlis_instance_id` int(11) NOT NULL COMMENT '工作流程執行個體表id', `wlis_step_id` int(11) NOT NULL COMMENT '節點步驟id', `wlis_run_user_id` int(11) DEFAULT NULL COMMENT '執行人id(-1為系統)', `wlis_run_start_time` int(11) DEFAULT NULL COMMENT '執行開始時間', `wlis_run_end_time` int(11) DEFAULT NULL COMMENT '執行結束時間', `wlis_status` tinyint(1) DEFAULT '1' COMMENT '狀態(1執行中2已結束)', `wlis_runback_step_id` int(11) DEFAULT NULL COMMENT '回退到步驟id', `wlis_runback_desc` varchar(200) DEFAULT NULL COMMENT '回退說明', PRIMARY KEY (`id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='節點步驟日誌表'