基于J2EE的物流公司管理系统设计与实现(共14页).doc
精选优质文档-倾情为你奉上基于J2EE的物流公司管理系统设计与实现王梦鹿,崔惠,姬莉(秦皇岛职业技术学院 秦皇岛 )摘要:随着经济全球化进程的加快和现代物流对经济发展的重要性逐步为国人所认识。物流公司的信息化水平对其降低工作的复杂性、提高工作效率准确性、以最优的方法控制物流成本等具有极其重要的意义。本文通过分析国内物流公司的实际需求,介绍了利用J2EE技术平台和B/S三层架构模式进行开发,及无线射频识别技术在库存管理过程中的实现方法,确定了系统设计的总体方案和系统实现的目标,进行了功能模块的划分。最后,分析了系统的不足之处以及有待改善的地方。关键词:物流产业 信息化 J2EE RFID技术1引言物流行业是最早实现电子商务环境下的商业交换模式的行业之一。由于供应链协作需要多种类型业务伙伴参与,涉及复杂和多样化作业类型。通过互连网作为支持供应链间货物的流动管理的信息交换中心的概念很容易被货主及承运人接受。从物流的流向看,现代物流包括内向物流和外向物流,内向物流是企业从生产资料供应商进货所引发的产品流动,外向物流是从企业到消费者之间的产品流动,即企业将产品送达市场并完成与消费者交换的过程。由于现代物流的宗旨是以最经济、最快捷的优质服务来满足消费者的需求,而消费者的需求又是千变万化的,因而,企业进行生产时必须依据消费者的具体需求进行采购、设计和投产,这就导致企业生产经营必须有很强的市场目的性,企业在生产之前必须深入市场调查,确实掌握消费者的需求信息。要完成这一信息的准确、快速传递,现代物流必须完成两个使命,一是商品的流动,即从生产者流向消费者;二是信息的流动,即从消费者流向生产者。物流系统是社会经济大系统的一个子系统或组成部分,主要实现了物资的空间效益以及时间效益,确保社会再生产的顺利进行,以获得较高的经济效益,以及一定的社会或其他方面的效益。不同目标间常常会存在冲突,如提高企业经济与改善服务品质之间就存在冲突。虽减少资金占用,加速资金周转,能降低生产成本;但为了提高服务品质,需适度增大库存,因而增大资金占用,提高生产成本,就互相矛盾。如何依据物流系统的战略目标,权衡和协调多目标之间的相互关系,是一个十分重要的问题。系统目标关系的协调,就是要在物流系统总目标的指引下,对于反映系统不同层次、不同部分利益要求的多个目标进行相互关系的协调,使之形成一个和谐统一的系统结构。2 相关技术研究1.1 J2EE技术J2EE是一种利用Java2平台来简化企业解决方案的开发、部署和管理相关的复杂问题的体系结构10。J2EE技术的使用目的就是为了减少企业开发的时间,加快投放市场的速度。J2EE技术的核心是Java平台,J2EE不仅巩固了平台中的许多优点,同时还提供了对 EJB、Java Servlets API、JSP以及XML技术的全面支持。1.J2EE的四层模型J2EE使用多层的分布式应用模型,应用逻辑按功能划分为组件,各个应用组件根据他们所在的层分布在不同的机器上。在C/S模式中,存在很多弊端,例如比较难升级活改进,经常基于某种专有的协议进行连接,例如数据库协议等,J2EE设计的初衷正式为了解决这种模式的弊端。现在J2EE 的多层企业级应用模型将两层化模型中的不同层面切分成许多层,一个多层化应用能够为不同的每种服务提供一个独立的层。 (1)运行在客户端机器上的客户层组件。在一个基于Web的J2EE中,浏览器负责显示由运行在Web层的Web组件生成的包含各种标记语言的Web页面,它可以通过运行在Web层中的JSP页面和Servelet与J2EE服务器中业务层进行通信;在不基于Web的J2EE应用系统中,一个独立的客户端程序是一些运行在基于网络系统中的Java应用程序,它可以通过远程方法调用直接访问运行在企业JavaBean(EJB)容器中的EJB组件。不基于Web的客户端程序可能也包括一个JavaBeans类来管理用户输入,并将业务输入发送到业务逻辑层中运行的EJB对象来处理。(2)运行在J2EE服务器上的Web层组件。J2EE的Web组件既可以是Servlet也可以是JSP页面。Servlet是一种服务器端程序,允许应用程序逻辑嵌入到超文本传输协议(HTTP)请求响应过程中。JSP提供了一种在网页中嵌入组件的方式,它是一个基于文本的文档,由Web容器编译成相应的Servlet,这样在应用程序逻辑和表示逻辑之间有了清楚的分界。(3)运行在J2EE服务器上的业务逻辑层组件。业务层也叫EJB层或应用层,用来实现企业级信息系统的业务逻辑,这是企业级应用的核心,由运行在业务层中的EJB来处理,一个Bean从客户端接收数据、处理,然后把数据送到企业信息系统层次存储起来。同样,一个Bean也可以从企业信息系统层取出数据,发送到客户端程序。(4)运行在EIS服务器上的企业信息系统层软件。它运行企业信息系统软件,包括企业基础设施系统,例如企业资源计划、客户关系管理、数据库系统及其它遗留信息系统。2.J2EE的分布式应用技术为实现企业级分布式应用,J2EE定义了丰富的技术标准,符合这些标准的开发工具、API和开源软件为企业级应用提供支持,这些技术涵盖了数据库访问、分布式通信、安全等。(1)组件技术 J2EE的核心思想是基于组件/容器的应用,每个组件提供了方法、属性、事件的接口,组件可以由多种语言开发,并且可以重用、共享和分布。(2)Servlet和JSP。Servlet是一种小型的Java 程序,它扩展了Web服务器的功能。Servlet 提供的功能大多与JSP 类似,不过实现的方式不同。JSP 通常是大多数HTML代码中嵌入少量的Java 代码,而servlets 全部由Java 写成并且生成HTML。(3)EJB技术 J2EE技术之所以赢得大家广泛重视的原因之一就是EJB。它们提供了一个框架来开发和实施分布式商务逻辑,由此很显著地简化了具有可伸缩性和高度复杂的企业级应用的开发。EJB 规范定义了EJB 组件在何时如何与它们的容器进行交互作用。(4)数据库访问 开发分布式系统要求数据库访问具有良好的灵活性和扩展性。JDBC是Java中一个独立与数据库管理系统开发的接口,它提供了一个通用的访问SQL数据库和存储结构的机制,支持基本SQL功能的一个通用底层的程序编程接口,它在不同的数据库界面上提供了一个统一的用户界面,提供了多种数据库连接方式,通过JDBC使对多种数据库操作简单、可行。(5)分布式通信技术 分布式通信技术是分布式企业系统的核心技术,J2EE框架为Web应用和EJB应用提供多种通信模式,主要有Java远程方法调用(RMI)、Java接口定义语言、Java命名和目录接口和Java消息服务(JMS)。1.2 RFID技术射频识别技术是20世纪90年代开始兴起的一种自动识别技术,利用射频信号通过空间耦合实现无接触信息传递并通过所传递的信息达到识别目的的技术,其工作原理是:标签进入磁场后,如果接收到阅读器发出的特殊射频信号,就能凭借感应电流所获得的能量发送出存储在芯片中的产品信息,或者主动发送某一频率的信号,阅读器读取信息并解码后,送至中央信息系统进行有关数据处理。RFID技术由Auto-ID中心开发,其应用形式为标记、卡和标签设备。 标记设备由RFID芯片和天线组成,标记类型分为三种:自动式,半被动式和被动式27。现在市场上开发的基本上是被动式RFID标记,因为这类设备造价较低,且易于配置。被动标记设备运用无线电波进行操作和通信,信号必须在识别器允许的范围内,通常是10英尺。被动式标记设备采用E2PROM,便于运用特定电子处理设备往上面写数据。Auto-ID规范中还包含有死锁命令,以在适当情形下阻止跟踪进程。 Auto-ID中心开发的电子产品代码(EPC)规范能识别目标,以及所有与目标相关的数据。EPC系统运用正确的数据库链接到EPC码,厂商和零售商能依据权限进行查询、管理和变更操作。一旦标记贴到产品或设备上,RFID识别器便能读取存储于标记中的数据。Auto-ID计划将EPC系统发展成为全球标准,该标准主要包括28:识别目标的特定代码(EPC);定义数据的所有者(EPC管理器);定义代码及标记的其余信息;定义货物参数;将EPC代码转换为Internet地址;对目标进行描述;聚集和处理RFID数据;分配给每类目标的特定号码;用于互操作性的规范最小集,采用RFID技术最大的好处是可以对企业的供应链进行透明管理,有效地降低成本。3 系统的设计业务流程是系统设计的关键,要开发一个系统,必须确定系统的功能需求,这就必须先了解实际的业务流程,从业务流程中分析系统的需求。本系统的总体功能是适合物流公司的客户在客户机上对服务器上的相关信息进行访问与管理3.1功能需求根据调查分析,国内大多数物流公司主要使用人员主要是:本公司的工作人员、本公司的客户以及想了解本公司的普通客户,针对这三类使用者,系统应完成以下几个主要功能。1.基本信息管理功能 包括对本公司员工信息的管理,对客户信息的管理,该功能的管理员为系统的管理员,其用例图如图3-1所示。2.库存管理功能 主要包括货物的出库入库管理、库存货物的查询、库存货物受损情况的查询、货物剩余库存量的查询、库存货物统计生成报表等,这是该系统的一个主要功能。在开发过程中要采用RFID技术,实现货物出入库的自动识别,其用例图如图3-2所示。3.运输管理 主要包括运输方式查询、运送路线的指定、运送时间的安排,还包括对货运司机的了解、货运状态的查询等,以及客户进行运送方式、路线、时间以及货物是否按时运到的回执信息的查询,在履行完合同后,将以上信息删除并进行数据备份,其用例图如图3-3所示。登录系统管理员密码修改删除查询更新usesextendextendextendextend图3-1 用户基本信息管理用例图仓库管理员库存uses出库管理入库管理库存统计库存查询果extendextendextendextend图3-2 库存管理用例图 (4)合同管理 是系统进行财务核算的基础,客户也可以通过系统对合同进行查询,查看合同的执行情况,还可申请终止合同,其用例图3-4所示。信息查询信息录入运送线路运送方式时间运输时间信息删除客户公司人员includeincludeincludeusesusesusesincludeincludeinclude图3-3 运输管理用例图合同查看终止合同合同管理合同更改合同删除时间合同录入合同备份客户系统管理员员includeincludeincludeincludeusesusesuses图3-4 合同管理用例图 (5)财务管理 主要包括两个方面:一是根据与客户签订的合同进行收费;另一个是公司财务的支出,包括员工的工资、公司内部设施的修缮、以及公司运输车辆的维修等。在财务管理过程中,发票管理也是很重要的功能,在客户付款后,要能及时将发票汇至客户手中,并且要录入客户的回执信息。财务人员还要定期根据公司的财务信息进行报账,生成财务报表等,其用例图如图3-5所示。财务人员员财务统计生成报表发票管理财务结账usesusesusesuses图3-5 财务管理用例图(6)系统维护 系统管理员拥有系统最高权限,可以设置不同用户对系统的访问权限,可以添加新用户,同时可以对已有用户信息进行修改、删除、更新、权限从新设定等操作。系统管理员可以通过日志管理功能随时检测系统的使用情况,以便发现不安全因素予以随时排除。当系统出现异常情况也可以通过此功能发现系统中的问题3.2 系统功能模块设计根据物流公司的实际需求,系统共设计了如图3-6所示的六个功能模块。不同类型的用户根据不同的权限可以访问相应的功能模块。系统模块基本信息管理模块库存管理模块运输管理模块合同管理模块财务管理模块系统管理模块图3-6 系统功能模块1.基本信息管理模块:是完成基本数据信息的录入、更新、修改、删除以及数据备份的操作。基本信息包括操作员本身的基本信息、登录密码、公司员工的信息、公司仓库的信息以及公司运输车辆的信息,其功能模块结构图如图3-7所示。 基本信息管理模块管理员信息员工基本信息仓库基本信息车辆基本信息图3-7 基本信息管理模块图2.库存管理模块:是本系统最基本也是最重要的模块,在签订好合同之后、进行运输之前,要进行入库保存、出库等操作,其功能又能细分为:数据维护、出入库登记、报表打印、查询统计和数据备份五个功能。 (1)数据维护 主要是完成入库货物的名称、数量、所入的库存号、出库的数量等基本数据的修改、删除等操作。(2)出入库登记 该子系统主要包括入库登记、计划出库登记、实际出库登记、转库登记等功能。(3)报表打印 该子系统主要负责生成各个汇总表并打印出来,汇总表包括各单位日报表、当日出入库汇总报表、各单位月报表、当月出入库汇总报表、入库明细报表、出库明细报表、库存货物汇总报表等。(4)查询统计 该字系统主要是查询各单位当前库存、查询出入库明细、查看库存总量、统计各单位时间段内出入库量、出入库总量等。(5)数据备份 将各个库的出入库信息,包括出库明细信息、入库信息、出入库总量等数据进行备份,以待生成报表和查询时使用。4.运输管理模块:负责管理货物的运输信息,包括货物的库存仓库编号、提货时间、运输方式、运输时间、运输路线以及是否安全送到的回执信息等。该模块又可分为运输货物管理、运输时间管理、运输方式管理、运输路线管理四个子模块,其功能模块结构图如图3-8所示。运输管理模块运输货物管理运输时间管理运输方式管理运输路线管理图3-8 运输管理模块图 (1)运输货物管理 主要是管理所运送货物的名称、数量、是否易损运送货物的目的地以及是否安全送到等信息。(2)运输时间管理 主要包括运输的计划出发时间、实际出发时间、计划到达时间、实际到达时间、计划所需时间和实际花费时间等信息的管理。(3)运输方式管理 主要包括运输的计划运输方式、实际运输方式、运输的车辆信息等信息的管理。(4)运输路线管理 主要包括运输的计划路线、实际所走的路线等信息的管理。4.合同管理模块:管理所签合同的客户的基本信息以及所签合同的基本信息的管理,其中包括合同信息的录入、合同的终止情况、合同的执行情况以及合同的查询。5.财务管理模块:在一个公司里,财务管理是至关重要的,本次系统开发也将财务管理模块视为重点开发模块,其主要包含的功能有客户费用统计、公司财务支出统计、生成财务报表以及财务数据备份。 (1)客户费用统计 根据客户所运送货物的数量、方式、路线,计算出运送该货物所需要的支付的费用,并统计出客户需缴纳的定金、客户已缴的款项、所欠款项,并由财务人员进行信息的录入、更改、删除等操作,并且客户也可进行查看。(2)公司财务支出 公司的财务支出主要包括公司员工的工资支出、公司维修费用的支出、公司车辆检修费用的支出,将这些支出费用进行统计,并将详细的支出信息和统计信息录入系统,财务人员还可进行查看、修改、更新、删除等操作。(3)生成财务报表 包括将公司每日的收入明细帐表、每日支出明细帐表、所欠公司费用的客户的详细表单、公司每月收入和支出的明细帐表以及公司的年终财务总结帐表生成财务报表,以供公司领导查阅。(4)财务数据备份 将公司的财务数据一年为单位进行更新,并将上一年的财务数据进行备份,以便于以后进行查阅。6.系统管理模块系统管理在整个物流管理中起到控制、管理、授权、基础设定、约定规则、数据更新备份、操作日志记载的作用。系统管理员在此模块中担当授权、数据更新维护、安全性管理、基本信息设置的角色,主要负责权限维护、系统设置、数据备份/恢复、表字段结构更改维护、数据表结构自动更新和操作日志等。3.3 系统实现1.基本信息管理模块的实现 用户在登录前先选定自己的身份,然后输入用户名和密码,系统根据数据库中的信息进行比对,判断用户名和密码是否正确,然后确定用户是否登录成功。系统对用户的密码进行保存之前,为确保用户密码的安全性,采用MD5的加密方式先进行处理,对于MD5有两个特性是很重要的,第一是任意两段明文数据,加密以后的密文不能是相同的;第二是任意一段明文数据,经过加密以后,其结果必须永远是不变的。前者的意思是不可能有任意两段明文加密以后得到相同的密文,后者的意思是如果加密特定的数据,得到的密文一定是相同的。利用这个特性,一旦数据被篡改,通过对比摘要,就可以发现了。2.库存管理模块的实现 该模块是物流管理系统的一个核心功能模块,模块功能目的包括:合理利用仓库空间,高效出入库,详细记录出入库的信息,为财务核算提供依据。库存管理功能包含最主要的两个功能便是入库与出库,根据秦皇岛运通物流有限公司的实际需求,两个功能的实现过程如下所示。(1)入库功能的实现 当一批货物需要进行入库时,库管员需要核实入库验收单,清点入库货物,当货物清单与实物相符时,才能进行入库登记,更新库存。当该类货物不再进行入库,也可以采取其他事务处理。(2)出库功能的实现 首先根据出库调拨单查看库存,再依据库存信息做计划出库。如果库存量大于等于计划出库量,则直接做计划出库;如果库存量小于计划出库量,则在出库调拨单上标记可出库量,按核查的库存做计划出库;如果库存量小于或等于零,则不能出库,退还客户出库调拨单。待出库取走货物后,系统则修改当前库存。3.运输管理模块 主要是管理货物的运输信息,包括运输路线、时间、方式等。其主要完成的功能是这些的录入、更新、修改、删除、查询等。其中主要实现的是客户对这些信息的随时查询,以便了解货物的运送情况,其查询功能的实现是采用JSP+JavaBeans+JDBC来处理的。数据库连接Bean用odbe来实现,用odbe建立数据源TPL,用户名和密码都是TPL,大致关键代码如下:package bean.database;String dan=”tpl”;String uid=”tpl;String pwd=”tpl”;dan="jdbc:odbc:”+dsn;Class.forName(”sun.jdbc.odbeJdbcOdbcDriver”).newInstanceO;conn=DriverManager.getConnection(dsn,uid,pwd);stmt=conn.createStatement0;pubfic ResultSet getrs(String sproc)throws Exceptionresult=stint.executeQuery(sproc);return result;4.合同管理模块的实现 合同管理模块实现的是运通物流公司与客户签订的合同信息的管理,包括信息的录入、审查、更新、修改、删除、备份等操作,这些都是一些关于数据库的基本操作,这里不再详细叙述。除了以上功能外,系统还要对所签订的合同进行扫描,并将扫描后的电子文档进行上传,以备查阅,并作为财务核算的基础。系统设计完成文件上传功能使用的是Apache Commons FileUpload组件,由于本次开发使用了Spring框架,而Spring框架对该组件进行了封装,所以无须与该组件具体的API打交道,只需要用到Spring提供的MultipartHttpServeltRequest对象,就可以轻松实现文件上传的功能。5.财务管理模块的实现 在财务管理模块中,其核心功能是生成财务报表并输出打印或者上传。(1)报表的生成 本系统中使用的是iReport+JasperReport来设计和生成各类报表。iReport是一个能够创建复杂报表的开源项目,并且它能调用JasperReports库应用于任何一种Java应用程序。它是分布式的且由符合GNU通用公共许可的百分之百纯Java编写。使用iReport设计好报表之后,编译即可以得到一个后缀名为jasper的文件。在程序实现中,需要导入这个.jasper文件,并传入相应的所需参数,即可以填充数据并生成报表。生成报表的主要代码如下。File reportFile = new File(this.getServletContext().getRealPath( "/jasperFile/EndedCase.jasper");Connection conn = new DatabaseUtil().getConnect();Map<String,Object>parameters = new HashMap<String, Object>();parameter.put("nowStr", DateUtil.getDateString();String sub_report_location = this.getServletContext().getRealPath( "/jasperFile/CaseParties.jasper");sub_report_location = sub_report_location.replace("", "");parameters.put("sub_report_location", sub_report_location);byte bytes = JasperRunManager.runReportToPdf(reportFile.getPath(), parameters, conn);response.setContentType("application/pdf");response.setContentLength(bytes.length);OutputStream outputStream = response.getOutputStream();outputStream.write(bytes, 0, bytes.length);outputStream.close();(2)打印功能 打印功能是本系统用的较多的功能之一,其处理流程是:先获取打印的目标文本,然后判断打印内容是否为空,当不为空时,指定打印的格式,创建打印作业,指定打印内容,进行打印;当打印内容为空时,告诉用户,打印将取消。 3.4 RFID技术的实现在本次系统开发设计过程中,库存管理是一个主要完成的功能模块,为了方便出入库的操作,提高出入库的效率,在开发该模块过程中,采用了无线射频识别(RFID)技术,该技术是本次系统开发的一个关键技术,下面就该技术的实现进行详细介绍。RFID技术的实现主要依靠三个部分:标签、读写器和应用支撑软件。标签在市场上可以买到,这里不再进行设计,主要介绍一下读写器的工作模式和中间件技术的实现。1.读写器的工作模式 读写器的工作模式大概分为两种:触发读写模式和缓冲读写模式。(1)触发读写模式 当标签进入读写器天线磁场范围的时候,只有应用程序调用读标签函数时,读写器才能采集到标签中的数据。当读写器读取标签数据后,通过“Stay Quiet”函数将标签设置为“沉默”状态。在这种状态下标签将不再响应读写器发出的命令,因此天线磁场范围内标签不会被读写器重复读多次。若想让标签响应读写器的命令则必须让标签离开磁场区域后再进入或者重新启动读写器。(2)缓冲读写模式 在缓冲读写模式下,当标签进入读写器天线磁场范围时,读写器会自动地选择并且读取需要的数据。采集到的数据存储在一个FIFO数据缓冲器中。通过“ReadBuffer”数可以访问缓冲器中已采集到的数据。这个函数总是读数据缓冲器中的前几个可获得的数据集,需要读新的数据集之前必须调用“Clear Data Buffer”将已读出的数据集删除。在这种模式下,读写器读取标签的数据后,自动地将标签设置为“沉默”状态。2.中间件技术的实现 中间件的工作流程是先选择读写器的类型、读写器的工作模式,然后采集标签数据和非标签数据,将这些数据进行过滤处理,然后进入缓冲队列,最后进入数据库,写数据库日志。3.读写器适配器的实现不同型号的读写器采集到的数据格式不一样,数据采集模块将不同格式的数据都转化为统一的,系统需要的格式。在数据采集模块中,读写器适配器就是负责这个工作的。针对不同型号的读写器,系统都有相应的适配器,这些适配器可以在系统中动态的增加、删除。读写器适配器可以直接的与读写器通信,采集关于标签的信息,然后这些适配器可以根据需要将数据进行格式化处理后送到下一个数据处理单元。读写器适配器不断的转化读写器采集来的字符串,然后送到下一个单元,所以每个读写器适配器工作的时候都占用独立的线程。通用的读写器接口适配器的函数内部结构为;public fmal class DemoAdapterimplements ReaderAdapterInterfaceclass Worker extends Thread /适配器工作的内部类;public void run0 /线程,不断的从读写器处获取要处理的字符串; m=reader.ReadMultiBloek()/从读写器处获得字符串;getMessage(m);/调用将获取的字符串转换到标准格式的函数private getMessage(String n1)/严此函数负责将读写器处获得的字符串串换为标准格式,然后送入下一个处理单元:public void shutdown0/关闭读写器适接口配器:public DemoAdapter(String args, ReaderInterface ri)/初始化读写器接口适配器,开启其工作线程; 通过读写器适配器就可以获得标准格式的字符串,然后通过读写器接口将标签数据和非标签数据送入下一个单元。4 总结随着我国生产生活水平的日益提升和对服务要求的逐渐增多,使得物流行业快速发展,加大对物流服务和速度的投入和研究势在必行,根据国内多数物流公司的功能需求和性能需求分析,提出了采用J2EE技术和B/S开发模式进行开发的设计方案,选用了适合物流公司实际情况的关系数据库,进行了物流管理系统数据库的详细设计。通过本系统的开发,克服了以往物流管理系统的一些不足,基本上满足了大多数物流公司的要求,提高了其工作效率和管理水平。参考文献1郝杰.浅谈J2EE性能优化,中小企业管理与科技,2010,2:56-582侯淑英. B/S模式和C/S模式优势比较,沈阳教育学院学报,2007,2:22-253姜琼慧.基于B/S模式的物流管理系统设计与实现中南大学硕士学位论文,2007:15-184 蔡增玉,甘勇,金保华,钟万洁,张涛.基于RFID的物流管理系统设计.郑州轻工业学院学报,2009,24(6):113-116专心-专注-专业