王海涛,蒋厚明,王 俊,曹海涛
(国网电力科学研究院,江苏 南京 210000)
随着移动通信技术的发展成熟和各种智能终端的普及应用(如图1 所示),移动信息化正逐步改变人们的生存方式和企业的运营方式,由于具备可移动性、实时性、交互性和可管理性等优点,国内外政府、交通、医疗、教育、银行、保险、制造、零售等行业已将移动信息化大量应用于现场作业、事务处理、商务智能等方面,将IT 系统延伸到移动终端,以应用和使用时间的“碎片化”实现生产效率与管理水平的全面提升,移动信息化已从辅助工具发展为提升企业生产力的关键工具。
对于国内的企业用户而言,目前的移动应用主要基于访问其所依赖的现有企业应用与数据,并与之互动。近年来,国内电网企业的移动应用越来越广泛,突出表现在现场作业方面,如:国家电网公司部分单位已实现用电管理、业扩报装、用电检查、抄表作业、电力线路巡检作业、物资管理、应急作业处理等移动应用,南方电网公司在配网检修远程资料查询、线路设备巡视管理、缺陷管理、故障抢修等业务领域已实现了移动化现场作业,有效地提高工作质量与效率,实现了现场作业管理的电子化、信息化、规范化和智能化。
图1 移动信息化发展趋势
国家电网公司提出“加强主营业务的移动信息化建设,有效支撑智能电网和新技术应用”的要求,移动工作流系统是移动信息建设中的重要环节,通过移动工作流系统实现出差员工的远程移动报销和远程移动审批(包括审批流程发起、财务电子凭证审批、审批结果短信提醒、移动端查询报销结果),将需要审批的各类流程以短信、邮件的方式推送到移动终端,方便用户实时地查阅待审批流程或文件,审批信息实时反馈至PC 端用户。
如图2 所示,移动信息化总体技术框架(即移动应用平台)包括移动终端层、平台层、安全防护层、网络层以及后端业务应用层:
图2 移动应用平台框架
1)移动终端层。包括业务应用、终端设备服务、操作系统应用、公共服务和终端安全与管理5 部分。
2)移动应用平台层。该层提供自主设计的移动富客户端、UI 组件、移动工作流、移动报表、移动视频实时传输、移动打印、数据访问、数据同步、安全控制、终端特性封装和移动GIS[1-2]等功能模块,为不同业务领域的移动应用提供功能全面的移动开发支持和运行框架,以及标准统一的业务系统服务集成规范。同时,平台负责与后端业务应用和一体化平台进行集成,移动终端通过平台与后端业务应用进行通信交互。
3)安全防护层。该层为移动信息化各层提供安全防护支撑,包括外网防护、终端防护、安全接入、内外网交互和内网防护等。
4)后端业务应用层。指后端业务应用系统,为移动终端提供业务数据及服务支撑,如生产管理信息系统,涵盖公司财务、营销、运检、基建、物资及人资6大业务条线,以及外部业务系统等。
5)网络层。根据国网公司信通部安全接入管理规范要求,移动终端类需要通过APN 或VPDN 专用通道,通过安全接入平台联接信息管理内网。
在移动应用平台的整体框架设计下,设计移动终端工作流处理技术,能够在移动终端上进行流程运行和管理,为现有移动应用平台提供移动审批、移动报销等功能,实现工作过程管理的自动化、智能化和整合化,增强移动应用平台对生产、营销、物资、基建等业务的支撑能力。本文提出移动工作流系统的框架设计(如图3 所示)。系统分为3 个层次:
1)客户端层。提供业务处理、UI 界面等,并提供一套平台接口同移动应用平台、工作流服务以及消息推送服务进行交互,主要技术难点包括同移动应用平台的统一权限身份认证,应用平台和工作流服务的用户数据同步。
2)移动应用层。该层主要是通过移动应用平台完成身份认证功能、用户同步、业务数据同步等,通过消息推送服务进行工作流流转状态通知、离线消息缓存和持久化,最主要的是利用工作流引擎提供工作流任务的服务。
3)数据库层。提供底层的持久化存储,存储各种业务模型数据、运行业务流程及任务数据、运行历史数据等。
图3 移动工作流系统框架
关于工作流的研究[3-7]有很多,在实际应用中,工作流系统的实现主要依靠工作流引擎,这其中有OpenWFE[8]、jBmp[9-10]、Workflow[11]、OFBiz[12]等。在本文的移动工作流系统框架中使用的工作流引擎是Activiti[13],它是一个轻量级的工作流引擎和业务流程管理(Business Process Management,BMP)平台,其核心是一个极快且稳定的BPMN2[14]流程引擎,能够轻松进行单机和集群部署,能够完美地与Spring 框架集成,同其他的工作流引擎不一样的是它是一个轻量级引擎并且简洁方便。
图4 Activiti 组件
图4 展示了Activiti 的主要组件,Modeling 主要进行业务流程的建模和设计;Runtime 是引擎的核心部分,它提供工作流的具体业务流程实现;Management 包含2 个部分:1)Explorer 是一个业务展现应用,包括查看待办、已办任务,开启新的业务流程,查看用户信息、数据记录等;2)REST 提供了一组restful风格的接口。
图3 中的客户端应用通过移动应用平台提供的工具包与图4 中的REST 中的接口进行交互,这些restful 风格的接口主要划分为表1 中的4 类方法。
表1 HTTP 方法和对应操作
和一般的Web 服务一样,这些方法也有一些HTTP的响应代码,部分HTTP 响应代码和描述如表2 所示。
表2 HTTP 响应代码和描述
此外,REST 还接收一些分页及排序参数、定义了一组变量格式等。利用平台封装好的工具包可以轻松地与REST 进行通信,比如使用GET 方法查询部署列表可以通过“http://host/activiti-rest/service/repository/deployments”URL 来获取所有工作流平台部署的业务模型,可以在URL 中加入分页和排序参数、查询参数,比如指定部署的name、部署的category 等,假如查询成功返回200 响应码,可以得到如下的响应体:
从上述的响应体中,可以得到当前系统中的所有部署信息,包括部署总量、部署id、部署的name、部署时间、category 等信息。此外,REST 还提供了其他的restful 风格的接口,主要有:
1)部署。包括获取部署列表、获得一个部署、创建新部署、删除部署及列出部署内的资源等功能。
2)流程定义。包括流程定义列表、获得一个流程定义、更新流程定义的分类、获得一个流程定义的资源内容、获得流程定义的BPMN 模型、暂停流程定义及激活流程定义等功能。
3)模型。包括获得模型列表、获得一个模型、更新模型、新建模型及删除模型等功能。
4)流程实例。包括流程实例、获得流程实例、删除流程实例、激活或挂起流程实例、启动流程实例、显示流程实例列表以及查询流程实例等功能。
5)分支。包括获取一个分支、对分支执行操作、获得一个分支的所有活动节点、获取分支列表、查询分支、获取分支的变量列表和获得分支的一个变量等功能。
6)任务。包括获取任务、任务列表、查询任务、更新任务、操作任务、删除任务、获得任务的变量、获取任务的一个变量以及获取变量的二进制数据等功能。
7)历史。包括获得历史流程实例、历史流程实例列表、查询历史流程实例、删除历史流程实例、获得单独历史任务实例、获取历史任务实例、查询历史任务实例、删除历史任务实例、获取历史活动实例、查询历史活动实例、列出历史变量实例以及查询历史变量实例等功能。
8)表单。包括获取表单数据和提交任务表单数据2 个功能。
9)数据库表。包括表列表、获得一张表、获得表的列信息以及获得表的行数据。
10)引擎。获取引擎的属性和信息。
11)运行时。主要功能是接收信号事件。
12)作业。主要用于获取、删除以及执行作业等功能。
13)用户和群组。主要用于对系统中的用户和群组进行增、删、改、查等操作。
除了工作流引擎之外,移动工作流系统还需要另外一个重要业务——消息推送服务。用户在移动端操作对工作流平台的接口进行调用,完成工作流任务,会引起相应的工作流业务流程跳转,那么这时候要通知下一个移动终端用户。此时,需要通过系统中的消息推送服务来完成通知任务。
到目前为止,即时通讯(包括其衍生的云推送平台与服务)一直被赋予高难度、高投入的标签,普通开发者和中小型IT 公司的业务大都依赖现有的第三方产品或服务,其缺点是:1)面临高额的收费;2)从信息安全角度来说,把自己的客户与业务建立在第三方服务的基础上,不能完全保证安全性。目前,虽然业界也有各种较流行的开源实现,但其普及程度还比较低。另外,由于目前的开源实现,普遍基于较高级的应用层面(例如:XMPP[15-16]),所以其实现较为复杂,不容易掌控和进行二次开发,并且越高级的应用,其通用性往往越低。
本文中采用DDPush[17]作为消息推送服务,其基于自有的二进制网络传输协议(基于TCP 和UDP),因而可以支持各种类型的终端设备,包括各种智能手机、平板、智能设备、物联网硬件和各种终端操作系统(包括:Android、Windows、Linux 等)。由于DDPush使用Java 语言开发,因此服务端可运行在各种操作系统和服务器上。
DDPush 拥有很多优势:
1)可自定义消息格式,易于扩展。基于UUID(Universally Unique Identifier)通用唯一识别码来工作。根据UUID 全球唯一的特点,DDPush 视一个UUID 能唯一标识一个终端,不管其来源和任何特性。
2)容量高,速度快,要求低。在线部分主要采用UDP 协议(同时支持TCP 协议),支撑1 000 万终端在线的服务器,最少只需要4G 内存(不考虑变长自定义信息的情况下),单个主流双核CPU 使用率低于75%,即一部普通PC 台式机的配置。DDPush 推送部分采取TCP 协议和Java NIO 非阻塞网络技术,普通PC 可支持至少数千台应用服务器同时长连接推送信息到终端,每秒推送信息的速度在1 万条以上。
3)终端设备流量少、省电。采用DDPush,智能手机等终端设备在线一个月(空载的情况下),只需几百kB 的上载流量,下载流量甚至可调节到为0。连续在线48 小时耗电少于0.5 mAh。
本文中DDPush 采用工作流系统自定义的协议包格式:
[1 字节版本号][1 字节appid][1 字节命令码][1 字节消息类型][32 字节UUID][2 字节包内容长度][包内容]
具体含义如表3 所示。
表3 移动工作流系统自定义协议报格式
DDPush 拥有众多优势,但是并不支持离线消息,即没有持久化存储的功能,而在本文的移动工作流系统中实现了这一功能(如图5 所示),主要是通过使用自定义的DDPush 协议报格式,加入消息类型标识,使用离线消息队列和连接池机制,使用多个离线消息处理线程对离线消息进行缓存和持久化处理。
图5 DDPush 消息推送服务
在DDPush 内部维护了一组移动设备状态机,每一个状态机都记录了一段时间内与消息推送服务器连接过的设备,当设备上线或重新连接时取出离线消息数据并推送出去,此外还要确定移动端的成功接收反馈消息。在一台单个主流双核CPU、4 G 内存的笔记本上经过测试,离线数据的读取量可以达到30~40 k 条/s。
随着移动技术的不断发展,移动终端日益成为人们日常生活的一部分,通过移动工作流实现便捷的办公自动化是不可阻挡的趋势。在国家电网公司的自动化信息建设中,移动工作流是重要的环节。本文提出了一种快速而有效构建工作流系统的方法,能够轻松实现复杂的工作流业务流程,并且提供能支持大量移动设备在线进行消息通信的消息推送服务。消息推送服务具有轻量级、易于扩展和维护、支持离线消息持久化等优势,在与其他系统集成方面,消息推送和工作流引擎可以进行独立部署,亦可作为其他系统的服务模块进行工作,在部署上可以非常简便。通过与移动应用平台的集成,该移动工作流系统整体运行良好。
[1]Benz U C,Hofmann P,Willhauck G,et al.Multi-resolution,object-oriented fuzzy analysis of remote sensing data for GIS-ready information[J].Isprs Journal of Photogrammetry & Remote Sensing,2004,58(3-4):239-258.
[2]龚健雅.当代GIS 的若干理论与技术[M].武汉:武汉测绘科技大学出版社,1999.
[3]Aalst V D,Hee V Kees.Workflow Management-Models,Methods and Systems[M].Mit Press Books,2004.
[4]Wil M P van der Aalst.The application of petri nets to workflow management[J].Journal of Circuits,Systems,and Computers,1998,8(1):21-66.
[5]Agrawal R,Gunopulos D,Leymann F.Mining process models from workflow logs[C]// Extending Database Technology-EDBT.1998,1377:469-483.
[6]罗海滨,范玉顺,吴澄.工作流技术综述[J].软件学报,2000,11(7):899-907.
[7]范玉顺,吴澄.工作流管理技术研究与产品现状及发展趋势[J].计算机集成制造系统,2000,6(1):1-7.
[8]Sourceforge.OpenWFE[EB/OL].http://sourceforge.net/projects/openwfe/,2015-09-14.
[9]jBpm.jBpm[EB/OL].http://www.jbpm.org/,2015-09-14.
[10]Sun Y F.Design and implementation of equipment management system based on the JBMP and lightweight J2EE[J].Applied Mechanics & Materials,2013,347-350:3283-3286.
[11]Codehaus.Codehaus[EB/OL].http://workflow.codehaus.org/,2015-09-14.
[12]Apache.OFBiz[EB/OL].http://ofbiz.apache.org/,2015-09-14.
[13]Activiti.Activiti Components[EB/OL].http://www.activiti.org/components.html,2015-09-14.
[14]OMG.BPMN2[EB/OL].http://www.omg.org/spec/BPMN/2.0/,2015-09-14.
[15]潘凤,王华军,苗放,等.基于XMPP 协议和Openfire 的即时通信系统的开发[J].计算机时代,2008(3):15-16.
[16]IETF RFC6121,Extensible Messaging and Presence Protocol (XMPP):Instant Messaging and Presence[S].
[17]DDPush.DDPush[EB/OL].http://www.ddpush.net/,2015-09-14.