馮星星
(西安市市政設(shè)施管理中心 陜西省西安市 710016)
手機(jī)應(yīng)用軟件APP 以其信息收集和處理不受時(shí)間、空間局限的優(yōu)勢,與各行各業(yè)的融合發(fā)展日趨深入,西安城市管理部門(簡稱市政部門)與時(shí)俱進(jìn),相繼推出多款市政服務(wù)APP,但是城市橋梁巡視信息化建設(shè)尚處在起步階段。隨著西安現(xiàn)代化進(jìn)程加快,城市橋梁巡視面臨更為嚴(yán)峻的挑戰(zhàn)。
(1)專業(yè)巡視人員數(shù)量的增長速度跟不上巡視范圍擴(kuò)大的速度。西安城市發(fā)展已超過三環(huán),橋梁保有量接近400 座,專業(yè)巡視人員卻不足百人,若招收臨時(shí)人員,投入的培訓(xùn)經(jīng)費(fèi)將不菲,而且人員規(guī)范化管理仍處于探索總結(jié)之中,無成熟經(jīng)驗(yàn)可循。
(2)傳統(tǒng)的巡視方式效率不高。定期出巡的方式存在時(shí)空局限性,響應(yīng)突發(fā)事故不及時(shí),處理滯后。
(3)巡視信息存在人為錯誤?,F(xiàn)場巡視人員一般通過紙質(zhì)工單上報(bào)病害,再由人工轉(zhuǎn)錄成電子文檔,轉(zhuǎn)錄人員不良的職業(yè)操守或身心狀態(tài)將直接損害到信息存錄的質(zhì)量。
(4)巡視信息存儲格式不規(guī)范,錯誤難以追溯和撤銷。
對橋梁巡視信息進(jìn)行有序管理是橋梁科學(xué)養(yǎng)護(hù)的前提。為使橋梁巡視信息真實(shí)、完整、有效,實(shí)現(xiàn)橋梁巡視信息化管理,亟需開發(fā)一套專業(yè)和高效的信息系統(tǒng)對巡視信息進(jìn)行采集、存儲和規(guī)整,基于安卓智能手機(jī)的橋梁巡視系統(tǒng)APP 的開發(fā)正逢其時(shí)。
西安市橋梁巡視系統(tǒng)APP 旨在集成巡視功能于手持設(shè)備端,實(shí)現(xiàn)巡視現(xiàn)場信息的實(shí)時(shí)處理與存檔。主要功能包括登錄、橋梁新建與信息查詢、工單操作、緊急消息發(fā)送與備查。在橋梁日常巡視中,巡視信息主要記錄在工單上,工單是保存、處理及查詢信息的憑證,因此在APP 開發(fā)中,工單被設(shè)計(jì)成為最基本的數(shù)據(jù)結(jié)構(gòu),信息傳輸、存儲及操作的基本單位。APP 主要開發(fā)內(nèi)容包括身份認(rèn)證與權(quán)限管理、橋梁信息、現(xiàn)場病害存儲、緊急消息的增刪改查、數(shù)據(jù)庫設(shè)計(jì)及UI 設(shè)計(jì)。
系統(tǒng)APP 主要以Android Studio 作為開發(fā)工具集,采用LitePal數(shù)據(jù)庫,以安卓8.0 版智能手機(jī)為測試機(jī),利用原型法快速開發(fā)出一個(gè)原型系統(tǒng),然后在原型的基礎(chǔ)上逐步實(shí)現(xiàn)并完善主要功能。主要技術(shù)特點(diǎn)包括:具有良好的安全性;具有錯誤提示和糾錯功能,滿足穩(wěn)定性的要求;涵蓋了西安所有轄區(qū)、所有類型橋梁的全部巡視項(xiàng)目,保證信息的完整性;用戶界面簡潔友好,操作便捷;系統(tǒng)具有良好的擴(kuò)展性,可與橋梁檢測部門的工作進(jìn)行對接。
圖1
圖2
圖3
開發(fā)涉及的關(guān)鍵技術(shù)包括信息持久化技術(shù)、信息滾動顯示及刷新技術(shù)、病害照片拍攝和刪除技術(shù)、雙監(jiān)聽器兼容技術(shù)、側(cè)滑菜單技術(shù)、天氣信息在線抓取和輸入提示技術(shù),這7 項(xiàng)關(guān)鍵技術(shù)也是實(shí)現(xiàn)目標(biāo)功能的難點(diǎn)。
信息持久化技術(shù)是指將巡橋記錄的瞬時(shí)數(shù)據(jù)存入手機(jī)數(shù)據(jù)庫中成為持久狀態(tài),使數(shù)據(jù)在瞬時(shí)狀態(tài)和持久狀態(tài)間進(jìn)行轉(zhuǎn)換的技術(shù),保證數(shù)據(jù)在手機(jī)待機(jī)或關(guān)機(jī)時(shí)不會丟失,并能隨時(shí)調(diào)用。本系統(tǒng)APP 利用LitePal 數(shù)據(jù)庫實(shí)現(xiàn)信息持久化機(jī)制,即通過對象關(guān)系映射(ORM)模式,將類的實(shí)例化對象持久化到SQL 關(guān)系數(shù)據(jù)庫中。LitePal 數(shù)據(jù)庫中存有四個(gè)類的數(shù)據(jù)模式,分別是登錄Loading、橋梁Bridge、工單WorkSheet 和緊急消息UrgentMessage,其中WorkSheet 與Bridge 之間存在1:1 聯(lián)系,聯(lián)系關(guān)鍵字是bridge_code。四個(gè)類繼承于父類DataSupport,并且重寫Parcelable 接口實(shí)現(xiàn)對象序列化。DataSupport 類中的方法包括保存save()、更新update()、刪除delete()以及查找find();Parcelabler 接口中需要重寫的方法包括寫入writeToParcel()、讀出createFromParcel()、描述對象describeContents()以及統(tǒng)計(jì)對象個(gè)數(shù)newArray()。信息化持久技術(shù)類圖如圖1 所示。
橋梁基礎(chǔ)信息、工單及緊急消息在顯示時(shí)往往會超出屏幕范圍,滾屏顯示技術(shù)實(shí)現(xiàn)通過手指輕輕上滑即在一屏之內(nèi)滾動顯示全部信息的功能,其技術(shù)原理是:編寫RecyclerView 控件作為顯示容器,將工單等數(shù)據(jù)源定義為List 類型,編寫適配器Adapter 將數(shù)據(jù)源注入到顯示控件RecyclerView 中,并在Adapter 中定義的內(nèi)部類ViewHolder 承載數(shù)據(jù)源對象的屬性,實(shí)例化layoutManager 對象控制RecylerView 中數(shù)據(jù)源的顯示格式。信息滾屏顯示技術(shù)原理示意圖如圖2 所示。
數(shù)據(jù)刷新流程是:編寫SwipeRefresh 監(jiān)聽器監(jiān)聽下拉事件,從而觸發(fā)Refresh()方法,開啟新線程new Thread(new Runnable())顯示刷新過程,切回主線程查詢更新后的數(shù)據(jù)源queryDataSources(),通知適配器重新注入數(shù)據(jù)源adapter.notifiyDataSetChanged()。
巡視系統(tǒng)APP 既可以拍照,也可以隨時(shí)將不滿意的照片刪除,其技術(shù)原理是:編寫一個(gè)可刪除照片的類DeleteImageView,開啟手機(jī)攝像頭權(quán)限后,每拍攝一張照片就實(shí)例化一個(gè)可刪除類的對象,全部對象統(tǒng)一存放在顯示容器contain 中供用戶瀏覽和選擇刪除??蓜h除類DeleteImageView 繼承自RelativeLayout 類,設(shè)置有三個(gè)狀態(tài)變量,分別存放照片對象、刪除按鈕對象以及照片地址,其中刪除按鈕對象帶有監(jiān)聽功能,如果監(jiān)聽到點(diǎn)擊事件,即觸發(fā)刪除功能刪除照片。病害照片拍攝與刪除技術(shù)原理示意圖如圖3 所示。
圖4
圖5
圖6
雙日期監(jiān)聽技術(shù)實(shí)現(xiàn)了通過同時(shí)監(jiān)聽開始日期和結(jié)束日期的改變、查詢出該時(shí)段全部工單信息的功能,其技術(shù)原理是:擴(kuò)展OnDateChangedListener 接口編寫雙日期選擇器類DoubleDatePickerDialog,定義三個(gè)狀態(tài)變量,分別是開始日期選擇器datePicker_start、結(jié)束日期選擇器datePicker_end 和接口實(shí)例callback;重寫接口中的onDateChanged()方法,將監(jiān)聽到的開始和結(jié)束日期分別保存在開始日期選擇器datePicker_start 和結(jié)束日期選擇器datePicker_end 中;在OnDateSetListener 監(jiān)聽接口的實(shí)例callback 中重寫onDateSet()方法,用來查詢所選時(shí)間段內(nèi)的全部工單。雙日期監(jiān)聽技術(shù)類圖如圖4 所示。
巡視系統(tǒng)APP 編寫了RecyclerView 控件顯示信息,并為每條信息配加了側(cè)滑菜單。側(cè)滑菜單默認(rèn)隱藏,手指左滑信息時(shí)菜單顯示,供刪除和修改。側(cè)滑菜單分為三種:按日期顯示工單的側(cè)滑菜單SlidingMenu_bydate、按時(shí)間段顯示工單的側(cè)滑菜單SlidingMenu_byperiod 和緊急消息的側(cè)滑菜單SlidingMenu_UrgentMessages。
圖7
實(shí)現(xiàn)側(cè)滑菜單有兩個(gè)關(guān)鍵技術(shù)點(diǎn):
(1)每個(gè)RecyclerViewe 控件相應(yīng)的適配器Adapter 負(fù)責(zé)將數(shù)據(jù)源注入到顯示控件RecycylerView 當(dāng)中,并為數(shù)據(jù)源中的每條信息配加側(cè)滑菜單。
(2)菜單捕捉手指的起落和滑向,當(dāng)手指按向屏幕中的一條信息時(shí),觸發(fā)MotionEvent.ACTION_DOWN 事件,其他未選中信息的側(cè)滑菜單自動關(guān)閉;當(dāng)手向左滑動離開屏幕時(shí),觸發(fā)MotionEvent.ACTION_UP 事件,打開選中信息的側(cè)滑菜單。
側(cè)滑菜單技術(shù)類圖如圖5 所示。
巡橋人員填寫新建工單時(shí),系統(tǒng)APP 將自動填入天氣信息,其技術(shù)原理是:從官方平臺上抓取并解析當(dāng)天的天氣信息,okHttpClient 對象負(fù)責(zé)抓取,JsonObject 對象負(fù)責(zé)解析,如果解析成功,系統(tǒng)APP 利用message 和handle 對象將解析結(jié)果填入工單天氣一欄的textView 對象中。天氣信息在線抓取時(shí)序圖如圖6 所示。
日常橋梁巡視過程中,很多常見病害及專業(yè)術(shù)語往往需重復(fù)輸入,巡視系統(tǒng)APP 將這些常見病害及術(shù)語分別歸納入數(shù)據(jù)源,當(dāng)輸入到類似的文字時(shí)APP 將立即給出提示,其技術(shù)原理是:使用ArrayList 數(shù)組作為數(shù)據(jù)源的數(shù)據(jù)結(jié)構(gòu),每個(gè)數(shù)組元素對應(yīng)一種常見病害或是專業(yè)術(shù)語;編寫AutoCompleteTextView 下拉列表框控件顯示提示信息;編寫適配器Adapter 將數(shù)據(jù)源注入到AutoCompleteTextView 當(dāng)中,并配寫過濾器arrayFilter 對數(shù)據(jù)源進(jìn)行篩選,只提示與輸入相關(guān)的病害及專業(yè)術(shù)語。輸入提示技術(shù)類圖如圖7 所示。
西安市橋梁巡視系統(tǒng)APP 使用Material Design 和Material UI Kit進(jìn)行用戶界面(UI)的設(shè)計(jì)。APP用戶界面包括登錄界面、主界面、橋梁新建界面、工單操作界面、工單條目顯示界面、工單新建界面、工單修改界面、工單顯示界面、消息發(fā)送界面、歷次消息備查界面,其中主界面包括概況版面、概覽版面和滑動菜單。所有界面及單座橋梁、單張工單、單條緊急都以xml 布局文件的形式編寫并保存。
主界面采用Fragment+ViewPage+TabLayout 輪換布局形式,工單條目顯示等界面采用列表式布局,工單操作等界面采用折疊式標(biāo)題欄CollapsingToolbarLayout 布局,緊急消息發(fā)送采用懸浮按鈕形式,概覽版面采用CardView 卡片布局形式,概況版面采用PieChat布局形式,滑動菜單采用抽屜DrawerLayout 布局形式,除此之外,界面布局形式還包括LinearLayout 線性布局、CoordinatorLayout 布局等。
從登錄界面正確輸入用戶名和密碼將登錄主界面,如果用戶名、密碼未輸入或不匹配,系統(tǒng)APP 將給予提示,并可以在是否明文顯示密碼中進(jìn)行切換。進(jìn)入系統(tǒng)后用戶根據(jù)分配的權(quán)限進(jìn)行相應(yīng)的操作。
主界面分為三個(gè)部分:位于頂端的菜單欄、概況版面和概覽板面,單擊“概況”和“概覽”標(biāo)簽可在兩個(gè)版面間切換,默認(rèn)顯示概況版面。菜單欄包括系統(tǒng)標(biāo)題和隱藏菜單,隱藏菜單包括新建橋梁和關(guān)閉系統(tǒng)兩項(xiàng)。概況版面用餅狀圖分別統(tǒng)計(jì)出了西安市主要城區(qū)所轄橋梁的總數(shù)和占比,餅狀圖中一個(gè)區(qū)塊一種顏色代表一個(gè)城區(qū),顏色圖例在餅狀圖上方顯示。點(diǎn)擊任一個(gè)區(qū)塊,該區(qū)塊會突出顯示,其面積會略大于其他未為被點(diǎn)擊的區(qū)塊,然后顯示該城區(qū)所轄的全部橋梁。概覽版面顯示主要城區(qū)所有橋梁的名稱,下拉屏幕,屏幕中間會出現(xiàn)圓形進(jìn)度條,當(dāng)進(jìn)度條消失后橋梁信息被刷新。點(diǎn)擊任一橋梁名稱進(jìn)入所選橋梁的工單操作界面。
打開主界面隱藏菜單,在菜單項(xiàng)中點(diǎn)擊選擇新建橋梁項(xiàng),進(jìn)入新建橋梁界面。在新建橋梁界面中輸入橋梁名稱,點(diǎn)擊橋梁所在區(qū)輸入框,將顯示提示下拉框,可從中選擇新建橋梁所在的城區(qū)。點(diǎn)擊拍照圖標(biāo),拍攝新建橋梁的外觀照片;點(diǎn)擊打開圖標(biāo),從手機(jī)內(nèi)存中直接選取外觀圖片。點(diǎn)擊外觀圖右上角的紅,可以刪除外觀圖重新進(jìn)行拍照或者選取。點(diǎn)擊“保存”按鈕保存。如果信息沒有填入完整,系統(tǒng)APP 將給予提示。正確保存后回到主界面,在概覽版面下拉刷新,將出現(xiàn)新建的橋梁。
在單個(gè)橋梁的工單查詢中,向上滑動屏幕,將隱藏工單操作界面上端的橋梁外觀圖,只顯示菜單欄。菜單欄的左側(cè)依次是返回圖標(biāo)和所選橋梁的名稱,右側(cè)是工單查找圖標(biāo)和隱藏菜單。展開隱藏菜單,包括新建工單和發(fā)送消息兩項(xiàng)。菜單欄的下方顯示與該橋梁所有相關(guān)的工單,工單以巡視日期命名。點(diǎn)擊查詢圖標(biāo),出現(xiàn)雙日期選擇器,選擇“開始日期”和“結(jié)束日期”,點(diǎn)擊確定,將在單個(gè)橋梁的工單操作界面顯示所選時(shí)間段(包含“開始日期”和“結(jié)束日期”)內(nèi)的全部工單。點(diǎn)擊工單,進(jìn)入工單顯示界面,可瀏覽工單具體內(nèi)容,點(diǎn)擊病害照片可以察看大圖。
在按日期查詢中,手指向右滑動屏幕,將出現(xiàn)滑動菜單。點(diǎn)擊按時(shí)間查詢項(xiàng)顯示日期選擇器。選擇日期后,點(diǎn)擊確定,查詢結(jié)果將顯示在工單條目顯示界面,工單以條目形式自上而下列出,每一工單所巡視的橋梁名稱顯示在條目的左側(cè),拍攝的病害照片數(shù)顯示在條目右側(cè)。點(diǎn)擊條目進(jìn)入工單顯示界面,可瀏覽工單具體內(nèi)容。
在按時(shí)間段查詢中,手指向右滑動屏幕,將出現(xiàn)滑動菜單。選擇按時(shí)間段查詢項(xiàng),進(jìn)入時(shí)間段選擇界面。時(shí)間段選擇界面最上端是手動選擇時(shí)間段的區(qū)域,下面提示有四種時(shí)間段供選擇,分別是最近一周、最近半個(gè)月、最近一個(gè)月和最近半年。在手動選擇區(qū)從左到右依次是:返回圖標(biāo)、起始時(shí)間選擇框、交換圖標(biāo)、結(jié)束時(shí)間選擇框和查詢圖標(biāo)。點(diǎn)擊起始時(shí)間選擇框,顯示起始時(shí)間選擇器,所選日期將顯示在起始時(shí)間選擇框中;點(diǎn)擊結(jié)束時(shí)間選擇框,出現(xiàn)結(jié)束時(shí)間選擇器,所選日期將顯示在結(jié)束時(shí)間選擇框中。點(diǎn)擊交換圖標(biāo),將交換起始時(shí)間選擇框和結(jié)束時(shí)間選擇框中的所選日期。點(diǎn)擊查詢圖標(biāo),將在工單條目顯示界面顯示查詢結(jié)果。
在工單新建中,新建界面的必填項(xiàng)一般由系統(tǒng)自動填入,包括:所巡視的橋梁名稱,當(dāng)天巡視的日期,當(dāng)天巡視的天氣;其余項(xiàng)需要手動填寫,包括:限載牌、限高牌、隔音板、端柱、人行道、車行道、隔離欄、伸縮縫、泄水孔、落水管、扶梯、欄桿、病害說明、結(jié)構(gòu)變異、橋區(qū)施工、巡視人以及病害圖片。手動填寫時(shí)APP 會給出輸入提示,輸入一個(gè)字后即給出提示,可以從提示下拉框中選取輸入。點(diǎn)擊拍照圖標(biāo)對橋梁病害進(jìn)行拍照,一張工單最多允許拍攝十張病害照片,超過十張,系統(tǒng)將給出提示并且關(guān)閉當(dāng)前的拍照功能。每一張病害照片的右上角均有一個(gè)紅,點(diǎn)擊紅可以刪除該照片。點(diǎn)擊“預(yù)覽”按鈕預(yù)覽新建的工單;點(diǎn)擊“保存”按鈕保存新建的工單并返回上一級界面。下拉屏幕刷新,當(dāng)圓形進(jìn)度條消失后,顯示新建的工單。
在工單修改中,修改界面顯示所需修改工單的原始信息,其中橋梁名稱、日期和天氣三項(xiàng)無法修改,其余項(xiàng)均可重新輸入;手指上滑屏幕顯示工單修改界面的余下部分。點(diǎn)擊已有病害圖片右上角的紅,刪除圖片;點(diǎn)擊拍攝圖標(biāo)重新拍攝病害圖片;點(diǎn)擊“預(yù)覽”按鈕預(yù)覽修改結(jié)果;點(diǎn)擊“保存”按鈕保存修改結(jié)果。
刪除工單有兩種途徑:第一種,在單個(gè)橋梁的工單操作界面,長按工單根據(jù)提示框選擇“刪除”操作;第二種,在工單條目顯示界面,向左側(cè)滑任一條目右側(cè),從出現(xiàn)的側(cè)滑菜單中選擇刪除操作。在橋梁工單操作界面或工單條目顯示界面下拉刷新,該工單將不再顯示。
兩種途徑可以進(jìn)入消息發(fā)送界面發(fā)送消息:第一種,在工單條目顯示界面點(diǎn)擊位于右下方的懸浮按鈕;第二種,在單個(gè)橋梁的工單操作界面,展開隱藏菜單,從中選擇發(fā)送消息項(xiàng)。消息發(fā)送界面上端是手機(jī)號輸入框,單擊輸入框?qū)⒊霈F(xiàn)提示下拉框,選擇電話號碼;界面下部是短信輸入框,寫好短信后點(diǎn)擊輸入框右端的發(fā)送圖標(biāo)發(fā)送短信。如果發(fā)送成功,系統(tǒng)提示“已發(fā)送!”,并回到工單條目顯示界面或者橋梁工單操作界面,同時(shí)將發(fā)送成功的短信保存入數(shù)據(jù)庫。如果沒有填寫手機(jī)號、輸入手機(jī)號格式不正確或者短信輸入框?yàn)榭?,系統(tǒng)APP 將提示輸入錯誤,不予保存編輯內(nèi)容。
圖8
在滑動菜單中點(diǎn)擊歷次消息項(xiàng),進(jìn)入歷次消息界面。向左側(cè)滑動任一條消息將出現(xiàn)“刪除”按鈕,點(diǎn)擊按鈕刪除該條消息。
系統(tǒng)APP 主要功能界面包括:登錄界面、橋梁信息瀏覽界面、橋梁新建界面、工單查詢和操作界面、緊急消息發(fā)送與備查界面等,主要功能界面如圖8 所示。
基于安卓智能手機(jī)的西安橋梁巡視系統(tǒng)APP 已經(jīng)運(yùn)用到了實(shí)際工作當(dāng)中,功能和性能能夠滿足橋梁日常巡視的需要。通過無縫對接巡橋現(xiàn)場與病害信息處理,系統(tǒng)APP實(shí)現(xiàn)了對病害的快速響應(yīng),同時(shí)縮短了橋梁巡視時(shí)間,節(jié)省了人力和車輛投入。隨著系統(tǒng)APP版本的升級,市政橋梁巡視信息化水平將得到進(jìn)一步的提高。