李偉鐮
(中國(guó)移動(dòng)(深圳)有限公司,廣東深圳518048)
基于JAVAEE的電子賬務(wù)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
李偉鐮
(中國(guó)移動(dòng)(深圳)有限公司,廣東深圳518048)
本文探討了建立電子賬務(wù)系統(tǒng)的必要性,通過(guò)對(duì)財(cái)務(wù)報(bào)賬作業(yè)的系統(tǒng)分析,在JAVAEE 的多層架構(gòu)下,以Struts 作為表現(xiàn)層框架、以基于JDBC設(shè)計(jì)的可復(fù)用的持久層作為數(shù)據(jù)訪問(wèn)層框架, 并運(yùn)用多種設(shè)計(jì)模式設(shè)計(jì)和實(shí)現(xiàn)了一個(gè)電子賬務(wù)系統(tǒng)。該系統(tǒng)能有效支撐企業(yè)大量報(bào)賬業(yè)務(wù)的快速處理,保障報(bào)賬單據(jù)的規(guī)范化、審批流程的電子化和信息傳遞的自動(dòng)化,并具有良好的可擴(kuò)展性、可維護(hù)性。
電子賬務(wù)系統(tǒng);OA;JAVA EE;MVC;Struts;設(shè)計(jì)模式
近年來(lái),隨著國(guó)內(nèi)經(jīng)濟(jì)建設(shè)的持續(xù)發(fā)展和行業(yè)競(jìng)爭(zhēng)的加劇,企業(yè)正以一種前所未有的熱情致力于提高內(nèi)部的管理素質(zhì)與工作效率。財(cái)務(wù)管理工作作為企業(yè)管理的核心環(huán)節(jié),將會(huì)直接影響企業(yè)的管理效率與經(jīng)濟(jì)效益。在傳統(tǒng)的財(cái)務(wù)報(bào)賬模式中,報(bào)賬人要填寫(xiě)紙質(zhì)單據(jù)并找到各級(jí)領(lǐng)導(dǎo)進(jìn)行審批,最后將單據(jù)拿到財(cái)務(wù)部門(mén)進(jìn)行審核。這種報(bào)賬方式單據(jù)填寫(xiě)和業(yè)務(wù)審批、財(cái)務(wù)審批效率低下、無(wú)法有效進(jìn)行資金控制、無(wú)法提供有價(jià)值數(shù)據(jù)進(jìn)行資金管理和決策分析,同時(shí)財(cái)務(wù)部門(mén)工作量也十分巨大。
為了解決這一問(wèn)題,本文設(shè)計(jì)和實(shí)現(xiàn)了一個(gè)電子賬務(wù)系統(tǒng)。該系統(tǒng)采用了多種業(yè)界成熟的信息技術(shù),參考了文獻(xiàn)[1-6]的研究成果,在J2EE的B/S應(yīng)用構(gòu)架下,以Struts作為表現(xiàn)層框架、基于JDBC設(shè)計(jì)了一個(gè)可復(fù)用的數(shù)據(jù)持久層框架,并運(yùn)用多種設(shè)計(jì)模式利用JAVA語(yǔ)言開(kāi)發(fā)。
該系統(tǒng)提供了報(bào)賬信息采集、審批、傳遞和財(cái)務(wù)審核功能,能有效支撐企業(yè)大量報(bào)賬業(yè)務(wù)的快速處理,提高財(cái)務(wù)集中核算和結(jié)算的準(zhǔn)確性和效率,保障報(bào)賬單據(jù)的規(guī)范化、審批流程的電子化和信息傳遞的自動(dòng)化,具有較好的可擴(kuò)展性、相當(dāng)?shù)囊子眯院土己玫目删S護(hù)性。
JAVA EE(Java Platform,Enterprise Edition)是一種利用Java平臺(tái)來(lái)簡(jiǎn)化企業(yè)解決方案的開(kāi)發(fā)、部署和管理相關(guān)的復(fù)雜問(wèn)題的體系結(jié)構(gòu),是一個(gè)基于組件的體系結(jié)構(gòu),定義了一套標(biāo)準(zhǔn)來(lái)簡(jiǎn)化多層分布式企業(yè)應(yīng)用程序的開(kāi)發(fā),它定義了一套標(biāo)準(zhǔn)化的組件,并為這些組件提供了完整的服務(wù)。
JAVA EE體系架構(gòu)將表示邏輯、業(yè)務(wù)邏輯與數(shù)據(jù)邏輯相分離,使系統(tǒng)的并行操作、網(wǎng)絡(luò)計(jì)算能力大為提高,系統(tǒng)的整體性能得以優(yōu)化,并采用先進(jìn)的軟件分層設(shè)計(jì)思想,支持基于框架的開(kāi)發(fā),降低開(kāi)發(fā)難度和成本,同時(shí)降低組件的耦合度,極大地增強(qiáng)軟件的可維護(hù)性、可擴(kuò)展性,滿足大型管理信息系統(tǒng)的要求。
Struts框架基于MVC設(shè)計(jì)模式,主要由模型(Model)、視圖(View)、控制器(Controller)和解析XML文件的工具包四個(gè)部分構(gòu)成,以實(shí)現(xiàn)業(yè)務(wù)代碼與視圖代碼分離,提高應(yīng)用程序的可擴(kuò)展性。
Struts框架的核心是一個(gè)靈活的控制層,它基于Java Servlets、JavaBeans和XML等一些標(biāo)準(zhǔn)技術(shù)。Struts提供了自己的Controller組件,并集成其它技術(shù)以提供Model和View。對(duì)于View,Struts與JSP、JSTL、JSF、XSLT等表示系統(tǒng)一起工作得很好。對(duì)于Model,Struts不僅可與JDBC和EJB這些標(biāo)準(zhǔn)的數(shù)據(jù)訪問(wèn)技術(shù)交互,也可與Hibernate這類(lèi)第三方程序包交互訪問(wèn)。
系統(tǒng)的目標(biāo)是根據(jù)企業(yè)現(xiàn)有的財(cái)務(wù)管理制度,開(kāi)發(fā)出符合企業(yè)應(yīng)用要求的電子賬務(wù)系統(tǒng),以支撐企業(yè)財(cái)務(wù)集中,高效高質(zhì)地傳遞核算資料為中心。具體建設(shè)目標(biāo)如下:
(1)報(bào)賬單據(jù)的規(guī)范化:通過(guò)報(bào)賬系統(tǒng)對(duì)報(bào)賬單據(jù)的內(nèi)容和格式進(jìn)行規(guī)范,保證財(cái)務(wù)入賬依據(jù)的標(biāo)準(zhǔn)化,為財(cái)務(wù)核算規(guī)范奠定基礎(chǔ)。
(2)審批流程的電子化:通過(guò)電子報(bào)賬單和相應(yīng)附件的電子化流轉(zhuǎn),以及與OA系統(tǒng)的待辦事項(xiàng)集成,在保證審批質(zhì)量的同時(shí)加快了審批流程,提高財(cái)務(wù)核算效率。
(3)信息傳遞的自動(dòng)化:建立與ERP系統(tǒng)、合同管理系統(tǒng)、預(yù)算管理系統(tǒng)和OA系統(tǒng)的接口,實(shí)現(xiàn)信息快速準(zhǔn)確傳遞,提高財(cái)務(wù)工作效率。
系統(tǒng)應(yīng)具備相當(dāng)?shù)目煽啃院涂捎眯?,足夠的可縮放性和良好的可維護(hù)性。財(cái)務(wù)報(bào)賬只是企業(yè)信息管理的其中一個(gè)部分,從企業(yè)整體發(fā)展戰(zhàn)略來(lái)看,系統(tǒng)還要具備高度的可擴(kuò)展性,以便于添加新功能或者調(diào)整已有功能,隨時(shí)滿足企業(yè)的發(fā)展和業(yè)務(wù)擴(kuò)展的需要。
電子賬務(wù)系統(tǒng)在整個(gè)財(cái)務(wù)系統(tǒng)中處于財(cái)務(wù)擴(kuò)展平臺(tái)層。作為財(cái)務(wù)擴(kuò)展系統(tǒng)的一部分,報(bào)賬平臺(tái)系統(tǒng)與已建成或?qū)⒔ㄔO(shè)的多個(gè)財(cái)務(wù)系統(tǒng)都存在數(shù)據(jù)的交互關(guān)系。具體體系架構(gòu)如圖1所示:
圖1 體系架構(gòu)圖
系統(tǒng)的技術(shù)架構(gòu)基于JAVA EE多層架構(gòu)構(gòu)建,其前端Web采用Apache的Struts框架實(shí)現(xiàn),后端采用了多種JAVA EE的設(shè)計(jì)模式實(shí)現(xiàn)。具體技術(shù)架構(gòu)如圖2所示:
圖2 技術(shù)架構(gòu)圖
系統(tǒng)總體上可分為以下五個(gè)層次:
(1)客戶層:運(yùn)行在用戶機(jī)器的瀏覽器中,處理與用戶的交互。
(2)交互層:整個(gè)Web層建立在Struts框架基礎(chǔ)上,處理用戶的請(qǐng)求并作出響應(yīng)。其中View由JSP/HTML頁(yè)面組成,其數(shù)據(jù)表示是ActionForm Bean;Controller由ActionServlet、Struts-config.xml和ActionClass組成,而Model則交由業(yè)務(wù)邏輯層來(lái)實(shí)現(xiàn)。
(3)業(yè)務(wù)邏輯層:完成系統(tǒng)所需的業(yè)務(wù),為Web層提供所需的業(yè)務(wù)方法,主要由JavaBean等Business Objects(BO)構(gòu)成;業(yè)務(wù)邏輯層是整個(gè)系統(tǒng)的核心部分,系統(tǒng)所需的大部分邏輯代碼都放在這一層,該層采用了Fa?ade、Factory等的設(shè)計(jì)模式。
(4)數(shù)據(jù)存取層:處于業(yè)務(wù)邏輯層與后端的DBMS之間,提供業(yè)務(wù)對(duì)象到數(shù)據(jù)庫(kù)的映射,對(duì)業(yè)務(wù)邏輯層屏蔽數(shù)據(jù)庫(kù)的細(xì)節(jié)。
(5)資源層:即數(shù)據(jù)庫(kù)層,存放電子賬務(wù)系統(tǒng)的應(yīng)用數(shù)據(jù)。
采用多層的體系結(jié)構(gòu),使應(yīng)用數(shù)據(jù)的表示被限制到相應(yīng)的層內(nèi),降低了數(shù)據(jù)在各層之間的耦合性,提高了整體架構(gòu)的可維護(hù)性和可擴(kuò)展性。
圖3 系統(tǒng)功能
系統(tǒng)功能設(shè)計(jì)如圖3所示。電子賬務(wù)系統(tǒng)功能架構(gòu)主要包括:報(bào)賬單據(jù)模板功能、報(bào)賬單據(jù)流程管理、報(bào)賬通知管理、原始單據(jù)管理、預(yù)算和額度控制、查詢統(tǒng)計(jì)、信用報(bào)銷(xiāo)體系、接口管理和系統(tǒng)管理。其中:
(1)報(bào)賬單據(jù)模板功能包括對(duì)如下報(bào)賬單據(jù)功能的要求和定義:差旅費(fèi)、借款還款、日常及其他費(fèi)用、采購(gòu)訂單類(lèi)、非采購(gòu)訂單類(lèi)、人工成本、稅金、預(yù)付款、批量報(bào)賬、計(jì)提類(lèi)費(fèi)用、支付申請(qǐng)、暫收管理類(lèi)、收入管理類(lèi)、資產(chǎn)管理類(lèi)、工程管理類(lèi)、資金管理類(lèi)、其他類(lèi)。
(2)報(bào)賬單據(jù)流程管理報(bào)賬單據(jù)如下流轉(zhuǎn)流程:錄入、提交、審批、拒絕、刪除、授權(quán)錄入和授權(quán)審批。
(3)接口管理包括如下系統(tǒng)的接口:ERP系統(tǒng)、銀企互聯(lián)系統(tǒng)、合同管理系統(tǒng)、預(yù)算管理系統(tǒng)、OA系統(tǒng)。
(4)報(bào)賬通知管理包括:待辦事項(xiàng)通知和單據(jù)狀態(tài)通知。
(5)原始單據(jù)管理包括:原始單據(jù)的電子影像信息管理、原始單據(jù)的條碼管理和跟蹤。
(6)預(yù)算和額度控制包括:預(yù)算控制和額度控制。
(7)查詢統(tǒng)計(jì)包括:?jiǎn)螕?jù)查詢和統(tǒng)計(jì)查詢。
(8)信用報(bào)銷(xiāo)體系。
(9)系統(tǒng)管理包括:用戶管理、配置管理、工作流管理、報(bào)賬模板管理和系統(tǒng)維護(hù)。
根據(jù)3.1節(jié)需求分析及3.3功能設(shè)計(jì)可知,電子賬務(wù)系統(tǒng)的核心是各種報(bào)賬單據(jù)的流程管理。每一種單據(jù)都有自己獨(dú)立的業(yè)務(wù)流程。下面以最常用的差旅費(fèi)報(bào)銷(xiāo)單為例,設(shè)計(jì)企業(yè)電子賬務(wù)系統(tǒng)的業(yè)務(wù)流程。差旅費(fèi)報(bào)銷(xiāo)單的業(yè)務(wù)流程主要包括申請(qǐng)人提出差旅報(bào)銷(xiāo)申請(qǐng)、人事行政助理審批、上級(jí)業(yè)務(wù)審批、財(cái)務(wù)會(huì)記審批、財(cái)務(wù)經(jīng)理審批、財(cái)務(wù)出納審批、單據(jù)入庫(kù)結(jié)束等步驟。具體業(yè)務(wù)流程如圖4所示。
圖4 差旅費(fèi)報(bào)銷(xiāo)單業(yè)務(wù)流程
根據(jù)申請(qǐng)人的級(jí)別以及申請(qǐng)人提交的申請(qǐng)單所涉及的金額不同,具體的業(yè)務(wù)審批流程也有所不同:若申請(qǐng)人為部門(mén)主管、部門(mén)經(jīng)理、部門(mén)總監(jiān)、總經(jīng)理,則自動(dòng)跳過(guò)與自己同級(jí)別及以下的審批人;若普通員工申請(qǐng),若申請(qǐng)金額小于等于主管審批額度,則會(huì)跳過(guò)部門(mén)經(jīng)理、部門(mén)總監(jiān)、總經(jīng)理,部門(mén)主管審批完后直接跳到財(cái)務(wù)會(huì)計(jì);若金額大于主管額度又小于等于經(jīng)理額度,則跳過(guò)部門(mén)總監(jiān)和總經(jīng)理,以此類(lèi)推。
下面給出系統(tǒng)在數(shù)據(jù)持久層、業(yè)務(wù)邏輯層和表現(xiàn)層中的實(shí)現(xiàn)過(guò)程。
(1)數(shù)據(jù)持久層的實(shí)現(xiàn)
數(shù)據(jù)持久層主要采用了Data Access Object模式,訪問(wèn)數(shù)據(jù)庫(kù)的細(xì)節(jié)都放在DAO中,業(yè)務(wù)層中的Business Object都繼承了基類(lèi)DAOObject,而DAOObject主要定義了query和update方法,分別對(duì)應(yīng)對(duì)數(shù)據(jù)庫(kù)的查詢和更新(包括增加、修改、刪除)操作。該層還運(yùn)用了Service Locator模式來(lái)查找數(shù)據(jù)源,數(shù)據(jù)源從數(shù)據(jù)庫(kù)連接池中取得,ServiceLocator還會(huì)把第一次查找到的數(shù)據(jù)源緩存起來(lái),以提高系統(tǒng)的整體性能。業(yè)務(wù)對(duì)象與數(shù)據(jù)庫(kù)的映射主要通過(guò)Value Object(VO)模式來(lái)實(shí)現(xiàn),系統(tǒng)用到的所有值對(duì)象VO都繼承ValueObject基類(lèi),ValueObject基類(lèi)中的getValues和setValues方法分別實(shí)現(xiàn)了從JavaBean?數(shù)據(jù)庫(kù)和從數(shù)據(jù)庫(kù)?JavaBean的值傳遞,前者將值對(duì)象中的字段值放到一個(gè)Properties對(duì)象中,從而最終傳入到數(shù)據(jù)庫(kù)中,而后者則將查找數(shù)據(jù)庫(kù)得到的以Properties為參數(shù)的值設(shè)到值對(duì)象中,供系統(tǒng)各個(gè)部分調(diào)用。
系統(tǒng)用到的所有SQL語(yǔ)句都集中存放在sqlCode.properties文件中,有利于數(shù)據(jù)庫(kù)管理員對(duì)數(shù)據(jù)庫(kù)做配置優(yōu)化。
該數(shù)據(jù)持久層與實(shí)際業(yè)務(wù)邏輯無(wú)關(guān),可供其他系統(tǒng)進(jìn)行復(fù)用。
(2)業(yè)務(wù)邏輯層的實(shí)現(xiàn)
業(yè)務(wù)邏輯層負(fù)責(zé)封裝數(shù)據(jù)持久層提供的數(shù)據(jù)對(duì)象,并為表示層提供功能接口,由業(yè)務(wù)邏輯對(duì)象Business Objects實(shí)現(xiàn)。
業(yè)務(wù)邏輯對(duì)象繼承I_BusinessObject接口實(shí)現(xiàn)業(yè)務(wù)邏輯,當(dāng)Service Fa?ade調(diào)用具體業(yè)務(wù)組件時(shí),通過(guò)Factory工廠模式創(chuàng)建具體的Business Object。具體的過(guò)程是,F(xiàn)a?ade類(lèi)通過(guò)調(diào)用BOFactory類(lèi)的getBOName方法,根據(jù)操作類(lèi)型取得對(duì)應(yīng)的BusinessObject類(lèi)名,然后再利用JAVA的反射機(jī)制,生成繼承了I_BusinessObject接口的業(yè)務(wù)對(duì)象子類(lèi),從而執(zhí)行對(duì)應(yīng)的業(yè)務(wù)方法。
其中工廠類(lèi)BOFactory的關(guān)鍵部分是根據(jù)操作類(lèi)型將操作分配給不同的業(yè)務(wù)對(duì)象,所以每一個(gè)業(yè)務(wù)操作operation都要定義好,這些操作類(lèi)型都放到了Operation.java類(lèi)中,各個(gè)操作根據(jù)不同的業(yè)務(wù)分配一段不同的常量。
本系統(tǒng)主要包括以下Business Objects:EmployeeManager(處理與員工有關(guān)的業(yè)務(wù)操作)、DepartmentManager(處理與部門(mén)有關(guān)的業(yè)務(wù)操作)、ApplyManager(處理與申請(qǐng)單據(jù)有關(guān)的業(yè)務(wù)操作)、FlowManager(處理與審批流程有關(guān)的業(yè)務(wù)操作)、ApprovalManagerManager(處理與審批有關(guān)的業(yè)務(wù)操作)、RoleManager(處理與角色權(quán)限相關(guān)的業(yè)務(wù)操作)。
(3)表現(xiàn)層的實(shí)現(xiàn)
系統(tǒng)用戶首先通過(guò)IE瀏覽器向系統(tǒng)發(fā)出HTTP請(qǐng)求,然后Struts框架中的Controller捕獲到發(fā)來(lái)的請(qǐng)求,然后把請(qǐng)求Dispatch到相應(yīng)的Action去執(zhí)行相應(yīng)的功能,Action會(huì)根據(jù)請(qǐng)求的類(lèi)別找到業(yè)務(wù)邏輯層中的Service Fa?ade,然后調(diào)用相應(yīng)的業(yè)務(wù)邏輯;同時(shí)Controller還會(huì)把后臺(tái)返回的數(shù)據(jù)放到View(通過(guò)JSP頁(yè)面實(shí)現(xiàn))中以頁(yè)面的形式返回給用戶。Controller是整個(gè)Struts的控制中心,訪問(wèn)任何頁(yè)面、發(fā)出的任何請(qǐng)求、返回的數(shù)據(jù)都首先經(jīng)過(guò)Controller然后才轉(zhuǎn)向相應(yīng)的部分去執(zhí)行。而Action則是Struts框架中主要實(shí)現(xiàn)的部分,所有的操作代碼都放在這里實(shí)現(xiàn),Action類(lèi)做的工作只有兩個(gè),那就是首先從頁(yè)面收集請(qǐng)求數(shù)據(jù),把數(shù)據(jù)放到AppRequest中去,然后傳到后臺(tái)Business Objects執(zhí)行相應(yīng)的業(yè)務(wù)邏輯,然后把后臺(tái)返回的數(shù)據(jù)分發(fā)到不同的頁(yè)面并顯示給用戶。Struts從頁(yè)面收集數(shù)據(jù)和把數(shù)據(jù)返回頁(yè)面中的時(shí)候會(huì)借助ActionForm自動(dòng)進(jìn)行數(shù)據(jù)綁定。
這些數(shù)據(jù)綁定的配置信息以及控制器如何轉(zhuǎn)發(fā)頁(yè)面這些信息都放在struts-config.xml相關(guān)文件中。至于具體的業(yè)務(wù)邏輯,則是業(yè)務(wù)邏輯層的任務(wù)了。
本文給出了基于JAVA EE MVC架構(gòu)的電子賬務(wù)系統(tǒng)的總體設(shè)計(jì)和實(shí)現(xiàn)。該系統(tǒng)充分利用了Struts和多種設(shè)計(jì)模式的優(yōu)點(diǎn),基本上解決了電子賬務(wù)系統(tǒng)的問(wèn)題與不足。該系統(tǒng)是一個(gè)技術(shù)結(jié)構(gòu)和業(yè)務(wù)類(lèi)型相當(dāng)復(fù)雜的應(yīng)用系統(tǒng),具有良好的可伸縮性和可擴(kuò)展性,運(yùn)行安全可靠。該系統(tǒng)對(duì)企業(yè)報(bào)賬業(yè)務(wù)的快速處理起到了很好的支撐作用,具有很好的應(yīng)用前景。
[1] Tal Cohen,Joseph Gil.Aspect J2EE = AOP + J2EE towards an aspect based,programmable and extensible middleware framework. In:Proceedings of ECOOP 2004-Object- Oriented Programming,Oslo,Norway,June 14-18,2004.LNCS 3086/2004,219-243.
[2] Stefan B ? ttcher,Robert Hoeppe. Do we need components for persistent data storage in the Java 2 enterprise environment?In:Proceedings of Objects,Components,Architectures,Services,and Applications for a NetworkedWorld,Erfurt,Germany,October 7-10,2002.LNCS 2591/2003,152-165.
[3] 馬麗雪.財(cái)務(wù)集中化報(bào)賬平臺(tái)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].南京:南京大學(xué),2011.
[4] 屈昊.基于J2EE財(cái)務(wù)管理系統(tǒng)的研究[D].長(zhǎng)春:吉林大學(xué),2016.
[5] Deepak Alur,Dan Malks,John Crupi. Core J2EE Patterns[M].Prentice Hall PTR,2003.
[6] E.Gamma,R.Helm,R.Johnson,J.Vlissides.Design Patterns-Elements of Reusable Object- Oriented Software[M]. Addison Wesley,2002.
Design and Implementation of an E-accounting System Based on JAVAEE
Li Weilian
(China Mobile(Shenzhen)Limited,Shenzhen 518048,Guangdong)
The necessity of building an e-accounting system is discussed first.Based on the system analysis of the process of financial reimbursement,an e-accounting system is designed and implemented using Struts as the presentation layer framework and a reusable persistent layer based on JDBC as the data layer framework and using multiple design patterns under JAVA EE architecture.Our system can effectively support a large number of business accounting,ensuring the standardization of reimbursement documents,the electronization of approval process and the automation of information transfer.It is also characterized by its good expansibility and maintainability.
e-accounting system;OA;JAVAEE;MVC;Struts;design pattern
F275
A
1008-6609 (2017) 09-0034-04
李偉鐮(1980-),男,廣東南海人,碩士,軟件工程師,研究方向?yàn)橛?jì)算機(jī)網(wǎng)絡(luò)技術(shù)、軟件設(shè)計(jì)開(kāi)發(fā)。