快递业务受理信息管理系统(源码)

摘要:本论文研究的目的是模拟实现一个基于B/S架构的快递业务受理信息管理系统,本系统使用了Strurs2+Spring+Hibernate框架,实现区域、分区、定区、取派员和工单等管理功能,达到自动分单效果,大大提高了快递业务受理时的分单效率,从而提高员工的工作效率。同时,本系统采用Apache Shiro框架,实现了对用户认证功能以及授权功能,对不同角色的用户实现了访问控制,通过采用Ztree菜单树设计,实现了动态菜单生成功能,使系统界面更加友好,并且为系统提供了一定的安全保障。关键字:SSH;快递;权限控制Express business information management system acceptedStudent majoring in computer science and technology Student majoring in computer science and technology YouYiTutor Liang JingDongAbstract:The purpose of this thesis is to implement a express business acceptance system based on B / S architecture, the system uses the framework of Strurs2 + Spring + Hibernate to achieve the function of regional, subregional, fixed area, taking work orders sent which can automatically divide a single effect and greatly improving the efficiency of the delivery business accepted sub-single time to improve employee productivity. At the same time, the system uses the Apache Shiro framework to achieve a function of user authentication and author
 *好棒文|www.hbsrm.com +Q: ^3^5`1^9`1^6^0`7^2# 
ization functions to users in different roles to achieve access control, by using the design of menu tree Ztree can achieve a dynamic menu generation features that make the system more user-friendly interface, and the system provides a certain degree of security.1 绪论1.1选题背景及国内外研究概况1.1.1选题背景目前,随着电子商务的蓬勃发展,网上购物越来越受人们青睐,从而也拉动了快递业务的快速发展。如今由于快递业务发展越来越成熟,运送范围越来越大,运输速度也越来越快,运输货物更加安全,更多的市民愿意选择通过快递来寄件。而快递公司也为了更好的满足客户,提供上门取件服务。客户可以通过打电话方式进行预约取件,当电话客服无法联系后也可以通过网上提交订单,公司在接受预约后,尽快分配取件员前往取件,无需顾客自己去快递运营点寄件,让客户寄件更加便捷。1.1.2国内外研究状况国外普遍对物流的重要性认识教早,而美国也是最早对物流活动进行管理的国家,而快递作为物流的一种,其在快递管理经验和实践经验也是最丰富、最先进和最完善的,是其它国家模仿和学习的榜样。二十世纪中叶到二十世纪后半段,快递等物流活动被认为在市场经营活动中一个不可或缺的部分,它为顾客提供服务。人们将更多的先进管理经验应用到物流管理中,从整个市场经营活动中来认识物流活动的重要性。从二十世纪后半段至今,计算机技术的高速发展,为快递管理的信息化和现代化管理提供技术支持和物质保证,使得快递企业的发展和理论的研究都得到了长足的进步。 自上世纪八十年代后期,随着科学技术发展的速度越来越快,科技水平的越来越高,进而推动了现代快递产业的快速发展目前,我国快递企业的管理信息系统所具备的功能相对简单且相互独立,基本上只具备一些简单的数据信息处理能力,其所具备的各个功能,包括仓储、运输等,彼此间联系不够紧密,无法有效整合起来,大大降低了系统的运行效率。我国快递企业的管理信息系统的开发缺乏有效的调研和需求分析,或者有些企业为节省资金而使用一些过时的硬件资源,使得一些管理系统的功能很难发挥出来,甚至在系统需要更新和补充某些功能时,很难实现,只能耗费更多的人力和财力来更换新的系统。目前很多系统缺少对物流行业的整体分析的功能,缺乏对数据的加工和助理,没有为企业对整个行业的现状分析提供数据依据,不能很好的为企业的未来发展提供帮助。虽然目前很多软件公司对物流企业这个市场一致看好,甚至已经有很多物流公司和软件公司合作开展了物流管理信息系统的开发,并取得了一些成绩,但无论是从硬件水平还是从开发的软件水平来分析,都和一些世界上先进国家的物流管理水平存在不小的差距,这需要我们进一步向先进国家学习经验和成果。1.2研究目的 意义1.2.1 研究目的此毕业设计中,由于时间与水平的关系,当然不可能实现一个完整的快递业务系统,将仅模拟实现快递业务受理的基本功能,包括一些基础档案的设置、权限、角色管理等功能。本课题的研究目的的重点是模拟实现一个能提升快递业务处理能力,实现自动分单功能,以及对用户权限进行控制的基于B/S架构的快递业务受理系统。1.2.2研究的意义近年来,全球经济化和信息化技术发展迅速,物流服务行业也逐渐在企业经营中占领着重要地位。而快递业务作为第三方物流的代表业务,在现代物流中更是不可或缺的一部分。对快递服务企业而言,要使顾客满意,必须在最短时间内安全地将物品送至目的地。现今快递行业竞争激烈,为了更好地服务顾客,为顾客节省时间,很多快递公司也提供了上门取件的服务。因此,快递服务企业除了需要考虑如何高效、快速运输货物,也要考虑如何尽快处理用户取件需求,安排人员取件,高效地完成信息录入,快速处理用户下单等方面,从而实现快递服务方便、快捷的目标。基于上述情况,提出了实现快递业务处理系统的想法,该应用主要通过java语言编写,为用户提供一个友好的应用界面,可以为快递公司业务受理员、仓库管理员、普通用户等不同角色的用户提供不同的服务,从而使快递公司在业务受理方面更加高效,为公司用户提供更方便、快捷的服务1.3研究内容本课题旨在实现B/S架构的快递业务受理系统,方便快递公司对员工和地区管理,加快处理快递分单等业务速度,实现一个友好界面的快递业务系统:调研与分析通过对快递行业的调研,分析快递业对于一些常用的相关软件的评价与建议,以及对于实现一些相应功能软件的需求,设计软件的数据库及主要功能。数据库设计 针对快递业务的情况,需要设计与公司员工相关的用户表、角色表、权限表、取派员表等;对于地区管理上需要设计分区、定区、区域等表,为后期自动分单的实现提供依据。界面设计学习使用JSP动态网页技术,同时学习jquery框架和css、javaascript、easyui等技术对页面进行样式编辑和区域布局,实现友好的用户界面。功能设计与算法实现客户要能实现注册、登陆、修改密码功能,且需要对密码进行MD5加密,客户还需要能够查询公司等信息,实现在线提交订单功能;公司员工要能实现取派员的管理功能,对区域信息、分区信息、定区信息的管理功能,实现自动分单,将通知单自动根据取件地址自动分到相应的取派员的功能,完成工作单的管理功能;对于公司员工实现角色管理、权限管理、用户管理的功能1.4技术路线本课题根据软件工程进行程序的开发,其采用了瀑布模型进行开发,大致流程图如下图1-1所示: 图1-1 技术路线图2开发工具及应用技术2.1相关技术概论1) Struts2Struts2是通过Struts1和webwork两种框架的优点合并之后,发展而来,是一种优秀的表现层框架。其开发流程类似Struts1,而内部结构类似webwork框架。Struts2允许POJO即简单地JAVA对象作为Action,且Action的execute方法不再与Servlet API耦合,更易测试。Struts2支持J SP、FreeMarker、Velocity等更多视图技术。而且有基于Spring AOP思想的拦截器机制,更易扩展,拥有更强大、更易用输入校验功能。2) HibernateHibernate是轻量级J2EE的持久层框架,是一种关系数据库ORM框架,ORM即通过将JAVA对象映射到数据库表,通过操作JAVA对象就可以完成对数据表的操作。Hibernate使用对象操作,生成底层SQL语句,用户可以完全脱离底层SQL,使得开发效率大幅度提升。。Hibernate的核心接口一共有6个:Session接口负责执行被持久化对象的CRUD操作。3) SpringSpring是一种分层的JavaSE/EE的一站式轻量级开源框架,可以自动维护所有对象创建和依赖关系。而且Spring框架只需要通过配置就可以完成对事务的管理,不需要用户进行手动编程,为用户编程带来了一定的便捷。Spring支持对Junit4的使用,开发人员可以通过注解的方式来测试Spring程序。而且Spring内部提供了对各种优秀的开源框架如Struts、Hibernate等的直接支持,便于集成各种优秀框架,大大提高了开发人员的开发效率。Spring最主要的思想是IoC(反向控制),或者称为DI(依赖注入)IoC是对传统控制流程的颠覆。编码阶段,系统把实例化对象和设置依赖关系直接交给了Spring,用户只需要面向接口编程。Spring的另一个重要思想是AOP,即面向切面编程。面向切面编程提供了一种机制,在执行业务的前后执行另外的代码。4) Apache ShiroApache Shiro 是一款开源的安全框架。它可以为任何应用提供安全的保障。Apache Shiro提供了认证、授权、加密和会话管理功能,可以隐藏复杂的问题,并且提供了简单明了的API,让使用者可以快速地开发出自己的程序安全代码。认证即用户身份识别,它是用户证明自己是谁的一个行为。授权是访问控制过程。会话管理即管理用户的会话,甚至在没有WEB或EJB容器的环境中,管理用户与时间相关的状态。加密即使用加密算法加密数据,让数据更加安全不会轻易被窃取。5) HessianHessian是一种轻量级的远程调用工具,可以用简单的方法来实现RMI功能。使用Hessian进行项目开发时,在服务器端必须包含Hessian的jar包,并且设计一个接口,用来给客户端调用,并且需要实现该接口的功能,在web.xml中配置好相应的servlet,由于使用二进制的RFC协议传输数据,因此对象必须实现serializable接口。客户端必须包含Hessian.jar包,并且一定要有和服务器端一样的接口,但是接口中的内容可以不一致,利用HessianProxyFactory调用远程接口。2.2开发方法系统采用的是从上到下的结构化系统开发方法,分为三个阶段:系统需求分析、系统设计与系统实现、系统测试。而结构化的开发方法则是当下发展比较成熟并且应用范围最广的一种方法。 系统需求分析。需要根据软件需求的规格说明来建立软件系统的总体结构和模块间的关系,定义各个功能模块的接口,并设计全局数据库。系统设计与系统实施。对需求分析产生的功能模块逐步细化,形成若干个可编程的程序模块。用流程图描述模块的内部细节,最后用java语言实现程序。3)系统测试。对系统程序进行单元测试和实例化的测试,验证程序模块接口与设计文档的一致性。2.3开发工具及开发环境1) B/S架构B/S架构即浏览器端、服务器端,是一种优秀的网络结构模式。B/S模式将系统功能的核心部分集中到服务器上实现,从而简化了系统的研发、使用和后期维护。在B/S模式中,客户端运行浏览器软件,系统管理员只需管理服务器即可。B/S架构最大的优点就是可以在任何地方进行操作而不用安装任何专门的软件,只要有一台能上网的电脑就能使用,客户端零维护,系统的扩展非常容易。2) 系统运行环境JRE 6.x以上。JRE(Java Runtime Environment)是运行Java程序所必须的环境的集合,我们可以在JRE上实现运行程序、测试程序和传输应用程序。JRE由Java虚拟机、Java核心类库和支持文件构成。3) Maven工具Maven是一种由JAVA语言编写的优秀的开源的项目管理工具。Maven采用了一种被称之为POM概念来管理项目,所有的项目配置信息都被定义在一个叫做POM.xml的文件中,通过pom文件,Maven可以管理项目编译、构建、测试、发布、报告等流程。?4) Tomcat服务器Tomcat 6.x及以上。Tomcat 服务器是一种优秀的开放源代码的Web 应用服务器,属于轻量级应用服务器,使用简单方便,并且Tomcat是免费的服务器,因此它在中小型系统和并发访问用户不多的场景下使用较多。Tomcat 运行时占用的系统资源小,扩展性好,支持负载平衡与邮件服务等开发应用系统常用的功能;而且它还在不断的改进和完善中,任何一个感兴趣的程序员都可以修改它或者为它添加新的功能,因此广泛受到程序员的青睐。5) MySQL数据库MySQL 5据库管理系统,它将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样.x及以上。MySQL数据库是一种关系型数据库管理系统,区别于别的数就增加数据查询修改的速度,并提高了数据访问的灵活性。MySQL数据库具有源代码可移植性,支持多种操作系统,并且它还支持多线程,具有提供多种数据库连接途径的优点。3系统分析与设计3.1 需求分析快递业务受理时,主要是要高效的处理业务,快速录入订单信息,根据客户的地址分给相应的取派员,取派员及时上门取件。所以需要对地区进行合理地划分以及为一定范围的区域分配相应的取派员,因此,本系统需要实现对取派员的管理,区域的管理,分区的管理,定区的管理,工作单的管理等业务。同时,快递公司有多种职位的员工,不同职位对应着不同的权限,因此本系统还要实现用户管理,权限管理,角色管理。本系统不仅供给快递公司员工使用,还有前端给普通客户使用,方便客户查询相关信息和提交自己的取件订单,因此在系统前端,客户要能实现注册、登陆,查询以及提交订单等功能。3.2 功能设计快递业务受理系统分为前台与后台两部分,前台由普通客户使用,后台给公司员工使用。在前台部分,客户主要是要能实现注册、登陆、修改密码、提交订单和查询功能。客户注册时需要判断用户名是否存在,保证用户名的唯一性,为保障客户信息安全,需要对密码进行MD5加密。客户未登录的情况下可以实现注册、查询功能,但是只有在已登录情况下才可以实现提交订单、修改密码功能。客户需要能够查询运费、公司新闻公告等信息,已登录客户能实现在线提交订单功能。在系统后台部分,由于不同职位的公司员工具有不同的访问系统的权限,因此系统要能实现角色管理、权限管理、用户管理,并且对不同用户要实现动态菜单树功能,即系统只显示该用户具有的权限可以访问的内容。系统的基础档案模块主要用来管理一些基础信息,例如取派员、区域、分区信息等。系统要能实现取派员的管理功能,例如增加、作废、修改、查询取派员功能。要实现对于区域信息、分区信息、定区信息的管理功能,同样要能具备增加、删除、修改、查询的基本功能,由于区域和分区信息较多,可以实现excel、pdf报表的批量导入、导出功能。在定区管理上实现关联CRM系统客户功能,为后期自动分单做准备。在业务受理上,实现工作单的添加功能,同时为提高分单效率,还应该实现自动分单,即将通知单自动根据取件地址自动分到相应的取派员的功能,完成工作单的管理功能。若自动分单失败,需要业务员人工分单,为客户分配相应的取派员。 系统框架功能模块如图3-1所示:图3-1 系统框架功能模块图3.3 数据库设计根据前面的需求分析可以分析出有用户、角色、权限、区域、分区、定区、取派员、工作单、通知单,客户几个实体,1个用户(管理员)可以创建多个角色和权限,一个角色可以有多个权限,而一个权限也可以为多个角色拥有,用户可以管理区域、分区、定区、取派员、工作单、通知单、客户,而一个区域包含多个分区,一个定区可以关联多个分区,1个定区由多个取派员负责,一个定区关联多个客户。E-R图如图3-2所示:图3-2 E-R图详细表结构如下所示:表名:权限表auth_function描述:存放用户权限的相关信息 定义:列名数据类型可否为空说明idvarchar不可编号pidvarchar可以父节点编号namevarchar可以名称codevarchar可以关键字descriptionvarchar可以描述pagevarchar可以访问路径generatemenuvarchar可以是否生成表单zindexint可以优先级表名:角色表auth-role描述:存放用户角色的相关信息 定义:列名数据类型可否为空说明idvarchar不可编号namevarchar可以角色名codevarchar可以关键字descriptionvarchar可以描述表名:定区表bc_decidedzone描述:存放定区的相关信息 定义:列名数据类型可否为空说明idvarchar不可编号namevarchar不可定义名staff-idvarchar不可取派员编号表名:区域表bc_region描述:存放区域的相关信息 定义:列名数据类型可否为空说明idvarchar不可编号princevarchar可以省cityvarchar可以市districtvarchar可以区postcodevarchar可以邮编shortcodevarchar可以简码citycodevarchar可以城市编码表名:取派员表bc_staff描述:存放取派员的相关信息 定义:列名数据类型可否为空说明idvarchar可以编号 namevarchar可以姓名telephonevarchar可以手机号haspdachar可以是否有通讯工具deltagchar可以是否作废stationvarchar可以所属部门standardvarchar可以取派标准表名:分区表bc_subarea描述:存放分区的相关信息 定义:列名数据类型可否为空描述idvarchar不可编号decided-zone-idvarchar可以定区编号region-idvarchar可以分区编号addresskeyvarchar可以关键字startnumvarchar可以起始号endnumvarchar可以结束号singlevarchar可以单双号positionvarchar可以位置表名:订单表 f_order 描述:存放订单的相关信息 定义:列名数据类型可否为空描述addressvarchar可以地址telephonevarchar可以手机号ordertimedate可以下单时间taketimedate可以取件时间fuser-idvarchar可以订单人编号receivenamevarchar可以收件人姓名表名:前台客户表f_user 描述:存放前台客户的相关信息 定义:列名数据类型可否为空描述usernamevarchar可以用户名passwordvarchar可以密码telephonevarchar可以手机号表名:通知单表qp_noticebill描述:存放通知单的相关信息 定义:列名数据类型可否为空描述idvarchar不可编号staff-idvarchar可以取派员编号customer-idvarchar可以客户编号customer-namevarchar可以客户姓名delegatervarchar可以联系人telephonevarchar可以手机号pickadressvarchar可以取件地址arrivecityvarchar可以到达城市producevarchar可以货物pickdatedate可以取件日期numint可以件数ordertypevarchar可以订单类型user-idvarchar可以处理人编号表名:工单表qp_workbill描述:存放工单的相关信息 定义:列名数据类型可否为空描述idvarchar不可编号noticebill-idvarchar可以通知单编号typevarchar可以类型pickstatevarchar可以分单类型buildtimevarchar可以创建时间remarkvarchar可以货物名staff-idvarchar可以取派员编号表名:用户权限表role_function描述:用户和权限的关系表 定义:列名数据类型可否为空描述role-idvarchar不可角色idfunction-idint不可权限id表名:用户角色表user_role描述:用户和角色的关系表 定义:列名数据类型可否为空描述uer-idvarchar不可用户idrole-idvarchar不可角色id表名:用户表t_user描述:存放后台用户的相关信息 定义:列名数据类型可否为空描述idvarchar可以编号usernamevarchar可以用户名passwordvarchar可以密码salarydouble可以工资birthdaydate可以生日gendervarchar可以性别stationvarchar可以部门telephonevarchar可以手机号表名:工作单表qp_workordermanage描述:存放工作单的相关信息 定义:列名数据类型可否为空描述arrivecityvarchar可以到达城市productvarchar可以货物numvarchar可以数量weightvarchar可以重量floadregrvarchar可以配载要求prodtypevarchar可以货物类型sendernamevarchar可以寄件人senderphonevarchar可以寄件人手机号senderaddressvarchar可以寄件人地址receivenamevarchar可以收件人姓名receivephonmevarchar可以收件人手机号receiveaddressvarchar可以收件人地址4系统实现4.1后台登陆模块4.1.1用户登陆服务器中UserAction中首先获取用户填写的登陆信息,包括用户名,密码和验证码,首先判断验证码是否正确,不正确,则返回登陆页面,并通过struts标签的actionerror显示验证码错误。若验证码正确,则基于shiro实现认证功能,调用BosRealm类中doGetAuthenticationInfo方法,使用用户名去数据库查询对应密码,若果用户名不存在或者该用户名密码与数据库中密码不一致,则返回空,回到登陆界面,显示错误提示用户名或密码错误。若用户名和密码均正确,则将该用户存到session中,便于拦截器中访问后台页面若没有在session中找到用户,则跳到登陆界面,必须先登录才可以查看后台界面。然后跳转到主页面,对当前用户进行授权,若用户为admin,则从数据库中查找所有权限菜单,授予admin,主界面生成相应菜单树。若不是admin,则去数据库中查找该用户角色,并查找角色相应的权限菜单,授予该用户访问该菜单权限。用户登录流程如图4-1所示。 图4-1 用户注册流程图主要代码实现如下:授权代码:protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) { 1,获取当前登陆用户 subject Subject subject = SecurityUtils.getSubject(); User user = (User) subject.getPrincipal(); 2,查询当前登陆用户角色信息SimpleAuthorizationInfo authorizationInfo = new SimpleAuthorizationInfo(); If(用户是admin ){查询所有角色和所有权限,并赋予其权限 authorizationInfo.addStringPermission(function.getCode());}else{是普通用户 根据当前用户,查询其具有的角色,通过角色获取权限 List roles = roleService.findRolesByUser(user);authorizationInfo.addRole(role.getCode());authorizationInfo.addStringPermission(function.getCode());}HQL语句://查询可以生成菜单的所有权限from Function where generatemenu=1 order by zindex//根据用户id查询用户权限from Function f inner join fetch f.roles r inner join fetch r.users u where u.id=? and f.generatemenu=1 order by f.zindex4.1.2修改密码功能用户点击修改密码,弹出对话框。首先判断两次密码是否一致,一致则调用UserService类对密码首先进行MD5加密,然后从session中获取当前用户,将当前用户id传给UserDAO对数据库进行修改密码操作。主要代码实现如下:userService.editpassword(user);4.1.3 用户注销功能用户点击注销,服务器获取当前用户,销毁session,返回到登陆界面主要代码实现:ServletActionContext.getRequest().getSession().invalidate();4.2基础档案模块4.2.1 取派员设置取派员设置中主要有添加取派员、作废取派员、还原取派员、修改取派员、列表显示取派员功能。添加取派员用户点击增加按钮,在弹出的对话框中输入取派员信息,form表单中做不为空检验,且手机号做校验必须以13开头的11位数字,所有信息都填好后,方可提交。执行StaffAction类中的save方法,而form表单中信息被驱动注入,可通过getModel()获得。作废取派员选中至少一行取派员,没选中取派员就点击作废会弹出警告框,在staff.jsp中通过js代码,将所选中的取派员id以逗号间隔连成字符串,staffAction类中通过驱动注入,获得ids,判断ids是否为空,为空则返回,不为空,则将ids按逗号切割,作为参数传给staffService类中的delBatch方法,通过StaffDAO类的executeNamedQuery方法,对数据库进行操作,将该记录的deltag设为1,即表示已作废,再返回到列表显示界面关键代码实现如下:staffDAO.executeNamedQuery("Staff.delete", id);HQL语句:update Staff set deltag=1 where id =?还原取派员用户至上选中一行取派员,点击还原按钮,Staff.jsp中将被用户选中的行数id以逗号连成字符串rids,staffAction类中通过驱动注入,获得rids,判断rids是否为空,为空则返回,不为空,则将rids按逗号切割,作为参数传给staffService类中的delBatch方法,通过StaffDAO类的executeNamedQuery方法,对数据库进行操作,将该记录的deltag设为0,即表示该取派员正常使用,再返回到列表显示界面关键代码: 取派员恢复功能 staffService.restoreBatch(rids.split(",")); HQL语句:update Staff set deltag =0 where id =?取派员列表显示实现分页查询,在StaffAction类中,通过属性驱动接收客户端传来的page(页码)和pageSize(每页记录数)参数 ,添加查询条件,即查询所有Staff,返回查询结果,服务端通过去数据库中查询总记录数,即为total,通过客户端获得的页码和每页记录数,查询当前页的所有记录,放在rows中返回,将查询结果放入值栈中,以json格式返回。客户端通过datagrid将返回的数据显示。4.2.2 区域设置区域设置主要有添加区域,修改区域,删除区域,导入区域,分页显示区域功能。此功能区域为行政区域列表,即国家划分的省、市、区,不可以修改。添加区域用户点击添加按钮,输入相关信息,form表单检验区域编号不可以重复,当用户输入区域编号后,staff.jsp中对该输入框做离焦事件,通过AJAX,向服务器查询该编号是否已存在,若存在,则弹出警告框。Form表单校验则所有信息必须填写才可提交,RegionAction类中,通过getModel()方法获得表单填写的内容,通过业务层RegionService调用regionDAO,完成数据库中添加信息操作。主要代码实现:(1)Region.jsp,ajax查询编号是否重复中 $("#regionID").blur(function(){ var idValue = $("#regionID").val(); $.post("${pageContext.request.contextPath}/region_findIdExist.action", {"id":idValue}, function(data){ if(id存在){ 弹出警告框,编号已存在 }});(2)保存: regionService.saveRegion(getModel());2)修改区域用户双击该行数据或者选中一行数据再点击修改按钮,即可弹出修改页面,修改页面会对选中的数据进行数据回显,点击保存按钮后,RegionAction中执行save()方法,在RegionDAO中,执行updateOrSave方法,自动判断Region对象若是瞬时态,即该对象id在数据库中不存在,是新增加的则执行save,若是托管态即该Region对象在数据库中有相应的id,则执行update方法主要代码实现:regionDAO.saveOrUpdate(region);3)删除区域用户至少选中一行数据,点击删除按钮,否则会弹出警告框,在region.jsp页面获取选中的行的id,按逗号连接成字符串ids,服务器端通过模型驱动接收字符串,判断字符串是否为空,不为空则将字符串以逗号分割,将id传递给RegionService中的delBatch方法,通过RegionDAO与数据库交互,删除相应id的数据。4)一键上传用户点击导入按钮,使用jquery的onupload插件实现上传功能,在region.jsp实现ocupload校验,判断文件是否为后缀是”.xls”格式的文件,不是则警告,是则提交到后台服务器中。Sturts2框架中有fileupload拦截器,服务器端RegionAction中需要提供File upload属性,接收上传的文件。用POI第三方工具来解析Excel格式文档,打开excel中的每一个sheet,读取每一行数据,将每行数据放入一个Region对象中,而数据库中Region还有城市编码即城市拼音的全拼和简码属性即省市区每个拼音字母大写连写,需通过pinyin4j工具,实现简码和城市编码的生成。再通过RegionService类对region对象进行保存,执行saveOrUpadate方法,避免重复导入问题。主要代码实现: (1)判断文件扩展名是否符合要求 onSelect : function(self, element){ this.autoSubmit = false; // 判断文件扩展名是否符合要求 var regex = /^.*.xls$/ ; // 以.xls结尾 if(满足)){ 提交for }else{ 不满足 $.messager.alert(警告,上传文件必须为.xls结尾,warning);}(2)批量导入 public String importXls(){ List subareas = new ArrayList(); 1.使用POI 解析upload 文件 HSSFWorkbook hssfWorkbook = new HSSFWorkbook(new FileInputStream(upload)); 2.打开sheet HSSFSheet sheet = hssfWorkbook.getSheetAt(0); 3.读取每一行 for (Row row : sheet) { 4、 读取单元格 每行数据 对应 一个Region对象 Region region = new Region (); 按列将数据封装到Region中例如region.setId(id); regions.add(region) } 调用业务层 保存 regionService.saveBatch(regions); 返回列表显示 }区域列表显示实现分页查询,在RegionAction类中,通过属性驱动接收客户端传来的page(页码)和pageSize(每页记录数)参数 ,添加查询条件,即查询所有Region,返回查询结果,服务端通过去数据库中查询总记录数,即为total,通过客户端获得的页码和每页记录数,查询当前页的所有记录,放在rows中返回,将查询结果放入值栈中,以json格式返回。客户端通过datagrid将返回的数据显示。4.2.3 管理分区分区是对区域的细分,因为行政区域不可更改,且大小规则不同,不可以行政区域为单位分配快递员,所以对行政区域细分成一个个分区。对分区进行维护,为后期定区管理和自动下单等后续操作提供基础数据支持。管理分区分为按条件查询功能,保存分区功能,修改分区功能,删除分区功能,导入分区功能,导出分区功能,显示分区列表功能。添加分区用户点击添加按钮,弹出添加对话框,在对话框中有选则区域下拉框,下拉框中通过服务器查询数据库中所有区域,将区域中省市区字段拼接成字符串显示,由于区域较多,因此当用户自己在下拉框中输入时,进行模糊查询,显示查询到的区域。Form表单自动校验全部填写后方可提交,SubareaAction对提交的表单通过getModel()获取Subarea对象,通过业务层调用subareaDAO执行保存操作 修改分区用户至少选中一行分区点击修改或者双击一行数据进行修改,弹出修改对话框,form表单中进行自动回显,而选择区域的下拉框则需要手动回显,用户点击保存,SubareaAction中通过getModel()方法获得Subare对象,调用业务层,通过SubareaDAO对数据库进行操作,执行saveOrUpdate()方法。删除分区用户至少选中一行,点击删除按钮,否则会弹出警告框,在subarea.jsp页面获取选中的行的id,按逗号连接成字符串ids,服务器端通过模型驱动接收字符串,判断字符串是否为空,不为空则将字符串以逗号分割,将id传递给SubareaService中的delBatch方法,通过SubareaDAO与数据库交互,删除相应id的数据。分区查询用户点击查询按钮,弹出查询框,输入用户想查询的条件点击查询,提交给服务器端,服务器端封装查询条件,涉及单表查询和多表查询,单表查询条件有关键字和编码,多表查询条件有分区中的省、市、区条件。将查询到的数据进行分页显示。主要代码实现如下:private void model2Criteria() {if (如果用户地址不为空) { 添加关键字查询条件 subareaCriteria.add(Restrictions.like("addresskey", "%" + getModel().getAddresskey() + "%"));}if (定区不为空) { 添加定区查询条件}if (如果区域不为空) {关联区域DetachedCriteria regionCriteria = subareaCriteria.createCriteria("region");}if (如果省份不为空)) { 添加省查询条件}if (如果城市不为空) { 添加城市查询条件}if (如果区域不为空) {添加区域查询条件}}subareaService.pageQuery(pagination);分区列表显示实现分页查询,在SubareaAction类中,通过属性驱动接收客户端传来的page(页码)和pageSize(每页记录数)参数 ,添加查询条件,即查询所有Subarea,返回查询结果,服务端通过去数据库中查询总记录数,即为total,通过客户端获得的页码和每页记录数,查询当前页的所有记录,放在rows中返回,将查询结果放入值栈中,以json格式返回。客户端通过datagrid将返回的数据显示。一键上传功能用户点击导入按钮,使用jquery的onupload插件实现上传功能,在subarea.jsp实现ocupload校验,判断文件是否为后缀是”.xls”格式的文件,不是则警告,是则提交到后台服务器中。Sturts2框架中有fileupload拦截器,服务器端RegionAction中需要提供File upload属性,接收上传的文件。用POI第三方工具来解析Excel格式文档,打开excel中的每一个sheet,读取每一行数据,将每行数据放入一个Subarea对象中。再通过SubareaService类对region对象进行保存,执行saveOrUpadate方法,避免重复导入问题。分区下载用户点击导出按钮,选择导出地区,点击确定即可将查询到的数据或所有数据全部导出为.excel格式。如果是查询导出,则服务器中还需查询一遍,封装查询条件,查询所有符合条件的Subarea对象,通过POI创建内存中的excel,将查到的数据一行行写入excel中。服务器端提供一个输出流,两个输出头即可实现下载功能。4.2.4定区管理 定区即是指取派范围的单位,一个定区可能关联几个分区,关联几个取派员进行取件,为后期自动下单提供服务。定区管理主要有添加定区,修改定区,删除定区,关联CRM系统客户功能,显示定区列表功能。添加定区用户点击添加按钮,弹出添加定区对话框,form表单中内容不可为空,否则不得提交,在选择取派员下拉列表时,服务器后台去StaffAction类中调用findNoassociationStaff方法,通过StaffDAO去数据库查询未关联的取派员,并显示在下拉列表框,将未关联定区的分区通过SubareaAction中通过findNoassociation方法,通过SubareaDAO去数据库中查找没有关联定区的分区也显示出来。表单校验提交后,DecidedZoneAction通过属性驱动获得关联的分区编号,取派员编号以及定区的其他信息,通过DecidedZoneDAO去数据库中进行添加动作。 主要代码实现如下: //查询未关联的分区 List subareas = subareaService.findnoassociation(); HQL语句:from Subarea s where s.decidedZone is null //查询未关联的取派员 List staffs = staffService.findNoassociationStaffs(); HQL语句:from Staff s left outer join fetch s.decidedZones d where d.staff is null and s.deltag=0 //保存定区decidedZoneService.saveDecidedZone(getModel(), subareaId);定区修改用户双击该行数据或者选中一行数据再点击修改按钮,即可弹出修改页面,修改页面会对选中的数据进行数据回显,点击保存按钮后,DecidedZoneAction中执行save()方法,在DecidedZoneDAO中,执行updateOrSave方法,自动判断Region对象若是瞬时态,即该对象id在数据库中不存在,是新增加的则执行save,若是托管态即该DecidedZone对象在数据库中有相应的id,则执行update方法。定区删除用户至少选中一行,点击删除按钮,否则会弹出警告框,在decidedzone.jsp页面获取选中的行的id,按逗号连接成字符串ids,服务器端通过模型驱动接收字符串,判断字符串是否为空,不为空则将字符串以逗号分割,将id传递给DecidedZoneService中的delBatch方法,通过DecidedZoneDAO与数据库交互,删除相应id的数据。定区分页显示实现分页查询,在DecidedZoneAction类中,通过属性驱动接收客户端传来的page(页码)和pageSize(每页记录数)参数 ,添加查询条件,即查询所有DecidedZone,返回查询结果,服务端通过去数据库中查询总记录数,即为total,通过客户端获得的页码和每页记录数,查询当前页的所有记录,放在rows中返回,将查询结果放入值栈中,以json格式返回。客户端通过datagrid将返回的数据显示。定区关联客户功能运用RMI远程调用技术,通过调用CRM系统中的方法,来实现本系统的功能,本功能实现通过Hessian技术得以实现,本系统需提供与CRM系统中要用的方法的相同的业务接口,接口名称必须一致,但是接口中的内容可以不一样。实现spring对Hessian业务的接口代理,注入HessianProxyFactoryBean。用户点击关联客户按钮,在decidedzone.jsp中进行判断是否仅只选中一行数据,不是则弹出警告框必须选中一行定区数据才可以实现该功能。在弹出窗口前,从CRM系统中从数据库中获取用户的列表数据,在左侧列表中显示出未关联定区的客户,在右侧列表中显示已关联该定区的客户,为今后的自动分单做准备。用户点击左侧列表中的客户,再点击向左移动箭头,即将选中的客户关联到该定区,同理,用户点击右侧列表中未关联的客户,点击向右移动的箭头,即将该客户解除与该定区的关联,用户点击保存按钮,服务器调用DecidedZoneAction中添加将客户关联到定区的方法assigncustomersToDecidedZone方法。 4.3受理模块4.3.1 业务受理 业务受理主要包括添加通知单和自动分单两个功能。添加通知单通知单中主要包括寄件用户信息,即手机号、寄件人、寄件地址等信息。用户点击新单按钮,弹出通知单对话框,添加通知单时输入客户手机号,远程调用CRM系统获取该手机号用户的信息回显,通过findByTelephone方法获取查询的客户。Form表单校验所有信息填写完善后,调用NoticeBillAction类,通过模型驱动注入,获取表单信息,封装到NoticeBill实体类中,调用NoticeBillDAO,实现对数据库的添加操作。自动分单当用户提交新单后,服务器将先自动执行分单操作,将每一单根据客户的取件地址自动分配给管理该区域的取件员,从而避免了工作人员手动分单,大大提高分单效率,节约了大量的时间,给客户更好的服务体验。自动分单功能的实现首先要通过客户填写的取件地址,去CRM系统中匹配,如果存在该地址,则可以找到该地址关联的定区编码,而定区已经关联Staff取派员,则自动生成工单,在通知单中,则要将分单类型设为自动分单。如果没有在CRM系统中找到匹配地址,则可根据用户提交的地址解析出分区的关键字、省市区,根据省市区去数据库中查出相应的分区,如果取件地址上包含了该分区的关键字,则查找该分区关联的定区,并获得定区关联的取派员,生成工单。在通知单中,将分单类型设为自动分单。如果两种方式都没有找到匹配的地址,那么就在通知单中,将分单类型设为手动分单,将由业务员手动为客户分配取派员。自动分单流程图如图4-2所示。 图4-2自动分单流程主要代码实现:(1) CRM地址库匹配法String pickAddress = noticeBill.getPickaddress();String decidedZoneId = customerService.findDeciedZoneIdByAddress(pickAddress);if (定区编码不为空)) { 找到定区编号,获得关联的取派员 ); noticeBill.setStaff(staff); noticeBill.setOrdertype("自动");自动生成工单信息}(2)分区管理关键字匹配方法(在CRM中没有找到)对地址 ,分析出省、市、区 if (如果包含省)) {解析出省市区} else {不包含省解析出市区}通过省市区 查询分区列表List regions = regionDAO.findByNamedQuery("Region.findByProvinceCityDistict", province, city, distinct);if (查出区域)) { for (Subarea subarea : subareas) { if (取件地址包含分区关键字)){ if (分区中关联了定区) { Staff staff = subarea.getDecidedZone().getStaff(); noticeBill.setStaff(staff); noticeBill.setOrdertype("自动"); 自动生成工单信息 保存工单}HQL语句:select distinct decidedzone_id from Customer where address = ? from Region where province =? and city=? and district=?4.3.2工作单快速录入工作单快速录入主要包括添加工作单功能,显示工作单列表功能,生成报表功能。添加工作单用户点击添加按钮,弹出添加定区对话框,form表单中内容不可为空,否则不得提交,表单校验提交后,WorkOrderManage Action通过属性驱动获得工作单WorkOrderManage对象,通过WorkOrderManage DAO去数据库中进行添加动作。工作单列表显示实现分页查询,在WorkOrderManage Action类中,通过属性驱动接收客户端传来的page(页码)和pageSize(每页记录数)参数 ,添加查询条件,即查询所有WorkOrderManage,返回查询结果,服务端通过去数据库中查询总记录数,即为total,通过客户端获得的页码和每页记录数,查询当前页的所有记录,放在rows中返回,将查询结果放入值栈中,以json格式返回。客户端通过datagrid将返回的数据显示。生成报表用户点击生成报表按钮,弹出选择保存地址对话框。服务器端用Itext技术实现生成pdf表格,服务器端首先需要提供文件下载头信息,下载文件名filename,设置content-disposition头信息,调用workOrderManageService业务层,查询所有工作单,返回所有查询结果,用Itext实现生成一个PDF文档,添加文档内容,将查询的工作单信息存入文档中。4.4 系统管理4.4.1用户管理用户管理包含添加用户和删除用户功能。添加用户用户点击添加用户按钮,弹出添加用户对话框,服务器通过对角色表查询,查询所有角色,显示在表单中供用户选择,form表单校验所有信息均填写后才可提交表单,UserAction中通过属性驱动获得User对象,调用userService实现save()方法。添加之后,返回用户显示列表,查询出数据库中当前所有用户,并以json格式返回数据,在jsp中显示信息。删除用户用户至少选中一行数据,点击删除按钮,否则会弹出警告框,在user.jsp页面获取选中的行的id,按逗号连接成字符串ids,服务器端通过模型驱动接收字符串,判断字符串是否为空,不为空则将字符串以逗号分割,将id传递给UserService中的delBatch方法,通过UserDAO与数据库交互,删除相应id的数据。4.4.2 角色管理角色管理功能则主要包括对角色授权并保存角色功能,用户点击添加角色按钮,弹出角色对话框,对话框中服务器通过FunctionService,找到所有的Function,通过ztree和function中的节点信息,在表单中生成权限树,供用户进行授权。Form表单校验,所有信息不为空则可以提交。在roleadd.jsp中通过js代码将用户勾选的权限菜单的id以逗号相连,以字符串形式传递给服务器端,RoleAction中通过驱动注入,获得角色的基本信息和用户勾选的权限ids,通过FunctionDAO类与数据库交互,实现角色添加。4.4.3 权限管理添加权限功能,用户点击添加按钮,输入权限的相关信息,form表单检验区域编号不可以重复,当用户输入区域编号后,Functionadd.jsp中对该输入框做离焦事件,通过AJAX,向服务器查询该编号是否已存在,若存在,则弹出警告框。Form表单校验则所有信息必须填写才可提交,FunctionAction类中,通过getModel()方法获得表单填写的内容,通过业务层FunctionService调用FunctionDAO,完成数据库中添加信息操作。4.5前台模块4.5.1注册模块用户点击注册,进入注册模块,输入用户名时,jsp端发送Ajax请求,将用户输入的用户名作为参数发送给服务器,服务器端通过FrontUserDAO进入数据库中查找该用户名是否已经存在,若存在,则返回用户名已存在信息显示,若不存在则返回信息可用。用户两次输入的密码,通过Js代码进行判断,是否一致,若不一致,则显示用户密码两次不一致。Form表单校验,所有信息均填写则提交到服务器,FrontUserAction中首先判断校验码和用户输入的是否一致,不一致,则返回注册页面并显示校验码错误。一致则通过FrontUserDAO对数据库实行添加数据功能。用户注册流程如图4-3所示:图4-3 用户注册模块4.5.2用户修改密码功能用户点击修改密码,弹出对话框。首先判断两次密码是否一致,一致则调用FrontUserService类对密码首先进行MD5加密,然后从session中获取当前用户,将当前用户id传给UserDAO对数据库进行修改密码操作。4.5.3用户提交寄件订单功能用户点击寄件,弹出订单列表,用户填写所有信息后,点击提交,服务器端首先判断用户是否登录,若session中没有用户,则跳到登陆界面,登陆后方可提交订单,已经登陆,则服务器端FrontOrderAction类通过属性注入获取FrontOrder对象,,通过FrontOrderDAO对数据库实行添加操作。 public String jijian(){ 获取当前用户user if(user不存在){ 回到登陆界面 }获取客户输入验证码checkcode以及生成的验证码key if(验证码校验失败){ 显示验证码输入错误 } 将用户关联到订单上 调用业务层执行订单保存功能 frontorderservice.savejijian(getModel()); }4.5.4用户注销功能用户点击注销,服务器获取当前用户,销毁session,返回到登陆界面主要代码实现:ServletActionContext.getRequest().getSession().invalidate();5 主要图形界面设计与效果展示用户登录界面如图5-1所示: 图5-1 用户登录界面2) 系统主界面如图5-2所示:  图5-2 系统主界面3)分区功能界面如图5-3所示,取派员,区域页面与分区界面类似。 图5-3 分区功能界面4) 关联客户界面如图5-4所示: 图5-4 关联客户界面5)生成报表界面及生成的报表样式如图5-5所示: 图5-5 报表界面及报表样式图6)添加角色界面,显示权限菜单树如图5-6所示: 图5-6 角色管理界面7)用户注册界面如图5-7所示: 图5-7 注册界面6总结与展望通过完成这次毕业设计,我将四年来所学的知识理顺整理了一遍,这使得我以前掌握的知识更加网络化,让我能够从整体的角度把握本程序的开发过程。在项目的设计阶段,首当其冲是要解决系统功能设计和数据库设计的问题。首先对于系统功能的设计,一开始我通过分析从图书馆和网上查找的资料,自己拟定要设计的程序功能,然后通过向导师请教和反复的交流,终于设计出来一个比较完善的方案。系统功能定下来后,通过分析每个实体之间的一对多、多对多关系,完成数据库的设计。在项目的实现阶段,我也遇到了一些问题,首先是maven工具的使用,用maven工具导入jar包非常轻松 ,但是由于对maven的使用不熟悉,一开始没有执行clean操作而导致添加的代码未被编译,花了很久查代码问题,最后才发现只需clean一下project就可以了。有的时候,往往一些小细节上的失误,例如配置文件中配action时,prototype没有配,默认scope,导致访问多次都只生成一个action。但是也就是这些小细节的问题,让我在排错的过程中不断学习。通过这次的课题研究奠定了我从事科研工作的基础,对我有十分深远的意义。 致谢参考文献:[1] 刘京华.Java Web整合开发王者归来[M].清华大学出版社.2010.1:450-452[2] 王红香.基于Web项目开发中的Struts2技术探讨[J].办公自动化.2011.12:6-7[3] 郭锋.Spring从入门到精通[M].清华大学出版社.2006.10:24-29[4] 卫琴.精通Hibernate:Java对象持久化技术详解[M].电子工业出版社.2005.5:97-115[5] 李刚.轻量级Java EE企业应用实战:Struts 2+Spring 3+Hibernate整合开发[M]. 电子工业出版社.2012.4[6] 林侠.我国快递公司的物流标准化管理现状及优化策略研究[J].商场现代化.2008(25) [7] Russell J.T. Dyer?. MySQL in a Nutshell 2 edition[M]. OReilly Media, Inc.2009[8] Rod Johnson. Professional Java Development with the Spring Framework[M]. Wrox. 2005-07-08[9] 王慧.基于供应链的第三方物流信息管理系统规划设计[J].物流技术.2013.05[10] Anil Hemrajani. Agile Java Development with Spring, Hibernate and Eclipse[M]. Sams Publishing.2006.5[11] 梁家豪,吴杰. WEB第三方物流管理信息系统的实现[J].中国市场.2008(15)[12] 陈正军.第三方物流管理信息系统的设计与实现[J].现代商业.2008(20)[13] 吴应良,李宝香.物流信息管理主题数据库的规划与设计[J].情报杂志.2008(01)[14] 唐汉明,翟振兴,关宝军,王洪权,黄潇.深入浅出MySQL:数据库开发、优化与管理维护[M]. 人民邮电出版社.2014.1[15] 同剑飞.基于J2EE技术的第三方物流信息管理系统的探索与实现[J].电子测试.2013(21)附录 大学学院信息科技学院计算机科学与技术姓名尤艺论文题目快递业务受理信息管理系统一、对待毕业实习的态度及实习期间遵守纪律情况优良(15—11分)一般(10—6分)较差(5—0)二、观察、收集、整理、查阅资料及运用数据的水平优良(30—21分)一般(20—11分)较差(10—0分)三、学生的独立工作能力和动手能力优良(20—16分)一般(15—11分)较差(10—0分)四、毕业论文写作的规范化程度优良(15—11分)一般(10—6分)较差(5—0分)五、毕业论文(设计)总体评价优良(20—16分)一般(15—6分)较差(5—0分)审查意见、成绩及能否提交答辩:教务处制表大学学院信息科技学院计算机科学与技术姓名尤艺论文题目快递业务受理信息管理系统一、论文选题的价值与合理性优秀(15—11分)一般(10—6分)较差(5—0)二、论文的难度、工作量大小和创新性优秀(30—21分)一般(20—11分)较差(10—0分)三、数据资料分析、归纳、概括及运算的能力优秀(20—16分)一般(15—11分)较差(10—0分)四、文字表达水平、文章的逻辑性优秀(15—11分)一般(10—6分)较差(5—0分)五、论文写作的规范化程度优秀(20—16分)一般(15—6分)较差(5—0分)评阅意见、成绩及能否提交答辩:教务处制表大学本科生毕业论文(设计)答辩及综合评分表(由答辩小组填写)学院信息科技学院计算机科学与技术姓名尤艺论文题目快递业务受理信息管理系统一、内容的科学性、应用性和创新性优秀(30—21分)一般(20—11分)较差(10—0)二、论文写作水平及知识面掌握程度优秀(30—21分)一般(20—11分)较差(10—0分)三、语言表达能力、逻辑思维能力、回答问题的正确性优秀(40—31分)一般(30—11分)较差(10—0分)论文答辩意见及成绩:答辩小组负责人(签名): 年 月 日本科生毕业论文(设计)综合评定成绩(由答辩小组填写)毕业论文(设计)评阅成绩30%毕业论文(设计)答辩成绩40%综合评定成绩100%注:综合评定成绩等级:优秀(90-100),良好(80-89),中等(70-79),及格(60-69),不及格(60分以下)。答辩小组负责人(签名): 年 月 日
目录
摘要 3
关键字 3
Abstract 3
Key words 3
1 绪论 3
1.1选题背景及国内外研究概况 3
1.1.1选题背景 3
1.1.2国内外研究状况 3
1.2研究目的 意义 4
1.2.1 研究目的 4
1.2.2研究的意义 4
1.3研究内容 4
1.4技术路线 5
2.开发工具及应用技术 5
2.1相关技术概论 5
2.2开发方法 6
2.3开发工具及开发环境 7
3.系统分析与设计 7
3.1 需求分析 7
3.2 功能设计 7
3.3 数据库设计 9
4.系统实现 13
4.1后台登陆模块 13
4.1.1用户登陆 13
4.1.2修改密码功能 15
4.1.3 用户注销功能 15
4.2基础档案模块 15
4.2.1 取派员设置 15
4.2.2 区域设置 16
4.2.3 管理分区 18
4.2.4定区管理 19
4.3受理模块 21
4.3.1 业务受理 21
4.3.2工作单快速录入 23
4.4 系统管理 23
4.4.1用户管理 23
4.4.2 角色管理 24
4.4.3 权限管理 24
4.5前台模块 24
4.5.1注册模块 24
4.5.2用户修改密码功能 25
4.5.3用户提交寄件订单功能 25
4.5.4用户注销功能 26
5 主要图形界面设计与效果展示 26
6总结与展望 29
致谢 30
参考文献: 30
快递业务受理信息管理系统
计算机科学与技术 尤艺
引言

版权保护: 本文由 hbsrm.com编辑,转载请保留链接: www.hbsrm.com/jsj/jsjkxyjs/2270.html

好棒文