李偉鐮
(中國移動(深圳)有限公司,廣東深圳518048)
基于JAVAEE的電子賬務系統的設計與實現
李偉鐮
(中國移動(深圳)有限公司,廣東深圳518048)
本文探討了建立電子賬務系統的必要性,通過對財務報賬作業的系統分析,在JAVAEE 的多層架構下,以Struts 作為表現層框架、以基于JDBC設計的可復用的持久層作為數據訪問層框架, 并運用多種設計模式設計和實現了一個電子賬務系統。該系統能有效支撐企業大量報賬業務的快速處理,保障報賬單據的規范化、審批流程的電子化和信息傳遞的自動化,并具有良好的可擴展性、可維護性。
電子賬務系統;OA;JAVA EE;MVC;Struts;設計模式
近年來,隨著國內經濟建設的持續發展和行業競爭的加劇,企業正以一種前所未有的熱情致力于提高內部的管理素質與工作效率。財務管理工作作為企業管理的核心環節,將會直接影響企業的管理效率與經濟效益。在傳統的財務報賬模式中,報賬人要填寫紙質單據并找到各級領導進行審批,最后將單據拿到財務部門進行審核。這種報賬方式單據填寫和業務審批、財務審批效率低下、無法有效進行資金控制、無法提供有價值數據進行資金管理和決策分析,同時財務部門工作量也十分巨大。
為了解決這一問題,本文設計和實現了一個電子賬務系統。該系統采用了多種業界成熟的信息技術,參考了文獻[1-6]的研究成果,在J2EE的B/S應用構架下,以Struts作為表現層框架、基于JDBC設計了一個可復用的數據持久層框架,并運用多種設計模式利用JAVA語言開發。
該系統提供了報賬信息采集、審批、傳遞和財務審核功能,能有效支撐企業大量報賬業務的快速處理,提高財務集中核算和結算的準確性和效率,保障報賬單據的規范化、審批流程的電子化和信息傳遞的自動化,具有較好的可擴展性、相當的易用性和良好的可維護性。
JAVA EE(Java Platform,Enterprise Edition)是一種利用Java平臺來簡化企業解決方案的開發、部署和管理相關的復雜問題的體系結構,是一個基于組件的體系結構,定義了一套標準來簡化多層分布式企業應用程序的開發,它定義了一套標準化的組件,并為這些組件提供了完整的服務。
JAVA EE體系架構將表示邏輯、業務邏輯與數據邏輯相分離,使系統的并行操作、網絡計算能力大為提高,系統的整體性能得以優化,并采用先進的軟件分層設計思想,支持基于框架的開發,降低開發難度和成本,同時降低組件的耦合度,極大地增強軟件的可維護性、可擴展性,滿足大型管理信息系統的要求。
Struts框架基于MVC設計模式,主要由模型(Model)、視圖(View)、控制器(Controller)和解析XML文件的工具包四個部分構成,以實現業務代碼與視圖代碼分離,提高應用程序的可擴展性。
Struts框架的核心是一個靈活的控制層,它基于Java Servlets、JavaBeans和XML等一些標準技術。Struts提供了自己的Controller組件,并集成其它技術以提供Model和View。對于View,Struts與JSP、JSTL、JSF、XSLT等表示系統一起工作得很好。對于Model,Struts不僅可與JDBC和EJB這些標準的數據訪問技術交互,也可與Hibernate這類第三方程序包交互訪問。
系統的目標是根據企業現有的財務管理制度,開發出符合企業應用要求的電子賬務系統,以支撐企業財務集中,高效高質地傳遞核算資料為中心。具體建設目標如下:
(1)報賬單據的規范化:通過報賬系統對報賬單據的內容和格式進行規范,保證財務入賬依據的標準化,為財務核算規范奠定基礎。
(2)審批流程的電子化:通過電子報賬單和相應附件的電子化流轉,以及與OA系統的待辦事項集成,在保證審批質量的同時加快了審批流程,提高財務核算效率。
(3)信息傳遞的自動化:建立與ERP系統、合同管理系統、預算管理系統和OA系統的接口,實現信息快速準確傳遞,提高財務工作效率。
系統應具備相當的可靠性和可用性,足夠的可縮放性和良好的可維護性。財務報賬只是企業信息管理的其中一個部分,從企業整體發展戰略來看,系統還要具備高度的可擴展性,以便于添加新功能或者調整已有功能,隨時滿足企業的發展和業務擴展的需要。
電子賬務系統在整個財務系統中處于財務擴展平臺層。作為財務擴展系統的一部分,報賬平臺系統與已建成或將建設的多個財務系統都存在數據的交互關系。具體體系架構如圖1所示:

