微信公众号在数字地震观测台网运维工作中的应用
2017-11-21吕奥博严俊峰
张 明,赵 娜,吕奥博,严俊峰
(1.浙江省地震局,杭州 310013;2.杭州斯玛特维科技有限公司,杭州 310013)
微信公众号在数字地震观测台网运维工作中的应用
张 明1,赵 娜2,吕奥博1,严俊峰1
(1.浙江省地震局,杭州 310013;2.杭州斯玛特维科技有限公司,杭州 310013)
使用微信公众号作为载体搭建一个可供地震行业内各省局所属区域台网在日常运行维护中实现具有运维信息采集、运维经验分类归档、后台数据库集中管理、终端访问及智能检索等功能模块的平台。仪修人员可以通过关注微信公众号使用文字、语音、图片等多种形式实现对台网运维信息的收集、发布和检索等功能,从而提高地震观测台网的日常运维效率。
微信公众号;地震台网运维;信息采集与管理
0 引言
微信是腾讯公司于2011年1月21日推出的一个为智能终端提供即时通讯服务的免费应用程序,微信支持跨通信运营商、跨操作系统平台通过网络快速发送免费语音短信、视频、图片和文字。随着近些年智能手机的大范围普及,经统计截止2013年11月注册用户量已经突破3亿[1],已经成长为目前亚洲最大用户群体的移动即时通讯软件。
运维工作是我们地震行业监测预报的基础,是地震监测台网运行的重要组成部分,是能否获得高质量地震观测数据的关键环节。从 “十五”项目数字化台网建设到 “十二五”公共服务建设,随着各省局台网观测系统的数字化和网络化进程的发展,台网规模逐渐扩大,台站数量逐年增加,各省局的台网运维任务也开始逐渐加重。虽然目前中国地震局监测预报司及下属各省地震局不断出台地震观测台网运行维护管理办法和保障机制的文件,并且每年各台网运维片区也多次召开运维保障会议以提供各省市地区的台网运维人员进行工作交流,但毕竟缺少常态化的经验交流,对日常维护工作需要的时效性无法解决。
由于不同季节、不同时间段的台站故障数量、类型及原因均存在很大差别,理论故障判断与实际故障原因也存在一定的差异性。并且各省市地震局随着陆续引进各种国内、国外仪器厂商所生产的设备,各种设备之间相互搭配组合,传感器与采集器之间,产出数据格式与台网的流服务数据格式格式之间的兼容性问题也导致了运行故障的频发对维护人员的业务能力提出了更高的要求。因此单纯依赖各省局自身责任区的台网运维经验对于一些较为复杂或出现几率很低的故障原因判断和解决带来了一些困难在一定程度上影响了整个台网的运维效率。
所以基于微信公众号的实时性、便捷性搭建一个集既能够完成各省地震局及其所属台网和台站维护工作的统计存档,又能够共享整个行业内各省局各学科的运维经验,提供仪修人员日常工作间的交流和学习的运维经验管理分享平台,对提升整个行业的台网运维能力和效率是值得思考和实现的。
1 微信公众号运维平台的系统功能和架构
1.1 系统功能
通过微信公众号作为媒介可以将数字地震观测台网日常运维过程中产生的各种故障解决方案以文字、图片、视频等多媒体信息,通过微信平台推送至用户群个人终端,从而达到向用户提供运维经验的目的[2]。主要包括以下功能:
(1)运维经验录入功能:用户可以通过手机终端关注运维经验管理平台微信公众号按照固定格式上传运维方案信息(目前支持文字、图片、视频信息上传),后台数据库会对上传的信息进行分类存储。
(2)运维经验查询功能:用户在运维中遇到困难或无法解决的问题时可以通过该功能的借鉴类似解决方案 (目前系统支持关键字查询和模糊查询两种查询方式),同时如果方案未查询到系统会对用户进行提示是否群发信息寻求帮助的询问,从而达到通过多方面在线沟通达到解决问题的目的。
(3)运维经验评价功能:当用户查询到运维解决方案后系统会返回评价询问,同时系统会根据用户评价的结果给此条方案打分,作为今后的同类运维解决方案查询中优先推荐的参考 (在每次查询时系统会返回评价分最高的5条至10条运维解决方案给予用户进行选择)。
(4)故障信息统计功能:通过该模块用户可以查询到某个仪器在一定时间段内发生故障的情况,给运维人员针对仪器进行改进或针对性的防护提供参考依据。
1.2 系统架构
本系统采用B/S结构,Eclipse-j2ee为开发环境,Oracle11.g为开发软件的数据库服务程序。硬件配置环境为:CPU Intel 2.4GHz;内存2GB;硬盘5GB以上空闲空间。软件配置环境为:Jdk 1.7以上,服务器tomcat1.7;操作系统windows 2008 sever;开放80端口。系统主要分为四层架构,分别为展示层、应用层、数据库层、接口层,各部分功能架构如图1所示。
1.3 数据库结构
本系统软件的后台数据库部署在省局台网中心服务器机房,采用树形表结构对软件平台的后台数据进行分类管理。当运维经验录入时系统采集到的数据信息会按照规定的固定格式分别录入到各基础数据表中,当系统进行查询功能时数据库会根据基础表和关联表对信息进行匹配,具体的数据库表结构设计如表1所示。
图1 系统架构图Fig.1 System frame diagram
表1 数据库表结构设计Table 1 The structure design of database table
2 微信公众号平台的数据交互方式与自定义菜单
2.1 数据交互方式
微信公众服务号消息接口为开发者提供了与向用户进行消息交互的能力,对于成功接入消息接口的公众服务号,用户发消息给公众号时,微信公众平台服务器会使用HTTP请求对接入的网址进行消息推送,第三方服务器通过响应包返回个性的回复,从而达到回复消息的目的[3]。用户、微信后台和需要开发的公众号后台的服务器三者之间的交互关系如图2所示。
图2 微信公众号平台数据交互方式Fig.2 Class and interface definitions of WeChat public number
2.2 类和接口定义
系统通过微信提供的公众号统一操作接口模式,在移动客户端上,按照各个设备的标准界面方式显示信息内容,通过公众订阅号的菜单功能提供对系统各个功能的快捷访问[4],具体的类与接口定义如表2所示。
2.3 自定义菜单
通过使用微信公众号的自定义菜单,在终端操作界面增强用户与公众号的互动,给用户提供一个更好、更便捷的操作体验。目前腾讯微信公众号的自定义菜单可提供3个一级菜单,每个一级菜单下可创建最多5个二级菜单。
表2 微信公众号类和接口定义Table 2 Class and interface definitions of WeChat public number
具体操作可以通过登陆微信企业号在公众平台后台管理页面-开发者中心页-应用中心,点击已发布的微信公众号进入后台管理界面,在模式选择中选择回调模式-自定义菜单-设置进入自定义菜单设置界面进行菜单设计。本微信公众号开发共设计了2个一级菜单,3个二级菜单,如表3所示。软件平台系统主界面及各功能模块如图3所示。
表3 微信公众号的菜单设计Table.3 Menu design of WeChat public number
图3 微信公众号平台系统功能模块Fig.3 System function module of WeChat public platform
3 微信公众号运维平台主要功能的设计与实现
3.1 运维经验录入功能
为了实现上传服务需要解析用户上传的文本信息,解析到用户发送的内容后系统会回复用户上传是否成功。同时系统后台在解析到用户上传的信息之后,会根据上传信息的格式解析出每个字段的内容与数据库进行逐一比对,如查询无结果则数据库会新建一条维修经验记录。部分关键源码如下:
WxDevType devtype=devtypes.get (0);
List<WxRepType2DevType>wxRepTypeTrees=wxRepType2devTypeDao.findFianlTree (reptype,devtype.getId ());
f(wxRepTypeTrees==null||wxRepTypeTrees.size()==0){
WxRepTypeTree tree=new WxRepTypeTree();
tree.setIffinal(“1");
tree.setName(reptype);
tree.setParentid (0);
wxRepTypeTreeDao.save (tree);
WxRepType2DevType reptype2devtype=new WxRepType2DevType();
reptype2devtype.setReptypeid(tree.getId());
reptype2devtype.setDevtypeid(devtype.getId());
wxRepType2devTypeDao.save (reptype2devtype);
wxRepTypeTrees.add(reptype2devtype);
}
WxRepReason reason=new WxRepReason();
reason.setName(reasonname);
Serializable reasonid=wxRepReasonDao.save(reason);
WxRepExp exp=new WxRepExp();
exp.setDevid(devtype.getId());
long id=wxRepTypeTrees.get(0).getReptypeid();
exp.setFinalrepid (id);
exp.setInfo (info);
exp.setReasonid ((long)reasonid);
exp.setUserid (userid);
WxRepReason2devType reason2type=new WxRepReason2devType ();
reason2type.setDevtypeid(devtype.getId ());
reason2type.setReasonid ((long) reasonid);
wxRepReason2devTypeDao.save (reason2type);
wxRepExpDao.save (exp);
}catch (Exception e) {
logger.error (e.getMessage ());
return false;
}
return true;
}
3.2 运维经验查询模块功能
在解析到用户上传的询问信息之后解析出每个字段的内容后,系统分析是关键字查询还是模糊查询方式,具体的分析方法为判断字符 “-”的个数,两种查询方法的字符 “-”个数不同。再根据关键字段(如:设备型号)来查询详细的维修解决方案,查询不出则会询问用户是否需要群发求助信息给所有关注公众号的用户寻求解决方案。实现关键源码如下:
public String selectRepTypeInit(String model,String reptype, String userid) {
List<WxDevType> devtypes=new ArrayList<>();
//获取设备类型信息
try{
devtypes= wxDevTypeDao.getDevTypeByModel(model);
if(devtypes==null||devtypes.size()==0)return“未查询到任何设备”;
if(devtypes.size()!=1)return “查询到多个设备”;
}catch (Exception e) {
logger.error(e.getMessage ());
return “未查询到任何设备”;
}
String result= “[维修经验查询]请按前面的编号选择查看,结果: ”;
try{
List<WxRepExp> exps = wxRepExpDao.getExpByRepType(reptype,devtypes.get(0).getId());
if(exps==null||exps.size () ==0) {
//无结果询问请求群发
UserOperationsUtil.saveOpeartion(userid, “设备类型: “+devtypes.get(0).getType() +” 型号: “+devtypes.get (0) .getModel () + “维修类型”: +reptype,UserOperationsUtil.USEROP_SENDTOALL);
return “没有查询到您想要的结果,是否需要群发所有关注者求助? [1]群发 [2]不群发”;
}
String templete= “[#1#]#2# ”;
for(int i=0;i<exps.size()&&i<5;i++) {
String oneResult= “”;
oneResult=templete.replace (“#1#”, String.valueOf (i+1));
oneResult=oneResult.replace(“#2#", exps.get (i).getInfo ());
result+=oneResult;
}
UserOperationsUtil.saveOpeartion (userid, exps,UserOperationsUtil.USEROP_REPEXP);
}catch(Exception e) {
logger.error(e.getMessage());
System.out.println(e.getMessage());
}
return result;
}
3.3 运维经验评价模块功能
运维经验评价模块是一个通过用户不断上传维修经验,查询维修经验,通过评价体系来为维修经验调整优先级,用户评价越高,该维修经验的优先级越高。从而为下一次查询推荐更好的维修经验。用户在每一次查询之前,系统会主动问询上一次的查询评价,用户只有在评价完之后才能进行下一次的查询。其中评价的功能主要源码如下:
public String rateExp (int select, String userid){try{
UserOperationuo=UserOperations Util.getOperation(userid);
WxRepRaterate=(WxRepRate)uo.getLastSelections();
rate.setRateflag(String.valueOf(select));
wxRepRateDao.update(rate);
WxRepExp exp = wxRepExpDao.get(rate.getRepexpid());
int value=0;
switch (select) {
case 1:
value=3;
break;
case 2:
value=1;
break;
case 3;
value=-1;
break;
case 4:
value=0;
break;
}
if(select==4) {
}else{
double ratecount=exp.getRateusercount();
double proprity=exp.getPriority();
exp.setPriority((proprity*ratecount+value)/(ratecount+1));
exp.setRateusercount((int)ratecount+1);
wxRepExpDao.update(exp);
}
return “评价成功”;
}catch(Exception e) {
e.printStackTrace();
logger.error(“rate exp:”+e.getMessage());
return “评价失败”;
}
}
3.4 故障信息统计模块功能
为了用户能够查询到月的故障信息统计结果,在每个月的月初需要统计上个月的故障情况。为了实现该功能,在数据库里创建一个周期执行计划。首先需要创建一个存储函数,再创建计划,部分关键源码如下:
public String getMonthRepExpInfo(String type,String year,String month) {
String result= “”;
try{
List <WxMonthRepExp > monthExps =wxMonthRepExpDao.getInfo(type, year,month);
String templete= “[#0#]设备型号:#1#,数量#2# ”;
for(int i=0; i<monthExps.size()&&i<5; i++){
String oneResult=templete.replace("#1#",monthExps.get(i).getModel());
oneResult=oneResult.replace(“#2#”,String.valueOf(monthExps.get(i).getCountValue()));
oneResult=oneResult.replace(“#0#”, String,valueOf(i+1));
result+=oneResult;
}
}catch(Exception e) {
logger.error(e.getMessage());
System.out.println(e.getMessage());
}
return result;
}
具体各模块操作界面如图4所示:
图4 各功能模块操作界面Fig.4 Operation of each function module
4 结语
通过数字地震观测台网运维经验管理分享平台的建设实现省地震局及其所属台网台站运维工作经验的统计存档和资源共享,面向仪修人员提供了日常工作间的交流和学习的平台。使得仪修人员可以在仪修任务过程中遇到的技术难题以及无法完成维修时及时查询和借鉴其他兄弟省局仪修人员处理相似故障的经验从而提高自身乃至整个行业仪修队伍的业务水平,也能够帮助新入行同事尽快的熟悉相关业务技能,提高整个行业的台网运维效率。
目前本系统平台已经初步在项目组人员中进行测试使用,后续会逐步完善功能对全省及片区运维人员进行推广,最后向系统内其他省局进行推广应用。同时本平台所预留的二次开发端口可以在本项目研究的基础上继续开发出供系统内仪修人员在线交流模块、行业仪器信息库以及各类运维知识库等模块为仪修人员提供更加完善的运维经验辅助系统。同时预留的其他系统接入端口可以与各省局 “十二五”公共服务系统对接,作为公共服务系统的一个有效补充和台网运维模块功能的延伸。
[1]钟志勇,何威俊,冯煜博.微信公众平台应用开发实战[M].北京:机械工业出版,2014.
[2]刘洋君,徐晓亮,胡 捷.地震信息微信公众号的建立与开发[J].山西地震, 2016, 43(1): 23-24.
[3]蔡利军,周益飞.微信系统在财务查询服务中的应用[J]. 中国管理信化,2016, 19(11): 73-74.
[4]帅忻征.微信公众平台与接口开发计算机与网络[J].计算机和网络, 2015, 41(24): 46-47.
Application of WeChat Public Number in Digital Seismological Observation Network Operation and Maintenance
ZHANG Ming1, ZHAO Na2, LYU Aobo1, YAN Junfeng1
(1.Zhejiang Earthquake Agency, HangZhou 310013, China;2.Hangzhou Smart Dimension Technology Co.Ltd, HangZhou 310013,China)
Using the WeChat public number as the carrier,the paper buildes a platform for the Provincial Bureau of earthquake industry belonging to the regional network,which has experience in operation and maintenance of information collection, operation and maintenance ofbackstage database classification archiving, centralized management,terminal access and intelligent retrieval module in the daily operation and maintenance implementation.Instrument repair personnel can focus on WeChat public numbers using text,voice,pictures and other forms of network operation and maintenance information collection,publishing and retrieval functions,to improve the efficiency of earthquake observation network daily operations.
WeChat public; Seismic network operations;Information collection and management
P315.9
A
1001-8662(2017)03-0048-07
10.13512/j.hndz.2017.03.007
张 明,赵 娜,吕奥博,等.微信公众号在数字地震观测台网运维工作中的应用[J].华南地震,2017,37(3):48-54.[ZHANG Ming,ZHAO
Na, LYU Aobo, et al.Application of WeChat Public Number in Digital Seismological Observation Network Operation and Maintenance[J].South China journal of seismology,2017,37(3):48-54.]
2017-02-06
2016年全国测震台网青年骨干培养专项(20160512)
张 明(1981-),男,工程师,主要从事地震观测台网的运维和信息系统运维工作。
E-mail:44723882@qq.com.