周阿连
(烟台职业学院 信息工程系,山东 烟台 264670)
ERP主要用于企业管理,是以计算机信息技术为技术支撑,融合先进的管理理念,涵盖企业业务管理与流程优化建设的管理信息系统平台。对于企业生产经营管理而言,设备稳定、无故障运行是提高生产效率、实现经营目标的关键所在。设备管理是企业经营发展的基础,契合企业管理需求且稳定性高的设备管理系统是企业发展生产和实现设备全生命周期管理的有效抓手[1-2]。对于钢铁企业来说,尤其需要引入高效稳定的设备管理系统。目前主流的系统通常采用基于J2EE平台的Struts MVC架构,该框架最大的好处在于能够完全实现MVC Model 2框架,结合程序配置管理,实现系统功能和应用程序的配置化管理、可插拔扩充功能[3]。Struts功能虽强,但使用导入复杂[4]。基于此,在Struts的框架的基础上,创新应用提出了更为稳定易用的Structs框架,同时简化系统设定及使用方式。本文以某钢铁企业ERP设备系统信息化建设为研究对象,以该系统报支模块为代表,提出一种基于MVC模式的新型WEB应用开发框架——Structs框架,并重点介绍了基于Struts框架基础优化前后台传输手段、设置封装对象,建立可配置的底层框架平台等的Structs开发框架,并结合设备系统中的报支模块详细阐述了Structs框架的系统架构、核心配置以及关键核心模块的实现过程。
MVC(Model-View-Controller framework)模式是较为经典的JAVA开发模式,模型的框架示意如图1所示[5-7],主要包括模型层(Model)、视图层(View)以及控制器(Controller)三层架构。模型层实现数据库的存取以及逻辑控制和计算,视图层为用户输入输出界面,控制器实现模型层与视图层信息的传递和基本逻辑处理。
图1 MVC模型Fig.1 MVC model
Struts框架MVC模式的实现途径,主要包括协作类、逻辑转发Servlet以及JSP页面标记库等构成的可以复用的系统架构。其优势在于灵活性高、复用度大,目前主流的Springboot、SpringMVC内核均为该框架,该框架前后台工作过程如图2所示。
图2 Struts的工作原理Fig.2 Working principle of Struts
Struts框架的典型优势包括模块化、灵活性等,可以较好地表单验证设计以及可灵活配置文件。对于视图层的表单验证功能可以有效地过滤问题数据,利用配置文件进行逻辑配置、程序配置、关系建立,使得系统维护、扩展、调整更为灵活。该框架的局限在于视图层与业务层之间的过度耦合,造成前端开发人员与后端开发人员无法解耦,不利于系统实现和技术解耦效率的提升。且通常配置文件过大,对于大型系统而言,开发和维护困难性也会增加,系统运行风险也随之提升[8-9]。
考虑到Struts框架本身固有缺陷,对于大型钢铁企业设备管理系统而言,系统业务及用户量都非常大。在系统建设过程中,提出了Structs框架,既保留了Struts框架的优势,同时优化了配置模块,扬长避短。核心思想是简化表现层,解耦前后台开发人员,采用Value Object(VO)框架对数据进行封装和传递,进一步降低系统的复杂性。同时采用封装标准进一步验证该模块准确性,提升整体的处理效率,优化整体的配置文件,降低系统的复杂度和运行风险。图3展示了Structs框架的设计模型。
图3 Structs模型Fig.3 Structs model
该ERP设备系统主要包括以下功能:首先,根据公司下达的设备检修计划,生成年维修计划,经相关人员审核后,形成工作申请单,由检修合同管理单位将工作申请单与合同挂接,由点检员执行审核后的工作申请单,最后由相关财务人员形成报支记录。在工单执行过程中,产生物料的入库和出库动作。其次,该设备系统能够对设备的停机故障以及维修履历进行记录和统计。根据业务部门的实际需求,设备管理系统包括:1)设备基本资料管理模块:对全公司的设备按厂别、产线、区域、部件进行登记,形成设备定址码,对设备和部件按各种业务类型进行类别管理,以及生产或维修过程使用的油品资料的登记管理;2)修理预算模块:建立预算,收集实支费用,包括预算科目的建立,基于科目下的预算中心分年度的管理和成本中心关联作业,报支后的实支查询工作;3)修理计划模块:主要功能为建立各种修理计划,并对所建计划审核形成工作申请单;4)工单执行模块:工作申请单的编制、审核、以及工作任务的执行结案,同时还包括以工作任务单为基础的合同结算报支模块;5)库房管理模块:包括物料出库/入库管理、暂存料管理、库存查询等;6)停机故障查询模块:停机立案、审核、结案以及履历登记、查询和分析模块;7)共用表格和配置管理模块:该模块主要对页面选单、用户授权、按钮授权、报表参数等进行基本设置,结合Structs框架封装好的页面按钮级授权模式,实现用户访问系统及操作数据的权限。
本系统采用基于Struts2的Structs 架构,方便地实现模块化开发、提高代码的重用性和维护性,以及充分考虑到系统的跨平台等因素。架构如图4所示。
图4 Strutcts架构Fig.4 Strutcts architecture
图4所示架构中,每个程序以pages作为一个单元,分别处理每个page的action,一般是以button为触发依据,通过controller处理每个page的controller的完整className,最后通过convert处理每个page所包含的value object信息。具体的运行流程图,如图5所示。
图5 Structs运行流程图Fig.5 Flow chart of Structs operation
其核心为模块化配置文件structs.xml。
1)以structs.xml 定义画面与controller的对照,快速地找出负责该画面的controller class。
2)以structs.xml定义button与controller的action method对照,快速地找出负责某按钮的method。
3)透过structs.xml中的converter设定,简化画面的表单数据转换至value object 的过程。
4)可在structs.xml设定某action是否要进行前端数据的有效性验证。
自2013年,智能家居就已经“火”了起来,但当时,很多人认为智能家居并没有真正走入大众的生活。如今,随着智能技术的日新月异和智能产品的更新迭代,各类智能家居平台先后涌起,各种智能解决方案也开始陆续涌现,智能家居体系得到进一步落实。2018年,智能家居不再停留在概念层面,人工智能、物联网技术的成熟都推动着智能家居从单品智能发展为系统智能,智能家居在不断培育消费者的使用习惯,潜力巨大。
5)前端视图层用户的输入栏位是否只读、按钮可用与否等状态的控制程序与前端解耦,交由后端的Controller程序实现,进一步实现客户端管理,提升系统的响应速度和处理能力,以及程序代码的复用。
系统实现部分,以设备系统业务逻辑较为复杂、前端选单及验证较多的设备检维修报支结算模块功能为例,详细阐述系统的实现过程,检修合同结算报支模块的页面实现如图6所示。系统实现包括前端View层JSP界面实现、后台控制权限以及逻辑转换组件等分模块实现。
图6 设备检修费结算报支模块实现图Fig.6 The implementation diagram of the equipment maintenance fee settlement reporting module
View组件由一个JSP页面、VO类和检验画面输入的数据scrcrl类构成,通过Structs框架中的一系列关键的组件和配置文件实现View与后台的传输。Structs封装了自定义JSP标记库,并作为前端View程序组件,应用于该标签库,极大地减少了JSP页面的Java Scriptlet验证,使得JSP页面开发变为非常容易,并对后续的测试及维护工作也有较多帮助。
以维修费用报支画面对应的JSP为mbmjfw-base.jsp为例。首先,画面栏位的显示通过不同的自定义的标签实现。包括text、out、select标签等,根据不同的标签type,显示的画面栏位各不相同提示选单,如:
该标签为成本中心提示选单,通过自定义标签实现类查询成本中心的表格,并在提示选单画面中画出所有查询的页面,如图7所示。
图7 设备检修费结算报支查询画面Fig.7 Screen of inquiring equipment maintenance fee settlement report
另外,可以根据不同的fmt格式调用公用表格,通过公用表格的设置,设置画面显示的下拉选单,这样可以不用修改程序,达到修改提示选单的目的。
Controller组件作为逻辑处理的核心组件,当前端提交用户信息后,Controller组件主要完成数据的基本验证、转换VO数据到Mapping结构。在结算报支模块中,Contoller组件为mbmcfw-BaseScrCrl类,主要功能为控制并对选单、数字、日期、状态等进行有效性判断,控制按钮数量以及按钮权限等。
如图8所示的按钮的权限的控制,灰色为没有操作按钮权限。实现代码如下:
图8设备检修费结算报支按钮控制实现画面Fig.8 The implementation screen of the button of control of the equipment maintenance fee settlement report
insBtn=new zxcBtnBean(mzxcC2N.getMessage("INS"), mzxcInfo.BTN-NAME-INS, mzxcC2N.getMessage("INS"), INS-ACTION-FUNCTION, true, zxcBtnBean.BtnImage-INSERT, "", "", "");
该代码设置新增按钮,通过mzxcC2N.getMessage("INS")设置新增按钮的栏位名称,INS-ACTION-FUNCTION设置调用后台所用的方法。权限判断通过系统封装好的底层判断代码,根据每个画面自动的APPID与简易表格中设定的群组代码,自动组建出登陆用户所在的部门组成判断群组,依次来进行按钮权限判断。
Structs框架中主要用到的关键组件为Web Object Converter,该模块使用Structs.xml 所定义针对一个画面中会出现的value object定义,自动将画面上的字段数据转换成value object 或value object list。让开发人员可直接操作value object,省去数据转换的动作。
ActionResult类的主要功能为保存前端验证数据的结果、按钮权限设定的结果,实现过程中应用HTMLElement 类完成对象的设定。
dejcActionResult负责传递数据验证结果信息,可一次收集多个字段的错误信息,若同时需要控制画面录入字段或按钮状态,也可以将HTMLElement加入到此对象来设定。
核心配置文件为MWM-Structs.xml文件,设备结算报支模块的全部124个页面均通过该文件进行前后台验证,并对相关信息进行处理。使用ActionServelet调用MWM-Structs.xml文件,在页面触发逻辑处理请求时,确定表单VO、Action以及后台处理完转向JSP 页面。控制器Controller使用Servlet 类获得封装好的请求,完成逻辑转发,同时对逻辑层处理好的结果,通过Conroller类填充到ActionForm中,并转发给下一步处理的Action,最终响应给JSSP文件生成前端显示视图。而Struts-config.xml 作为核心文件配置负责了全过程管理。
以某大型钢铁企业ERP设备系统管理平台搭建为契机,结合Struts框架的优势和缺陷,提出了一种基于Struts的改进Structs框架。通过优化前后台传输手段、封装请求及响应对象,建立可配置的底层框架平台,以该系统业务逻辑复杂、画面选单多样的检维修结算业务为例,详细阐述了应用该框架的实现过程。目前该系统处于运行稳定状态,有效解决了信息化支撑力量不足、设备管理精准率低等问题,企业工作效率和管理能效明显提升。