文章快速检索    
  地震地磁观测与研究  2019, Vol. 40 Issue (6): 139-145  DOI: 10.3969/j.issn.1003-3246.2019.06.020
0

引用本文  

常亮, 胡斌, 毛国良, 等. 地震预警示范系统试运行月报产出软件设计[J]. 地震地磁观测与研究, 2019, 40(6): 139-145. DOI: 10.3969/j.issn.1003-3246.2019.06.020.
Chang Liang, Hu Bin, Mao Guoliang, et al. The design of test run monthly report generation software of the demonstration system of earthquake early warning[J]. Seismological and Geomagnetic Observation and Research, 2019, 40(6): 139-145. DOI: 10.3969/j.issn.1003-3246.2019.06.020.

基金项目

2018年度河北省地震局星火计划一般项目(专项编号:DZ20180322032);2017年度中国地震局监测预报司测震青年骨干项目(专项编号:20170601);2017年度河北省地震局地震科技星火计划青年项目(专项编号:DZ20170512077)

作者简介

常亮(1981—), 男, 工程师, 陕西榆林市人, 主要从事地震监测工作。E-mail:banjiamayi@163.com

文章历史

本文收到日期:2019-01-21
地震预警示范系统试运行月报产出软件设计
常亮 , 胡斌 , 毛国良 , 王莉蝉 , 武有文 , 杨锐     
中国石家庄 050021 河北省地震局
摘要:为提高河北省地震预警示范系统试运行月报产出质量,加快产出速度,减轻人员负担,基于JAVA技术,设计月报产出软件,通过对烈度计台站延迟数据和运行数据的分析,借助POI工具、MYSQL数据库和JFreeChart,实现月报产出、历史数据查询、数据可视化展示等功能,解决了月报产出周期长、历史数据查询不便、数据展示模式单一等问题,为地震预警示范系统试运行提供有力支持。
关键词地震预警    POI    数据可视化    
The design of test run monthly report generation software of the demonstration system of earthquake early warning
Chang Liang , Hu Bin , Mao Guoliang , Wang Lichan , Wu Youwen , Yang Rui     
Hebei Earthquake Agency, Shijiazhuang 050021, China
Abstract: In order to rise generate quality of test run monthly report of Hebei Province demonstration system of earthquake early warning, speed up generation, reduce staff burden, based on JAVA technology, designed this monthly report generation software. Through analyse delay data and run data of intensity meter station, used POI, MYSQL and JFreeChart to complete monthly report generate, history data query, data visualization functions and so on, this software has solved long generate cycle of test run monthly report, historical data query inconvenience, single pattern of data display and so on, it provides strong support to test run of demonstration system of earthquake early warning.
Key words: earthquake early warning    POI    data visualization    
0 引言

我国地震灾害频发,全国多个城市位于高烈度区,破坏性地震的发生将给这些城市造成巨大损失(金星等,2012)。地震预警是目前全球公认的有效减灾手段之一(金星等,2012),已有多个国家采用各类预警系统(张红才等,2012)。汶川地震后我国已开展多个预警技术攻关项目,并在个别地区建立地震预警系统(刘如山等,2015)。河北省先后在唐山、秦皇岛等地区建立烈度计台站,是全国首批建立地震预警台网的地区。根据中国地震局监测预报司要求,首都圈各省、市地震局于2015年8月开始建设京津冀地震预警协同网(示范系统),目前已完成验收,自2017年3月21日试运行,现阶段共实时接入简易烈度计台站220个,同时接入区域测震台131个、实时强震台80个。该示范系统流服务采用JOPENS6.0系统,客户端展示采用JEEW软件。系统试运行期间,河北测震台网需每月产出月报文件,重复率高,复用性强,采用人工方式产出效率低、易出错(王学勤等,2014)。为节约人力成本(李碧君等,2010)、提高月报质量和产出速度(狄国荣等,2016),设计开发月报产出软件,降低月报产出难度。

1 POI工具简介

产出月报为doc格式,用JAVA操作doc文档需调用第三方工具POI。POI是Apache的子项目,提供一组API供用户调用(黄日胜等,2007),其中主要API是用于实现文档读写功能的XWPF,是一组文档操作对象(黄青云等,2014),包括:创建文档的XWPFDocument、创建文本的XWPFRun、创建段落的XWPFParagraph、创建表格的XWPFTable等。调用上述API时应注意依赖关系,应依次创建XWPFDocument、XWPFParagraph及XWPFRun。整个文档由多个XWPFRun组成,文档各级标题可看作单行XWPFRun,正文可看作多行XWPFRun。

