王旭东,叶昕炯,祁 力
(1.湖州电力局,浙江 湖州 313000;2.湖州泰仑电力自动化工程有限公司,浙江 湖州 313000)
随着国家电网公司物资集约化工作的逐步推进,对于物资需求部门来说,相应的管理要求也越来越高。湖州电力局传统的物资需求申报模式是由需求部门定期上报需求计划(每月1~2次),特殊紧急的物资采购允许临时申报。对于物资计划申报之后的流程跟踪,现有的ERP-SAP系统、国家电网公司电子商务平台的设计理念是基于物料管理和合同管控,在物料需求计划前期管理方面尚缺乏有效的手段。在总结湖州电力局物资管理经验、充分调研相关部门实际工作需求的基础上,设计了物资管控系统(含需求计划跟踪和预约领料等模块)。系统结合湖州电力局物资管理工作的实际,基于已有的完善的内部局域网系统和信息化办公硬件条件,旨在为各相关部门提供计划申报、计划审核、计划执行、采购信息反馈、预约领料各环节的状态信息和信息交流平台,便于需求部门和计划部门实时掌控计划流转情况和可领料情况,是对目前应用的SAP系统的补充,能有效提高湖州电力局的物资前期管理工作水平。
系统总体开发思路是采用B/S模式,基于MVC和SSH2技术。随着物资需求计划文件在各个处理环节的流转,文件处理状态也相应改变。需求部门、计划管理部门通过查看计划和物料状态的改变情况,跟踪需求计划流转状态和物资采购、入库、领用的情况。系统功能及结构如图1所示。
图1 系统功能结构
预约领料是本系统的一大亮点。传统的物资领用方式是需求部门凭领料单直接去仓库领料,仓库保管员根据领料单和库存情况发货。在实际工作中,经常会出现一些问题,比如需求部门急需的物料由于采购、入库不及时而领不到,造成人员、车辆的浪费。又如,如果需求部门要大批量领用物资,而仓库保管员又事先不知道领用情况,容易引起误发货或备货不足的情况。基于以上种种情况,设计开发了该系统。
根据工作流程和部门信息管理的需要,系统共设置了9个职能模块:需求管理、计划管理、招标管理、采购管理、合同管理、仓库管理、公用信息、信息通告和系统管理。
需求模块:物料需求计划的申报,包括集中采购目录范围内的物资和零星采购物资,以及物资预约领料、物资领用等。
计划模块:物流服务中心计划管理人员对上报计划中零星采购物资的审核,确定采购原则。
招标模块:集中采购物资需求计划和物资专项招标采购计划的审核,招标完成后的招标结果信息反馈。
采购模块:零星采购物料订单的创建,采购合同的挂接,预约领料单的信息处理。
合同模块:集中采购物资合同文档的挂接,预约领料的处理。
仓库模块:预约领料信息处理和针对领料单的发料。
各模块根据实际工作需要将多种统计报表纳入其中,有利于各个时间段对各种相关数据的统计汇总。
系统依据计划申报、审批、招标、采购、收货等不同途径,分为3个流程:集中采购流程、平衡利库采购流程和非平衡利库采购流程。相应的物资需求计划文件有以下状态:
(1)需求部门:未提交、待修改、已提交、可预约。
(2)计划管理:未审核、已下达。
(3)招标管理:未审核、已完成。
(4)采购管理:未采购、已采购。
(5)合同管理:未签订、已签订。
2.2.1 集中采购流程
集中采购流程是指由需求部门准备物料需求计划,并进行单位内部审核。属于集中招标采购目录范围的,就按照集中采购流程上报至物流服务中心招标专职,由招标专职组织计划审查专家组进行内审。如果合格就提交至省电力公司,若不合格则退回需求单位,经修改后重新提报。集中招标完成合同签订后,在该系统内挂接合同文档,填写合同计划交货期,在计划交货期前需求部门可依据初始填报的需求计划发送预约领料单至合同管理人员或配网物资仓库保管员,进行预约领料操作。集中采购流程如图2所示。
图2 集中采购流程
2.2.2 平衡利库和非平衡利库物资采购
生产运维物资、劳保、办公用品、表计、低值易耗品等物资,一般都有一定量的库存储备,需要平衡利库,然后下达采购计划。对于项目类物资需求计划,则没有平衡利库过程。鉴于此,设计了图3所示的平衡利库和非平衡利库物资采购流程。
2.2.3 预约领料管理
基于目前应用的ERP-SAP系统在预约领料方面尚无相应功能模块,物资的可领用信息也不能及时反馈到需求部门,故开发了预约领料系统,流程如图4所示。
图3 平衡利库和非平衡利库采购流程
图4 预约领料流程
对于集中采购物资和零星采购物资,当采购订单已创建或合同已签订后,采购员或合同管理员即可将计划交货期输入系统,在系统内设定合理的供货时间。当供货时间到达后,系统允许需求部门预约领料,在系统内提交预约领料单至仓库保管员,由仓库保管员根据物资到货情况回复可否领料的反馈信息。对于直接送至需求部门或工地现场的物资,将预约领料单发送至采购员,由采购员回复可否领料信息。需求部门根据仓库保管员或采购员的回复意见确定领料方式和时间,仓库保管员根据回复信息做好备货工作。以上的流程设计加快了物料领用效率,也保障了物资装卸的安全。
在初期调研和技术讨论阶段,结合系统的应用范围和实际办公条件,决定采用IE6界面。因为Web模式不需要安装专用软件就可以直接使用,适合与办公系统OA,SAP及协同办公等系统相互结合使用,简单实用,避免了客户端安装和升级维护的麻烦。
由于该系统涉及的业务处理流程较多,因此系统中需求计划文件的处理状态成为整个流程的核心。为了使系统能流转顺畅并实现信息集成统计、分析功能,确定采用两大模式的状态,即“联系函”(即需求文件)状态、“物料”状态。通过“联系函”状态,实时追踪需求计划的流转进度,通过高级检索中的多种查询条件,以最快的速度定位最有用的信息;通过“物料”的采购状态及领用状态,自动计算采购率、领料率,不仅为物资的管理和统计带来方便,而且也提高了需求部门领料和仓库备货以及物资配送的效率。
集中采购模块和合同管理中的计划交货期均采用了Java定时器技术,集成Spring定时器在SSH2框架中的应用。在Spring中有两种流行的配置方式来执行调度任务,即Java的Timer类和openSymphony的Quartz,考虑技术的成熟与稳定性,本系统采用后者。Quartz调度器执行工作不仅能精确到毫秒,还允许调度某个工作在某个特定的时间或日期中执行。继承QuartzJobBean类实现executeInternal方法,处理Java业务,在Spring配置文件中配置启动时间点。
此外,根据物资采购情况自动生成预约领料单是系统的另一大特色。结合采购率计算,实时反馈物料的采购状态,自动生成预约领料单,使需求部门能在第一时间领取所需物料。考虑到反馈信息呈现方式的美观及实用性要求,本系统采用JQuery技术实现淡入淡出的消息框功能,可智能提请用户注意。针对用户输入的物料编码,又采用了Ajax技术调用Action并生成JSON再传递到客户端。考虑到安全因素,使用了POSET表单提交方式。当客户端发起一个Ajax请求,执行不同的Action来返回不同格式的JSON字符串,最后在JSP页面上用Javascript解析出来。通过JSON的应用,速度大大提高,比常规的XML快得多,与此同时返回的对象应用灵活性也很大。
Excel作为广泛应用的数据统计、文档处理文件,倍受用户青睐。本系统的库存平衡也采用了 Java Excel API(JExcelAPI)技术,从 Excle 数据导入,到数据库保存,最后导出打印,实现系统之间的良好通信,对企业的发展、生产效率的提高起到很好的作用。
在系统的展现风格上,采用EXTJS富客户端技术,搭建了交互性强、色彩绚丽、界面华美的平台。EXTJS是比较开放的开发者接口,可扩展性强,数据和表现分离,显示的选择方式灵活。
本系统采用Strus2+Hibernate+Spring整合架构,Spring起到了JavaBean容器的作用。Spring使用IOC和AOP接管了Hibernate的DAO(数据访问对象层)、事务和Struts2的action对象以及service业务层,从而能有效管理事务和request请求。经过IOC容器的处理后,针对面向接口程序的层次更为分明。
MVC 是指模型(Modeal)、 视图(View)和控制(Controlle)。
(1)M层:Spring对Hibernate的DAO进行了非常的封装。实现AOP面向切面编程功能,支持不绑定到特定的JAVAEE服务容器的可重用业务和DAO。
(2)V层:JSP是Servlet的扩展,利用输出流动态生成html页面。
(3)C层:Struts2体现在解耦上,在struts.xml配置文件中进行配置后,通过逻辑名称访问真实的物理JSP页面。提供拦截器,实现权限拦截等功能。
(4)持久层:Hibernate是开源的对象关系映射(ORM)框架。对JDBC轻量级对象封装,大大减少了重复的代码。系统灵活运用逆向工程学,反向映射Bean和DAO层,提高了开发效率。
加入Struts2过滤器后,web.xml文件的代码如下:
……
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepare-AndExe
cuteFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/login.jsp</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
……
在项目SRC目录下,创建的struts.xml文件代码如下:
<struts>
<constant>
name="struts.enable.DynamicMethodInvocation"value="false"/>
<constant>
name="struts.custom.i18n.resources"value="globalMessages"/>
<constant name="struts.i18n.encoding"value="UTF-8"/>
<include file="struts-login.xml"/>
<include file="struts-system.xml"/>
<include file="struts-flow.xml"/>
<package name="default"extends="struts-default">
......
</package>
</struts>
开发人员可以通过DAO持久化层,以对象的方式操作数据文件,免除了JDBC对数据库SQL的语句操作。以下是保存联系函的代码:
......
public void save(SysContactletter transientInstance){
log.debug("saving SysContactletter instance");
try{
getHibernateTemplate().save(transientInstance);
log.debug("save successful");
}catch(RuntimeException re){
log.error("save failed",re);
throw re;
}
}
......
表现层的实现主要由JSP完成。为了提高较强的交互性,采用RIA(富客户端)EXT技术,集成操作方便、界面风格统一、效果绚丽的浏览器式框架。
本系统完成开发并投入试用后,解决了物资前期管理工作中长期存在的难点问题。从各部门试用后的反馈情况来看,达到了预期效果。
随着国家电网公司和省电力公司集约化管理工作的逐步推进,接下来还要逐步推进电力物资定额储备工作,市、县电力局本部设置区域库,由市、县电力局物流服务中心负责管理;工区、供电营业所按照生产实际需要设置周转库,由市、县电力局物流服务中心负责业务管理,人员和设施由工区、供电营业所配置和管理,因而会涉及物资配送体系的建立,因此在该系统开发初期调研阶段便预先设置了适合今后物资配送体系的接口。因为区域库、周转库数量较多,在实施物资配送模式后,必然涉及物资的配送周期、物料配送种类的搭配、配送车辆的合理选择及配送路径的合理规划等一系列问题。鉴于此,在目前该系统预约领料的基础上开发物料配送信息系统,将极大地提高物资管理水平。
[1] 王凯,石冰心.三层体系结构在一个ERP系统中的应用[J].计算机与现代,2002,3(4)∶33-36.
[2] 李刚.轻量级J2EE企业应用实战—Struts+Spring+Hibern ate整合开发[M].北京:电子工业出版社,2007.