1. 程式人生 > >小房子平臺開發例項-任務稽核系統1

小房子平臺開發例項-任務稽核系統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