2 软件设计 2.1 整体架构

软件设计采用模块化原则,分业务模块和辅助模块2大部分(图 1),其中:业务模块由计算模块、报告生成模块和数据库模块组成;辅助模块由Constants模块、通用模块、POJO模块和UI模块组成。软件运行流程如下:①计算模块负责对已有延迟数据和运行数据的统计,生成3个结果文件;②报告生成模块根据月报的配置文件及步骤①中生成的结果文件产出月报;③数据库模块负责存储、查询、展示计算模块生成的结果数据;④辅助模块负责数据库连接、配置文件解析、格式转换、软件UI等功能。

图 1 整体架构 Fig.1 Architecture figure
2.2 计算模块设计

该模块工作流程见图 2,其中:台站列表包括需要统计的所有台网及台站名称;原始数据来自JOPENS软件生成的延迟统计文件和运行率文件。计算过程如下:根据台站列表和统计时间完成数据筛选工作,生成临时文件;对临时文件进行统计,产出3个结果文件:①统计结果文件,内容包括:省名、省代号、台站名、开始日期、结束日期、台站运行率、台站最小延迟、台站最大延迟、台站平均延迟和备注;②台站断记统计文件,内容包括:开始时间、结束时间、台站名、所有断记时间;③台站高延迟统计文件,内容包括:开始时间、结束时间、台站名、最大延迟。上述3个文件将作为数据源,供报告生成模块和数据库模块调用。

图 2 功能模块 Fig.2 Functional module

计算模块的主要代码如下

public static void calResult(String statisticStartDate, String days, ArrayList < String > runRatioList) throws IOException, ParseException {

    while ((temp = reader.readLine())!= null) {

    if(temp.substring(0, 2).equals(“HE”) & & !(temp.equals(“”))){

    a = temp.split(“ “);

    if(i > staNum-1) i = 0;

    if(a[1].equals(“NaN”)) a[1]=”0.0”;

    if(a[2].equals(“NaN”)) a[2]=”0.0”;

    if(a[3].equals(“NaN”)) a[3]=”0.0”;

    delay[i] = delay[i] + Double.parseDouble(a[1]);

    if(max[i] < Double.parseDouble(a[2])){

    max[i] = Double.parseDouble(a[2]);

    }

    if(!(Double.parseDouble(a[3]) == 0.0)){

    if(min[i] == 0.0){

        min[i] = Double.parseDouble(a[3]);

     }else if(min[i] > Double.parseDouble(a[3])){

       min[i] = Double.parseDouble(a[3]);

     } } stationName[i] = a[0];i ++; } } for(int z = 0; z < 100; z ++){ fwriter.write(

new String(DocConstants.TABLE_CONTENT_PROVINCENAME.getBytes(“utf-8”), ”gbk”) + “ “ +

new String(DocConstants.TABLE_CONTENT_NETCODE.getBytes(“utf-8”), ”gbk”) + “ “ + stationName[z] + “ “ + statisticStartDate + “ “ + util.getFetureDate(statisticStartDate, days) + “ “ +

DocConstants.TABLE_CONTENT_PACKINTERVAL + “ “ + runRatioList.get(z) + “ “ +

util.jingdu(delay[z]) + “ “ + util.jingdu(max[z]) + “ “ + util.jingdu(min[z]) + “ “ + new

String(“--”.getBytes(“utf-8”), ”gbk”) + “ “ +

new String(“”.getBytes(“utf-8”), ”gbk”) + “ “ + “\r\n”);

} fwriter.close();

}

2.3 报告生成模块设计

报告生成模块由文本生成器和表格生成器2部分组成(图 3),根据用户输入的相关信息,判断当月是否有3.0级以上地震发生,由此决定是否采用有震模板,否则采用无震模板,由报告生成模块产出月报。月报分为有震报告和无震报告2种格式,无震报告只需对台站、系统基本信息和运行信息进行描述,有震报告还需描述当月责任区发生的所有地震事件。报告采用分段生成,便于代码编写及后期维护。

图 3 报告生成模块工作流程 Fig.3 Report produce module workflow
2.3.1 月报格式说明

