一、项目描述商务综合管理平台紧跟时代步伐,该软件主要从事的国际物流行业一系列相关过程的管理,公司业务遍及欧美。随着公司不断发展壮大,旧的信息系统已无法满足公司的快速发展需求,妨碍公司成长,在此背景下,公司领导决定研发《商务综合管理平台》。《商务综合管理平台》分三期完成。一期完成仓储管理(包括:采购单、仓库、货物、条形码、入库、出库、退货、盘点、库存、库存上限报警、统计查询)和展会管理(包括:展会管理、出单管理),形成货物统一数字化管理。二期完成货运全流程管理,包括购销合同、出货表统计、出口报运单、HOME装箱单、装箱单、委托书、发票、财务统计等。三期完成决策分析(包括:成本分析图、销售情况统计、重点客户、经营情况同期比对统计、工作绩效),为公司经营决策提供数据支持。 项目采用了BRAC认证模型,并结合Shiro安全框架进行相应的认证授权工作。利用Shiro更好的实现了项目的认证授权及加密,会话管理工作。该项目采用了细粒度权限控制,不仅可以控制顶部菜单及左侧菜单和按钮,最重要的是/还可以控制不同用户所查看的数据,为了实现数据控制,在表设计时就要加入相关字段进行优化,从而做到当事人看到自己的记录,部门经理看到该部门下所有员工添加的记录,副总可以实现跨部门跨人员的数据查看,总经理可以看到所有记录。 购销合同是/公司和生产厂家签订的合同。合同是/由合同主信息和多个货物信息和多个附件信息组成。两级一对多。公司的货物是/玻璃杯,附件是/指玻璃杯上的一些装饰物,包括:花纸、PVC、电镀等等)货物由生产厂家,附件由生产厂家。在开发购销合同模块时,我做了一个复杂的表单打印。这个报表非常繁琐,里面包括打印logo图片,包括多个货物的图片,包括线,包括合并单元格。打印时用户可以指定一页纸打印一款货物,还是/两款货物。打印时如果是/两款货物,如何是/同一个生产厂家,可以打印到同一页,如果不是/同一个生产厂家,必须另起一页。根据用户的习惯,我们采用poi来输出内容到excel中。 出口报运是/公司和生产厂家签订购销合同后,杰信准备报关材料,进行报关。对应我们系统,只打印一个《商品出口报运单》,为报关提供货物信息。一个报运单来自多个合同,包括报运的主信息,包括报运的货物信息。报运单下的货物的信息来自合同,主要包括:货号,数量,包装单位,箱数(件数)等等,还包括:新增的多个字段:毛重、净重、长、宽、高、出口单价、含税等等。在设计时进行了优化,采用“打断设计”方法和“数据搬家”,它实现数据快速查询,后续业务直接使用这里提供的数据。 POI海量数据导出,系统中备份数据和恢复数据。操作excle主要有jxl和poi两种方式,jxl在处理数据时比早期的poi快。(poi早期对象,处理时都是/将加工的数据存放在内存中,如果数据量很多,很容易造成堆溢出,同时它占用CPU和大量内存,导致其他业务也无法正常完成。)poi在新版本中改善这个性能瓶颈。对大数据量的导出做了优化。使用ooxml技术,使用SXSSF对象,当数据创建到指定数量时,自动写缓存,将它内容输出到临时文件中。这个临时文件是/一个xml,相比内存中对象的结构非常简单。只保留数据的信息。保存的数据量也非常少。这样就可以形成大数量的导出。例如:该项目中,购销合同业务,它有很多历史信息,积累了很多年,数据量达到近百万。导致系统变慢,我们采用poi导出数据备份到excel文件中。将这部分历史信息从当前表删除。在打印中就可以直接实现。(excel单sheet可以支持1048576)。 自动代码生成工具原理:应用freeMarker第三方工具类。实现模块开发。自定义一个代码模板,这个模板中自定义一些变量。日常主要类和页面的变量,例如:数据库表,表的字段,类的名称,类的属性。这些可以直接调用。做好每个文件的模板后,在后台从数据库表中读取这个业务相关的字段,类型,备注。调用freeMarks。通过freeMarks配置config。打开我们指定模板,然后将要生成这些文件对应的表名传递进去,通过数据库表名查询数据库,通过数据库提供的直接查询字段的SQL。这里比结果集的元数据多一个备注字段。查询到这些信息,将它们封装到一个map集合中。Key就是/我们在模板中定义的变量,value就是/数据中的内容。把这个map集合和模板传递给freeMarks。freeMarks进行模板中变量值的替换。freeMarker非常强大,可以有标签,可以有标签嵌套。还可以有自定义的方法,例如:类名全大写,全小写,首字母大写,首字母小写。(可以少定义变量),可以if判断,可以做循环,支持复杂的对象关联。它还支持宏,还支持自定义函数。就可以实现模板的编程。这样模板非常灵活。