APP下载

基于EasyUI+JavaEE的蔬菜ERP系统的设计与实现

2024-09-15闫俊甫邢梦

电脑知识与技术 2024年24期

摘要:为了提高蔬菜企业的生产效率,实现蔬菜从下单、生产、加工到运输服务的一体化管理,文章给出蔬菜ERP系统的设计与实现方案。该系统基于B/S架构,采用EasyUI+Struts2+Spring+JdbcTemplate框架开发以提高开发效率,使用MySQL数据库持久化数据,从整体上提高蔬菜企业的管理效率。

关键词:蔬菜ERP系统;JavaEE;EasyUI;Struts2;Spring;Spring JdbcTemplate

中图分类号:TP311 文献标识码:A

文章编号:1009-3044(2024)24-0061-03

开放科学(资源服务)标识码(OSID)

0 引言

蔬菜ERP系统涵盖了从生产、加工、运输到销售的完整供应链管理,是提高蔬菜质量、提供优质蔬菜、降低成本的关键。传统的手工管理方式效率低下,本系统采用EasyUI+Struts2+Spring+JdbcTemplate框架技术,结合MySQL数据库和存储过程,实现了高效的数据管理。系统从信息录入、加工、销售到售后服务进行全方位管理,实现数据的数字化和精准化。

1 相关技术简介

1)jQuery EasyUI是一个基于jQuery的框架,提供丰富的用户界面插件,方便构建现代化的交互式Web应用程序。

2)Struts2框架基于WebWork的设计理念,继承了Struts框架的部分优势,以更简洁的方式实现了MVC设计模式,其中模型、视图、控制器各司其职[1]。

3)Spring是一个轻量级JavaEE开源框架,其核心特性是依赖注入(DI)和面向切面编程(AOP)。Spring可以看作一个控制反转容器[2],其核心特性也可以应用于其他Java项目。

2 系统功能设计图

根据企业的实际需求,整个系统主要功能图如图1所示。

3 系统实现

本系统实现采用经典的MVC设计模式,它强制性地使应用程序的输入、处理和输出分开[3]。使用MVC模式,应用程序被分成3个核心部件:模型、视图、控制器。它们各自处理自己的任务。在本系统中,模型指Service层、Dao层、Model;视图指Jsp+EasyUI;控制器采用Struts2,三者相互配合,共同完成工作。

3.1 EasyUI视图层实现

视图层主要由JSP、EasyUI、JS文件组成。后台主页面主要采用EasyUI布局中的“border”布局,整个布局分为上(north)、左(west)、中间(center)、南(south)四个区域。其中,north区域放置logo、标题、个人基本信息、退出等信息;左侧(west)区域放置easyui-accordion手风琴组件,用来显示一级和二级操作菜单;中间(center)存放详细列表信息和操作管理功能,包括添加、修改、删除、反删除、打印、导入、导出等通用功能,此区域为核心功能区域;南(south)区域主要放置通信联系和企业信息等。后台主页部分主要代码如下:

<!--1. 在整个页面创建布局面板-->

<body class="easyui-layout" >

<!--1.1 region="north",指明高度,可以自适应-->

<div region="north" style="height: 62px;">

<div class="header">

<h1><p style="float:left; " id="title">蔬菜ERP管理系统</p></h1>

<ul class="rt_nav">

<li><a class="tx_top" >当前用户:<span>${sessionScope.user.opername}</span></a></li>

</ul>

</div>

</div>

<!--1.2 region="west",必须指明宽度-->

<div region="west" title="导航菜单" style="width: 220px; border-right: 5px solid #ebebed;">

<div class="easyui-accordion" style="width: 100%; border: none;" data-options="collapsed:false">

<!-- 权限信息,动态生成二级菜单 -->

<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",这里的宽度和高度都是由周边决定,不用设置-->

<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",指明高度,可以自适应-->

<div region="south" style="height: 30px;">

<div class="footer">

<ul>

<li><a href="javascript:void(0)">关于我们</a></li>

<li><a href="javascript:void(0)">技术支持:河南**软件科技有限公司</a></li>

