引言

地震现场应急指挥技术系统是地震发生后地震现场与外界通信联络的通信枢纽,也是实现地震现场制定救援方案、部署救援力量、指挥救援实施的指挥枢纽,在震后救援行动中起到至关重要的作用(王卓等,2016王纪强等,2017)。为此,系统运维人员应保证设备的运维质量,使其处于正常运行状态,以应对随时可能发生的地震事件。目前,山东省地震局已建设完成地震现场移动指挥平台并投入使用。该指挥平台采用北方奔驰二类载货汽车底盘进行改装,会议区采用双向侧拉方舱,空间充足,配备卫星、3G、4G等多种通信手段,基本满足了恶劣条件下的通信需求(娄世平等,2017),显著提升了地震现场应急服务水平、通信能力、综合保障能力、信息产出能力以及车辆机动性等。但该指挥平台技术复杂、设备集成度高,对运维工作也提出了更高的要求。据统计,指挥平台自2014年交付使用以来,共进行过30余次比较大的升级改造和设备维护工作。目前的运维方式是统计每月的演练和维护工作,并填写在制式的表格中,上报到中国地震局服务器。该方式存在以下问题:①信息汇集渠道不畅,运维工作由多人负责,难以统计全单位1个月所有的运维工作量;②缺乏信息查询手段,运维信息填写在Word格式的记录表中,无法按照用户的规则条件进行快速、有效的查询。

目前,Android智能终端的应用已经十分普及,其具有良好的移动性、便携性以及强大的信息处理能力和通信能力,非常适合移动端的信息采集、上报和查询。戴波等(2016)设计的基于Android平台的地震设备维修管理系统,可以上传和查询维修记录;李梦伟等(2017)设计的基于Android平台的信息系统故障诊断App,实现了故障数据收集和故障诊断辅助功能;陈桂鹏等(2014)使用Android手机与信息采集终端相连,通过移动端App对农业环境信息进行处理、存储与传输。为提高地震现场的运维管理水平,实现运维过程中的信息共享和信息查询,本文基于Android系统,设计研发了1套现场应急指挥技术系统运维信息管理平台,用户通过安装在手机、平板电脑等智能终端上的App可进行运维信息的上报、查询,并将数据汇集在服务器端的数据库,实现了信息的共享,用户也可通过App查阅操作说明、通知公告以及辅助故障排查等。系统客户端App的登录界面和主界面如图 12所示。


图 1 App登录界面 Fig. 1 App login interface

图 2 App主界面 Fig. 2 App main interface
1 系统设计
1.1 需求分析与设计思路

地震现场移动指挥平台在震时作为抗震救灾一线的应急指挥场所,具有集成度高、智能化和可扩展等特点。针对目前在实际运维工作中暴露出来的项目冗繁分散、信息流转环节多、信息汇集查询能力弱等弊端,系统设计了运维上报、信息查询、用户辅助3大功能模块。考虑到移动智能终端屏幕尺寸、操作方式等条件的局限性,秉承高智能化和强自动化的设计理念,在上报页面中设计了时间、经纬度、地理位置、天气等辅助信息的自动获取功能,不仅提高了系统操作的便易度,也让用户在上报运维信息时更专注于运维工作的主体内容。

由于服务器部署在行业网环境下,而客户端用户暴露在公共互联网下,系统采用具有高安全性的虚拟专用网络(VPN)实现公共与私有网络之间的跨越,且为用户设置访问权限以限制用户的使用深度,从而保证了系统安全。

1.2 关键技术

该管理平台基于Android平台,采用Java语言进行应用程序开发,开发环境为Android Studio。Android Studio是Google开发的一款面向Android开发者的IDE,基于流行的Java语言集成开发环境IntelliJ搭建而成。服务器端采用Tomcat,开源免费,部署Servlet服务程序,用于接收客户端请求、访问数据库、进行数据存储和数据查询。数据库采用关系型数据库管理系统MySQL。客户端和服务器端的数据交互采用轻量级文本数据交换格式JSON,在系统开销、速度和易用性角度都更适合用于Android移动平台。

1.3 功能设计

管理平台针对地震现场技术系统运维需求,设计了信息的上报、查询和辅助3大功能模块,如图 3所示。


图 3 系统功能模块 Fig. 3 System function module

(1)上报模块:除了常规的文字和图片信息上报之外,考虑到不同的地理位置、天气情况对移动端的卫星系统运行都有影响,为了全面反映上报时的真实环境状况,上报模块使用Android平台的LocationManager类自动获取经纬度,使用Geocoder类将经纬度解析为参考地理位置,并通过互联网的天气API接口获得当前城市的天气预报,当前登录用户和时间也由系统自动获取,用户只需要填写文字信息和选取上报图片,即可与上述内容一同打包上传到服务器,节省了信息上报的工作量,且上报的信息更具客观性和真实性。

