儲(chǔ)澤楠 王偉
摘 要: 重點(diǎn)研究了當(dāng)前ERP系統(tǒng)的架構(gòu),針對(duì)傳統(tǒng)重量級(jí)的J2EE架構(gòu)部署難及不易擴(kuò)展的問(wèn)題,采用當(dāng)今流行的開源框架Struts、Hibernate和Spring,搭建了一個(gè)輕量級(jí)的J2EE架構(gòu)。將該架構(gòu)應(yīng)用于ERP物流管理系統(tǒng)的開發(fā)中,實(shí)現(xiàn)了采購(gòu)、銷售和庫(kù)存的協(xié)同一體化管理。系統(tǒng)的應(yīng)用對(duì)降低企業(yè)物料成本、增加企業(yè)利潤(rùn)、提高企業(yè)競(jìng)爭(zhēng)力有重要的意義。
關(guān)鍵詞: Struts; Hibernate; Spring; 物流管理系統(tǒng); 輕量級(jí)J2EE
中圖分類號(hào):TP311 文獻(xiàn)標(biāo)志碼:A 文章編號(hào):1006-8228(2019)03-36-03
Design and implementation of ERP logistics management system
of lightweight J2EE architecture
Chu Zenan, Wang Wei
(Department of Computer Science and Information Engineering, Anyang Institute of Technology, Anyang, Henan 455000, China)
Abstract: This paper focuses on the architecture of current ERP system. Aiming at the problem that the traditional heavyweight J2EE architecture is difficult to deploy and not easy to extend, a lightweight J2EE architecture is built by using the popular open source frameworks of Struts, Hibernate and Spring. The architecture is applied to the development of ERP logistics management system, which realizes the integrated management of procurement, sales and inventory. The application of the system is of great significance to reduce the cost of materials, increase the profits of enterprises and improve the competitive advantage of enterprises.
Key words: Struts; Hibernate; Spring; logistics management system; lightweight J2EE
0 引言
ERP系統(tǒng)從物流、財(cái)務(wù)、人力幾個(gè)方面協(xié)同管理企業(yè)經(jīng)營(yíng)活動(dòng),實(shí)現(xiàn)了企業(yè)生產(chǎn)經(jīng)營(yíng)各個(gè)環(huán)節(jié)的信息化管理和決策支持。物流管理系統(tǒng)是ERP系統(tǒng)中一個(gè)重要的子系統(tǒng),它從進(jìn)銷存三方面設(shè)計(jì)相應(yīng)的功能,全面包含包括采購(gòu)入庫(kù)、銷售出庫(kù)、倉(cāng)庫(kù)盤點(diǎn)等業(yè)務(wù)流程,并且與ERP的其他子系統(tǒng)都有數(shù)據(jù)交互,因此,其開發(fā)和應(yīng)用得到了企業(yè)的重視。
目前,針對(duì)物流管理系統(tǒng)的開發(fā)主要采用.net和J2EE平臺(tái),相比較而言J2EE平臺(tái)無(wú)關(guān)性突出,受到了開發(fā)人員的青睞。然而傳統(tǒng)的基于EJB的J2EE架構(gòu),部署困難,開發(fā)和維護(hù)成本高,因此本文采用開源框架Struts、Spring和Hibernate搭建輕量級(jí)的J2EE架構(gòu),實(shí)現(xiàn)對(duì)象和集成服務(wù)之間的松散耦合,解決傳統(tǒng)J2EE架構(gòu)的弊端,實(shí)現(xiàn)物流管理系統(tǒng)的各項(xiàng)功能。
1 輕量級(jí)J2EE架構(gòu)的搭建
Struts是由Apache軟件組織創(chuàng)建,它實(shí)現(xiàn)了MVC(視圖、模型和控制器)設(shè)計(jì)模式,為基于Web的開發(fā)提供了一個(gè)開源框架[1]。Spring是Rod Johnson創(chuàng)建的一個(gè)開源框架。它使用基本的JavaBean來(lái)完成以前只可能由EJB完成的事情。其控制反轉(zhuǎn)(IoC)和面向切面(AOP)的特點(diǎn),是松散耦合和輕量級(jí)的最大體現(xiàn)[2]。Hibernate是一個(gè)實(shí)現(xiàn)了ORM映射的開源框架,它對(duì)JDBC進(jìn)行了非常輕量級(jí)的對(duì)象封裝,可在應(yīng)用EJB的J2EE架構(gòu)中取代CMP,完成數(shù)據(jù)持久化的重任[3]。
Struts、Spring和Hibernate分別實(shí)現(xiàn)J2EE表示層、業(yè)務(wù)邏輯層和持久層的功能,如圖1所示。Struts管理用戶的請(qǐng)求和響應(yīng),并通過(guò)FilterDispatcher控制器委托業(yè)務(wù)邏輯層來(lái)處理,并選取模型數(shù)據(jù)中的內(nèi)容,呈現(xiàn)到用戶對(duì)應(yīng)的視圖中,在處理過(guò)程中進(jìn)行必要的驗(yàn)證和攔截。Spring讀取配置文件,自動(dòng)生成Bean實(shí)例,供業(yè)務(wù)邏輯使用,利用IOC實(shí)現(xiàn)了業(yè)務(wù)邏輯和持久邏輯組件的松散耦合,利用AOP為業(yè)務(wù)邏輯和持久邏輯模塊提供統(tǒng)一的切面服務(wù),通過(guò)DAOCLASS調(diào)用持久層接口方法[4-5]。Hibernate采用ORM機(jī)制,實(shí)現(xiàn)領(lǐng)域模型對(duì)象與關(guān)系數(shù)據(jù)庫(kù)的映射,解決了面向?qū)ο缶幊陶Z(yǔ)言與關(guān)系數(shù)據(jù)庫(kù)一起使用可能帶來(lái)的種種麻煩,其提供的API和HQL查詢接口使操作數(shù)據(jù)更有效、便捷。
2 系統(tǒng)功能分析
2.1 系統(tǒng)功能結(jié)構(gòu)
ERP進(jìn)銷存系統(tǒng)功能主要包含采購(gòu)管理、銷售管理、庫(kù)存管理等六個(gè)模塊,如圖2所示。采購(gòu)管理主要實(shí)現(xiàn)了采購(gòu)訂單和退貨的處理,銷售管理主要實(shí)現(xiàn)了銷售訂單和退貨的處理,庫(kù)存管理主要實(shí)現(xiàn)了入庫(kù)、出庫(kù)、庫(kù)位調(diào)整和送貨管理。
根據(jù)用戶需求,依據(jù)登錄人員的職責(zé)設(shè)置不同的角色,分配相應(yīng)的權(quán)限,操作對(duì)應(yīng)的系統(tǒng)界面。系統(tǒng)用戶角色主要包括:采購(gòu)員、銷售員、倉(cāng)庫(kù)管理員和系統(tǒng)管理員等。采購(gòu)員負(fù)責(zé)填寫并提交進(jìn)貨和退貨單,瀏覽、查詢、打印進(jìn)貨明細(xì),添加商品信息。銷售員負(fù)責(zé)填寫并提交銷售和退貨單,瀏覽、查詢、打印銷售明細(xì),添加客戶信息。倉(cāng)庫(kù)管理員負(fù)責(zé)客戶信息、商品信息、供應(yīng)商信息和倉(cāng)庫(kù)信息的維護(hù)。
2.2 系統(tǒng)工作流程
我們根據(jù)系統(tǒng)各個(gè)模塊的功能劃分,給出具體的工作流程。由于系統(tǒng)功能模塊較多,無(wú)法展示全部的工作流程,這里以庫(kù)存管理模塊為例,給出其具體的工作流程。如圖3所示。
在入庫(kù)管理工作中,管理員可以直接填寫入庫(kù)單,也可以通過(guò)采購(gòu)訂單產(chǎn)品明細(xì)列表生成,其結(jié)構(gòu)包含入庫(kù)單號(hào)、入庫(kù)日期、入庫(kù)類型、供應(yīng)商、收貨倉(cāng)庫(kù)、產(chǎn)品明細(xì)等內(nèi)容。入庫(kù)單提交確認(rèn)后,對(duì)庫(kù)存進(jìn)行修改。
在出庫(kù)管理工作中,管理員可以直接填寫出庫(kù)單,也可以通過(guò)銷售訂單產(chǎn)品明細(xì)列表生成“出庫(kù)單”,其結(jié)構(gòu)包含出庫(kù)單號(hào)、出庫(kù)日期、出庫(kù)類型、客戶、出貨倉(cāng)庫(kù)、產(chǎn)品明細(xì)等內(nèi)容。出庫(kù)單提交確認(rèn)后,對(duì)庫(kù)存進(jìn)行修改,生成并打印出送貨單,安排配送。配送完成后,生成并打印送貨回執(zhí)。
在庫(kù)位調(diào)整管理工作中,管理員填寫庫(kù)位調(diào)整單,其結(jié)構(gòu)包含調(diào)整單號(hào)、調(diào)整日期和調(diào)整明細(xì)等。庫(kù)位調(diào)整單確認(rèn)后,對(duì)庫(kù)位進(jìn)行修改,實(shí)現(xiàn)產(chǎn)品庫(kù)存量在庫(kù)位之間的移動(dòng)。
3 系統(tǒng)設(shè)計(jì)
3.1 系統(tǒng)處理流程設(shè)計(jì)
系統(tǒng)處理流程圖描述了J2EE各層之間的調(diào)用關(guān)系,如圖4所示。從上到下依次為表示層、業(yè)務(wù)邏輯層和持久層的設(shè)計(jì)。AbstractEditModeActionSupport類繼承了ActionSuppor工具類的功能,實(shí)現(xiàn)了Action接口和validateable接口,實(shí)現(xiàn)了數(shù)據(jù)校驗(yàn)功能,簡(jiǎn)化了對(duì)象的CRUD操作。Action調(diào)用了manager,managerimpl為了實(shí)現(xiàn)業(yè)務(wù)邏輯功能調(diào)用了多個(gè)Dao,DaoHibernate實(shí)現(xiàn)了數(shù)據(jù)庫(kù)對(duì)象的CRUD操作。
3.2 數(shù)據(jù)庫(kù)設(shè)計(jì)
經(jīng)過(guò)系統(tǒng)的功能分析和工作流程的分析,得到系統(tǒng)數(shù)據(jù)庫(kù)表。核心的數(shù)據(jù)表包括:product(產(chǎn)品)、warehouse(倉(cāng)庫(kù))、godow_nentry(入庫(kù)單)、stock_out(出庫(kù)單)、puchase_order(采購(gòu)訂單)、sales_order(銷售訂單)、stor_adjust(庫(kù)位調(diào)整單)、client(客戶)、provider(供貨商)、user(用戶表)、role(角色表)等。
4 系統(tǒng)實(shí)現(xiàn)
4.1 持久層的實(shí)現(xiàn)
持久層使用Hibernate的映射配置文件,實(shí)現(xiàn)了Domain Object與數(shù)據(jù)庫(kù)表的映射,并通過(guò)創(chuàng)建Dao接口和實(shí)現(xiàn)類封裝了針對(duì)Domain Object的各種持久化操作,進(jìn)而實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的CRUD操作。Domain Object經(jīng)過(guò)持久化后,就轉(zhuǎn)化成為了PO(持久化對(duì)象)。
4.2 業(yè)務(wù)邏輯層
4.2.1 編輯Spring配置文件
該層借助Spring的配置文件ApplicationContext.xml與持久層的Hibernate整合。在文件中,所有的對(duì)象都以
4.2.2 創(chuàng)建業(yè)務(wù)邏輯接口和實(shí)現(xiàn)類
業(yè)務(wù)層類圖設(shè)計(jì)中,設(shè)計(jì)了Manager接口和ManagerImpl實(shí)現(xiàn)類,接口中簡(jiǎn)單封裝了針對(duì)表示層調(diào)用的各種方法,例如:貨物的添加、修改、保存、刪除和查詢等操作。這些方法由ManagerImpl實(shí)現(xiàn),它調(diào)用Dao接口實(shí)例中的持久化操作,完成相應(yīng)的功能。在配置文件中,將Dao實(shí)現(xiàn)類注入到ManagerImpl中,根據(jù)依賴注入的要求,在ManagerImpl中定義了Dao實(shí)現(xiàn)類getter/setter方法。
4.2.3 表示層的實(shí)現(xiàn)
業(yè)務(wù)層和持久層的實(shí)現(xiàn),創(chuàng)建了MVC設(shè)計(jì)模式中的“M(模型)”。而模式中的“V(視圖)”和“C(控制器)”由表示層的Struts框架實(shí)現(xiàn)。
Struts使用Html的框架標(biāo)簽設(shè)計(jì)JSP頁(yè)面的布局,把頁(yè)面高層抽象為頁(yè)眉、導(dǎo)航、主體和頁(yè)腳元素的集合。在元素的具體實(shí)現(xiàn)過(guò)程中,使用Struts標(biāo)簽庫(kù)和JSTL標(biāo)簽庫(kù)進(jìn)行編輯,實(shí)現(xiàn)視圖的功能。struts提供了ActionServlet和Action組件實(shí)現(xiàn)控制器功能。ActionServlet接受用戶的請(qǐng)求,實(shí)現(xiàn)控制和轉(zhuǎn)發(fā)。ArticleAction對(duì)象根據(jù)用戶請(qǐng)求中的?mehtod=save參數(shù),執(zhí)行其定義的save方法,在該方法中,提取ActionForm對(duì)象的屬性,裝配域模型對(duì)象ArticleForm,將其作為參數(shù)在各層之間進(jìn)行數(shù)據(jù)傳遞;獲取對(duì)業(yè)務(wù)層AriticleManger接口的引用,進(jìn)而調(diào)用AriticleManger中的SaveArticle方法,完成信息錄入的業(yè)務(wù)邏輯。
5 結(jié)論
本文主要是分析了輕量級(jí)的J2EE架構(gòu),實(shí)現(xiàn)了表現(xiàn)層、業(yè)務(wù)邏輯層和持久層的松散耦合,有效的提高了系統(tǒng)的可擴(kuò)展性、可維護(hù)性和可移植性。并把該架構(gòu)在ERP物流系統(tǒng)的采購(gòu)、銷售和管理模塊加以適應(yīng),通過(guò)實(shí)驗(yàn)論證了該系統(tǒng)運(yùn)行良好,實(shí)現(xiàn)了企業(yè)的合理生產(chǎn),及時(shí)銷售和庫(kù)存控制,提高了企業(yè)的效率和效益。后續(xù)將考慮進(jìn)一步加強(qiáng)J2EE輕量級(jí)架構(gòu)的研究,力爭(zhēng)在商用軟件上加以重構(gòu)使用,提高系統(tǒng)架構(gòu)的穩(wěn)定性和魯棒性。
參考文獻(xiàn)(References):
[1] 曹靜,李梅,付惠茹,李沂橋,嚴(yán)開.基于J2EE的輕量級(jí)SSH框
架應(yīng)用[J].電子技術(shù)與軟件工程,2017.19:153-154
[2] 李丹.基于SSH框架的進(jìn)銷存管理系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].內(nèi)蒙
古科技與經(jīng)濟(jì),2017.19:60-62
[3] 尹云霞.基于分層思想的SSH框架整合技術(shù)研究[J].新技術(shù)
新工藝,2017.4:56-58
[4] 柯常欽,史毓達(dá).基于SSH框架的Web應(yīng)用系統(tǒng)開發(fā)研究[J].
湖北第二師范學(xué)院學(xué)報(bào),2010.27(8):102-105
[5] 王書程,曾賢龍,蘇玨.基于Struts框架的進(jìn)銷存管理系統(tǒng)的
設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)與信息技術(shù),2008.8:69-70