基于Struts2和DAO的企业销售服务系统
2016-01-26甘文丽范刚龙
甘文丽,范刚龙
(洛阳师范学院 信息技术学院,河南 洛阳471022)
基于Struts2和DAO的企业销售服务系统
甘文丽,范刚龙
(洛阳师范学院 信息技术学院,河南 洛阳471022)
摘要:使用Java Web开发相关技术实现了一个企业销售服务系统,实现了客户关系管理、产品销售管理、仓库管理、销售数据统计分析等功能,为企业全面掌握业务动态、经营状况以及更好地完善客户服务提供了便捷、直观的手段。系统使用Struts 2框架结合 DAO模式进行设计,数据库使用小巧方便的MySQL数据库,前台使用DIV+CSS进行页面的排版和设计,通过Ajax异步获取数据并动态的填充到页面中去,极大简便了用户的操作,同时为页面的呈现使用的丰富的动画效果,拥有非常良好的用户体验。
关键词:Java Web;Struts 2;DAO;Ajax;企业销售服务
0引言
企业销售服务系统是管理客户的信息、跟踪销售线索、管理各种销售活动、统计企业销售业绩的理想工具,是可以协助销售经理和销售人员快速管理客户、从事销售和业务活动的重要数据。因此,开发一个适合中小型企业的销售服务系统非常有意义。
本文设计和实现的企业销售服务系统通过客户管理、产品管理、销售管理、仓库管理、统计分析等功能,将独立的市场管理、销售管理与售后服务进行集成,提供统一的运作平台,实现了企业内部资源管理计算机化、标准化、自动化,减轻管理人员工作负担,提高了工作效率,也有助于企业领导的监控和决策。该系统采用MyEclipse6.5软件作为工具进行系统开发,运用安全性能高、可移植性好的JavaWeb框架Struts2[1-2]和目前流行的数据库访问模式DAO(DataAccessObject)[3]作为系统开发的基础构架,数据采用轻量级MySQL数据库存储,既提供了系统的可扩展性和可维护性,也保证了数据的稳定性。此外,系统大量使用了Ajax技术[4-5],为页面的各种操作带来了极大的方便和友好的用户体验。
1系统设计
该系统主要的功能不仅能存储企业的全部产品信息、库存信息、客户信息,而且能够对所有信息进行统一查看和管理,另外,系统提供了销售管理以及对销售情况的统计分析,为企业全面掌握业务动态、经营状况提供了便捷的手段。系统主要分为产品管理、客户管理、销售管理、仓库管理、统计分析等功能模块。
该系统的安全性主要是防止他人非法进入系统,从而保证了数据的安全性、数据存储的完整性和数据的可靠性。系统设置了5种不同权限等级的登录,等级越高所拥有的权限也越高,系统的流程图如图2所示。高等级管理员拥有此等级以下所有等级的权限。比如,权限等级为3的管理员同时拥有权限等级为1和2的所有操作权限。权限等级为5的管理员拥有所有的权限。企业员工的职位不同,他们拥有的权限也不同,将系统所有的功能划分为5个等级:
权限为1:只能查看产品信息、查看入库记录、查看出库记录、查看日经营历程、查看月经营历程,不能查看客户信息,没有任何的修改权限。
权限为2:此等级的企业员工主要负责企业产品的管理,他们依然没有权力查看客户的信息资料,拥有的主要功能有添加产品、修改产品信息、产品采购申请、产品采购撤销等操作。
权限为3:这个等级的员工只能查看客户信息和这些用户相应的订单信息,以便为客户进行一些送货或者回访等服务。
权限为4:可以把这个权限划分给销售部门,主要权限有添加订单、撤销订单、添加新客户以及修改客户信息。
权限为5:可以查看客户消费统计以及删除产品信息。
系统的功能模块和系统流程如图1、2所示:
图1 系统功能模块
2系统实现
系统采用了MyEclipse6.5作为开发工具,部署系统使用的Web服务器为Tomcat6,使用轻量级的数据库MySQL5.1保存数据。企业销售服务系统采用Struts2 +DAO的软件架构,分为:表现层、控制层、数据访问层。由于系统功能较多,下面以系统的添加产品功能为例,详细介绍Struts2结合Ajax和DAO设计模式的具体功能实现。
2.1表现层
表现层也就是视图,主要实现和用户的交互,采用了JSP技术结合Struts2标签和OGNL表达式生成页面,前台使用DIV+CSS进行页面的排版和设计。在用户界面和后台服务器之间加入Ajax引擎,用户提交请求时,先将请求送给Ajax引擎,由Ajax引擎判断该请求的类型,如果是简单的并且无需服务器处理的请求,则由Ajax引擎自行处理,这样就可以只从后台获取需要的少量数据从而避免刷新整个页面,减轻了服务器的负担,减少了用户等待的时间,极大的提高系统运行速度,增强了用户体验。添加产品功能表现层的核心代码如下:
functionaddProduct(){
varkindid= $('input[name=kindid]').attr('value');
if(kindid==0){
$('.message:eq(1)').html('请先选择一个产品目录').fadeIn('slow',function(){
setTimeout(function(){
$('.message:eq(1)').fadeOut(1000);
},1000);
});
}else{
varparams= $('form:eq(0)').serializeArray();
for(i=1;i<5;i++){
if(params[i].value==""){
$('input[name='+params[i].name+'〗')[0].focus();
return;
}}
$('.loading:eq(1)').fadeIn('normal',function(){
$.ajax({ //提交数据给服务器
url:rp+ '/admin/addProduct.do', //数据请求的url地址
type:'POST', //数据传递方式
data:params, //传递数据的参数字符串
dataType:'json', //数据返回的格式
success:function(data){ //请求成功时触发的函数
$('.loading:eq(1)').fadeOut('slow',function(){
$('.message:eq(1)').html(data.message).fadeIn('slow');
});},
error:function(xhr){
$('.loading:eq(1)').fadeOut('slow',function(){
$('.message:eq(1)').html('服务器响应异常,请稍候重试').fadeIn('slow');
});},
2.2控制层
主要负责接受用户发来的请求,调用数据访问层,并将用户请求的数据返回给表现层来显示。控制层主要由Struts2的核心控制器FilterDispatcher以及一些业务控制器Action构成。FilterDispatcher负责拦截所有的客户端请求,然后通过读取配置文件来确定交给哪个业务控制器Action继续处理。实现添加产品功能的业务控制器Action核心代码如下:
publicStringaddProduct() {
Stringcontent= "{";
ActionContextac=ActionContext.getContext();
if(!((Integer)ac.getSession().get("level")>1)) {
content+= "”result”:”flase”";
content+= ",”message”:”没有权限执行此操作”";
}elseif(id==null||kindid==null||name==null
||model==null||repair==null) {
content+= "”result”:”flase”";
content+= ",”message”:”产品信息不完整”";
}else{
ProductDaopd=DbFactory.getProductDao();
if(pd.getProductsNumber(id) > 0) {
content+= "”result”:”false”";
content+= ",”message”:”此产品编号已存在”";
}elseif(pd.addProduct(id,kindid,name,model,repair,remark)) {
content+= "”result”:”true”";
content+= ",”message”:”产品添加成功”";
}else{
content+= "”result”:”flase”";
content+= ",”message”:”产品添加失败,请重试”";
}
}
content+= "}";
ac.put("ajax",content);
return"success";
}
拦截器能在Action被调用之前和被调用之后执行一些代码,Struts2的大部分核心功能都是通过拦截器来实现的,如防止表单重复提交、类型转换、对象封装、校验、文件上传、页面预装载等,每一个拦截器都是独立装载的,可以根据实际的需要为每一个Action配置它所需要的拦截器。
2.3数据访问层
主要采用了DAO(DataAccessObject)设计模式,该层抽象和封装了对数据源的访问,负责管理管理对数据源的连接,以及数据的存取。数据访问层主要包括:数据库连接类、VO类、DAO接口、DAO实现类及DAO工厂类的设计和实现。(1)数据库连接类:主要功能是连接MySQL数据库并获得数据库连接对象,以及关闭数据库。(2)VO类也就是实体类,该类中所有属性和数据库表中字段完全对应,并在类中提供setter和getter方法来设置及获取该类中的属性。(3)DAO接口:声明了对数据库表的基本操作,如表中记录的增、删、改、查等。(4)DAO实现类:由于在DAO接口中只有方法的定义而没有具体实现,故需要定义DAO实现类对接口所声明的所有功能进行实现。(5)DAO工厂类:如果没有DAO工厂类,那么就要通过创建DAO实现类的对象才能完成数据库操作,这样就要知道具体的子类,对于后期的修改维护很不方便。DAO工厂类可以很好地解决问题,通过DAO工厂类的静态方法就可以获得具体的DAO实现类对象。数据访问层采用这样的DAO设计模式,可以极大的简化代码,增强软件的可移植性。
3 结语
本文介绍了JavaWeb框架Struts2结合DAO数据库访问模式在企业销售服务系统中的应用,Struts2作为系统的MVC(模型-视图-控制器)框架使用,所有通过浏览器发来的用户请求都由Struts2的核心控制器负责拦截,并且调用数据访问层的数据访问对象来处理用户请求,并把返回的结果封装成视图呈现给用户。通过Struts2+DAO数据库访问模式并且结合Ajax技术可以显著提高系统的开发效率,增强了系统的可维护性和可扩展性,并极大地提升Web应用的响应速度。该系统采用B/S结构,不用安装客户端,用浏览器就可以登录系统,只要能上网,随时随地都可以处理企业的业务,实现了企业各个部门之间的信息共享,系统几乎适用于所有的中小型企业,他们可以使用此系统来更加方便、智能、快捷地管理企业内部以及客户的信息。
[参考文献]
[1]王海涛,贾宗璞. 基于Struts和Hibernate的Web应用开发[J]. 计算机工程, 2011, 37 (9) :112 -114.
[2]王建文,王敏. 基于Struts框架的油田信息管理系统研究与实现[J]. 计算机工程与设计, 2009, 30 (16) :3231 -3233.
[3]宋波,李妙妍.利用泛型DAO模式改进轻量级J2EE架构[J]. 计算机工程与设计, 2009, 30 (24):5663.
[4]丁波,晁爱农. 基于Struts2框架的AJAX开发研究[J]. 计算机工程与设计, 2009, 30 (16) :3910 -3913.
[5]李红娟,温 酷. 基于J2EE与Ajax的Web应用架构设计[J].制造业自动化, 2011, 33(5):127 -129.
SalesandservicesystemofenterprisebasedonStruts2andDAO
GANWen-li,FANGang-long
(InstituteofInformationTechnologyLuoyangNormalUniversity,Luoyang471022,China)
(英文摘要略)
中图分类号:TP311
文献标识码:A
文章编号:2095-0063(2015)06-0021-04
收稿日期:2015-09-07
基金项目:河南省科技厅科技成果转化计划项目(142201110028)。
作者简介:甘文丽(1979-),女,河北邢台人,副教授,从事Java企业级应用开发研究。
DOI10.13356/j.cnki.jdnu.2095-0063.2015.06.006