系统主页面如图2所示。

3.2 EasyUI与后台的交互

EasyUI通过Ajax与后台交互,实现CRUD(添加、查询、更新、删除)操作。例如,商品蔬菜信息添加模块通过核心代码(“#form”).form(“submit”,{url:‘’,success:function(){}});与后台交互,url通过Struts2的struts.xml文件映射到相应的action上,进而调用Service层方法实现数据持久化。success:function()函数通过异步方式实现无刷新操作,提高用户体验。

3.3 Struts2控制层实现

Struts2作为MVC模式的控制核心,负责接收客户端数据,调用业务逻辑,并输出结果页面。Struts2主要采用一种轻量级的数据交换格式[4]JSON与EasyUI交互,通过封装Result类返回JSON数据。以添加蔬菜信息为例进行代码说明:

//添加蔬菜

public class BdVegetableAction extends BaseAction {

private bdVegetableService BdVegetableService; //业务层

...//setter getter方法

//商品添加

public void bdVegetableAdd() {

//获取前台的数据

String operType = request.getParameter("operType");

String SerialNumber = request.getParameter("SerialNumber");

...

if (!StringUtils.isBlank(vagetableItem)) {

JSONArray array = JSONArray.fromObject(vagetableItem);// 将前台json数组字符串转成对象

for (int i = 0; i < array.size(); i++) {

JSONObject obj = array.getJSONObject(i);

String RawMaterialNumber = String.valueOf(obj.get("RawMaterialNumber"));

...

if (!StringUtil.objectIsNull(RawMaterialNumber)) {

// 遍历添加明细

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 业务层实现

为了提高运行效率、方便维护和保证系统安全性[5],系统采用存储过程实现数据库操作。JDBCTemplate用于调用存储过程实现数据持久化操作。以添加商品信息为例,部分核心代码示例如下:

public class BdVegetableServiceImpl implements BdVegetableService {

private BaseDao<?> baseDao; //BaseDao封装公共方法,供业务层调用

public Map<String, Object> bdVegetableAddEditDeleteForProcedure(int ModifType, String SerialNumber_1,

String VegetableName_2, ..., String VegetableClass_11) {

//构造参数数组

Object[] ins = new Object[] { ModifType, SerialNumber_1, ...,VegetableClass_11 };

int[] outTypes = new int[] { Types.INTEGER, Types.VARCHAR };

String procedure = "call sp_InUpDel_BD_Vegetable(?,?,?,?,?,?,?,?,?,?,?,?,?,?)";//调用sp_InUpDel_BD_Vegetable存储过程

try { return baseDao.executeProcedureForResult(procedure, ins, outTypes); }

catch (Exception e) { e.printStackTrace();

return null;

}

...

END

添加蔬菜信息界面如图3所示。

4 总结与展望

本系统基于JavaEE框架,采用Eclipse开发工具,使用MySQL数据库,部署在Apache Tomcat服务器上,页面采用EasyUI框架。系统基于EasyUI框架,采用组件化编程,简化了客户端开发,并通过JSON格式实现数据交互,实现了页面异步刷新,提升了用户体验和企业管理效率。

随着技术的不断发展和商业环境的变化,越来越多的系统正朝着云端部署、移动化、数据分析、智能化、整合与拓展、用户体验、安全与隐私保护等方向发展。未来的蔬菜ERP系统将成为企业数字化转型的核心工具,为企业提供更高效的管理和决策支持。

参考文献:

[1] 张超,贺霖龄,张晶.SSM框架教程[M].长沙:湖南大学出版社,2023.

[2] 唐金鹏,韦祥,李玲琳.Java EE框架程序设计[M].上海:上海交通大学出版社,2024.

[3] 杨弘平,吕海华,李波,等.UML基础、建模与设计实战.北京[M].北京:清华大学出版社,2012.

[4] JSON[EB/OL].[2022-09-20].https://baike.baidu.com/item/JSON/2462549?fr=ge_ala.

[5] 秦凤梅.MySQL网络数据库设计与开发[M].3版.北京:电子工业出版社,2022.

【通联编辑:谢媛媛】