(2)查询模块:对于保存在数据库里的运维信息,客户端App支持根据上报时间、上报人员、上报内容和上报位置等多种方式进行查询,根据上报时间查询需要选取起止时间,其余查询方式均支持关键字模糊匹配。客户端接收到服务器端返回的数据后,将以列表形式进行显示,点击列表的某一项后,将会弹出对话框,显示该条记录的时间、位置、内容、图片等详细信息。

(3)辅助模块:为了使该App更好地服务于现场技术系统运维工作,设计集成了多种实用功能。“设备操作说明”可在线查看主要设备的说明文档、设计图纸和现场系统运维细则等信息;“故障排查”通过选择发生故障的设备、填写故障表现的关键词,从数据库中查询相关的历史维护记录,辅助设备检修;“通知公告”可在线查看或下载最新的演练通知等信息;“应急电话”列有测震值班、应急值班、分管领导等重要电话,点击即可转入拨打电话界面。

各功能模块的主要界面如图 46所示。


图 4 信息上报 Fig. 4 Information report

图 5 信息查询 Fig. 5 Information inquiry

图 6 设备操作说明 Fig. 6 Equipment operation description
1.4 系统结构

系统结构包括客户端和服务器端2部分,通过http协议进行数据交互,如图 7所示。


图 7 系统结构示意图 Fig. 7 System schematic diagram

其中,客户端为部署了管理平台App的Android智能终端,可以是手机、平板电脑等设备,UI交互层为与用户交互的界面,接收并处理用户指令,在需要与服务器进行数据交互时,通过POST方式提交数据,并处理返回的响应数据,数据经过解析后显示在UI界面上;服务器前端设置过滤器,主要用于用户登录、中文编码等处理,Servlet接收客户端请求、处理请求并完成对客户端的响应,DAO层实现对数据库的存储和读取。

2 功能实现
2.1 运维信息上报

运维信息上报时,需要开启位置服务,在获取到经纬度数据之后,才能根据经纬度得到位置和天气信息,最后和用户填写的上报信息一同打包发送到服务器。程序流程图如图 8所示。


图 8 运维信息上报流程图 Fig. 8 Information reporting flow diagram

LocationManager类可以访问系统的定位服务,周期性获得设备地理位置的更新,在获取LocationManager实例后,通过getLastKnownLocation方法获取当前的经纬度信息,主要代码如下:

LocationManager lm=(LocationManager)getSystemService(Context. LOCATION_SERVICE);

 Location location = lm.getLastKnownLocation(locationProvider);

 if(location!=null){

    longitude= (float)location.getLongitude();

    latitude= (float)location.getLatitude();

 }

其中,locationProvider是位置提供器,可以是GPS或者NETWORK,表示获取经纬度信息的途径。获取经纬度数据后,实例化Geocoder类,通过getFromLocation方法将经纬度转换为List<Address>类型的数据locationList,从locationList中可以提取当前坐标下的地理位置:

Geocoder gc = new Geocoder(this, Locale.getDefault());

List<Address> locationList = gc.getFromLocation(latitude, longitude, 1);

使用天气预报数据接口http://wthrcdn.etouch.cn/weather_mini,通过OkHttp访问该接口,并传递在locationList提取的city作为参数,将返回一个JSONObject类型的对象,在回调函数里对该对象进行解析,即可获得天气情况、最高温度、最低温度等信息:

JSONObject jo = new JSONObject(response); 、

JSONObject data = jo.getJSONObject("data");

JSONArray forecast = data.getJSONArray("forecast");

String high = forecast.getJSONObject(0).getString("high");

String low = forecast.getJSONObject(0).getString("low");

String type = forecast.getJSONObject(0).getString("type");

客户端的上报数据主要包括上报人员、上报时间、经纬度、地理位置、当地天气、维护的设备、上报的文字和图片内容几大部分。其中,上报人员默认为登录用户,上报时间、经纬度、地理位置和当地天气都由系统自动获取,用户填写上报内容,选取上报图片,系统将在客户端捕获的全部信息实例化为一个ReportData类对象,并将其转换为JSON字符串,使用OKhttp提交到服务器:

OkHttpUtils.post()

       .id(101)

       .url(url)

       .addParams("jsonStr", jsonStr)

       .build()

       .execute(new MyStringCallback());

在上述ReportData对象中,只保存了图片在服务器的存储路径,图片要上传到服务器,还要单独进行一次网络访问。为达到节省移动网络通信流量的目的,在上传图片之前,客户端先对本地图片进行压缩(预设不大于150K)后再进行网络传输。

2.2 运维信息查询

上报的运维信息保存在数据库里,其中编号_id为自增主键,数据表结构如表 1所示。

表 1 运维信息数据表结构 Table 1 Information data structure

