摘要:為了提高蔬菜企業(yè)的生產(chǎn)效率,實(shí)現(xiàn)蔬菜從下單、生產(chǎn)、加工到運(yùn)輸服務(wù)的一體化管理,文章給出蔬菜ERP系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)方案。該系統(tǒng)基于B/S架構(gòu),采用EasyUI+Struts2+Spring+JdbcTemplate框架開發(fā)以提高開發(fā)效率,使用MySQL數(shù)據(jù)庫持久化數(shù)據(jù),從整體上提高蔬菜企業(yè)的管理效率。
關(guān)鍵詞:蔬菜ERP系統(tǒng);JavaEE;EasyUI;Struts2;Spring;Spring JdbcTemplate
中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1009-3044(2024)24-0061-03
開放科學(xué)(資源服務(wù))標(biāo)識(shí)碼(OSID)
0 引言
蔬菜ERP系統(tǒng)涵蓋了從生產(chǎn)、加工、運(yùn)輸?shù)戒N售的完整供應(yīng)鏈管理,是提高蔬菜質(zhì)量、提供優(yōu)質(zhì)蔬菜、降低成本的關(guān)鍵。傳統(tǒng)的手工管理方式效率低下,本系統(tǒng)采用EasyUI+Struts2+Spring+JdbcTemplate框架技術(shù),結(jié)合MySQL數(shù)據(jù)庫和存儲(chǔ)過程,實(shí)現(xiàn)了高效的數(shù)據(jù)管理。系統(tǒng)從信息錄入、加工、銷售到售后服務(wù)進(jìn)行全方位管理,實(shí)現(xiàn)數(shù)據(jù)的數(shù)字化和精準(zhǔn)化。
1 相關(guān)技術(shù)簡(jiǎn)介
1)jQuery EasyUI是一個(gè)基于jQuery的框架,提供豐富的用戶界面插件,方便構(gòu)建現(xiàn)代化的交互式Web應(yīng)用程序。
2)Struts2框架基于WebWork的設(shè)計(jì)理念,繼承了Struts框架的部分優(yōu)勢(shì),以更簡(jiǎn)潔的方式實(shí)現(xiàn)了MVC設(shè)計(jì)模式,其中模型、視圖、控制器各司其職[1]。
3)Spring是一個(gè)輕量級(jí)JavaEE開源框架,其核心特性是依賴注入(DI)和面向切面編程(AOP)。Spring可以看作一個(gè)控制反轉(zhuǎn)容器[2],其核心特性也可以應(yīng)用于其他Java項(xiàng)目。
2 系統(tǒng)功能設(shè)計(jì)圖
根據(jù)企業(yè)的實(shí)際需求,整個(gè)系統(tǒng)主要功能圖如圖1所示。
3 系統(tǒng)實(shí)現(xiàn)
本系統(tǒng)實(shí)現(xiàn)采用經(jīng)典的MVC設(shè)計(jì)模式,它強(qiáng)制性地使應(yīng)用程序的輸入、處理和輸出分開[3]。使用MVC模式,應(yīng)用程序被分成3個(gè)核心部件:模型、視圖、控制器。它們各自處理自己的任務(wù)。在本系統(tǒng)中,模型指Service層、Dao層、Model;視圖指Jsp+EasyUI;控制器采用Struts2,三者相互配合,共同完成工作。
3.1 EasyUI視圖層實(shí)現(xiàn)
視圖層主要由JSP、EasyUI、JS文件組成。后臺(tái)主頁面主要采用EasyUI布局中的“border”布局,整個(gè)布局分為上(north)、左(west)、中間(center)、南(south)四個(gè)區(qū)域。其中,north區(qū)域放置logo、標(biāo)題、個(gè)人基本信息、退出等信息;左側(cè)(west)區(qū)域放置easyui-accordion手風(fēng)琴組件,用來顯示一級(jí)和二級(jí)操作菜單;中間(center)存放詳細(xì)列表信息和操作管理功能,包括添加、修改、刪除、反刪除、打印、導(dǎo)入、導(dǎo)出等通用功能,此區(qū)域?yàn)楹诵墓δ軈^(qū)域;南(south)區(qū)域主要放置通信聯(lián)系和企業(yè)信息等。后臺(tái)主頁部分主要代碼如下:
<!--1. 在整個(gè)頁面創(chuàng)建布局面板-->
<body class="easyui-layout" >
<!--1.1 region="north",指明高度,可以自適應(yīng)-->
<div region="north" style="height: 62px;">
<div class="header">
<h1><p style="float:left; " id="title">蔬菜ERP管理系統(tǒng)</p></h1>
<ul class="rt_nav">
<li><a class="tx_top" >當(dāng)前用戶:<span>${sessionScope.user.opername}</span></a></li>
</ul>
</div>
</div>
<!--1.2 region="west",必須指明寬度-->
<div region="west" title="導(dǎo)航菜單" style="width: 220px; border-right: 5px solid #ebebed;">
<div class="easyui-accordion" style="width: 100%; border: none;" data-options="collapsed:false">
<!-- 權(quán)限信息,動(dòng)態(tài)生成二級(jí)菜單 -->
<c:forEach items="${sessionScope.menuList}" var="menu">
<div class="tx_list" title="${menu.menuName }" data-options="iconCls:'${menu.icons}'">
<c:forEach items="${menu.map}" var="m">
<c:if test="${!empty m.PageIcoaddr}">
<a class="easyui-linkbutton" iconCls="${m.PageIcoaddr}" style="text-align: left" onclick="addTab('${m.MenuName}','${m.PageName}?MenuID=${m.MenuID}','${m.MenuID }')">${m.MenuName} </a>
</c:if>
<c:if test="${empty m.PageIcoaddr}">
<a class="easyui-linkbutton" iconCls="icon-ok" style="text-align: left" onclick="addTab('${m.MenuName}','${m.PageName}?MenuID=${m.MenuID}','${m.MenuID }')">${m.MenuName} </a>
</c:if>
<!--1.3region="center",這里的寬度和高度都是由周邊決定,不用設(shè)置-->
<div region="center" style="background: url(images/background.png) no-repeat; background-size: cover;" id="background">
<div id="tab" class="easyui-tabs" style="width: 100%; height: 100%;"> </div>
<div id="openDialog" style="max-height: 620px;"></div>
<;/div>
<!--1.5 region="south",指明高度,可以自適應(yīng)-->
<div region="south" style="height: 30px;">
<div class="footer">
<ul>
<li><a href="javascript:void(0)">關(guān)于我們</a></li>
<li><a href="javascript:void(0)">技術(shù)支持:河南**軟件科技有限公司</a></li>
系統(tǒng)主頁面如圖2所示。
3.2 EasyUI與后臺(tái)的交互
EasyUI通過Ajax與后臺(tái)交互,實(shí)現(xiàn)CRUD(添加、查詢、更新、刪除)操作。例如,商品蔬菜信息添加模塊通過核心代碼(“#form”).form(“submit”,{url:‘’,success:function(){}});與后臺(tái)交互,url通過Struts2的struts.xml文件映射到相應(yīng)的action上,進(jìn)而調(diào)用Service層方法實(shí)現(xiàn)數(shù)據(jù)持久化。success:function()函數(shù)通過異步方式實(shí)現(xiàn)無刷新操作,提高用戶體驗(yàn)。
3.3 Struts2控制層實(shí)現(xiàn)
Struts2作為MVC模式的控制核心,負(fù)責(zé)接收客戶端數(shù)據(jù),調(diào)用業(yè)務(wù)邏輯,并輸出結(jié)果頁面。Struts2主要采用一種輕量級(jí)的數(shù)據(jù)交換格式[4]JSON與EasyUI交互,通過封裝Result類返回JSON數(shù)據(jù)。以添加蔬菜信息為例進(jìn)行代碼說明:
//添加蔬菜
public class BdVegetableAction extends BaseAction {
private bdVegetableService BdVegetableService; //業(yè)務(wù)層
...//setter getter方法
//商品添加
public void bdVegetableAdd() {
//獲取前臺(tái)的數(shù)據(jù)
String operType = request.getParameter("operType");
String SerialNumber = request.getParameter("SerialNumber");
...
if (!StringUtils.isBlank(vagetableItem)) {
JSONArray array = JSONArray.fromObject(vagetableItem);// 將前臺(tái)json數(shù)組字符串轉(zhuǎn)成對(duì)象
for (int i = 0; i < array.size(); i++) {
JSONObject obj = array.getJSONObject(i);
String RawMaterialNumber = String.valueOf(obj.get("RawMaterialNumber"));
...
if (!StringUtil.objectIsNull(RawMaterialNumber)) {
// 遍歷添加明細(xì)
int result = BdVegetableService.bdRawmaterialratioAddEditDeleteForProcedure(OPER_TYPE_ADD, "0",
SerialNumber, RawMaterialNumber, TheProportion, AttritionRate);
...
//封裝Result類,返回JSON
Result result = new Result();
result.setFlag("1");
result.setMessage(SerialNumber);
super.toClient(JsonPluginsUtil.beanToJson(result));
3.4 業(yè)務(wù)層實(shí)現(xiàn)
為了提高運(yùn)行效率、方便維護(hù)和保證系統(tǒng)安全性[5],系統(tǒng)采用存儲(chǔ)過程實(shí)現(xiàn)數(shù)據(jù)庫操作。JDBCTemplate用于調(diào)用存儲(chǔ)過程實(shí)現(xiàn)數(shù)據(jù)持久化操作。以添加商品信息為例,部分核心代碼示例如下:
public class BdVegetableServiceImpl implements BdVegetableService {
private BaseDao<?> baseDao; //BaseDao封裝公共方法,供業(yè)務(wù)層調(diào)用
public Map<String, Object> bdVegetableAddEditDeleteForProcedure(int ModifType, String SerialNumber_1,
String VegetableName_2, ..., String VegetableClass_11) {
//構(gòu)造參數(shù)數(shù)組
Object[] ins = new Object[] { ModifType, SerialNumber_1, ...,VegetableClass_11 };
int[] outTypes = new int[] { Types.INTEGER, Types.VARCHAR };
String procedure = "call sp_InUpDel_BD_Vegetable(?,?,?,?,?,?,?,?,?,?,?,?,?,?)";//調(diào)用sp_InUpDel_BD_Vegetable存儲(chǔ)過程
try { return baseDao.executeProcedureForResult(procedure, ins, outTypes); }
catch (Exception e) { e.printStackTrace();
return null;
}
...
END
添加蔬菜信息界面如圖3所示。
4 總結(jié)與展望
本系統(tǒng)基于JavaEE框架,采用Eclipse開發(fā)工具,使用MySQL數(shù)據(jù)庫,部署在Apache Tomcat服務(wù)器上,頁面采用EasyUI框架。系統(tǒng)基于EasyUI框架,采用組件化編程,簡(jiǎn)化了客戶端開發(fā),并通過JSON格式實(shí)現(xiàn)數(shù)據(jù)交互,實(shí)現(xiàn)了頁面異步刷新,提升了用戶體驗(yàn)和企業(yè)管理效率。
隨著技術(shù)的不斷發(fā)展和商業(yè)環(huán)境的變化,越來越多的系統(tǒng)正朝著云端部署、移動(dòng)化、數(shù)據(jù)分析、智能化、整合與拓展、用戶體驗(yàn)、安全與隱私保護(hù)等方向發(fā)展。未來的蔬菜ERP系統(tǒng)將成為企業(yè)數(shù)字化轉(zhuǎn)型的核心工具,為企業(yè)提供更高效的管理和決策支持。
參考文獻(xiàn):
[1] 張超,賀霖齡,張晶.SSM框架教程[M].長沙:湖南大學(xué)出版社,2023.
[2] 唐金鵬,韋祥,李玲琳.Java EE框架程序設(shè)計(jì)[M].上海:上海交通大學(xué)出版社,2024.
[3] 楊弘平,呂海華,李波,等.UML基礎(chǔ)、建模與設(shè)計(jì)實(shí)戰(zhàn).北京[M].北京:清華大學(xué)出版社,2012.
[4] JSON[EB/OL].[2022-09-20].https://baike.baidu.com/item/JSON/2462549?fr=ge_ala.
[5] 秦鳳梅.MySQL網(wǎng)絡(luò)數(shù)據(jù)庫設(shè)計(jì)與開發(fā)[M].3版.北京:電子工業(yè)出版社,2022.
【通聯(lián)編輯:謝媛媛】