月报格式见图 4,内容包括:报告头(月报标题、期数、描述信息)和报告体2大部分,其中报告体分为6个子部分:①系统概述,主要描述预警示范区概况,含1张台站分布图;②总体运行情况,描述当月预警示范区各台站和省中心整体运行、台站延迟、事件触发等情况,含1张台站运行情况表;③系统软硬件维护故障及解决情况,描述当月示范区软硬件和网络故障及维修情况;④示范系统处理情况,描述当月河北省预警事件触发次数、漏触发和误触发次数;⑤M 3.0以上地震预警处理情况,列出当月示范区所有3.0级以上地震的预警信息、速报信息等(如无符合条件的地震需注明);⑥小结,对当月示范区出现的各类问题进行总结。

图 4 月报格式 Fig.4 Monthly report style
2.3.2 配置文件

为文档内容和文档格式分别建立配置文件。文档内容配置包括:月报标题、期数、月报描述信息(撰写日期、撰写人、审核人、值班人等)、各级标题、正文、图表标题等;文档格式配置包括:文档字体、字号、字体颜色、段落位置等。

2.3.3 文本生成器

文本生成器根据文档结构特点,对不同部分采用不同创建方法,包括创建主标题、期数、说明文字、一级标题、二级标题、正文并插入图片。编写代码时将上述各部分代码放在统一工具类,供文本生成器调用,主要代码如下

XWPFParagraph mainTitle=document.createParagraph();

mainTitle.setAlignment(ParagraphAlignment.CENTER); //段落对齐方式

XWPFRun r_mainTitle=mainTitle.createRun();

r_mainTitle.setText(repalceStr);

r_mainTitle.setFontFamily(DocConstants.MAIN_TITLE_FONT); //设置字体

r_mainTitle.setFontSize(DocConstants.MAIN_TITLE_FONT_SIZE); //设置字号

r_mainTitle.setColor(DocConstants.MAIN_TITLE_FONT_COLOR); //设置字体颜色

2.3.4 表格生成器

为方便开发和维护,建立独立的表格生成器。该生成器包括创建表头、遍历数据创建表体、设置表格属性3个部分,主要代码如下

XWPFTable table = document.createTable(alist.size()+1, 12);

CTTbl ttbl = table.getCTTbl();

CTTblPr tblPr = ttbl.getTblPr() == null? ttbl.addNewTblPr() : ttbl.getTblPr(); //表格属性

CTTblWidth tblWidth = tblPr.isSetTblW()? tblPr.getTblW() : tblPr.addNewTblW(); //表格宽度

tblWidth.setW(new BigInteger(“8500”));

tblWidth.setType(STTblWidth.DXA);

for(int i=1; i < alist.size()+1; i++){

setCellText(document, getCellHight(table, i, 0), alist.get(i-1).getProvinceName(), bgColor, 450);

  setCellText(document, getCellHight(table, i, 1), alist.get(i-1).getNetcode(), bgColor, 400);

  setCellText(document, getCellHight(table, i, 2), alist.get(i-1).getStationCode(), bgColor, 850);

  setCellText(document, getCellHight(table, i, 3), alist.get(i-1).getStatisticStartDate(), bgColor, 1100);

  setCellText(document, getCellHight(table, i, 4), alist.get(i-1).getStatisticStopDate(), bgColor, 1100);

  setCellText(document, getCellHight(table, i, 5),

String.valueOf(alist.get(i-1).getPackInterval()), bgColor, 400);

  setCellText(document, getCellHight(table, i, 6), alist.get(i-1).getRunRatio(), bgColor, 750);

  setCellText(document, getCellHight(table, i, 7), alist.get(i-1).getAveDelay(), bgColor, 650);

  setCellText(document, getCellHight(table, i, 8), alist.get(i-1).getMaxDelay(), bgColor, 650);

  setCellText(document, getCellHight(table, i, 9), alist.get(i-1).getMinDelay(), bgColor, 650);

  setCellText(document, getCellHight(table, i, 10), alist.get(i-1).getReason(), bgColor, 750);

  setCellText(document, getCellHight(table, i, 11), alist.get(i-1).getRepairRemark(), bgColor, 750);}

2.4 数据库模块设计

