莊 富,張藝帆,林果園,3
(1.中國礦業(yè)大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,江蘇 徐州 221116;2.礦山數(shù)字化教育部工程研究中心,江蘇 徐州 221116;3.南京大學(xué)軟件新技術(shù)國家重點(diǎn)實(shí)驗(yàn)室,江蘇 南京 210093)
社區(qū)治理是國家治理體系中的基礎(chǔ)性工程,是國家治理體系中的關(guān)鍵一環(huán)[1]。近年來,國家提出“推進(jìn)國家治理體系和治理能力現(xiàn)代化”的戰(zhàn)略任務(wù),這給社區(qū)治理提出了挑戰(zhàn)。社區(qū)治理能力的高低關(guān)乎人民群眾的生活水平與質(zhì)量,關(guān)乎百姓的歸屬感和幸福感。
突如其來的新冠肺炎疫情席卷全球,全國上下投入到了疫情防控工作中,這無疑對社區(qū)治理能力是一次重大考驗(yàn)?;ヂ?lián)網(wǎng)的出現(xiàn)已經(jīng)徹徹底底改變了人們的日常生活。利用互聯(lián)網(wǎng),人們讓生活變得更加美好。為此,根據(jù)社區(qū)治理的實(shí)際需求開發(fā)出適用于基層社區(qū)的“社區(qū)巡檢系統(tǒng)”,將傳統(tǒng)的社區(qū)安全巡邏結(jié)合互聯(lián)網(wǎng),實(shí)現(xiàn)突發(fā)事件信息的在線共享。不僅提高了突發(fā)事件信息的傳播速度,還能最大程度給相關(guān)管理部門在采取措施時(shí)提供更多的選擇,這一系統(tǒng)的應(yīng)用具有深遠(yuǎn)的意義。
基于Android的社區(qū)巡檢系統(tǒng)由基于Android的手機(jī)APP、服務(wù)端和后臺管理系統(tǒng)三部分組成(如圖1所示)。Android手機(jī)APP負(fù)責(zé)社區(qū)治安數(shù)據(jù)、基礎(chǔ)設(shè)施數(shù)據(jù)、消防安全數(shù)據(jù)、環(huán)境保護(hù)數(shù)據(jù)、文物保護(hù)數(shù)據(jù)和文化生活數(shù)據(jù)等的收集并實(shí)現(xiàn)對社區(qū)各類突發(fā)事件信息的巡查上報(bào)。服務(wù)端負(fù)責(zé)對APP傳輸來的數(shù)據(jù)進(jìn)行封裝,并對數(shù)據(jù)進(jìn)行處理。后臺管理系統(tǒng)則對系統(tǒng)進(jìn)行權(quán)限、巡檢人員和巡檢人員上報(bào)的巡檢信息等方面的管理。
圖1 系統(tǒng)整體架構(gòu)
系統(tǒng)采用C/S和B/S相結(jié)合的方式[2],服務(wù)端與APP之間采用C/S模式,巡檢人員可以使用手機(jī)APP上傳和查看突發(fā)事件信息。服務(wù)端與后臺管理系統(tǒng)之間采用B/S模式,把服務(wù)端封裝的數(shù)據(jù)顯示在管理系統(tǒng)中。
基于Android的社區(qū)巡檢系統(tǒng)APP以Android Studio作為開發(fā)平臺。Android Studio是谷歌推出的Android集成開發(fā)工具,相比Eclipse ADT開發(fā)環(huán)境,具有響應(yīng)速度快、UI更漂亮,強(qiáng)大的UI編輯功能的優(yōu)點(diǎn)[3]。APP與服務(wù)端通信采用http協(xié)議,使用Android網(wǎng)絡(luò)框架OkHttp[4]完成http協(xié)議的相關(guān)操作。OkHttp是目前安卓開發(fā)中最火熱的輕量級框架,由于共享Socket,減少了對服務(wù)器的請求次數(shù),通過連接池,減少請求延遲,提高請求的效率。
使用OkHttp進(jìn)行網(wǎng)絡(luò)請求的步驟分為以下四點(diǎn)[5]:(1)創(chuàng)建一個(gè)OkHttpClient實(shí)例;(2)創(chuàng)建一個(gè)Request實(shí)例。創(chuàng)建Request實(shí)例時(shí),用戶可以根據(jù)需要發(fā)起Post請求或者Get請求。Post或者Get請求是HTTP協(xié)議中向后臺服務(wù)器發(fā)送數(shù)據(jù)的一種機(jī)制,是HTTP協(xié)議的一個(gè)組成部分;(3)使用OkHttpClient創(chuàng)建一個(gè)Call并執(zhí)行,獲取一個(gè)Response對象??梢愿鶕?jù)同步或者異步需求,分別采用execute()方法或者enqueue()方法,實(shí)現(xiàn)不同的訪問策略;(4)對Response進(jìn)行相關(guān)操作。通過以上四個(gè)步驟,一個(gè)應(yīng)用可以完成各種情況下的網(wǎng)絡(luò)訪問。
服務(wù)端采用IntelliJ IDEA集成開發(fā)環(huán)境和SSM[6](Spring+SpringMVC+MyBatis)框架集,數(shù)據(jù)庫采用MySQL數(shù)據(jù)庫系統(tǒng)。IntelliJ IDEA在智能代碼助手、代碼自動提示、重構(gòu)、J2EE支持、各類版本工具(git、svn等)、JUnit、CVS整合、代碼分析、創(chuàng)新的GUI設(shè)計(jì)等方面被公認(rèn)為是最好的java開發(fā)工具[7]。
Spring就像是整個(gè)項(xiàng)目中裝配bean的大工廠,在配置文件中可以指定使用特定的參數(shù)去調(diào)用實(shí)體類的構(gòu)造方法來實(shí)例化對象。SpringMVC在項(xiàng)目中攔截用戶請求,它的核心Servlet即Dispatcher Servlet承擔(dān)中介或是前臺這樣的職責(zé),將用戶請求通過Handler Mapping去匹配Controller,Controller就是具體對應(yīng)請求所執(zhí)行的操作。MyBatis是對JDBC的封裝,通過配置文件關(guān)聯(lián)到各實(shí)體類的Mapper文件,Mapper文件中配置了每個(gè)類對數(shù)據(jù)庫所需進(jìn)行的SQL語句映射。在每次與數(shù)據(jù)庫交互時(shí),通過SQLSessionFactory拿到一個(gè)SQLSession,再執(zhí)行SQL命令[5]。
基于Android的社區(qū)巡檢系統(tǒng)APP由地圖瀏覽、巡檢上報(bào)、GPS、查看中心和設(shè)置中心五個(gè)模塊組成,每個(gè)模塊下有對應(yīng)的若干子模塊(如圖2所示)。
圖2 社區(qū)巡檢系統(tǒng)APP的基本功能
地圖瀏覽模塊包括地圖操作和圖層控制兩個(gè)子模塊。地圖操作是指對首頁用戶地圖進(jìn)行平移和縮放;圖層控制是指對地圖進(jìn)行顯隱控制。巡檢上報(bào)模塊包括表單采集、圖片采集、視頻采集和數(shù)據(jù)上報(bào)四個(gè)子模塊。表單采集包括對事件類型信息的采集和事件描述信息的采集。事件類型預(yù)先定義了50種,由用戶通過點(diǎn)擊下拉列表進(jìn)行選擇。
事件描述由用戶在文本框中手動添加,內(nèi)容不超過100個(gè)漢字;圖片采集和視頻采集均可以通過攝像頭進(jìn)行新增也可以通過訪問本地相冊進(jìn)行選擇,圖片數(shù)量不超過5張,視頻數(shù)量為1個(gè),視頻大小不超過200 M,時(shí)長不超過1分鐘;數(shù)據(jù)上報(bào)分為成功和失敗兩種情況,成功情況下事件的類型、描述和內(nèi)容等信息會上傳至服務(wù)器端,而失敗情況下事件的信息會暫存到本地,待網(wǎng)絡(luò)恢復(fù)后重新進(jìn)行上傳。GPS模塊包括實(shí)時(shí)定位和巡檢軌跡上報(bào)兩個(gè)子模塊。實(shí)時(shí)定位是指將巡檢人員當(dāng)前所在位置實(shí)時(shí)顯示在用戶地圖中并每隔一定時(shí)間間隔刷新一次,該時(shí)間間隔由用戶自己設(shè)置,默認(rèn)值為30 s;巡檢軌跡上報(bào)是指每隔一定時(shí)間間隔記錄下巡檢人員實(shí)時(shí)位置并上傳服務(wù)器端,由后臺管理系統(tǒng)畫出巡檢軌跡[8-11]。查看中心模塊包括查看列表、查看詳情和刪除事件三個(gè)子模塊。查看列表包括查看事件的時(shí)間、類型和經(jīng)緯度等信息;查看詳情包括查看事件的時(shí)間、類型、描述、經(jīng)緯度和圖片視頻等信息;刪除事件執(zhí)行的是將已保存到本地的事件信息進(jìn)行刪除的操作。
設(shè)置中心包括設(shè)置用戶昵稱、設(shè)置服務(wù)器IP地址、設(shè)置定位時(shí)間間隔和設(shè)置照片質(zhì)量四個(gè)子模塊。設(shè)置用戶昵稱是巡檢人員在系統(tǒng)中修改自己昵稱的功能,昵稱不作為巡檢人員身份的標(biāo)識,巡檢人員可以多次修改自己的昵稱;正確連入服務(wù)器是成功上傳事件的前提,用戶首先要確保手機(jī)與服務(wù)器處在同一局域網(wǎng)下,然后再設(shè)置服務(wù)器IP地址;設(shè)置定位時(shí)間間隔是對巡檢人員進(jìn)行實(shí)時(shí)定位以及巡檢軌跡上報(bào)的關(guān)鍵,時(shí)間間隔由巡檢人員自己設(shè)置,單位為“秒/s”,默認(rèn)值為30 s;設(shè)置照片質(zhì)量設(shè)置的是巡檢人員在拍攝事件圖片時(shí)圖片的質(zhì)量,質(zhì)量分為高、中、低三個(gè)等級,默認(rèn)值為高。
為了保證服務(wù)端與APP端的正常連接,使得服務(wù)端能夠及時(shí)知道APP端何時(shí)掉線,該系統(tǒng)設(shè)計(jì)使用了Socket心跳周期檢測機(jī)制(如圖3所示)。
圖3 Socket心跳周期檢測機(jī)制
首先在服務(wù)端建立定時(shí)器并設(shè)置定時(shí)器的時(shí)間為60秒,定時(shí)發(fā)送心跳包給到APP端:timer=new Timer();Beat beat=new Beat(clients);timer. Schedule (beat, 1 000*60,beat.Interval);APP端收到心跳包后,立即發(fā)送心跳包給服務(wù)端,服務(wù)端收到APP端發(fā)來的心跳包后確認(rèn)APP端的連接可用,不執(zhí)行釋放socket相關(guān)的操作。當(dāng)服務(wù)端接收到APP端發(fā)送來的數(shù)據(jù)時(shí),心跳丟失計(jì)數(shù)清零:beatMissNum=0;如果服務(wù)端沒在規(guī)定的時(shí)間間隔即60秒內(nèi)收到APP端響應(yīng)的心跳包,服務(wù)端就認(rèn)為APP端的連接不可用,執(zhí)行釋放socket相關(guān)的操作:Server Thread st=clients. Get(i); St.Close()。Socket心跳周期檢測機(jī)制使得服務(wù)端能夠準(zhǔn)確地掌握APP端是否在線,保證了服務(wù)端和APP端的可靠連接。
為了更好地描述事件的內(nèi)容信息,該系統(tǒng)支持巡檢人員上傳視頻。視頻可以通過使用攝像頭重新拍攝也可以訪問本地相冊進(jìn)行選擇。視頻時(shí)長為1分鐘,大小不超過200 M。
首先在APP端創(chuàng)建視頻上傳類VideoUpload-Activity,在該類中預(yù)先定義視頻路徑private String path="",然后通過方法:.isCamera(true)判斷是否點(diǎn)擊了拍照按鈕,如果點(diǎn)擊了直接開始重新拍攝,如果沒有點(diǎn)擊則通過PictureMimeType.ofVideo()方法訪問本地相冊中的視頻并過濾掉圖片和音頻文件。選擇本地視頻的時(shí)候要通過if (file.Length()>200*1 024*1 024) {"文件大于200 M";break;語句來進(jìn)行視頻文件大小的校驗(yàn)。視頻選擇完成后,通過VideoView.start()方法可以播放視頻。
然后在服務(wù)端創(chuàng)建接口類uploadVideo,在接口類中通過file.isEmpty()判斷文件是否為空,分別使用String fileName=file.getOriginalFilename(); String suffixName=fileName. Substring (fileName.lastIndexOf("."));String filePath="E:\study"來獲取文件名、文件后綴名和設(shè)置文件存儲路徑。視頻會在服務(wù)端以命名規(guī)則:SimpleDateFormat date Format=new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss”)重新命名。服務(wù)端會檢測是否存在該視頻目錄:if (! dest. getParentFile().exists())。如果目錄已存在,則通過dest. GetParentFile (). mkdirs ()新建文件夾。最后使用file.transferTo(dest)將視頻文件保存到服務(wù)端。
事件的內(nèi)容包括圖片和視頻兩類信息,圖片和視頻均可以通過攝像頭重新拍攝或者訪問本地相冊進(jìn)行選擇。圖片數(shù)量至多為5張,視頻數(shù)量至多為1個(gè)。巡檢人員根據(jù)實(shí)際需要進(jìn)行上傳。在APP端新建事件添加類AddEvent,在該類中定義方法addContent用來添加事件的內(nèi)容信息。使用.open Gallery(PictureMimeType.ofAll())訪問本地相冊中的圖片和視頻信息。當(dāng)選擇的是圖片信息時(shí)會使用語句:if (pathList.size() == 6) {Toast.makeText(AddEvent. This, "5張", Toast.LENGTH_SHORT).show();return;}來校驗(yàn)圖片的數(shù)量。通過方法:. isCamera(true)判斷是否點(diǎn)擊了拍照按鈕。圖片和視頻添加完畢后,視頻顯示的是縮略圖樣式,內(nèi)容保存的是視頻路徑,然后循環(huán)上傳:if (pathList.size()>1) {for (int i=0; i 斷點(diǎn)續(xù)傳技術(shù)[12-14]指的是在下載或上傳時(shí),將下載或上傳任務(wù)(一個(gè)文件或一個(gè)壓縮包)人為地劃分為幾個(gè)部分,每一個(gè)部分采用一個(gè)線程進(jìn)行上傳或下載,如果遇到網(wǎng)絡(luò)故障,可以從已經(jīng)上傳或下載的部分開始繼續(xù)上傳下載未完成的部分,而不必從頭開始上傳下載。從而達(dá)到節(jié)省時(shí)間,提高速度的效果。 本系統(tǒng)使用OkHttp網(wǎng)絡(luò)框架實(shí)現(xiàn)斷點(diǎn)續(xù)傳技術(shù)。在APP端創(chuàng)建進(jìn)度下載Progress Downloader類,通過構(gòu)造方法client=getProgressClient()實(shí)現(xiàn)在下載、暫停后的繼續(xù)下載中復(fù)用同一個(gè)client對象。通過RandomAccessFile randomAccessFile=null方法來隨機(jī)訪問文件,指定斷點(diǎn)續(xù)傳的起始位置。創(chuàng)建進(jìn)度響應(yīng)ProgressResponseBody類來設(shè)置對外訪問的進(jìn)度監(jiān)聽。創(chuàng)建斷點(diǎn)續(xù)傳BreakpointContinuinglyActivity類,在該類中使用breakPoints=totalBytes來存儲totalBytes即斷點(diǎn)位置,并用方法progressBar.setMax((int)(ContentLength/1024))記錄文件的總長度。ContentLength表示斷點(diǎn)續(xù)傳后剩余部分的長度。通過進(jìn)度下載類Progress Downloader的復(fù)用client對象、進(jìn)度響應(yīng)類ProgressResponseBody的進(jìn)度監(jiān)聽、BreakpointContinuinglyActivity類的記錄斷點(diǎn)位置和progressBar.setMax方法記錄文件總長度,可以很好地實(shí)現(xiàn)傳輸過程中的斷點(diǎn)續(xù)傳功能。 APP首頁會實(shí)時(shí)顯示巡檢員用戶當(dāng)前所在位置(如圖4所示),并根據(jù)用戶的設(shè)定,每隔一定時(shí)間間隔刷新一次(默認(rèn)時(shí)間間隔為30秒)。巡檢員用戶點(diǎn)擊首頁中的“添加事件”按鈕來進(jìn)行事件的上傳。添加事件時(shí)需要選擇對應(yīng)的“事件類型”、添加相應(yīng)的“事件描述”和以拍照或錄像的方式添加“事件內(nèi)容”(如圖5所示)。 圖4 APP顯示巡檢員用戶當(dāng)前位置 圖5 巡檢員用戶在APP中添加事件 事件添加完畢后,巡檢員用戶點(diǎn)擊“發(fā)送事件”按鈕。在APP端和服務(wù)器端正常連接的條件下,事件信息將會上傳至服務(wù)器端并交由后臺管理系統(tǒng)處理。后臺管理系統(tǒng)在收到APP端巡檢員用戶上傳的事件信息后,會在地圖上顯示該用戶所在位置以及事件的信息。 事件信息包括用戶姓名、手機(jī)號、具體時(shí)間、GPS坐標(biāo)位置以及事件的圖片或視頻。 后臺管理系統(tǒng)管理員根據(jù)事件處理權(quán)限將APP端巡檢員用戶上傳的事件交由相關(guān)部門處理。相關(guān)部門在收到待交辦事件信息后會在規(guī)定時(shí)間內(nèi)做出反饋。APP端巡檢員用戶可以在APP端查看已經(jīng)上傳服務(wù)器并保存到本地的事件信息,并通過點(diǎn)擊事件來查看事件的詳情信息。詳情信息中包括了事件的記錄人、記錄人手機(jī)號、發(fā)生時(shí)間、發(fā)生地點(diǎn)、事件類型、事件內(nèi)容、事件的圖片或視頻以及事件的交辦反饋進(jìn)度。 后臺管理系統(tǒng)管理員可以實(shí)時(shí)查看當(dāng)前正在巡檢的人員數(shù)量和位置。對于每個(gè)巡檢員用戶,后臺管理員還可以查看其巡檢軌跡并回演該巡檢用戶在一段時(shí)間內(nèi)的巡檢軌跡。通過APP端事件信息的上傳、服務(wù)器端事件信息的接收和后臺管理系統(tǒng)對事件信息的處理并將處理結(jié)果反饋給APP端巡檢員用戶,社區(qū)的突發(fā)事件將形成閉環(huán)管理,從而提高社區(qū)管理工作的質(zhì)量和效率。 后臺管理系統(tǒng)管理員可以對任意時(shí)間段的巡檢人員巡檢路線以及發(fā)生的事件進(jìn)行備份,同時(shí)可以導(dǎo)入備份文件,進(jìn)行還原。 數(shù)據(jù)庫備份時(shí)間段的起止時(shí)間由后臺管理系統(tǒng)管理員根據(jù)需要選填,當(dāng)數(shù)據(jù)庫完成備份后,對應(yīng)時(shí)間段的數(shù)據(jù)也將會被刪除。 新冠肺炎疫情的防控經(jīng)驗(yàn)告訴我們,信息是基層治理的基礎(chǔ),社區(qū)信息治理體系重構(gòu)要以社區(qū)為重,樹立數(shù)據(jù)服務(wù)生活、技術(shù)服務(wù)群眾、安全服務(wù)發(fā)展的信息治理理念,取之于社區(qū)、用之于社區(qū),通過社區(qū)內(nèi)各個(gè)治理主體的協(xié)同參與和全環(huán)節(jié)的流程再造,構(gòu)建基層社會治理體系中的信息治理共同體[15]。基于Android的社區(qū)巡檢系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn),進(jìn)一步促進(jìn)了社區(qū)信息治理體系的建設(shè)與發(fā)展。 通過巡檢系統(tǒng)對社區(qū)的各項(xiàng)數(shù)據(jù)進(jìn)行收集,實(shí)現(xiàn)社區(qū)的全面監(jiān)測,大大降低了手工記錄的工作量,提高了工作效率。該系統(tǒng)目前已成功應(yīng)用于江蘇省徐州市銅山區(qū)漢王鎮(zhèn)的社區(qū)管理工作,取得了不錯(cuò)的效果,并且應(yīng)用會越來越廣泛。3.4 傳輸過程中的斷點(diǎn)續(xù)傳
4 APP的實(shí)用效果
4.1 事件信息的上傳
4.2 事件信息的管理
4.3 巡檢信息的管理
4.4 數(shù)據(jù)的備份和恢復(fù)
5 結(jié)束語