客户端可通过上报时间、上报内容、上报位置等条件,分类查询上报的数据。在App的界面中,通过一个Spinner控件选择查询条件,在EditText控件中填写关键词,点击查询,返回的数据将显示在下方ListView控件中。其中,返回的数据格式为JSONArray字符串,需要进行解析,转化为JSONObject,然后使用上报数据类ReportData的构造函数,实例化每一项上报数据,关键代码如下:

JSONArray jsonArray = new JSONArray(response);

for (int i = 0; i < jsonArray.length(); i++){

  JSONObject jsonObject = jsonArray.getJSONObject(i);

  ReportDatarptData = new ReportData((float)jsonObject.getDouble("longitude"),

                              (float)jsonObject.getDouble("latitude"),

                              jsonObject.getString("time"),

                              jsonObject.getString("weather"),

                              jsonObject.getString("content"),

                              jsonObject.getString("position"), );

  }

2.3 辅助功能

辅助功能中“故障排查”模块是通过输入故障设备和故障表现的关键字,对数据库里的相应字段的数据进行匹配,返回历史维护记录,其实现方法与“运维查询”类似,不再赘述。“设备操作说明”、“通知公告”等功能则是通过对服务器上的html文档进行读取和显示来实现的。

3 系统应用

移动指挥平台投入使用已经将近4年,部分设备开始老化,故障频发,如液压支撑系统经常发生支撑腿无法落下或收起的情况,故障表现不同,解决方法也不同。由于运维人员不固定,彼此之间缺乏有效的信息沟通渠道,无法共享解决方案。本系统部署后,在设备维护时通过该管理平台上报维护记录,便于日后出现类似问题时,其他运维人员能及时查询处置方法。图 9为上报的运维信息详情,记录了某次液压支撑系统故障表现和解决方法,并附有图片,一目了然并且可操作性强。


图 9 液压支撑系统维护记录 Fig. 9 Maintenance record of hydraulic support system

日常运维工作除了故障排查,还包括设备的周期性充电和保养,如车载发电机每用时100小时或1年需要进行保养,图 10为通过本系统记录的某次发电机保养时间和内容,明确了时间节点,并保存了详细的保养记录,为设备下次保养提供了重要的信息参考。


图 10 发电机保养记录 Fig. 10 Generator maintenance record

此外,在各项演练中,通过本系统上报行进、演练、撤收等各阶段的流程,保存了一份详尽的演练记录,可为以后的演练活动提供重要参考。在中国地震局组织的“震安-2017”华北片区综合演练中,山东省地震局现场工作队负责前往内蒙古自治区丰镇市模拟地震现场进行技术保障,整个行程将近800km,途经山东、河北、山西、内蒙4个省区,现场工作人员从出发开始,使用本系统上报演练各节点信息。图 11为按照演练的起止时间进行查询得到的记录列表截图;图 1214为指挥车加油、路况、演练内容的上报信息详情,这些详实的记录都将为今后的现场应急工作提供有力的信息支撑。


图 11 演练记录列表 Fig. 11 Rehearsal record list

图 12 车辆加油记录 Fig. 12 Vehicle refueling record

图 13 高速路况记录 Fig. 13 Road condition record

图 14 视频会议记录 Fig. 14 Video conference record
4 结束语

运维信息管理平台充分考虑了现场技术保障工作的需求和特点,主要解决了技术系统运维时信息不易汇集和查询困难的突出问题,目前,该管理平台已在山东省地震局现场工作中得到了应用和检验。实践证明,本系统功能丰富、性能稳定、实用性强,有效提升了现场工作的效率和水平,未来将在山东省内各市级地震局进行推广应用。在接下来的工作中,将逐步完善、设计系统的考核功能,在服务器端自动检查上报材料的时效性和完整性,实现对运维质量的自动考核评价,保证资料评比公正客观。

参考文献
陈桂鹏, 严志雁, 瞿华香, 等, 2014. 基于Android手机的农业环境信息采集系统设计与实现[J]. 广东农业科学, 41(13): 178-181, 219. DOI:10.3969/j.issn.1004-874X.2014.13.038
戴波, 王大伟, 江昊琳, 等, 2016. 基于Android平台的地震设备维修管理系统[J]. 地震地磁观测与研究, 37(2): 153-156.
李梦伟, 董正宏, 杨帆, 2017. 基于Android的信息系统故障查询App的设计与实现[J]. 计算机科学, 44(11A): 561-564. DOI:10.11896/j.issn.1002-137X.2017.11A.119
娄世平, 贾荣光, 杨玉永, 等, 2017. 地震应急通信"最后一公里"问题的解决方案设计[J]. 中国应急救援, (2): 44-48.
王纪强, 吴晨, 宋文杰, 等, 2017. 地震救援现场应急通信体系研究[J]. 地震工程学报, 39(S1): 214-21.
王卓, 方瑶, 郝永梅, 等, 2016. 地震现场通讯集成技术研究[J]. 地震地磁观测与研究, 37(1): 165-172.