圖1 體系架構圖
系統的技術架構基于JAVA EE多層架構構建,其前端Web采用Apache的Struts框架實現,后端采用了多種JAVA EE的設計模式實現。具體技術架構如圖2所示:

圖2 技術架構圖
系統總體上可分為以下五個層次:
(1)客戶層:運行在用戶機器的瀏覽器中,處理與用戶的交互。
(2)交互層:整個Web層建立在Struts框架基礎上,處理用戶的請求并作出響應。其中View由JSP/HTML頁面組成,其數據表示是ActionForm Bean;Controller由ActionServlet、Struts-config.xml和ActionClass組成,而Model則交由業務邏輯層來實現。
(3)業務邏輯層:完成系統所需的業務,為Web層提供所需的業務方法,主要由JavaBean等Business Objects(BO)構成;業務邏輯層是整個系統的核心部分,系統所需的大部分邏輯代碼都放在這一層,該層采用了Fa?ade、Factory等的設計模式。
(4)數據存取層:處于業務邏輯層與后端的DBMS之間,提供業務對象到數據庫的映射,對業務邏輯層屏蔽數據庫的細節。
(5)資源層:即數據庫層,存放電子賬務系統的應用數據。
采用多層的體系結構,使應用數據的表示被限制到相應的層內,降低了數據在各層之間的耦合性,提高了整體架構的可維護性和可擴展性。

圖3 系統功能
系統功能設計如圖3所示。電子賬務系統功能架構主要包括:報賬單據模板功能、報賬單據流程管理、報賬通知管理、原始單據管理、預算和額度控制、查詢統計、信用報銷體系、接口管理和系統管理。其中:
(1)報賬單據模板功能包括對如下報賬單據功能的要求和定義:差旅費、借款還款、日常及其他費用、采購訂單類、非采購訂單類、人工成本、稅金、預付款、批量報賬、計提類費用、支付申請、暫收管理類、收入管理類、資產管理類、工程管理類、資金管理類、其他類。
(2)報賬單據流程管理報賬單據如下流轉流程:錄入、提交、審批、拒絕、刪除、授權錄入和授權審批。
(3)接口管理包括如下系統的接口:ERP系統、銀企互聯系統、合同管理系統、預算管理系統、OA系統。
(4)報賬通知管理包括:待辦事項通知和單據狀態通知。
(5)原始單據管理包括:原始單據的電子影像信息管理、原始單據的條碼管理和跟蹤。
(6)預算和額度控制包括:預算控制和額度控制。
(7)查詢統計包括:單據查詢和統計查詢。
(8)信用報銷體系。
(9)系統管理包括:用戶管理、配置管理、工作流管理、報賬模板管理和系統維護。
根據3.1節需求分析及3.3功能設計可知,電子賬務系統的核心是各種報賬單據的流程管理。每一種單據都有自己獨立的業務流程。下面以最常用的差旅費報銷單為例,設計企業電子賬務系統的業務流程。差旅費報銷單的業務流程主要包括申請人提出差旅報銷申請、人事行政助理審批、上級業務審批、財務會記審批、財務經理審批、財務出納審批、單據入庫結束等步驟。具體業務流程如圖4所示。