为实现数据的存储、查询和可视化,地震预警示范系统试运行月报产出软件选用MYSQL数据库管理数据,数据库包括4张数据表:①统计结果表;②台站断记信息表;③台站高延迟信息表;④台站运行信息表。软件只涉及插入和查询2种操作,故未采用第三方持久化工具,而直接编写代码调用JDBC API。本模块工作流程见图 5,具体如下:①数据写入:数据库模块调用JDBC,将计算模块产出的3个结果文件数据写入数据库;②数据查询:用户输入条件,实现历史数据查询,数据在UI中以列表方式展示,有分页功能;③可视化查询:用户输入条件,模块借助JfreeChart,实现历史数据的柱状图展示,便于用户分析数据。

图 5 数据库模块工作流程 Fig.5 Database module workflow
2.5 辅助模块设计 2.5.1 UI模块

该模块包括:计算界面、菜单界面(图 6)、数据查询界面(图 7)、数据显示界面(图 8)、数据可视化查询界面、可视化展示界面(图 9)、报告参数界面(图 10)和有震报告参数界面(图 11)。其中,报告参数界面集中了月报中需要人工填写的全部信息,用户只需完成信息录入即可产出正确报告;如果当月发生3.0级及以上地震事件,报告中需增加地震相关信息的描述,利用有震报告参数界面,集中填写此类信息。

图 6 菜单界面 Fig.6 Menu interface
图 7 数据查询界面 Fig.7 Data query interface
图 8 数据显示界面 Fig.8 Data display interface
图 9 可视化展示界面 Fig.9 Visual display interface
图 10 报告参数界面 Fig.10 Report parameters interface
图 11 有震报告参数界面 Fig.11 Shock report parameters interface
2.5.2 POJO模块

为方便程序访问数据库中各表,建立POJO模块,包括数据表中所有字段及各字段的Setter和Getter方法。

2.5.3 通用模块和Constants模块

通用模块主要包括XML文档解析、日志生成、格式转换等辅助工具;Constants模块包括一些UI和文档中的配置,如:文本框尺寸、按钮尺寸、文档字体、字号、字体颜色、位置等信息。

3 软件测试

地震预警示范系统试运行月报产出软件设计完成后,由河北省测震台网工作人员进行测试,测试使用自预警示范项目试运行以来张家口地区已架设的100个烈度计台站数据,测试过程按表 1所示各个功能点进行,测试时软件状态如2.5.1节中各图所示,测试表明该软件运行正常。

表 1 各模块功能 Table 1 Function of each module
4 结束语

地震预警示范项目是烈度速报与预警工程的前期项目,为后续全国性项目的开展积累经验。示范项目运行月报体现了试运行期的各项指标,便于管理团队和技术团队实时把控项目,及时发现问题、解决问题。本软件的设计与实现提升了月报产出速度,提高了月报产出质量,为示范项目试运行提供了辅助支持。在软件研发过程中有2个问题值得关注:①使用POI工具时应根据生成的Word版本选择合适的POI版本,本软件使用poi-3.17;②HashMap组件不支持数据排序,如需排序功能,应使用LinkedHashMap组件。

参考文献
狄国荣, 潘章容, 曾文浩, 等. 2016. 地震预警及烈度速报信息报告自动生成技术[J]. 地震地磁观测与研究, 37(6): 153-158. DOI:10.3969/j.issn.1003-3246.2016.06.028
黄青云, 裴冬菊. 2014. POI在Word文档不同颜色文本分离中的应用[J]. 南昌工程学院学报, 33(3): 47-49. DOI:10.3969/j.issn.1006-4869.2014.03.014
黄日胜, 李艳飞. 2007. 在新生报到管理系统中应用POI和JAVABean实现与Excel的交互[J]. 福建电脑, 11061106(6): 183-184. DOI:10.3969/j.issn.1673-2782.2007.06.111
金星, 张红才, 李军, 等. 2012. 地震预警震级确定方法研究[J]. 地震学报, 34(5): 593-610. DOI:10.3969/j.issn.0253-3782.2012.05.002
李碧君, 付红军, 胡扬宇, 等. 2010. 电网年度运行方式自动优化计算与报告生成系统[J]. 电力系统自动化, 34(4): 112-115.
刘如山, 李山有, 金星, 等. 2015. 关于地震预警政策的研究与探讨[J]. 地震工程与工程振动, 35(4): 27-39.
王学勤, 郝丹, 郑菲, 等. 2014. "查收查引报告自动生成系统"应用实践研究[J]. 图书情报工作, 58(16): 131-137.
张红才, 金星, 李军, 等. 2012. 地震预警震级计算方法研究综述[J]. 地球物理学进展, 27(2): 464-474. DOI:10.6038/j.issn.1004-2903.2012.02.009