朱龍梅
(陜西財(cái)經(jīng)職業(yè)技術(shù)學(xué)院 管理學(xué)院, 咸陽(yáng) 712000)
管理會(huì)計(jì)系統(tǒng)在企業(yè)日常經(jīng)營(yíng)過(guò)程中起到非常重要的作用,將企業(yè)的盈虧狀況及時(shí)反映給企業(yè)管理者,從而為合理經(jīng)營(yíng)策略的制定提供依據(jù),第三方支付隨著電子商務(wù)的發(fā)展而得到普遍應(yīng)用,隨之而來(lái)的是不斷增長(zhǎng)的日交易訂單數(shù),傳統(tǒng)的管理會(huì)計(jì)系統(tǒng)在錄入每筆交易的會(huì)計(jì)憑證和分錄時(shí)自動(dòng)化程度較低,難以做到自動(dòng)化的試算平衡,無(wú)法提供業(yè)務(wù)規(guī)則,難以滿足不斷增長(zhǎng)的業(yè)務(wù)需求,管理會(huì)計(jì)系統(tǒng)需記錄每筆業(yè)務(wù)資金往來(lái),穩(wěn)定高效的管理會(huì)計(jì)系統(tǒng)是目前研究的重點(diǎn)之一[1]。
作為綜合應(yīng)用系統(tǒng),管理會(huì)計(jì)系統(tǒng)規(guī)模龐大、數(shù)據(jù)量大,系統(tǒng)設(shè)計(jì)時(shí)需具備一定的擴(kuò)展性,從而能夠更好的滿足不斷增長(zhǎng)的業(yè)務(wù)需求。本文從滿足實(shí)際會(huì)計(jì)業(yè)務(wù)需求的角度出發(fā),完成系統(tǒng)總體目標(biāo)的確定,提高系統(tǒng)的性能和安全性,該系統(tǒng)采用B/S架構(gòu),用戶同管理會(huì)計(jì)系統(tǒng)的交互通過(guò)互聯(lián)網(wǎng)瀏覽器(如IE, CHROME, SAFARI等)即可實(shí)現(xiàn),無(wú)需安裝客戶端,用戶先向業(yè)務(wù)系統(tǒng)發(fā)起在線交易(通過(guò)HTTP/TCP請(qǐng)求),交易系統(tǒng)將數(shù)據(jù)記錄到數(shù)據(jù)庫(kù)中,并通過(guò)TCP/IP協(xié)議向Apache ActiveMQ服務(wù)器發(fā)送Active MQ消息,數(shù)據(jù)接收處理子系統(tǒng)對(duì)active MQ服務(wù)器的消息進(jìn)行讀取后再通過(guò)Netty通信框架完成規(guī)則引擎子系統(tǒng)接口的調(diào)用,在此基礎(chǔ)上將交易消息轉(zhuǎn)換成會(huì)計(jì)憑證后發(fā)送給規(guī)則引擎子系統(tǒng)進(jìn)行處理:將會(huì)計(jì)憑證依據(jù)預(yù)先定義的會(huì)計(jì)規(guī)則完成相應(yīng)會(huì)計(jì)分錄的轉(zhuǎn)換,通過(guò)JDBC實(shí)現(xiàn)規(guī)則引擎同Oracle數(shù)據(jù)庫(kù)的連接,在同一個(gè)數(shù)據(jù)庫(kù)事務(wù)里記錄對(duì)應(yīng)的會(huì)計(jì)憑證和會(huì)計(jì)分錄,從而保證了數(shù)據(jù)的完整性和一致性,由業(yè)務(wù)系統(tǒng)向管理會(huì)計(jì)系統(tǒng)主動(dòng)推送數(shù)據(jù)實(shí)現(xiàn)[2]。
對(duì)于會(huì)計(jì)批處理任務(wù)則通過(guò)ORACLE的DBlink技術(shù)實(shí)現(xiàn),管理會(huì)計(jì)系統(tǒng)的數(shù)據(jù)庫(kù)同各業(yè)務(wù)系統(tǒng)的數(shù)據(jù)庫(kù)備庫(kù)連接,完成各大業(yè)務(wù)系統(tǒng)歷史交易數(shù)據(jù)的快速讀取,然后將其轉(zhuǎn)換為會(huì)計(jì)憑證對(duì)象寫(xiě)入緩存中,系統(tǒng)通過(guò)Drools規(guī)則引擎子系統(tǒng)接口的調(diào)用接收到緩存中的會(huì)計(jì)憑證對(duì)象,規(guī)則引擎在數(shù)據(jù)庫(kù)中記錄每筆會(huì)計(jì)憑證,再將憑證轉(zhuǎn)換成會(huì)計(jì)分錄并記錄到數(shù)據(jù)庫(kù)中,會(huì)計(jì)憑證和會(huì)計(jì)分錄間為一對(duì)多的關(guān)系。財(cái)務(wù)人員通過(guò)會(huì)計(jì)規(guī)則和后臺(tái)管理子系統(tǒng),對(duì)會(huì)計(jì)記賬規(guī)則使用的基礎(chǔ)數(shù)據(jù)(如如會(huì)計(jì)科目、銀行網(wǎng)關(guān)等)進(jìn)行維護(hù),及時(shí)調(diào)整規(guī)則引擎記賬出錯(cuò)的數(shù)據(jù)。
為使軟件設(shè)計(jì)便于模塊化和標(biāo)準(zhǔn)化操作和管理,系統(tǒng)設(shè)計(jì)采用了三層架構(gòu)體系,即數(shù)據(jù)訪問(wèn)層、業(yè)務(wù)邏輯層和表現(xiàn)層,系統(tǒng)軟件架構(gòu)具體如圖1所示。
圖1 管理會(huì)計(jì)系統(tǒng)軟件架構(gòu)圖
(1) 表現(xiàn)層,使用網(wǎng)絡(luò)瀏覽器方式進(jìn)行展示,主要功能在于同各大業(yè)務(wù)系統(tǒng)間進(jìn)行交互操作,供外部最終用戶使用,如使用網(wǎng)銀完成在線付款,用戶通過(guò)瀏覽器的使用完成相關(guān)業(yè)務(wù)的瀏覽和操作。內(nèi)部員工通過(guò)后臺(tái)管理子系統(tǒng)實(shí)現(xiàn)會(huì)計(jì)科目、銀行網(wǎng)關(guān)、銀行費(fèi)率等的設(shè)置與審核,及查詢導(dǎo)出報(bào)表等功能,顯著提高了系統(tǒng)操作及使用的便利性。
(2) 業(yè)務(wù)邏輯層,主要負(fù)責(zé)實(shí)現(xiàn)系統(tǒng)的主要業(yè)務(wù)邏輯,包括數(shù)據(jù)接收處理、規(guī)則引擎、規(guī)則管理及會(huì)計(jì)后臺(tái)管理四個(gè)重要的子系統(tǒng),并為短信系統(tǒng)、郵件系統(tǒng)提供外在接口,當(dāng)完成某些具體業(yè)務(wù)后,例如某個(gè)會(huì)計(jì)日的交易數(shù)據(jù)通過(guò)數(shù)據(jù)接收處理子系統(tǒng)已經(jīng)完成會(huì)計(jì)憑證和會(huì)計(jì)分錄的生成,系統(tǒng)會(huì)以短信和郵件的方式通知相關(guān)財(cái)務(wù)人員;或在系統(tǒng)發(fā)生錯(cuò)誤時(shí)及時(shí)通知開(kāi)發(fā)人員,各業(yè)務(wù)系統(tǒng)的交易數(shù)據(jù)消息的接收則通過(guò)ActiveMq消息隊(duì)列系統(tǒng)實(shí)現(xiàn)。通過(guò)Memocached緩存系統(tǒng)中相關(guān)數(shù)據(jù)的使用,從而提升了系統(tǒng)性能[3]。
(3) 數(shù)據(jù)訪問(wèn)層,該層通過(guò)JDBC連接到業(yè)務(wù)邏輯層,使用關(guān)系型數(shù)據(jù)庫(kù)Oracle對(duì)會(huì)計(jì)系統(tǒng)的基礎(chǔ)數(shù)據(jù)(包括會(huì)計(jì)規(guī)則中涉及的基礎(chǔ)數(shù)據(jù)、會(huì)計(jì)科目、銀行網(wǎng)關(guān)等)進(jìn)行管理,該數(shù)據(jù)庫(kù)還負(fù)責(zé)保存用于會(huì)計(jì)記賬的憑證和分錄等數(shù)據(jù);不允許測(cè)試環(huán)境訪問(wèn)生產(chǎn)環(huán)境數(shù)據(jù)以保證交易機(jī)密數(shù)據(jù)的安全,并且需專門(mén)的DBA執(zhí)行數(shù)據(jù)庫(kù)中DML、DDL的發(fā)布。財(cái)務(wù)人員和公司管理層具備報(bào)表的查詢和導(dǎo)出權(quán)限(包括利潤(rùn)表、現(xiàn)金流量表、資產(chǎn)負(fù)債表等),業(yè)務(wù)系統(tǒng)與本系統(tǒng)數(shù)據(jù)庫(kù)間跨庫(kù)高速訪問(wèn)則通過(guò)使用DBlink技術(shù)實(shí)現(xiàn)[4]。
業(yè)務(wù)邏輯模塊因使用Drools規(guī)則引擎而得以獨(dú)立出來(lái),實(shí)現(xiàn)了在代碼層次的松藕合,將xml或drl規(guī)則文件在線編輯好即可實(shí)現(xiàn)對(duì)會(huì)計(jì)記賬規(guī)則的新增或修改,避免重新編譯代碼和新系統(tǒng)版本發(fā)布所增加的工作量,各子系統(tǒng)統(tǒng)一采用代碼架構(gòu)層次清晰的Saturn框架,易于維護(hù)和擴(kuò)展,Saturn框架如圖2所示。
圖2 Saturn框架
(1) 數(shù)據(jù)消息接收
數(shù)據(jù)接收處理子系統(tǒng)使用開(kāi)源的Apache ActiveMQ完成數(shù)據(jù)的接收,具體通過(guò)在spring配置文件accountfront-biz.xml中添加配置如下:
完成上述添加配置后,各業(yè)務(wù)系統(tǒng)發(fā)送到隊(duì)列TP_ SC—ACCOUNT_ FRONT_ REQUEST的消息通過(guò)MessageListener對(duì)象即可實(shí)現(xiàn)監(jiān)聽(tīng)和接收[5]。
(2) 數(shù)據(jù)消息處理
消息隊(duì)列的消息由MessageListener接收后,需采用統(tǒng)一的JsoN消息格式對(duì)消息進(jìn)行處理,通過(guò)JSONObject對(duì)象的方法如下:
JSONObject obj=new JSONObject(json);
String value=obj.getString(keyName);
將各業(yè)務(wù)系統(tǒng)傳遞來(lái)的交易消息進(jìn)行解析,并將其轉(zhuǎn)換為相應(yīng)的會(huì)計(jì)憑證請(qǐng)求對(duì)象傳遞給規(guī)則引擎子系統(tǒng)進(jìn)行相關(guān)處理(VoucherFacade接口)。
考慮到新增的業(yè)務(wù)系統(tǒng)中所包含的歷史數(shù)據(jù)也需接入到管理會(huì)計(jì)系統(tǒng)中,此種情況則需使用批處理任務(wù)完成,批處理任務(wù)采用多線程方式,首先設(shè)定定時(shí)調(diào)度任務(wù)并完成會(huì)計(jì)日期的選擇,通過(guò)DBLink技術(shù)實(shí)現(xiàn)業(yè)務(wù)系統(tǒng)數(shù)據(jù)的跨庫(kù)批量拉取,并直接將交易數(shù)據(jù)轉(zhuǎn)換為相應(yīng)的會(huì)計(jì)憑證,在通過(guò)規(guī)則引擎子系統(tǒng)接口的調(diào)用將其傳給管理會(huì)計(jì)系統(tǒng)完成會(huì)計(jì)憑證在數(shù)據(jù)庫(kù)中的記錄,并根據(jù)分錄產(chǎn)生規(guī)則完成會(huì)計(jì)憑證到會(huì)計(jì)分錄的轉(zhuǎn)換,同樣在系統(tǒng)數(shù)據(jù)庫(kù)中記入會(huì)計(jì)分錄[6]。
(1) 系統(tǒng)處理批量交易數(shù)據(jù)的時(shí)序圖
設(shè)定任務(wù)調(diào)度后,在到達(dá)定時(shí)任務(wù)時(shí)間點(diǎn)時(shí),數(shù)據(jù)接收處理子系統(tǒng)將接收到消息通知,并開(kāi)始執(zhí)行批處理任務(wù),從交易系統(tǒng)數(shù)據(jù)庫(kù)中的交易數(shù)據(jù)緩存到到系統(tǒng)內(nèi)存,將其轉(zhuǎn)換為會(huì)計(jì)憑證后傳送給規(guī)則引擎子系統(tǒng)進(jìn)行模式匹配,即會(huì)計(jì)憑證與會(huì)計(jì)分錄產(chǎn)生規(guī)則的匹配,當(dāng)每筆憑證的數(shù)據(jù)字段匹配到一條規(guī)則的條件部分后,系統(tǒng)自動(dòng)將憑證轉(zhuǎn)換成會(huì)計(jì)分錄,完成數(shù)據(jù)持久層的調(diào)用,并在數(shù)據(jù)庫(kù)中記錄會(huì)計(jì)憑證和會(huì)計(jì)分錄,從而完成自動(dòng)記賬過(guò)程。批量交易數(shù)據(jù)處理的時(shí)序圖如圖3所示。
圖3 批量數(shù)據(jù)接收處理時(shí)序圖
(2) 系統(tǒng)處理批量交易數(shù)據(jù)的類圖
定時(shí)任務(wù)消息偵聽(tīng)對(duì)象接口實(shí)現(xiàn)了該接口的消息監(jiān)測(cè)方法,接收到任務(wù)調(diào)度中心的消息后調(diào)用規(guī)則引擎子系統(tǒng)的RuleEngineServiceProvide接口,再通過(guò)會(huì)計(jì)憑證服務(wù)對(duì)象的調(diào)用,在數(shù)據(jù)庫(kù)中寫(xiě)入會(huì)計(jì)憑證;通過(guò)會(huì)計(jì)分錄服務(wù)的對(duì)象的調(diào)用,在數(shù)據(jù)庫(kù)中寫(xiě)入會(huì)計(jì)分錄,處理批量數(shù)據(jù)的類圖如圖4所示[7]。
圖4 批量數(shù)據(jù)接收類圖
為檢測(cè)基于Drools規(guī)則引擎的管理會(huì)計(jì)系統(tǒng)的穩(wěn)定性和實(shí)用性,具體檢測(cè)方法為:通過(guò)業(yè)務(wù)系統(tǒng)將數(shù)據(jù)傳遞給本文系統(tǒng)以及接入新系統(tǒng)后批量業(yè)務(wù)的處理情況進(jìn)行檢測(cè),結(jié)果表明能夠?qū)崿F(xiàn)在線修改發(fā)生變更后的記賬規(guī)則,具有較強(qiáng)的擴(kuò)展性和兼容性;Saturn編程框架的使用使框架結(jié)構(gòu)更加清晰,無(wú)需具備專業(yè)知識(shí)即可操作本系統(tǒng),系統(tǒng)可以做到實(shí)時(shí)和自動(dòng)記賬,進(jìn)而使公司財(cái)務(wù)成本得以有效降低,在管理會(huì)計(jì)系統(tǒng)中實(shí)現(xiàn)了統(tǒng)一集中各交易系統(tǒng)的數(shù)據(jù)完成記賬過(guò)程,避免重復(fù)記賬問(wèn)題,使數(shù)據(jù)的正確性和完整性得以顯著提升,系統(tǒng)連續(xù)運(yùn)行了3個(gè)月,運(yùn)行穩(wěn)定,累計(jì)使用人次超過(guò)5萬(wàn),同業(yè)務(wù)系統(tǒng)對(duì)接效果較好,單筆及批量交易數(shù)據(jù)的接收與處理過(guò)程未出現(xiàn)錯(cuò)誤,可有效滿足企業(yè)業(yè)務(wù)拓展的會(huì)計(jì)管理需求。
本文從管理會(huì)計(jì)的實(shí)際需求出發(fā),主要對(duì)管理會(huì)計(jì)系統(tǒng)進(jìn)行優(yōu)化設(shè)計(jì),研究了Drools規(guī)則引擎在管理會(huì)計(jì)系統(tǒng)設(shè)計(jì)中的應(yīng)用,完成了系統(tǒng)整體軟件結(jié)構(gòu)的設(shè)計(jì),闡述了主要模塊的功能,對(duì)單筆及批量交易數(shù)據(jù)的接收與處理過(guò)程進(jìn)行軟件設(shè)計(jì),從而實(shí)現(xiàn)了會(huì)計(jì)憑證及會(huì)計(jì)分錄的自動(dòng)生成和存儲(chǔ)過(guò)程,實(shí)驗(yàn)檢測(cè)結(jié)果表明該系統(tǒng)能夠有效的提高會(huì)計(jì)記賬的自動(dòng)化水平,具有較高的實(shí)用性。