物流管理系统 联系客服

发布时间 : 星期三 文章物流管理系统更新完毕开始阅读f53e8b67ec3a87c24128c413

信息,一页纸如果是一个生产厂家,必须另起一页打印。一个页用户可以选择打印一款货物,也可以选择打印两款货物。购销合同合同数量比较多,积累10年多的数据,客户要求,将这些数据导出到excel中备份这些数据。我就研究实现了一个数百万海量数据的导出。

b) 出口报运

杰信和客户签订合同后,找到生产厂家开始生产货物,于此同时向海关申报准备运输的货物,货物的信息和重量信息和体积信息,为装箱做准备。出口报运时货物信息来自合同下的货物信息,本身环境新增了部分货物的信息包括重量信息和体积信息。一个报运来自多个合同。在出口报运时,它其他业务的集中体现,在这里建立一个流程状态,它能反馈后续流程流转到哪里。在后续流程流转时,都要回执这个状态。我们系统给客户系统也提供了这个货运流程的跟踪,让可以可以在他的系统中实时查询出他下的订单的当前订单流转到哪里,是装箱,是委托,还是走到发票等等。我们的系统采用的是J2EEE技术实现,客户的系统采用.net技术实现。我们系统给它们的系统提供了一个WebService服务,使用Apache CXF实现,它可以异构系统来直接访问我们的系统,进行订单的流程查询。

c) 货运管理流程

货运管理是杰信项目的二期的核心内容,它包括:购销合同、出口报运单、装箱单、委托书、发票通知、财务统计这几步。购销合同是客户和杰信签订合同后,向生产厂家签订的合同称为购销合同。然后杰信向海关进行出口报运的申请,海关批准后,杰信找货代公司订箱子,杰信找拖车公司订拖车,拖车拉着空箱到生产厂家指定的仓库在验货员的监督下装货,拖车拉着满箱到海关指定的码头指定的区域卸货。等待装船。在装船前,海关进行抽检。船来后进行转船。然后船离开装运港,我们杰信的这单订单就顺利完成。船离开前,杰信向客户快递一个发票通知,同时附上提单。客户收到发票,支付剩余尾款,收到提单,等船到目的港,卸货后,客户拿着提单提货。杰信最终进行内部财务核算,核算这单生意获取的利润,提交给领导审核。

3. 设计

a) 冗余设计

在设计时我们首先遵循三范式来设计表,然后才用反三范式的设计。三范式追求的是节省空间,创建表信息时,不能有重复的内容,例如:表必须有主键,列不能重复,列信息不能通过现有字段数据加工而成。这样实现存储的数据信息所占空间比较小,数据出处都唯一。反三范式,采用冗余技术实现表信息在查询时非常快捷,用户体验非常好,用户满意度非常高。

37

b) 打断设计,跳跃查询

在杰信的业务中,它的货运管理流程分为6步,关联表达到10级以上。系统在建设之初我们就考虑到关联层级过多后,随着用户系统使用,数据线性增长,数据量不断增加,当数据量越来越大时,系统的访问会越来越慢。于是我们在表设计时,遵循一个原则,关联关系不四层。具体我们实现时通过主表中加一个字段,来存储主表和子表的一对多关系。它们都存储代理主键,它们之间用特殊符号隔开。这样在实际开发业务时,需要查询的时候,就可以跳过中间的层级,直接查询业务所需要的信息。在出口报运中就使用这种设计方式。出口报运单来自多个购销合同,出口报运单中需要获取合同下的货物的部分信息。新增时利用报运关联的合同的编号值,也就是打断设计的这个字段值,直接拼接为in子查询串,直接查询合同下的货物,这样跳过合同表。查询非常快捷。效率倍增。

c) 一对一的特殊设计

在杰信系统中有个很有特点的地方,装箱、委托、发票、财务它们都是一对一的关系。一个委托来自一个装箱,一个发票来自一个委托,一个财务来自一个发票。它们每个业务都需要取报运下的货物信息。我们设计时,将委托、发票、财务的主键都存放装箱的ID。委托、发票、财务表主外键合一。这样设计后,实现业务只要获取到其中一个对象的ID,不论是装箱、还是委托的,还去其他的。都可以直接查询其他的对象。操作更加灵活。可以实现跳跃查询,本来财务需要报运下的货物和附件信息,本来要通过发票,委托,装箱,在找到关联的多个报运,在找到多个货物,在找到多个附件。我们新的设计后,直接找到装箱,找到装箱的打断字段,直接查询货物信息和附件信息。中间跳过5、6层。查询效率极高。

4. 技术亮点 a) 工作流

我们项目中采用工作流,Activiti 5,在货运管理中使用它,先实现货运管理流程,从购销合同销售人员的申请开始,销售人员处理完,提交给销售部领导进行审核;销售部领导审核通过后,提交到船运部门,船运专责进行报运处理,处理完提交给船运部报运领导进行审核,船运部报运领导审核通过后,提交给装箱专责,装箱处理完,提交给船运部装箱领导,船运部装箱领导审核通过后,提交给委托专责,委托处理完,提交给船运部发票专责,发票专责处理完,提交给船运部发票领导,船运部发票领导审核通过后,提交给财务专责,财务专责进行统计分析后,交给财务部领导审核,财务部审核通过后,流程结束。如果其中的环节领导审核不通过,打回上一个流程。上一个流程补充缺失内容,重新提交审核。

b) 百万海量数据的导出

采用poi来实现,开始时我们采用HSSF对象来实现,当我们导出6万5千多条数据时,

38

系统报错,记录数超出excel 2003版本的限制,它支持65536行数据。远远不够存放我们的记录。我查阅了相关资料,将jar包升级poi 3.9版本,升级workbook对象为XSSF对象,它可以操作2007以上版本,这样将数据扩充到1048576行,列扩充到65536列。这样我们就实现一个sheet支持百万数据。然后打印又出现了一个问题,当打印将近30万时,系统越来越慢,CPU占用率很高,内存占用率很高,打印到40万,系统崩溃,报堆溢出错误。然后我项目组研究查阅资料,发现高版本的poi提供SXSSF对象它支持大数据量的导出,我们换成这个对象后,打印非常顺畅,CPU占用率不高,内存占用率不高。顺利完成数据的导出。

c) 全文检索

购销合同查询非常频繁,用户要查,销售要查,船运要查,各个业务都需要查看合同数据,合同又有很多项,可以按合同号进行查询,按客户名称模糊查询,等等。我们系统采用lusece实现全文检索,我们将核心的查询的条件都作为分词索引,构建分词索引库,这样实现购销合同的一个全文检索,为各个业务提供查询。

d) Aapche CXF

现今最强大的一个WebService实现。我们项目使用maven,依赖jar。修改报运的Service将其改造为一个WebService,对其不需要对客户开发的公用方法进行屏蔽,只留它查询某个报运信息的接口方法,然后配置cxf-servlet.xml。发布我们的报运状态跟踪的服务。这样服务端完成。客户从它的系统中使用ajax访问我们的系统,从系统中获取数据,提交一个SOAP requestXML,获得数据后,来解析xml,从中摘出数据,显示到他们的系统中。

e) Maven

我们系统都采用Maven构建,我们公司搭建了一个私服,我们项目采用maven 工程,写好jar包的坐标,保存pom.xml文件时,myeclipse进行jar搜索。它先到本地仓库进行搜索,找到就引入项目中,如果找不到,它会去我们的公司的私服去搜索,搜索到,下载到本地仓库;搜索不到,它自动去远程maven中央仓库下载,下载到公司的私服中,再下载到本地仓库。

39