小房子平臺開發例項-任務稽核系統1
小房子平臺開發管理軟體採用資料庫開發和系統配置來完成,以下通過一個’風險問題處理與審批系統’來演示一下配置開發過程
6.1.系統需求描述
系統需求主體單位為某稅務局的風險管理科,在日常稅收事務處理中,經常會遇到一些違規,違法的事件,這類事件的監控和處理被稱為風險控制管理,風控科希望通過一套系統來管理這些事件處理,具體為稅務局下面的各個業務口,分局,其它科室等,發現違規事件後將這一事件上報給風控科,風控科根據事件的型別,再把該事件傳送給相關的下級部門讓他們去處理,處理完後再提交到風控科來稽核,稽核通過則做完結稽核 歸檔備查,稽核通不過再打回去繼續處理.
涉及人員流程如下:
任何人可以提請(報送)事件-->風控科-->分發相關部門科室-->科室組長-->分發具體處理人-->處理後提交風控科-->風控科稽核
系統涉及崗位,人員,許可權
1),所有人可以提請風險事件
2).風控科負責分發風險事件處理任務到指定 部門
3).部分組長負責將任務分配給具體辦理人.
4).辦理人處理完提交 到風控部門.
5),風控部門稽核通過則完結,不通過則返回 處理人繼續處理.
這是一個簡單的事件流程管理屬於OA系統的範圍.
6.2.解決風控管理的問題和應用此係統的意義
原來科室在任務處理後口頭或電話告知風控科,風控科不能清楚瞭解處理的詳細過程.處理任務中依據的法規條文,沒有記錄,或者記錄混亂,難以再查詢。
通過系統的應用,風控科解決了以上問題,並且在處理事件資料累計後分類整理,給以後此類事件處理做參考,提高了風控任務辦理的效率。
6.3.開發過程
先做兩個基礎資訊維護的功能
6.3.1.基礎專案資訊維護(基礎專案,其它可選項的內容)
1.給這個頁面找個主表
我們選一個通用的專案維護主表 結構如下
CREATE TABLE TB_YW_ITEM_05 ( YW_ID INTEGER NOT NULL, YW_KEY INTEGER, YW_01 VARCHAR(50), YW_02 VARCHAR(50), YW_03 VARCHAR(50), YW_04 VARCHAR(50), YW_05 VARCHAR(50), YW_06 VARCHAR(50), YW_07 VARCHAR(50), YW_08 VARCHAR(50), YW_09 VARCHAR(50), YW_10 VARCHAR(50), YW_11 VARCHAR(50), YW_12 VARCHAR(50), YW_13 VARCHAR(50), YW_14 VARCHAR(50), YW_15 VARCHAR(50), YW_16 DECIMAL(15,2), YW_17 DECIMAL(15,2), YW_18 DECIMAL(15,2), YW_19 DECIMAL(15,2), YW_20 TIMESTAMP, YW_21 VARCHAR(50), YW_22 VARCHAR(50), YW_23 VARCHAR(50), YW_24 VARCHAR(50), YW_25 VARCHAR(50), YW_26 DECIMAL(15,2), YW_27 DECIMAL(15,2), YW_28 INTEGER, YW_29 INTEGER, YW_30 TIMESTAMP, YW_31 VARCHAR(50), YW_32 VARCHAR(50), YW_33 VARCHAR(50), YW_34 VARCHAR(50), YW_35 VARCHAR(50), YW_36 DECIMAL(15,2), YW_37 DECIMAL(15,2), YW_38 INTEGER, YW_39 INTEGER, YW_40 TIMESTAMP, YW_41 VARCHAR(50), YW_42 VARCHAR(50), YW_43 VARCHAR(50), YW_44 VARCHAR(50), YW_45 VARCHAR(50), YW_46 DECIMAL(15,2), YW_47 DECIMAL(15,2), YW_48 INTEGER, YW_49 INTEGER, YW_50 TIMESTAMP DEFAULT current_timestamp );
2.在系統字典表中配置該表含義
主要配置引數:1).指定表型別 如 BASE
2).指定一個自增欄位作為主鍵
3).欄位主要屬性;列標題,是否啟用,是否顯示,資料型別,編輯型別,允許編輯,列序號,顯示寬度,輔助標識0.
快速指南:大多數表結構都相同,通常的做法是找個近似表將表主要屬性進行拷貝 貼上一份,然後更改表名稱和表型別,在對欄位進行差別配置
這裡有些表字段 需要在儲存時產生一個預設值,預設值的生成在字典中’運算配置’ 項中配置 如圖
3.配置一個選單來完成功能
1).該功能為資料採集與維護,我們選擇頁面型別為 Basewh1
2).頁面中樹檢索的配置:
4.在當前頁面中需要錄入填寫的資料為紅色欄位,其他欄位一些是取的預設值;一些是在儲存後執行的一個儲存計算出的如:專案分類編碼 ,細分類編碼 ,專案編碼
如圖配置:
6.3.2.帳號和許可權維護
帳號許可權配置開發過程 和 基礎專案維護功能 類似,基本上拷貝上面選單的配置
1.資料主表選擇用 TB_yw_item_06 增加幾個屬性
2.選單配置 頁面型別還用 basewh1,樹檢索 ,儲存後儲存都相同
快速指南:資料維護類選單配置開發均相同,用複製貼上開發配置配置
方式,一個系統可以預置幾個基礎維護類功能,在需要的時候改變特性即可使用,本系統預置9個表結構配置 (TB_yw_item_01 -- TB_yw_item_09)
6.3.3.業務功能開發
邊分析邊開發,初始階段,我們拿到的是風控科提供的一個風險任務處理的表格,這個表格中羅列著風險事件的主要元素,我們就從這個表格開始進行開發
6.3.3.1.任務發起
(所有科室所有人在發現風險事件後發起任務提請,將事件傳送給風控科)
風險事件表結構如下:
CREATE TABLE TB_YW_01 (
YW_ID INTEGER NOT NULL, YW_KEY INTEGER, YW_01 VARCHAR(50), YW_02 VARCHAR(50), YW_03 VARCHAR(50), YW_04 VARCHAR(300), YW_05 VARCHAR(50), YW_06 VARCHAR(50), YW_07 VARCHAR(50), YW_08 VARCHAR(100), YW_09 VARCHAR(50), YW_10 VARCHAR(100), YW_11 VARCHAR(50), YW_12 VARCHAR(50), YW_13 VARCHAR(50), YW_14 VARCHAR(50), YW_15 VARCHAR(50), YW_16 VARCHAR(50), YW_17 VARCHAR(50), YW_18 VARCHAR(50), YW_19 VARCHAR(50), YW_20 VARCHAR(50), YW_21 VARCHAR(50), YW_22 VARCHAR(50), YW_23 VARCHAR(50), YW_24 VARCHAR(100), YW_25 VARCHAR(100), YW_26 VARCHAR(50), YW_27 VARCHAR(50), YW_28 VARCHAR(50), YW_29 VARCHAR(50), YW_30 VARCHAR(50), YW_31 VARCHAR(50), YW_32 VARCHAR(50), YW_33 VARCHAR(50), YW_34 VARCHAR(50), YW_35 VARCHAR(50), YW_36 DECIMAL(15,0), YW_37 DECIMAL(15,0), YW_38 DECIMAL(15,0), YW_39 DECIMAL(15,0), YW_40 TIMESTAMP, YW_41 VARCHAR(50), YW_42 VARCHAR(50), YW_43 VARCHAR(50), YW_44 VARCHAR(50), YW_45 VARCHAR(50), YW_46 DECIMAL(15,2), YW_47 DECIMAL(15,2), YW_48 DECIMAL(15,2), YW_49 DECIMAL(15,2), YW_50 TIMESTAMP, YW_51 VARCHAR(50), YW_52 VARCHAR(50), YW_53 VARCHAR(50), YW_54 VARCHAR(50), YW_55 VARCHAR(50), YW_56 DECIMAL(15,2), YW_57 DECIMAL(15,2), YW_58 DECIMAL(15,2), YW_59 DECIMAL(15,2), YW_60 TIMESTAMP, YW_61 VARCHAR(50), YW_62 VARCHAR(50), YW_63 TIMESTAMP, YW_64 VARCHAR(50), YW_65 VARCHAR(50), YW_66 TIMESTAMP, YW_67 TIMESTAMP, YW_68 TIMESTAMP, YW_69 TIMESTAMP, YW_70 TIMESTAMP, YW_71 TIMESTAMP, YW_72 DECIMAL(15,0), YW_73 DECIMAL(15,0), YW_74 DECIMAL(15,0), YW_75 DECIMAL(15,0), YW_76 DECIMAL(15,2), YW_77 DECIMAL(15,2), YW_78 DECIMAL(15,2), YW_79 DECIMAL(15,2), YW_80 DECIMAL(15,2), YW_81 VARCHAR(50), YW_82 VARCHAR(50), YW_83 VARCHAR(50), YW_84 VARCHAR(50), YW_85 VARCHAR(50), YW_86 VARCHAR(50), YW_87 VARCHAR(50), YW_88 VARCHAR(50), YW_89 VARCHAR(50), YW_90 VARCHAR(50), YW_91 VARCHAR(50), YW_92 VARCHAR(50), YW_93 VARCHAR(50), YW_94 VARCHAR(50), YW_95 VARCHAR(50), YW_96 VARCHAR(50), YW_97 VARCHAR(50), YW_98 VARCHAR(50), YW_99 VARCHAR(50), YW_100 BOOLEAN DEFAULT 0. YW_101 BOOLEAN DEFAULT 0 , YW_102 BOOLEAN DEFAULT 0, YW_103 BOOLEAN DEFAULT 0 , YW_105 BOOLEAN DEFAULT 0, YW_104 BOOLEAN );
快速指南:此類表我們稱為 業務表(動態表) 是對管理系統動態事物存取處理的表型別,上面基礎維護中表稱為 基礎表(靜態表), 一般性業務管理系統中採用這兩種表
此處差一個數據庫的抓圖(firebird 表列圖).
* 說明 這種表結構設計是一種通用表結構設計,表不指定具體物件,欄位不指定具體屬性,此種結構是我們多年經驗的總結,目的在於快速設計資料庫(應用模板庫,這些表均是預建立的,根據管理業務需要可以自己增加表),在調研不充分的情況下,現行開發。表的含義定義和屬性定義在字典表 Datadict 中實現
字典中有兩個Combobox 配置需要進行下拉內容選擇
下拉選擇的配置如下:
接下來把 任務發起的表配置在一個選單,該選單功能需要錄入新資料,我們選則 Fbasewh1 頁面型別,配置上關聯的表和表型別(TB_yw_01 , BASE),這樣任務發起選單就配置完成了
(該選單功能設計中,由於使用者錄入資料採用複製貼上的方式,所以沒有配置編輯框錄入)
其它引數配置如下:
6.3.3.2.任務分配
任務分配功能為風控科將其它科室提請的風險事件分配給處理科室的負責人,
選單實現如下幾個功能:
1).每條資訊可以選擇分配的分局(科室)負責人
2).點選 ‘分配發送’ 操作執行分配過程
3).資訊沒有 分配發送 前,可以補充編輯資訊內容,比如新增工作要求,改動疑點等。需要將更改過的系統儲存.
字典配置: 主要 :分配分局長(yw_18) ,分配發送(yw_99) 的配置
4).分配發送 的 按鈕
5).選單配置
此頁面功能主要是資料處理 選用 Fcxsql 頁面,資訊補充後分配給相關下級負責人
6).儲存按鈕配置
6.3.3.3.分局負責人 分配任務
此選單功能 把任務分配給本科室具體辦理人
1).字典配置如下:
2).選單配置
6.3.3.4.任務處理
功能;對分配到的任務做處理
1.處理資訊的補充
2.處理完畢 提交風控科 稽核
這個功能 用兩個頁面完成,第一個頁面列表顯示待處理的事件資訊;第二個頁面 選中一條資訊 點選 任務處理 開啟單條任務處理頁面來編輯 處理資料,完成編輯儲存 提交稽核
第一個頁面字典表配置(TB_yw_01,HCCL)
選單的配置
第二個字典的配置(TB_yw_01,RWCL)
‘儲存’ 按鈕的配置
提交稽核按鈕’的配置
總結
任務處理功能配置 要點:
1.一頁頁面中 Grid 表格中呼叫另一個 頁面 並且傳輸條件引數過去
2.FbaseWh1 頁面型別的 擴充套件按鈕 配置在 當前主表 的資料字典中
6.3.3.5風控稽核 和 任務稽核(分局)
功能;稽核提交上來的已處理風險事件資訊,稽核通過執行 完結確認,不通過執行 重新辦理
風控稽核 和 任務稽核(分局) 的區別:風控稽核 稽核全域性的 待稽核風險事件,
任務稽核(分局) 只稽核自己部門的。配置上就是在選單配置中 頁面預設 查詢資料的條件不同
分局稽核 選單配置
2.風控稽核 對所有已審結的事件也可以進行退回處理.
6.3.4.查詢處理統計
風控事件處理稽核流程整理完畢,下面是事件資訊查詢和統計配置開發
6.3.4.1.任務查詢 和 任務查詢(刪除)
這兩個功能基本一直 刪除功能的 許可權在風控科,其他人員只有使用查詢功能
將任務查詢功能配置開發完成 拷貝一份增加刪除功能就可以.
1)任務查詢選單配置
B.字典配置
任務查詢(刪除) 的 字典配置:
拷貝一份 任務查詢 資料字典 將表型別 由 BLZ改為 BLZDEL 增加配置一個 刪除按鈕
6.3.4.2部門工作量統計,個人工作量統計
這兩個選單 功能實現 統計功能,通過配置 執行查詢按鈕的功能配置 統計執行的儲存
下面以 個人工作量統計 為例說明
查詢儲存配置
6.5.任務稽核系統設計特點
6.5.1.業務主表只用了一個 TB_yw_01
本系統主體功能需求就是 風險事件資訊 在不同的職能崗位之間流轉,一條資訊在不同的崗位人員面前展示的內容和處理的許可權不同,也就是一條資訊在不同人員面前的多種面孔,
我們設計用一個表,通過在資料字典中 多種表型別的設計,達到每個崗位不同的功能。
這樣設計符合我們快速開發的理念,在我們做完BASE 表型別結構後,以下均為複製貼上,然後根據業務需求修改.資料在一個表記憶體取,功能表達上又相互孤立,這在後期的業務功能變更或功能升級修改中也是很方便.
6.5.2.處理任務的儲存過程只用一個
系統中關於業務的處理 均是 tb_yw_01 表中,所以系統中涉及的業務處理都在一個儲存中
PRO_YW_01_FKCL(任務提請中的 儲存後執行的儲存, 分配中 分配發送 等)
儲存說明
1.固定輸入引數( in_sparin0 -- in_sprarin9 字串入參 長度可根據實際調節)
In_iparin0 -- in_iparin4 整數型別 入參
選單配置中呼叫的儲存 入參均是這個固定格式,系統怎樣呼叫自定義引數的儲存,在後面的例項中會展示配置方法.
儲存多個業務中呼叫同一個儲存過程,根據入參引數區分業務,(這樣做會縮短儲存時間和配置時間,但如果兩種業務區別很大,不必強求必須寫在一個儲存中)
create or alter procedure PRO_YW_01_FKCL ( IN_SPARIN0 varchar(10), IN_SPARIN1 varchar(50), IN_SPARIN2 varchar(50), IN_SPARIN3 varchar(50), IN_SPARIN4 varchar(50), IN_SPARIN5 varchar(50), IN_SPARIN6 varchar(50), IN_SPARIN7 varchar(50), IN_SPARIN8 varchar(50), IN_SPARIN9 varchar(50), IN_IPARIN0 integer, IN_IPARIN1 integer, IN_IPARIN2 integer, IN_IPARIN3 integer, IN_IPARIN4 integer) returns ( OUTINT integer, OUTSTR varchar(200), OUTMESSAGE varchar(200)) as declare variable P_FQDW varchar(50); declare variable P_FQR varchar(50); declare variable P_LX varchar(50); declare variable P_KEY varchar(30); declare variable P_FJBM varchar(100); declare variable P_TMPSTR varchar(20); declare variable P_FJMC varchar(100); declare variable P_SH varchar(200); declare variable P_NUM integer; begin /* 建立專案編碼的 */ /*in_sparin1, in_sparin8 usercode in_sparin9 clientcode in_iparin0 類別引數*/ --p_tmplbcode =''; p_fqdw =''; p_fqr =''; p_lx =''; p_fjbm=''; OutMessage =' this is a result message'; if (in_iparin1 =1) then --feng kong fa qi Begin --1.更新tb_yw_01 表中發起的使用者 預設專案(發起單位,發起人,發起型別) select yw_04,yw_12,yw_14,yw_11 from tb_yw_item_06 where yw_09 = :in_sparin8 into :p_fqr,:p_fqdw,:p_lx,:P_FJBM; if ((p_fqdw <> '') and (p_fqr <> '')) then begin -- update tb_yw_01 set yw_07= :p_fjbm,yw_08 =:p_fqdw,yw_12=:p_fqr,yw_73 =0, yw_34='部門已提請' where yw_11 =:in_sparin8 and yw_73 is null;--anad yw_12 is null or (yw_12 ='') ; --update tb_yw_01 set yw_14 =:p_lx where yw_11 =:in_sparin8 and yw_14 is null or (yw_14 ='') ; end Outstr='feng kong fa qi' ; OutMessage =' 任務發起已儲存'; End if (in_iparin0 =2) then --fengkong 分配分局長 Begin if (in_sparin1 ='') then begin outint = -1; outmessage ='分配的分局長必須指定'; suspend; end if (in_sparin2 ='') then begin outint = -1; outmessage ='任務名稱必須指定'; suspend; end if (in_sparin3 ='') then begin outint = -1; outmessage ='工作要求必須指定'; suspend; end if (in_sparin4 ='') then begin outint = -1; outmessage ='完成時限必須指定'; suspend; end if (in_sparin0 <> '') then begin P_sh =''; p_num=0; -- select xm_code from V_YW_ITEM_FENJU where xm_name=:in_sparin1 into :p_fjbm; --為分配的分局 select yw_09,yw_12 from tb_yw_item_06 where yw_04 = :in_sparin1 into :p_fjbm,:P_FJMC; select yw_04 from tb_yw_item_06 where yw_09 = :in_sparin8 into :p_fqr ; select yw_03 from tb_yw_01 where yw_key =:in_sparin0 into :P_sh; if (P_sh <>'') then select count(*) from tb_yw_01 where yw_03=:p_sh into :p_num; if (p_num >1) then begin outint = 1; OutMessage ='已經下發過風險任務!'; suspend; end update tb_yw_01 set yw_31 =:in_sparin8,yw_50 = current_timestamp,yw_32 =:p_fqr,yw_28=:P_FJMC,yw_36 =1,yw_17=:p_fjbm,yw_18=:in_sparin1,yw_73=1, yw_34='風控已下發' where yw_key =:in_sparin0; end Outstr='feng kong fen pei' ; OutMessage ='任務已分配給 '||:in_sparin1; End if (in_iparin0 =3) then --分局長 向分局內分配 Begin if (in_sparin1 ='') then begin outint = -1; outmessage ='分配人必須指定'; suspend; end if (in_sparin0 <> '') then begin -- select xm_code from V_YW_ITEM_FENJU where xm_name=:in_sparin1 into :p_fjbm; --為分配的分局 select yw_09 from tb_yw_item_06 where yw_04 = :in_sparin1 into :p_fjbm; -- select yw_04 from tb_yw_item_06 where yw_09 = :in_sparin1 into :p_fqr ; update tb_yw_01 set yw_19=:p_fjbm,yw_20 =:in_sparin1,yw_73=2, yw_34='分局已分配' where yw_key =:in_sparin0; end Outstr='feng kong fen pei' ; OutMessage ='任務已分配給 處理人'||:in_sparin1; End if (in_iparin1 =3) then --辦結申請. Begin if (in_sparin2='') then --select yw_64 from tb_yw_01 where yw_key =:in_sparin0 into :p_tmpstr; if (in_sparin1='') then begin outint =1; outmessage='請上傳核查報告!'; suspend; end if (in_sparin2='') then begin outint =1; outmessage='請 選擇 有無問題!'; suspend; end if (in_sparin3='') then begin outint =1; outmessage= '請 填寫 核實情況簡述!'; suspend; end if (in_sparin4='') then begin outint =1; outmessage= '請 填寫 核查人員!'; suspend; end select yw_04 from tb_yw_item_06 where yw_09 = :in_sparin8 into :p_fqr ; update tb_yw_01 set yw_60= current_timestamp,yw_61=:in_sparin8,yw_62=:p_fqr,yw_73=3,yw_34='申請辦結' where yw_key =:in_sparin0; Outstr='feng kong shen he' ; outmessage ='已經提請稽核'; End if (in_iparin0 =4) then --TB_yw_item_04 Begin select yw_04 from tb_yw_item_06 where yw_09 = :in_sparin8 into :p_fqr ; update tb_yw_01 set yw_63= current_timestamp,yw_65=:p_fqr,yw_73=4,yw_34='已經辦結' where yw_key =:in_sparin0; Outstr='feng kong shen he' ; outmessage ='此條資料已辦結!'; Outstr='feng kong shen jie'; End if (in_iparin0 =5) then --分局長 向分局內會褪 Begin /* if (in_sparin1 ='') then begin outint = -1; outmessage ='分配人必須指定'; suspend; end */ if (in_sparin0 <> '') then begin -- select xm_code from V_YW_ITEM_FENJU where xm_name=:in_sparin1 into :p_fjbm; --為分配的分局 -- select yw_09 from tb_yw_item_06 where yw_04 = :in_sparin1 into :p_fjbm; -- select yw_04 from tb_yw_item_06 where yw_09 = :in_sparin1 into :p_fqr ; update tb_yw_01 set yw_73=2, yw_34='回退' where yw_key =:in_sparin0; end Outstr='feng kong fen pei' ; OutMessage ='任務已回退給 處理人'; End OutInt =1; -- OutStr = in_iparin1; suspend; end
&n