李佑群,向道豪,丁德紅
(1.國網(wǎng)湖南省力有限公司常德供電分公司,常德415000;2.湖南文理學(xué)院,常德415000)
隨著二維碼的普及與廣泛應(yīng)用,日常生活中隨處都是可見的二維碼,二維碼以其簡(jiǎn)單高效的信息攜帶功能深受人們的青睞。
縱觀二維碼發(fā)展歷史,二維碼最初便是用來存儲(chǔ)貨物信息、標(biāo)記信息,由于二維碼攜帶信息的方便性,并且移動(dòng)二維碼掃描技術(shù)的成熟,二維碼已經(jīng)廣泛應(yīng)用于移動(dòng)支付,廣告引流等領(lǐng)域。那么,二維碼在設(shè)備管理領(lǐng)域中的應(yīng)用如何呢?在設(shè)備管理中目前主要有以下管理方式:
(1)手工紙質(zhì)記錄,管理巡視麻煩,人力成本大,記錄不規(guī)范。
(2)一維碼設(shè)備管理,攜帶少量信息,可以掃描識(shí)別,但無糾錯(cuò)機(jī)制,容易無法識(shí)別。
(3)RFID 電子標(biāo)簽管理,可讀可寫,存儲(chǔ)信息量大,但在金屬材質(zhì)下較難使用,且造價(jià)為普通條碼標(biāo)簽幾十倍,在大規(guī)模設(shè)備管理中難以使用。
(4)二維碼標(biāo)簽管理,攜帶信息較多,存儲(chǔ)信息量介于電子標(biāo)簽和一維碼之間,有糾錯(cuò)機(jī)制,使用場(chǎng)景全面。
通過4 種方式對(duì)比分析可知,手工記錄和一維碼無法完成越來越多的管理需求和更多的場(chǎng)景。而RFID 和二維碼比較具有競(jìng)爭(zhēng)性,但RFID 因價(jià)格高在大規(guī)模設(shè)備管理中是很難應(yīng)用,而且因?yàn)樾畔⒖蓪懭耄浒踩杂幸欢[患,并且需要專屬設(shè)備支持,在電力設(shè)備的復(fù)雜電磁環(huán)境下更難以使用。二維碼因?yàn)闃?biāo)簽是只讀的,也存在一定的安全隱患問題,要實(shí)現(xiàn)安全的二維碼信息存儲(chǔ)有兩種方式[1]:①只存儲(chǔ)設(shè)備的不敏感信息,查詢的時(shí)候進(jìn)行加密處理。②對(duì)二維碼信息進(jìn)行編碼重組,使用對(duì)稱加密算法進(jìn)行加密內(nèi)容。只有使用與加密時(shí)相同的密鑰才能解析二維碼內(nèi)容,根據(jù)兩種方法比較,我們的設(shè)備是實(shí)時(shí)更新的,所以第一種方法更適用于本系統(tǒng)。我們將設(shè)備ID 嵌入到二維碼中,通過加密通道,將信息通過Web 平臺(tái)關(guān)聯(lián)到數(shù)據(jù)庫進(jìn)行數(shù)據(jù)更新操作,而二維碼只要簡(jiǎn)單存儲(chǔ)設(shè)備ID編碼即可。根據(jù)《湖南電網(wǎng)實(shí)物ID 建設(shè)及應(yīng)用》[2],我們應(yīng)該使設(shè)備ID 滿足以下特點(diǎn):設(shè)備ID 唯一,所有設(shè)備擁有一個(gè)唯一的編碼;ID 碼不宜過長。雖然已有很多二維碼設(shè)備管理軟件,但我們發(fā)現(xiàn)用二維碼和Web平臺(tái)相結(jié)合來管理設(shè)備的這種架構(gòu)還是比較少,相比之下,我們通過Web 平臺(tái)可以實(shí)現(xiàn)的功能有以下:
(1)統(tǒng)一的安全查詢接口,數(shù)據(jù)更加安全
(2)遠(yuǎn)程巡視,只要手機(jī)有網(wǎng),便可完成巡視。
(3)導(dǎo)入導(dǎo)出方便,通過用戶認(rèn)證,可在多個(gè)設(shè)備導(dǎo)入導(dǎo)出。
鑒于上,我們得出使用二維碼具有攜帶量少、信息準(zhǔn)確方便的特點(diǎn),加上軟件系統(tǒng)實(shí)時(shí)高效的特點(diǎn)。我們可以預(yù)見將二維碼技術(shù)應(yīng)用到電力設(shè)備管理上將使設(shè)備管理水平提高,更加科學(xué)和高效。本文主要介紹基于二維碼的電力設(shè)備管理與巡檢系統(tǒng)的實(shí)現(xiàn)。
電力公司的設(shè)備管理中,由于設(shè)備種類眾多,設(shè)備狀態(tài)多樣,設(shè)備數(shù)量大。在實(shí)際巡視過程中,采用人工紙質(zhì)模式不能適應(yīng)高效的管理模式。根據(jù)實(shí)際場(chǎng)景的要求,我們對(duì)系統(tǒng)提出了五個(gè)功能需求。
(1)設(shè)備的狀態(tài)及屬性管理,使用二維碼為設(shè)備提供準(zhǔn)確唯一標(biāo)記,掌握設(shè)備異動(dòng)動(dòng)向;
(2)根據(jù)準(zhǔn)入系統(tǒng)、i6000、桌管系統(tǒng)的要求,建立完善的設(shè)備信息庫;
(3)根據(jù)信息系統(tǒng)運(yùn)行要求,建立標(biāo)準(zhǔn)規(guī)范的巡視模板,并可持續(xù)修改。歷史巡視記錄實(shí)時(shí)上傳,通過后臺(tái)或App 可以實(shí)時(shí)查看;
(4)根據(jù)信息設(shè)備運(yùn)行要求,建立設(shè)備狀態(tài)評(píng)估模塊,通過本系統(tǒng)可以查詢當(dāng)前屬性狀態(tài),對(duì)兩個(gè)系統(tǒng)的設(shè)備進(jìn)行統(tǒng)計(jì),實(shí)現(xiàn)對(duì)設(shè)備狀態(tài)的評(píng)估;
(5)與i6000、準(zhǔn)入系統(tǒng)數(shù)據(jù)庫融合,便于數(shù)據(jù)導(dǎo)入和后期數(shù)據(jù)維護(hù)。
二維碼為什么可以作為設(shè)備標(biāo)簽?二維條碼/二維碼(2-Dimensional bar code)是用某種特定的幾何圖形按一定規(guī)律在平面(二維方向上)分布的黑白相間的圖形記錄數(shù)據(jù)符號(hào)信息的;通過圖像輸入設(shè)備或光電掃描設(shè)備自動(dòng)識(shí)讀以實(shí)現(xiàn)信息自動(dòng)處理。
二維碼有很多種,例如QR、PDF417、DM 等。我們現(xiàn)在最常用的是日本發(fā)明的QRCode 碼,這是一個(gè)經(jīng)典的二維碼結(jié)構(gòu)圖,之所以二維碼很容易掃描,其實(shí)在于它本身有一個(gè)容錯(cuò)度,只要關(guān)鍵點(diǎn)沒破壞就很容易掃出來。
圖1 二維碼結(jié)構(gòu)
生成一個(gè)二維碼流程通常是[3]:數(shù)據(jù)編碼、糾錯(cuò)編碼、填充數(shù)據(jù)和糾錯(cuò)碼字、填充尋像圖形、分隔符、矯正圖形與碼字、掩膜、生成版本信息和格式信息。
本系統(tǒng)二維碼標(biāo)簽生成步驟:
二維碼生成過程復(fù)雜,而現(xiàn)在已經(jīng)有很多廠商提供了開源的二維碼生成和解析工具。在本系統(tǒng)中我們使用Google 提供的ZXing 二維碼工具來實(shí)現(xiàn)生成二維碼標(biāo)簽,具體生成步驟如下:
(1)利用本系統(tǒng)開發(fā)的Web 管理后臺(tái)來生成打印二維碼標(biāo)簽所需的數(shù)據(jù)源文件(Excel)。
(2)利用標(biāo)簽打印機(jī)提供的標(biāo)簽格式編排軟件來進(jìn)行標(biāo)簽排版,并設(shè)置數(shù)據(jù)源為第一步生成的數(shù)據(jù)源文件。
(3)根據(jù)打印機(jī)型號(hào)選擇驅(qū)動(dòng),并安裝在桌面系統(tǒng)上。
(4)利用標(biāo)簽編排軟件的批量打印功能即可完成二維碼標(biāo)簽的批量生成。
數(shù)據(jù)庫選擇MySQL,Web 服務(wù)使用Spring MVC 框架進(jìn)行開發(fā),App 使用Android 平臺(tái)開發(fā)。
Web 后臺(tái)服務(wù)使用模型-視圖-控制器(Model-View-Controller,MVC)設(shè)計(jì)模式[4]進(jìn)行設(shè)計(jì)與實(shí)現(xiàn)。Spring 框架提供了Spring MVC 來實(shí)現(xiàn)對(duì)MVC 模式的支持,這使我們更專注于業(yè)務(wù)邏輯,我們根據(jù)對(duì)分發(fā)器進(jìn)行自定義設(shè)計(jì),包括可配置的處理器映射、視圖解析、本地化、主題解析等。在通信過程中我們采用Spring 提供的AOP(Aspect Oriented Programming)功能做安全控制,防止數(shù)據(jù)被非法獲取。
MySQL 作為輕量級(jí)數(shù)據(jù)庫相比DB2、Oracle 等具有部署靈活即時(shí)使用特點(diǎn)。
Web 管理頁面采用前端顯示采用HTML+CSS+JavaScript 技術(shù),而在Spring 中HTML 頁面則由JSP(Java Server Pages)構(gòu)成,實(shí)現(xiàn)良好的顯示效果,其主要包含的功能有:數(shù)據(jù)融合,以Excel 的形式導(dǎo)入導(dǎo)出。
移動(dòng)App 使用Android 平臺(tái)開發(fā),通過Android 平臺(tái)我們可以使盡量多的用戶能使用App 來減少巡視需要的成本。并且對(duì)于服務(wù)器與App 的通信方面我們以標(biāo)準(zhǔn)的RESTful API 形式接口與服務(wù)器通信交換數(shù)據(jù),一方面它使我們前后端數(shù)據(jù)交接變得更加容易,另一方面,以后對(duì)程序的擴(kuò)展和維護(hù)也變得更加簡(jiǎn)單。
圖2 系統(tǒng)模塊圖
分析了電力設(shè)備中使用的數(shù)據(jù)我們發(fā)現(xiàn),使用中的設(shè)備指標(biāo)屬性由于設(shè)備類型的差異,導(dǎo)致各種設(shè)備的衡量屬性也比較大。在這種情況下我們就不能直接使用傳統(tǒng)的設(shè)備屬性同一張表來記錄數(shù)據(jù)。在本系統(tǒng)中,我們將設(shè)備類型抽象出來作為一個(gè)單獨(dú)實(shí)體,一個(gè)設(shè)備類型決定屬性的多少,這樣便可實(shí)現(xiàn)設(shè)備屬性的差異化。然后一個(gè)數(shù)據(jù)項(xiàng)同時(shí)屬于一個(gè)設(shè)備和一個(gè)屬性,只需要進(jìn)行簡(jiǎn)單的關(guān)聯(lián)操作我們就可以進(jìn)行數(shù)據(jù)的查詢。
然后就是設(shè)備巡視的部分,設(shè)備巡視單獨(dú)作為一個(gè)實(shí)體用于方便用戶查詢對(duì)設(shè)備的更改情況。用戶在巡視對(duì)設(shè)備進(jìn)行維護(hù)的同時(shí)創(chuàng)建一個(gè)巡視記錄。同時(shí)為了方便數(shù)據(jù)查詢和安全控制,我們用設(shè)備類型、設(shè)備屬性、設(shè)備、設(shè)備數(shù)據(jù)這四個(gè)基本表創(chuàng)建一個(gè)可以顯示設(shè)備詳細(xì)信息的視圖以達(dá)到數(shù)據(jù)查詢簡(jiǎn)化和安全控制的目的,圖3 為數(shù)據(jù)庫設(shè)計(jì)ER 圖。
圖3 數(shù)據(jù)庫ER圖
后端使用Spring MVC 框架,在這個(gè)框架中我們可以快速實(shí)現(xiàn)我們的業(yè)務(wù)邏輯。在Spring MVC 框架中我們將實(shí)現(xiàn)分為三層既視圖-控制器-模型三部分。如圖3 所示。這里的視圖層就是前端頁面HTML、CSS、JavaScript 組成。然后控制器就是在Java 代碼中帶有@Controller 標(biāo)記的類以及方法。而模型在本系統(tǒng)中主要就是數(shù)據(jù)對(duì)應(yīng)的Java Bean 以及對(duì)數(shù)據(jù)庫的操作。圖4 為后端服務(wù)工作流程,當(dāng)請(qǐng)求是Web 用戶發(fā)起時(shí),將包含圖中整個(gè)工作流程。而移動(dòng)端發(fā)起數(shù)據(jù)請(qǐng)求時(shí),則不會(huì)包含視圖渲染這一步驟,這時(shí)會(huì)直接通過消息轉(zhuǎn)換器(Message Converter)將請(qǐng)求轉(zhuǎn)換為JSON 格式數(shù)據(jù)并發(fā)送給客戶端。接口設(shè)計(jì)根據(jù)RESTful/HTTP 規(guī)范[5]設(shè)計(jì),以利于雙方更容易實(shí)現(xiàn)通信。
移動(dòng)App 是巡視工具的實(shí)現(xiàn)。我們通過ZXing 實(shí)現(xiàn)二維碼掃描功能。ZXing 是谷歌提供的一個(gè)開源解析二維碼的一個(gè)工具包。通過對(duì)配置,我們可以很快用上ZXing 的二維碼掃描功能。界面設(shè)計(jì)采用流行的ViewPager+Tabsegment 模式,可以很方便的實(shí)現(xiàn)功能選擇和切換。4 個(gè)fragment 功能頁分別是設(shè)備掃描修改、巡視歷史記錄、設(shè)備統(tǒng)計(jì)信息和用戶個(gè)人信息的修改。數(shù)據(jù)存儲(chǔ)分在線和手機(jī)緩存結(jié)合方式,當(dāng)手機(jī)無法與服務(wù)器連接時(shí),我們也可以通過App 本地緩存查看我們巡視過的歷史記錄,其他功能則必須App 連接服務(wù)器才能使用,以下是App 界面效果圖。
圖4 后臺(tái)服務(wù)工作流程
圖5 數(shù)據(jù)管理頁面
后端管理采用H5 頁面,用左收縮菜單選擇操作,也同時(shí)便于功能的增加,左右分別為兩個(gè)容器,目前可支持的操作有數(shù)據(jù)導(dǎo)入導(dǎo)出,二維碼表的生成。
本系統(tǒng)完成后,應(yīng)該部署在具有SSL 證書的服務(wù)器上,從而實(shí)現(xiàn)HTTPS 加密通道通信,但這依然不是萬全之策,依然有很多破解手段。為了有更安全的保護(hù)措施以及更廣泛的使用場(chǎng)景(即使在HTTP 協(xié)議下),本系統(tǒng)設(shè)計(jì)了一層加密保護(hù)層,加密App 向服務(wù)器發(fā)送的數(shù)據(jù),具體實(shí)現(xiàn)如下。
圖6 App界面效果
(1)數(shù)據(jù)接口簽名驗(yàn)證,對(duì)App 發(fā)往服務(wù)器的數(shù)據(jù)請(qǐng)求內(nèi)容與當(dāng)前時(shí)間戳以及加密密鑰混合成一個(gè)字符串。然后計(jì)算該混合字符串的MD5 值。將數(shù)據(jù)內(nèi)容與計(jì)算出來的MD5 一起發(fā)往服務(wù)器。服務(wù)器接收到請(qǐng)求后,同樣根據(jù)數(shù)據(jù)內(nèi)容和時(shí)間戳以及加密密鑰計(jì)算出一個(gè)MD5 值,若計(jì)算出的MD5 值與接收到的MD5 值相同,則驗(yàn)證通過,若MD5 值不同或沒有則該數(shù)據(jù)很有可能是被篡改過的數(shù)據(jù),服務(wù)器返回簽名錯(cuò)誤,這樣可以使我們的數(shù)據(jù)遭到篡改的可能大大降低。
(2)數(shù)據(jù)內(nèi)容加密,雖然使用方法(1)可以使數(shù)據(jù)不會(huì)被篡改,但同樣存在著接口內(nèi)容暴露的風(fēng)險(xiǎn),接口數(shù)據(jù)被收集。因此我們對(duì)接口發(fā)送的數(shù)據(jù)進(jìn)行一次加密,即使數(shù)據(jù)被截取,依然無法得到數(shù)據(jù)內(nèi)容。具體采用的算法為DES 加密算法。這是一種對(duì)稱加密算法,發(fā)送方通過密鑰進(jìn)行加密,接收方通過相同的密鑰解密就可以查看明文。
數(shù)據(jù)接收時(shí),我們利用Spring MVC 提供的面向切面編程(AOP)方法可以很方便地完成安全驗(yàn)證工作。其具體實(shí)現(xiàn)是,定義過濾器過濾來自App 的請(qǐng)求,并對(duì)請(qǐng)求數(shù)據(jù)流重新封裝(為了避免攔截器使用數(shù)據(jù)流后控制器獲取不到數(shù)據(jù))。定義攔截器攔截來自App 的數(shù)據(jù),檢查MD5 簽名值是否正確,如果正確放行,否則返回簽名錯(cuò)誤。定義消息轉(zhuǎn)換器,解密DES 加密后的數(shù)據(jù)內(nèi)容并且去掉簽名值等安全驗(yàn)證字段,數(shù)據(jù)會(huì)傳送給控制器,如果解密失敗則返回解密錯(cuò)誤信息。這樣做好處很明顯,我們可以方便控制安全請(qǐng)求,并且不會(huì)干擾到具體的業(yè)務(wù)邏輯。圖7 是系統(tǒng)安全控制流程。
本文設(shè)計(jì)了基于Spring MVC 架構(gòu)的二維碼設(shè)備管理系統(tǒng),開發(fā)環(huán)境為Idea、Android Studio,使用Java實(shí)現(xiàn)主要代碼。存儲(chǔ)數(shù)據(jù)庫使用MySQL,Web 服務(wù)系統(tǒng)使用Apache Tomcat 9.0 作為載體。該二維碼設(shè)備管理系統(tǒng)打破了傳統(tǒng)手工記錄設(shè)備情況的模式,提高了工作效率,并且會(huì)大大改善數(shù)據(jù)出錯(cuò)的情況,使設(shè)備管理更加科學(xué)和有效。根據(jù)陳瑪玲在《電力設(shè)備巡視中的問題分析和策略》中列出的電力設(shè)備巡視的四大問題[6],我們要用更先進(jìn)的方式來驅(qū)動(dòng)解決這些問題。相比傳統(tǒng)模式,優(yōu)勢(shì)很明顯,基于此我們開發(fā)出的這套設(shè)備巡視系統(tǒng),可以為同行提供參考與借鑒,要實(shí)現(xiàn)更加全面和功能更加完善的設(shè)備管理系統(tǒng),我們只是剛剛開始。
圖7 App安全控制流程