应急包物资数字化管理系统研制
扫描二维码
随时随地手机看文章
1研发背景
目前公司部分应急包仓库存在物资数量大、周转快的特点,现有应急包管理不完善、效率低,主要有如下问题:
(1)资产管理系统中,从申请、审核到出仓均有完善的闭环流程,但调查发现,在现场领料时由于人为操作因素会出现账、卡、物不一致的情况。
(2)现场物资领入/领出管理仍为传统的"纸质化管理",导致上级检查现场物资出入记录时数据不直观、效率低。
(3)应急包物资转变为出库物资管理后,应急包物资台账与出入库记录缺乏系统管理,应急物资管理工作量大、效率低且缺乏大数据分析功能。
传统的应急包"纸质化管理"显然出现了"小马拉大车"的情况,亟需进行应急包管理数字化转型。
2研发内容与实现
2.1研发内容
建设应急包物资数字化管理系统,包含仓储物资台账同步、扫码出入库管理、领用申请与资产系统出库记录关联、定期自动盘点、下限补充告警、数据分析等功能,实现应急物资流转管理及品类逐步优化功能,减少纸质登记的手填错误,提高应急包物资出入库效率。2.2实施过程
(1)角色设计。本系统中涉及的业务角色有五种:开发者、超级管理员、单位管理员、部门管理员、普通员工,具体如表1所示。
(2)部署结构如图1所示。
(3)服务器资源配置要求如表2所示。
(4)系统业务功能结构如图2所示。
(5)应急包物资管理系统后台功能代码实现。系统后台采用Java编写,Java和C++类似,都是面向对象的编程语言,但Ⅰava不仅具有C++语言优点,还摒弃了C++语言里许多难以理解的概念,比如多继承、指针等。因此,Ⅰava语言对于开发者来说不仅功能强大,而且简单易用。Ⅰava作为一门优秀的面向对象的编程语言,允许程序员以优雅的思维方式进行复杂地编程,极好地实现了面向对象理论[l]。Ⅰava介于编译型语言和解释型语言之间,不同于C、C++等编译型语言,代码通过直接编译生成机器码执行,但对于不同的平台(如x86、ARM等),处理器的指令集存在不同,因此需要对每一种平台编译出与之相应的机器码。解释型语言如Python、Ruby由于是解释器直接加载源代码运行,不存在这种问题,但其效率太低。而Ⅰava是将代码编译成一种"字节码",它类似于抽象的CPU指令,然后针对不同平台编写虚拟机,不同平台的虚拟机负责加载字节码并执行,对于Ⅰava开发者而言,就可以实现"一次编写,到处运行"的效果。但对于Ⅰava虚拟机,需为每个平台分别开发。从实践的角度看,Ⅰava虚拟机的兼容性做得非常好,低版本的Ⅰava字节码完全可以正常运行在高版本的Ⅰava虚拟机上。
后台系统包含了应急包物资的"增""删""改""查"等基础物资操作功能的实现,其中获取物资信息功能的主要代码如下:
/***Project列表数据*/@RequiresPermissions("list")@GetMapping("list")
publicAjaxⅠsonlist(Projectproject,HttpServletRequestrequest,HttpServletResponseresponse){
Page<Project>page=projectService.findPage(newPage<Project>(request,response),project):
returnAjaxⅠson.success().put("page",page)
*根据ID获取Project数据*/
@RequiresPermissions(value={"view","it:project:project:add","edit"},logical=Logical.oR)
@GetMapping("queryById")publicAjaxⅠsonqueryById(Projectproject){
returnAjaxⅠson.success().put("project",project):*后台hibernate-validation插件校验*/
StringerrMsg=beanValidator(project):if(StringUtils.isNotBlank(errMsg)){returnAjaxⅠson.
error(errMsg):}//新增或编辑表单保存
projectService.save(project)://保存
returnAjaxⅠson.success("保存Project成功"):}
(6)web展示代码实现。web展示采用Vue+elementUi方式实现,Vue是一套用于构建用户界面的渐进式框架。渐进式指的是阶梯式向前,Vue的渐进式表现为:声明式渲染二组件系统二客户端路由二大数据状态管理二构建工具。与其他大型框架不同的是,Vue被设计为可以自底向上逐层应用。Vue是轻量级的,它有很多独立的功能或库,进行web开发时开发者可以根据自己的项目特点来选用Vue的一些功能。比如,项目只用到Vue的声明式渲染,那就只用Vue的声明渲染,而要用其他的组件系统,直接进行引用就行了。Vue的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代化的工具链以及各种支持类库结合使用时,Vue也完全能够为复杂的单页应用提供驱动。
web展示包括商品档案、入库单、出库单、物资盘点、库存统计等业务功能页面,此外还包括用户管理、参数配置、权限和角色管理等系统管理功能页面。
2.3关键技术
整体框架技术:Springboot2.0、MyBatis、redis、Vue、elementUI、es6、webpack。
本软件产品基于B/S模式进行开发实现,技术路线方面主要采用三层架构,即UI表现层、业务逻辑层、数据访问层。
2.3.lUI表现层
移动端采用react-native框架实现数据展示,具有友好性强的特点:后台管理采用Vue+elementUI前端框架,使用它强大的组件功能,可以减轻开发工作量,提高开发效率。
2.3.2业务逻辑层
业务逻辑层主要实现系统业务逻辑的处理,通过与前台UI界面进行数据交互,将业务数据传送到前台UI页面展示,并在系统后台自动处理复杂的业务操作逻辑。本项目采用基于Java的最新Spring框架实现系统功能。
Spring是一个基于Java的比较轻量的开源框架,分层架构是该框架的主要优势之一,分层架构允许开发人员自主选择使用哪些组件,同时也为J2EE应用程序开发提供集成方案。Spring使用JavaBean技术规范来完成以前只可能由EJB完成的事情,它是为了简化企业应用开发复杂性而创建的。当然,Spring远远不仅局限于服务器端的开发,从开发简单性、代码可测试性和功能松耦合方面来说,任何Java应用都可以从Spring结构中受益。总的来说,Spring是一个轻量级的面向切面(AoP)和控制反转(IoC)的容器框架。
2.3.3数据访问层
数据访问层采用MyBatis技术实现,MyBatis是一个基于Java的优秀的持久层框架,该框架目前应用非常广泛且成熟、稳定,业务逻辑层通过调用MyBatis提供的API,实现底层数据访问与交互,灵活地进行业务系统数据的增、删、改、查操作。
MyBatis持久层框架包括两大方面:SQLMaps、DataAccessobjects(DAo),同时还提供一个基于该框架开发的JPetStore实例。相对于Hibernate和ApacheoJB等"一站式"oRM解决方案而言,MyBatis是一种"半自动化"的oRM实现。
安全考虑:严格遵循了web安全的规范,设计上采用前后台双重验证,参数编码传输,密码md5加密存储,shiro权限验证,针对常见的网络安全漏洞做严格的安全防护,从根本上避免外部SQL注入、跨站脚本攻击、CSRF攻击等常见的web攻击。
3系统测试
根据软件测试方案及应急包物资数字化管理系统用户手册,对软件各项功能逐一进行测试。主要从以下两方面着手:
(1)根据测试场景及案例,输入参数,然后判断是否有输出反馈,获得的反馈是否与预期测试结果一致:
(2)输入不满足输入要求的数据,比如超出边界的数据等,判断软件是否识别错误,是否出错,是否能提醒用户错误事项并提示重新输入。
对于软件测试中发现的错误及改进建议,根据重要程度分以下4个等级进行记录统计:
A级:软件功能不能实现或结果错误:
B级:软件功能可以实现,但输入不匹配的错误参数后不能识别,输出错误或报错的输出结果:
C级:软件界面外观问题,如字体、颜色、对齐等:
D级:其他改进建议。
测试用例与缺陷情况如表3所示。
4结语
该系统的设计完成,实现了应急包物资台账同步、扫码出入库管理、领用申请与资产系统出库记录关联、定期自动盘点、下限补充告警、数据分析等功能,解决了现有应急包管理不完善、无系统支撑、效率低等问题,使公司应急包管理更加合理规范,提高了应急包物资出入流转的效率,对于公司应急包物资管理数字化转型起到了一定的促进作用。