【文章內容簡介】
現GDB這個調試工具的強大,大家可能比較習慣了圖形化的調試工具,但有時候,命令行的調試工具卻有著圖形化工具所不能完成的功能。在這里不細說了。dbx與GDB類似,在這里也不細講了。UNIX下運行程序很簡單,把可執(zhí)行文件名看作命令,帶上指定的參數程序就可以運行了。預付費入庫程序的設計是有一定的基礎的,它可以復用公司已有的公用類,和已有的數據結構。要想進行預付費入庫程序設計,首先要了解這些基礎,然后才能在這些基礎上進行程序設計。下面就有選擇的介紹一下這些基礎?;A類和結構體的介紹:TConfigInfo:系統(tǒng)配置信息結構體,它的成員包括:正常文件路徑sNorFilePath,異常文件路徑sErrFilePath,是否將設為正處理的文件改為未處理 iRefresh,每次取文件數iStep,輪詢過程中sleep的秒數iSleepSec。TAppConfig:程序配置類,用來存放應用程序的配置信息,利用重載構造函數TAppConfig(const char *AppCfgName,const char *AppSection) 。TDBDatabase:數據庫類,成員變量包括數據庫名、用戶名和密碼等信息;成員函數有Connect()用于連接數據庫,它封裝Oracle數據庫的OCI函數來實現和數據庫的連接。TDBConfig:數據庫配置類,用來存放數據庫的配置信息,這些信息是用來連接數據庫的,利用重載構造函數TDBConfig(const char *AppCfgName,const char *AppSection)。TAppComponent:數據庫連接類,用來連接數據庫,它繼承了類TComponent。它的成員函數ConnectDB()封裝了TDBDatabase:: Connect(),因此它也可以連接數據庫。TDBQuery:數據庫操作類,用于對數據庫的操作,可以用來查詢數據庫,向數據庫里插入數據和修改數據等。它封裝Oracle數據庫的OCI函數來實現對數據庫的操作,具體的不需要了解太多,只要學會使用這個類來操作數據庫就可以了。如要查找數據庫中的一條記錄,先設置好查詢語句SQl,然后調用它的成員函數SetSQL(const char *inSqlstmt)把查詢語句設置到Sqlstatement中,然后調用Open(int prefetchRows=PREFETCH_ROWS)打SELECT語句返回結果集,接著用Next()移動到下一個記錄,用Field()取一個列的值。如果是非查詢語句,要調用Execute()函數來執(zhí)行,然后用Commit()來提交。TPcsTransExecInfo,程序運行參數結構體,用于存放程序運行參數,它的成員變量包含有:當前帳期標識、下個帳期標識、帳期開始時間、帳期結束時間、客戶分組ID、流程ID等。TEventSourceFileInfo:未處理文件信息結構體,用于描述話單文件的信息,它的成員變量包含有:文件ID、文件名稱、文件路徑、流程ID、文件處理狀態(tài)、話單總數、文件正常記錄數、文件異常記錄數、文件總費用、客戶分組、文件類型等。VUnsettledFileInfo:typedef vectorTEventSourceFileInfo VUnsettledFileInfo 用于裝載未處理文件信息的vector。TTbInfoManager:內存資料類,其成員為指向私有和共享內存的資料的指針對象??梢杂脕沓跏蓟嬞M文件數據庫接口類和計費文件解析類。TPCSInfoManager:預付費入庫涉及的靜態(tài)資料類,可用來初始化數據組織操作類(TeventPcsInfo)。TRateFileDBInterface:計費文件數據庫接口類,主要用于從數據庫中查詢未處理的計費文件,同時對數據庫中的計費文件狀態(tài)進行更新。(為了更好介紹,我們只列舉我們預付費入庫中用到的成員。)它的成員變量有:用于存放取得的未處理文件信息的vector m_vUnsettledFileInfo,查詢條件 m_sQuerySql,每次從數據庫中取得的文件數m_iDBSearchStep。它的成員函數有:設置查詢條件函數SetQueryCondition(),取得一條待處理的計費文件記錄GetOneUnsettledRec(),更新計費文件信息函數:UpdateUnsettleRecInfo(),根據設置的數據庫查詢的步長取得未處理的文件信息GetUnsettledRec(),預設批量選出文件的狀態(tài)為正在處理PreSetFileStateToProc()。TRateFileIOManager:計費文件解析類,主要用于對計費文件進行解析,取得的文件的各個字段,形成事件屬性,同時正常文件、異常文件的生成。它的成員變量有:當前處理的文件信息TEventSourceFileInfo *m_ptCurFileInfo,當前系統(tǒng)配置信息TConfigInfo *m_ptConfigInfo;成員函數有:打開一個待處理的計費文件同時讀取文件頭信息OpenUnsettledFile()(它調用了另一個成員函數:分析文件頭信息ParseFileHead()),取得一條話單信息GetOneCdr(TCdrEvent *ptCdrEvent)。有關表的介紹:EVENT_SOURCE(事件來源表),是用來存放各種話單文件的信息的一張表。它可以作為話單文件和預處理、揀重、批價、合帳和預付費入庫等模塊的接口,各個模塊從中讀取話單文件進行處理,然后把處理過的話單文件的信息再放回表中,為各模塊完成一個文件輸入輸出事務提供上下文關系。字段名稱字段含義數據類型非空source_id事件來源標識DECIMAL(9,0)Yparent_src_id父來源DECIMAL(9,0)source_type事件類源類型INTEGERYevent_source_type事件來源類型INTEGERname名稱VARCHAR(100)Ydata_path位置VARCHAR(150)instance_id消費者流程標識DECIMAL(9,0)Yproducer生產者進程標識DECIMAL(6,0)customer消費者進程標識DECIMAL(6,0)Yproc_state處理狀態(tài)CHAR(3)Ycreated_date生成時間DATETIME YEAR TO SECONDYdealed_date處理完成時間DATETIME YEAR TO SECONDsource_size文件大小INTEGERYrec_quantity輸入記錄數INTEGERYderive_rec派生記錄數INTEGERYnormal_rec正常記錄數INTEGERYabnormal_rec異常記錄數INTEGERYinvalid_rec無效記錄數INTEGERYsource_charge文件費用NUMERIC(16,5)Ybatch_id批次標識INTEGER表 1,事件來源表source_id:一個事件來源即一個事件文件或事件數據包。當一個對象所含數據沒有改變時,這個事件來源對象只進行傳遞。否則,應該新建一個事件來源。source_type:用來標識話單是什么類型的話單,1 原始數據文件 2 原始數據包 3 揀重存檔文件 4 計費文件 5 計費包 6 合帳文件 7 合帳包 8 源事件備份文件 9 計費備份文件10 合帳備份文件 11 周期事件文件 12:預處理分揀過濾錯單文件。 13:批價的無主和異常事件文件。 14:合帳產生的錯單文件 16:預處理事件捕獲錯單文件 17:預處理格式化錯單文件 18:預處理待回收記錄 19:批價待回收記錄 20:合帳待回收記錄 22:預處理錯單重處理文件 24:批價錯單重處理文件 26:和帳理錯單重處理文件。event_source_typ:用來標識事件的來源,即1:正常事件2:無主事件3:異常事件。proc_state:標識文件的處理狀態(tài),1正在創(chuàng)建2創(chuàng)建完成(包括傳輸)3正在處理4處理完成5處理失敗9已經被回退。name:文件名稱,由一定的規(guī)律組成。data_path:文件存放的位置,可用于打開文件。instance_id:消費者流程標識。通過設置instance_id、source_type、proc_state、event_source_type等條件可以指定話單為預付費入庫話單。BILLING_CYCLE(帳務周期表)定義具體的帳務周期及相關重要日期,供系統(tǒng)或用戶選擇以指定帳務周期。字段名稱字段含義數據類型非空說明billing_cycle_id帳務周期標識DECIMAL(9,0)YPKbilling_cycle_type_id帳務周期類別標識DECIMAL(9,0)YFK,帳務周期類別的標識。與BILLING_CYCLE_TYPE表的CYCLE_TYPE_ID屬性關聯。last_billing_cycle_id上個帳務周期DECIMAL(9,0)FK,上級帳務周期的唯一標識,用于表示層次關系。cycle_begin_date周期開始時間DATETIME YEAR TO SECONDY本帳務周期開始的時間。cycle_end_date周期截止時間DATETIME YEAR TO SECONDY本帳務周期截止的時間。due_date違約金起算日期DATETIME YEAR TO SECONDY違約金開始計算的時間。block_date應停機日期DATETIME YEAR TO SECONDY該帳務周期應停機的日期。state狀態(tài)VARCHAR(3)Y帳務周期的狀態(tài)。state_date狀態(tài)時間DATETIME YEAR TO SECONDY帳務周期狀態(tài)變更的時間。表 2,帳務周期表ACCT_ITEM_GROUP_MEMBER(帳目組_帳目表), 定義每個帳目組包含哪些帳目。字段名稱字段含義數據類型非空說明acct_item_group_id帳目組標識DECIMAL(9,0)YPK FK為每個帳目組生成的唯一編號。acct_item_type_id帳目類型標識DECIMAL(9,0)YPK FK對每一帳目類型的唯一編號。item_source_id帳目來源標識DECIMAL(9,0)YPK FK為每一種帳目類型的帳目的來源生成的唯一標識。state狀態(tài)VARCHAR(3)帳目組_帳目的狀態(tài)??蛇x參數00A 有效00X 注銷00H 已歸檔state_date狀態(tài)時間DATETIME YEAR TO SECONDY帳目組_帳目狀態(tài)變更的時間。表 3,帳目組_帳目表入庫后形成的三張表:清單表、費用表和sd表的基表結構如下:EVENT_PREPAYPCS (預付費PCS話單基表),字段名稱字段含義數據類型非空說明event_inst_id話單標識DECIMAL(15,0)YPKevent_type_id事件類型DECIMAL(9,0)Ycalling_nbr主叫號碼VARCHAR(20)called_nbr被叫號碼VARCHAR(24)start_time開始時間DATETIME YEAR TO SECONDend_time結束時間DATETIME YEAR TO SECONDduration時長DECIMAL(9,0)serv_id用戶標識DECIMAL(12,0)cust_id客戶標識DECIMAL(12,0)cust_category客戶分組DECIMAL(12,0)Yold_file_id原始文件標識DECIMAL(12,0)pcs_service_type業(yè)務類型VARCHAR(10)pcs_rate費率NUMERIC(16,5)pcs_total_fee總費用NUMERIC(16,5)Y表 4,預付費PCS話單基表EVENT_PREPAYPCS_FEE (預付費PCS話單費用子表)字段名稱字段含義數據類型非空說明event_inst_id話單標識DECIMAL(15,0)YFKfile_id話單來源DECIMAL(12,0)acct_item_type_id帳目類型DECIMAL(9,0)Yold_charge優(yōu)惠前費用NUMERIC(16,5)Ycharge費用NUMERIC(16,5)Ytariff_id費率標識DECIMAL(9,0)tariff費率NUMERIC(16,5)rate_duration計費時長DECIMAL(9,0)cust_category客戶分組標識DECIMAL(12,0)Y表 5,預付費PCS話單費用子表ACCT_ITEM_SD_PREPAYPCS(預付費PCS話單帳目表)字段名稱字段含義數據類型非空說明acct_item_id帳目標識DECIMAL(12,0)YPKserv_id主產品實例標識DECIMAL(12,0)Yacct_i