崔彥萍 ,牛智星 ,司存友
(1. 江蘇省水文水資源勘測局,江蘇 南京 210029;2. 江蘇南水科技有限公司,江蘇 南京 210012)
報(bào)表一直是水文分析最直觀快速的服務(wù)產(chǎn)品[1],分為固定和自定義 2 種報(bào)表[2]:固定報(bào)表開發(fā)好后一般不易更改;自定義報(bào)表是一種動(dòng)態(tài)形式的報(bào)表,可以根據(jù)需要定制報(bào)表格式并實(shí)時(shí)完成,在現(xiàn)今的管理信息系統(tǒng)中,應(yīng)用需求越來越多[3]。報(bào)表工具的實(shí)現(xiàn)技術(shù)也不斷創(chuàng)新和完善,由于互聯(lián)網(wǎng)和 Web 技術(shù)的飛速發(fā)展,Web 的報(bào)表工具的研究與應(yīng)用[4-5]越來越多,目前 Web 報(bào)表工具的實(shí)現(xiàn)技術(shù)也較多,如 COM 組件[6-7]、ActiveX 插件[8]、XML 的無插件[9]等技術(shù)。水文報(bào)表數(shù)據(jù)之間比較獨(dú)立,統(tǒng)計(jì)分析方式各不相同,整個(gè)報(bào)表數(shù)據(jù)復(fù)雜,不僅要考慮實(shí)現(xiàn)技術(shù),更要考慮數(shù)據(jù)的獲取和統(tǒng)計(jì)分析。
因此,在現(xiàn)有江蘇省實(shí)時(shí)雨水情分析評價(jià)系統(tǒng)平臺(tái)上設(shè)計(jì)一套自定義報(bào)表系統(tǒng),在瀏覽器界面可以設(shè)計(jì)任意格式報(bào)表或文檔模板,通過調(diào)用算法庫[10]中的函數(shù)獲取各類統(tǒng)計(jì)分析雨水情數(shù)據(jù),快速配置實(shí)現(xiàn)各類雨水情分析統(tǒng)計(jì),一鍵生成分析成果,提升雨水情分析效能,擺脫手工作業(yè)的落后局面。
基于實(shí)時(shí)雨水情數(shù)據(jù)庫[11]、特征庫[12],進(jìn)行自定義報(bào)表系統(tǒng)設(shè)計(jì)。主要設(shè)計(jì)要求如下:
1)參數(shù)設(shè)置,包括日期、時(shí)間(精確到 h)、站點(diǎn)等的設(shè)置。
2)查詢頁面設(shè)計(jì),配置好的報(bào)表可以任意選取時(shí)間查詢。
3) 將界面設(shè)計(jì)成一個(gè)符合 Word 樣式的配置界面和操作風(fēng)格,且保有常用工具,表格能導(dǎo)出 Excel 格式,文檔能導(dǎo)出 Word 或 PDF 格式。
4)報(bào)表數(shù)據(jù)的獲取,要提供友好的交互界面,方便用戶配置各種分析數(shù)據(jù)。
5)構(gòu)建算法庫及其配置系統(tǒng),根據(jù)日常工作需求,建立雨水情分析算法庫。使用過程中用戶也可以在此系統(tǒng)中創(chuàng)建新的函數(shù),供其他用戶在自定義報(bào)表中使用。
自定義報(bào)表是面向不可預(yù)見專題分析需求而隨時(shí)配置的報(bào)表,支持 Oracle 函數(shù)、Java 和 SQL 語言,表格配置應(yīng)可視化,所見即所得,支持簡單時(shí)間條件相關(guān)函數(shù),方便配置。配置好的報(bào)表可以任意修改,滿足一個(gè)專題不斷變化的需求。
江蘇省實(shí)時(shí)雨水情分析評價(jià)系統(tǒng)是基于WebGIS,以 B/S 為主,C/S 為輔的網(wǎng)絡(luò)結(jié)構(gòu)模式,且是把 B/S 和 C/S 2 種方式的優(yōu)勢互補(bǔ),將地圖空間信息和屬性信息有機(jī)結(jié)合起來的網(wǎng)絡(luò)化地理信息系統(tǒng)。自定義報(bào)表系統(tǒng)是江蘇省實(shí)時(shí)雨水情分析評價(jià)系統(tǒng)的子系統(tǒng),采用 B/S 設(shè)計(jì),通過連接實(shí)時(shí)水情庫、特征庫和應(yīng)用方法庫,自動(dòng)擴(kuò)充用戶報(bào)表,配置出復(fù)雜個(gè)性的圖文并茂的報(bào)告。
自定義報(bào)表系統(tǒng)前臺(tái)界面使用專業(yè)的 MiniUI 網(wǎng)頁界面集成框架,提供高度的穩(wěn)定性、強(qiáng)大的擴(kuò)展能力。網(wǎng)頁界面集成框架采用 HTML,CSS(樣式格式描述語言)和 JavaScript 技術(shù),加入 JSP 動(dòng)態(tài)網(wǎng)頁技術(shù)。Web 客戶端通過 Struts 2 框架實(shí)現(xiàn)與服務(wù)器互動(dòng)信息返回,Web 服務(wù)器以 Tomcat 為基礎(chǔ),采用 Java 技術(shù)構(gòu)建服務(wù)器應(yīng)用程序,通過 Spring 框架程序中的 Hiberbate 實(shí)現(xiàn)與數(shù)據(jù)庫的通信,并最終返回客戶端瀏覽器的請求。同時(shí)自定義報(bào)表系統(tǒng)還擴(kuò)展一個(gè)開源的 Web 編輯器 CKEditor,CKEditor 有很好的擴(kuò)展性及比較穩(wěn)定的性能、全面的 API 文檔,可以方便地進(jìn)行插件的開發(fā)、調(diào)用,因此在 CKEditor 基礎(chǔ)上實(shí)現(xiàn)算法模板、方法屬性、參數(shù)設(shè)置、站群管理等插件的開發(fā),最終呈現(xiàn)一個(gè)具有水文特色的實(shí)時(shí)雨水情報(bào)告模板設(shè)計(jì)器。自定義報(bào)表體系結(jié)構(gòu)圖如圖1 所示。
圖1 自定義報(bào)表體系結(jié)構(gòu)圖
自定義報(bào)表工具采用開發(fā)的動(dòng)態(tài)自定義報(bào)表引擎,界面使用 HTML、JSP 動(dòng)態(tài)網(wǎng)頁技術(shù)、FreeMarker 模板及 ftl(模板文件存儲(chǔ)格式),利用 CKEditor 作為集成編輯環(huán)境,開源的 EChart 作為插圖組件,繪制折線圖、柱狀圖、散點(diǎn)圖、餅圖、地圖、儀表盤及漏斗圖,同時(shí)支持任意維度的堆積和多圖表混合展現(xiàn)等功能,這樣設(shè)計(jì)的自定義報(bào)表系統(tǒng)可以配置插入各種形式的圖表。自定義報(bào)表工具以 CKEditor 作為基礎(chǔ)進(jìn)行二次開發(fā),可以通過在瀏覽器中自由編輯設(shè)計(jì)內(nèi)容,達(dá)到用戶對自定義的需求。而且在 CKEditor 的基礎(chǔ)上增加單點(diǎn)、表格、自定義表格、chart(Echart)等插件的開發(fā),可以滿足用戶絕大多數(shù)的報(bào)表需求。
通過模板 + Excel Web 標(biāo)準(zhǔn)接口技術(shù),以配置模板的方式,可導(dǎo)出出版級別的報(bào)表。
江蘇水文自定義報(bào)表系統(tǒng)的開發(fā)與實(shí)現(xiàn),最核心的內(nèi)容就是水情算法庫的建立,支撐整個(gè)報(bào)表各種統(tǒng)計(jì)分析數(shù)據(jù)的實(shí)現(xiàn)。水情算法庫基于江蘇省實(shí)時(shí)雨水情數(shù)據(jù)庫和特征庫,實(shí)現(xiàn)各種雨水情數(shù)據(jù)的復(fù)雜統(tǒng)計(jì)分析,創(chuàng)建的函數(shù)可以調(diào)用 Oracle 數(shù)據(jù)庫中的內(nèi)置函數(shù),也可以調(diào)用創(chuàng)建的函數(shù)。創(chuàng)建的函數(shù)存貯在 Oracle 數(shù)據(jù)庫中,大大提高了計(jì)算速度。配置自定義報(bào)表時(shí)直接調(diào)用相應(yīng)的函數(shù),只需輸入?yún)?shù)即可,一般制表人員易操作配置。水情算法庫包含 18 類函數(shù),目前有上百種函數(shù)(使用過程中根據(jù)新的需求還可以繼續(xù)擴(kuò)充),基本涵蓋了水情日常工作使用需求,包括極值、時(shí)段累計(jì)、同期、期初期末、特征值、排位等函數(shù)。
報(bào)表模板設(shè)計(jì)好后,靜態(tài)文字或數(shù)字可以直接編輯,動(dòng)態(tài)數(shù)據(jù)可以通過調(diào)用函數(shù)獲取。例如多站時(shí)段累計(jì)函數(shù),此函數(shù)針對泵站,調(diào)用時(shí)輸入站碼和起始時(shí)間,就可以計(jì)算水量。相關(guān)函數(shù)如下:函數(shù)名(參數(shù)列表)為 JSSTOTALLSL(STCDS IN VARCHAR2,BGTM IN VARCHAR2,EDTM IN VARCHAR2),調(diào)用例子為工作 Call JSSTOTALLSL(‘51005652,51005653,51005654,51005655’,‘2021-02-16 08:00:00’,‘2021-03-16 08:00:00’),返回結(jié)果為 45.5。
以南水北調(diào)報(bào)表為例,每天監(jiān)測江蘇省南水北調(diào)水量并進(jìn)行統(tǒng)計(jì),報(bào)表涉及主要湖泊水位、沿線重要節(jié)點(diǎn)水量和泵站水情等內(nèi)容。根據(jù)需求設(shè)計(jì)模板,報(bào)表模板及相應(yīng)數(shù)據(jù)配置好后,每天 8 時(shí)直接點(diǎn)擊查詢按鈕相應(yīng)數(shù)據(jù)就自動(dòng)更新,然后導(dǎo)出 Excel,Word 或 PDF 模板分發(fā)給相關(guān)單位或部門,以便對水位、流量及水量數(shù)據(jù)進(jìn)行實(shí)時(shí)檢測,查驗(yàn)調(diào)度方案與實(shí)際運(yùn)行效果進(jìn)行對比分析。
配置自定義報(bào)表關(guān)鍵流程節(jié)點(diǎn)如下:首先新建報(bào)表界面;其次設(shè)置參數(shù)(時(shí)間、站點(diǎn)參數(shù));然后根據(jù)報(bào)表需求設(shè)計(jì)報(bào)表模板,靜態(tài)的文字和數(shù)據(jù)可以直接編輯,動(dòng)態(tài)數(shù)據(jù)可以插入數(shù)據(jù)、表格、自定義表格。具體報(bào)表實(shí)現(xiàn)時(shí)先點(diǎn)擊自定義報(bào)表按鈕插入自定義表格,編輯輸入靜態(tài)文字?jǐn)?shù)據(jù),單元格動(dòng)態(tài)數(shù)據(jù)設(shè)置動(dòng)態(tài)值后輸入腳本,腳本可以是構(gòu)建的函數(shù)也可以是 SQL 語句;然后點(diǎn)擊“預(yù)覽”按鈕,在預(yù)覽表格中生成數(shù)據(jù);再點(diǎn)擊“確定”按鈕即可生成報(bào)表。自定義表格配置界面如圖2 所示,此時(shí)界面單元格顯示 SQL,配置完點(diǎn)擊“確定”按鈕顯示完整的數(shù)據(jù)表格。南水北調(diào)水量統(tǒng)計(jì)呈現(xiàn)成果示例如圖3 所示,文本中黃色區(qū)域和表格中的數(shù)據(jù)都是動(dòng)態(tài)的,每天只要點(diǎn)擊查詢按鈕,動(dòng)態(tài)數(shù)據(jù)就可根據(jù)日期更新,調(diào)水期間每天一鍵導(dǎo)出,呈報(bào)相關(guān)部門,監(jiān)控沿線水位、翻水量及調(diào)水計(jì)劃完成率,方便快捷。
圖2 自定義報(bào)表-插入自定義表格及動(dòng)態(tài)數(shù)據(jù)配置
圖3 自定義報(bào)表成果示例
水文上,經(jīng)常有階段性汛情、旱情、臺(tái)風(fēng)、水資源配置等,而且各種水情形勢是變化的,自定義報(bào)表工具就是根據(jù)這種復(fù)雜多變的雨水情形勢而產(chǎn)生的。一旦有洪澇、旱情、臺(tái)風(fēng)等發(fā)生,就根據(jù)相關(guān)需求設(shè)計(jì)自定義報(bào)表模板并進(jìn)行配置,配置好的報(bào)表可以一鍵生成導(dǎo)出,相應(yīng)的動(dòng)態(tài)數(shù)據(jù)根據(jù)查詢參數(shù)是實(shí)時(shí)更新變化的,成果提供給所需部門和領(lǐng)導(dǎo),而且中間一旦有水情變化,用戶可以隨時(shí)根據(jù)需求對自定義報(bào)表模板進(jìn)行修改。
自定義報(bào)表系統(tǒng)搭建在江蘇省實(shí)時(shí)雨水情分析評價(jià)系統(tǒng)中,采用 B/S 模式,利用開源的 CKEditor 進(jìn)行二次開發(fā)作為集成編輯環(huán)境,可以實(shí)現(xiàn)集文字、表格和圖為一體的自定義報(bào)表?;谒男袠I(yè)數(shù)據(jù)庫和用戶特點(diǎn),構(gòu)建算法庫支撐報(bào)表或文檔中雨水情數(shù)據(jù)獲取和統(tǒng)計(jì)分析,還可根據(jù)需求隨時(shí)構(gòu)建新的函數(shù),供所有用戶使用,解決大部分用戶計(jì)算機(jī)水平不強(qiáng)的現(xiàn)狀?;谒惴◣斓淖远x報(bào)表配置簡單易操作,呈現(xiàn)的形式靈活且可修改,以往1 張報(bào)表至少需要半小時(shí),現(xiàn)在一鍵可以生成,大大提高了工作效率,投入使用以來有力支撐了江蘇 2020 年梅汛、202106“煙花”臺(tái)風(fēng)、南水北調(diào)、望虞河調(diào)水等專題材料分析?;谟晁閷?shí)時(shí)庫、特征庫構(gòu)建算法庫是水情自定義報(bào)表系統(tǒng)數(shù)據(jù)獲取的強(qiáng)有力支柱,但也是一項(xiàng)耗時(shí)耗力的工作,目前水情算法庫中函數(shù)過多且通用性不強(qiáng),下一步需要優(yōu)化精簡函數(shù),增強(qiáng)其通用性。