圖4 差旅費報銷單業務流程
根據申請人的級別以及申請人提交的申請單所涉及的金額不同,具體的業務審批流程也有所不同:若申請人為部門主管、部門經理、部門總監、總經理,則自動跳過與自己同級別及以下的審批人;若普通員工申請,若申請金額小于等于主管審批額度,則會跳過部門經理、部門總監、總經理,部門主管審批完后直接跳到財務會計;若金額大于主管額度又小于等于經理額度,則跳過部門總監和總經理,以此類推。
下面給出系統在數據持久層、業務邏輯層和表現層中的實現過程。
(1)數據持久層的實現
數據持久層主要采用了Data Access Object模式,訪問數據庫的細節都放在DAO中,業務層中的Business Object都繼承了基類DAOObject,而DAOObject主要定義了query和update方法,分別對應對數據庫的查詢和更新(包括增加、修改、刪除)操作。該層還運用了Service Locator模式來查找數據源,數據源從數據庫連接池中取得,ServiceLocator還會把第一次查找到的數據源緩存起來,以提高系統的整體性能。業務對象與數據庫的映射主要通過Value Object(VO)模式來實現,系統用到的所有值對象VO都繼承ValueObject基類,ValueObject基類中的getValues和setValues方法分別實現了從JavaBean?數據庫和從數據庫?JavaBean的值傳遞,前者將值對象中的字段值放到一個Properties對象中,從而最終傳入到數據庫中,而后者則將查找數據庫得到的以Properties為參數的值設到值對象中,供系統各個部分調用。
系統用到的所有SQL語句都集中存放在sqlCode.properties文件中,有利于數據庫管理員對數據庫做配置優化。
該數據持久層與實際業務邏輯無關,可供其他系統進行復用。
(2)業務邏輯層的實現
業務邏輯層負責封裝數據持久層提供的數據對象,并為表示層提供功能接口,由業務邏輯對象Business Objects實現。
業務邏輯對象繼承I_BusinessObject接口實現業務邏輯,當Service Fa?ade調用具體業務組件時,通過Factory工廠模式創建具體的Business Object。具體的過程是,Fa?ade類通過調用BOFactory類的getBOName方法,根據操作類型取得對應的BusinessObject類名,然后再利用JAVA的反射機制,生成繼承了I_BusinessObject接口的業務對象子類,從而執行對應的業務方法。
其中工廠類BOFactory的關鍵部分是根據操作類型將操作分配給不同的業務對象,所以每一個業務操作operation都要定義好,這些操作類型都放到了Operation.java類中,各個操作根據不同的業務分配一段不同的常量。
本系統主要包括以下Business Objects:EmployeeManager(處理與員工有關的業務操作)、DepartmentManager(處理與部門有關的業務操作)、ApplyManager(處理與申請單據有關的業務操作)、FlowManager(處理與審批流程有關的業務操作)、ApprovalManagerManager(處理與審批有關的業務操作)、RoleManager(處理與角色權限相關的業務操作)。
(3)表現層的實現
系統用戶首先通過IE瀏覽器向系統發出HTTP請求,然后Struts框架中的Controller捕獲到發來的請求,然后把請求Dispatch到相應的Action去執行相應的功能,Action會根據請求的類別找到業務邏輯層中的Service Fa?ade,然后調用相應的業務邏輯;同時Controller還會把后臺返回的數據放到View(通過JSP頁面實現)中以頁面的形式返回給用戶。Controller是整個Struts的控制中心,訪問任何頁面、發出的任何請求、返回的數據都首先經過Controller然后才轉向相應的部分去執行。而Action則是Struts框架中主要實現的部分,所有的操作代碼都放在這里實現,Action類做的工作只有兩個,那就是首先從頁面收集請求數據,把數據放到AppRequest中去,然后傳到后臺Business Objects執行相應的業務邏輯,然后把后臺返回的數據分發到不同的頁面并顯示給用戶。Struts從頁面收集數據和把數據返回頁面中的時候會借助ActionForm自動進行數據綁定。
這些數據綁定的配置信息以及控制器如何轉發頁面這些信息都放在struts-config.xml相關文件中。至于具體的業務邏輯,則是業務邏輯層的任務了。
本文給出了基于JAVA EE MVC架構的電子賬務系統的總體設計和實現。該系統充分利用了Struts和多種設計模式的優點,基本上解決了電子賬務系統的問題與不足。該系統是一個技術結構和業務類型相當復雜的應用系統,具有良好的可伸縮性和可擴展性,運行安全可靠。該系統對企業報賬業務的快速處理起到了很好的支撐作用,具有很好的應用前景。
[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] 馬麗雪.財務集中化報賬平臺系統的設計與實現[D].南京:南京大學,2011.
[4] 屈昊.基于J2EE財務管理系統的研究[D].長春:吉林大學,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-),男,廣東南海人,碩士,軟件工程師,研究方向為計算機網絡技術、軟件設計開發。