莊 富,張藝帆,林果園,3
(1.中國礦業大學 計算機科學與技術學院,江蘇 徐州 221116;2.礦山數字化教育部工程研究中心,江蘇 徐州 221116;3.南京大學軟件新技術國家重點實驗室,江蘇 南京 210093)
社區治理是國家治理體系中的基礎性工程,是國家治理體系中的關鍵一環[1]。近年來,國家提出“推進國家治理體系和治理能力現代化”的戰略任務,這給社區治理提出了挑戰。社區治理能力的高低關乎人民群眾的生活水平與質量,關乎百姓的歸屬感和幸福感。
突如其來的新冠肺炎疫情席卷全球,全國上下投入到了疫情防控工作中,這無疑對社區治理能力是一次重大考驗?;ヂ摼W的出現已經徹徹底底改變了人們的日常生活。利用互聯網,人們讓生活變得更加美好。為此,根據社區治理的實際需求開發出適用于基層社區的“社區巡檢系統”,將傳統的社區安全巡邏結合互聯網,實現突發事件信息的在線共享。不僅提高了突發事件信息的傳播速度,還能最大程度給相關管理部門在采取措施時提供更多的選擇,這一系統的應用具有深遠的意義。
基于Android的社區巡檢系統由基于Android的手機APP、服務端和后臺管理系統三部分組成(如圖1所示)。Android手機APP負責社區治安數據、基礎設施數據、消防安全數據、環境保護數據、文物保護數據和文化生活數據等的收集并實現對社區各類突發事件信息的巡查上報。服務端負責對APP傳輸來的數據進行封裝,并對數據進行處理。后臺管理系統則對系統進行權限、巡檢人員和巡檢人員上報的巡檢信息等方面的管理。

圖1 系統整體架構
系統采用C/S和B/S相結合的方式[2],服務端與APP之間采用C/S模式,巡檢人員可以使用手機APP上傳和查看突發事件信息。服務端與后臺管理系統之間采用B/S模式,把服務端封裝的數據顯示在管理系統中。
基于Android的社區巡檢系統APP以Android Studio作為開發平臺。Android Studio是谷歌推出的Android集成開發工具,相比Eclipse ADT開發環境,具有響應速度快、UI更漂亮,強大的UI編輯功能的優點[3]。APP與服務端通信采用http協議,使用Android網絡框架OkHttp[4]完成http協議的相關操作。OkHttp是目前安卓開發中最火熱的輕量級框架,由于共享Socket,減少了對服務器的請求次數,通過連接池,減少請求延遲,提高請求的效率。
使用OkHttp進行網絡請求的步驟分為以下四點[5]:(1)創建一個OkHttpClient實例;(2)創建一個Request實例。創建Request實例時,用戶可以根據需要發起Post請求或者Get請求。Post或者Get請求是HTTP協議中向后臺服務器發送數據的一種機制,是HTTP協議的一個組成部分;(3)使用OkHttpClient創建一個Call并執行,獲取一個Response對象。可以根據同步或者異步需求,分別采用execute()方法或者enqueue()方法,實現不同的訪問策略;(4)對Response進行相關操作。通過以上四個步驟,一個應用可以完成各種情況下的網絡訪問。
服務端采用IntelliJ IDEA集成開發環境和SSM[6](Spring+SpringMVC+MyBatis)框架集,數據庫采用MySQL數據庫系統。IntelliJ IDEA在智能代碼助手、代碼自動提示、重構、J2EE支持、各類版本工具(git、svn等)、JUnit、CVS整合、代碼分析、創新的GUI設計等方面被公認為是最好的java開發工具[7]。
Spring就像是整個項目中裝配bean的大工廠,在配置文件中可以指定使用特定的參數去調用實體類的構造方法來實例化對象。SpringMVC在項目中攔截用戶請求,它的核心Servlet即Dispatcher Servlet承擔中介或是前臺這樣的職責,將用戶請求通過Handler Mapping去匹配Controller,Controller就是具體對應請求所執行的操作。MyBatis是對JDBC的封裝,通過配置文件關聯到各實體類的Mapper文件,Mapper文件中配置了每個類對數據庫所需進行的SQL語句映射。在每次與數據庫交互時,通過SQLSessionFactory拿到一個SQLSession,再執行SQL命令[5]。
基于Android的社區巡檢系統APP由地圖瀏覽、巡檢上報、GPS、查看中心和設置中心五個模塊組成,每個模塊下有對應的若干子模塊(如圖2所示)。

圖2 社區巡檢系統APP的基本功能
地圖瀏覽模塊包括地圖操作和圖層控制兩個子模塊。地圖操作是指對首頁用戶地圖進行平移和縮放;圖層控制是指對地圖進行顯隱控制。巡檢上報模塊包括表單采集、圖片采集、視頻采集和數據上報四個子模塊。表單采集包括對事件類型信息的采集和事件描述信息的采集。事件類型預先定義了50種,由用戶通過點擊下拉列表進行選擇。
事件描述由用戶在文本框中手動添加,內容不超過100個漢字;圖片采集和視頻采集均可以通過攝像頭進行新增也可以通過訪問本地相冊進行選擇,圖片數量不超過5張,視頻數量為1個,視頻大小不超過200 M,時長不超過1分鐘;數據上報分為成功和失敗兩種情況,成功情況下事件的類型、描述和內容等信息會上傳至服務器端,而失敗情況下事件的信息會暫存到本地,待網絡恢復后重新進行上傳。GPS模塊包括實時定位和巡檢軌跡上報兩個子模塊。實時定位是指將巡檢人員當前所在位置實時顯示在用戶地圖中并每隔一定時間間隔刷新一次,該時間間隔由用戶自己設置,默認值為30 s;巡檢軌跡上報是指每隔一定時間間隔記錄下巡檢人員實時位置并上傳服務器端,由后臺管理系統畫出巡檢軌跡[8-11]。查看中心模塊包括查看列表、查看詳情和刪除事件三個子模塊。查看列表包括查看事件的時間、類型和經緯度等信息;查看詳情包括查看事件的時間、類型、描述、經緯度和圖片視頻等信息;刪除事件執行的是將已保存到本地的事件信息進行刪除的操作。
設置中心包括設置用戶昵稱、設置服務器IP地址、設置定位時間間隔和設置照片質量四個子模塊。設置用戶昵稱是巡檢人員在系統中修改自己昵稱的功能,昵稱不作為巡檢人員身份的標識,巡檢人員可以多次修改自己的昵稱;正確連入服務器是成功上傳事件的前提,用戶首先要確保手機與服務器處在同一局域網下,然后再設置服務器IP地址;設置定位時間間隔是對巡檢人員進行實時定位以及巡檢軌跡上報的關鍵,時間間隔由巡檢人員自己設置,單位為“秒/s”,默認值為30 s;設置照片質量設置的是巡檢人員在拍攝事件圖片時圖片的質量,質量分為高、中、低三個等級,默認值為高。
為了保證服務端與APP端的正常連接,使得服務端能夠及時知道APP端何時掉線,該系統設計使用了Socket心跳周期檢測機制(如圖3所示)。

圖3 Socket心跳周期檢測機制
首先在服務端建立定時器并設置定時器的時間為60秒,定時發送心跳包給到APP端:timer=new Timer();Beat beat=new Beat(clients);timer. Schedule (beat, 1 000*60,beat.Interval);APP端收到心跳包后,立即發送心跳包給服務端,服務端收到APP端發來的心跳包后確認APP端的連接可用,不執行釋放socket相關的操作。當服務端接收到APP端發送來的數據時,心跳丟失計數清零:beatMissNum=0;如果服務端沒在規定的時間間隔即60秒內收到APP端響應的心跳包,服務端就認為APP端的連接不可用,執行釋放socket相關的操作:Server Thread st=clients. Get(i); St.Close()。Socket心跳周期檢測機制使得服務端能夠準確地掌握APP端是否在線,保證了服務端和APP端的可靠連接。
為了更好地描述事件的內容信息,該系統支持巡檢人員上傳視頻。視頻可以通過使用攝像頭重新拍攝也可以訪問本地相冊進行選擇。視頻時長為1分鐘,大小不超過200 M。
首先在APP端創建視頻上傳類VideoUpload-Activity,在該類中預先定義視頻路徑private String path="",然后通過方法:.isCamera(true)判斷是否點擊了拍照按鈕,如果點擊了直接開始重新拍攝,如果沒有點擊則通過PictureMimeType.ofVideo()方法訪問本地相冊中的視頻并過濾掉圖片和音頻文件。選擇本地視頻的時候要通過if (file.Length()>200*1 024*1 024) {"文件大于200 M";break;語句來進行視頻文件大小的校驗。視頻選擇完成后,通過VideoView.start()方法可以播放視頻。
然后在服務端創建接口類uploadVideo,在接口類中通過file.isEmpty()判斷文件是否為空,分別使用String fileName=file.getOriginalFilename(); String suffixName=fileName. Substring (fileName.lastIndexOf("."));String filePath="E:\study"來獲取文件名、文件后綴名和設置文件存儲路徑。視頻會在服務端以命名規則:SimpleDateFormat date Format=new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss”)重新命名。服務端會檢測是否存在該視頻目錄:if (! dest. getParentFile().exists())。如果目錄已存在,則通過dest. GetParentFile (). mkdirs ()新建文件夾。最后使用file.transferTo(dest)將視頻文件保存到服務端。
事件的內容包括圖片和視頻兩類信息,圖片和視頻均可以通過攝像頭重新拍攝或者訪問本地相冊進行選擇。圖片數量至多為5張,視頻數量至多為1個。巡檢人員根據實際需要進行上傳。在APP端新建事件添加類AddEvent,在該類中定義方法addContent用來添加事件的內容信息。使用.open Gallery(PictureMimeType.ofAll())訪問本地相冊中的圖片和視頻信息。當選擇的是圖片信息時會使用語句:if (pathList.size() == 6) {Toast.makeText(AddEvent. This, "5張", Toast.LENGTH_SHORT).show();return;}來校驗圖片的數量。通過方法:. isCamera(true)判斷是否點擊了拍照按鈕。圖片和視頻添加完畢后,視頻顯示的是縮略圖樣式,內容保存的是視頻路徑,然后循環上傳:if (pathList.size()>1) {for (int i=0; i 斷點續傳技術[12-14]指的是在下載或上傳時,將下載或上傳任務(一個文件或一個壓縮包)人為地劃分為幾個部分,每一個部分采用一個線程進行上傳或下載,如果遇到網絡故障,可以從已經上傳或下載的部分開始繼續上傳下載未完成的部分,而不必從頭開始上傳下載。從而達到節省時間,提高速度的效果。 本系統使用OkHttp網絡框架實現斷點續傳技術。在APP端創建進度下載Progress Downloader類,通過構造方法client=getProgressClient()實現在下載、暫停后的繼續下載中復用同一個client對象。通過RandomAccessFile randomAccessFile=null方法來隨機訪問文件,指定斷點續傳的起始位置。創建進度響應ProgressResponseBody類來設置對外訪問的進度監聽。創建斷點續傳BreakpointContinuinglyActivity類,在該類中使用breakPoints=totalBytes來存儲totalBytes即斷點位置,并用方法progressBar.setMax((int)(ContentLength/1024))記錄文件的總長度。ContentLength表示斷點續傳后剩余部分的長度。通過進度下載類Progress Downloader的復用client對象、進度響應類ProgressResponseBody的進度監聽、BreakpointContinuinglyActivity類的記錄斷點位置和progressBar.setMax方法記錄文件總長度,可以很好地實現傳輸過程中的斷點續傳功能。 APP首頁會實時顯示巡檢員用戶當前所在位置(如圖4所示),并根據用戶的設定,每隔一定時間間隔刷新一次(默認時間間隔為30秒)。巡檢員用戶點擊首頁中的“添加事件”按鈕來進行事件的上傳。添加事件時需要選擇對應的“事件類型”、添加相應的“事件描述”和以拍照或錄像的方式添加“事件內容”(如圖5所示)。 圖4 APP顯示巡檢員用戶當前位置 圖5 巡檢員用戶在APP中添加事件 事件添加完畢后,巡檢員用戶點擊“發送事件”按鈕。在APP端和服務器端正常連接的條件下,事件信息將會上傳至服務器端并交由后臺管理系統處理。后臺管理系統在收到APP端巡檢員用戶上傳的事件信息后,會在地圖上顯示該用戶所在位置以及事件的信息。 事件信息包括用戶姓名、手機號、具體時間、GPS坐標位置以及事件的圖片或視頻。 后臺管理系統管理員根據事件處理權限將APP端巡檢員用戶上傳的事件交由相關部門處理。相關部門在收到待交辦事件信息后會在規定時間內做出反饋。APP端巡檢員用戶可以在APP端查看已經上傳服務器并保存到本地的事件信息,并通過點擊事件來查看事件的詳情信息。詳情信息中包括了事件的記錄人、記錄人手機號、發生時間、發生地點、事件類型、事件內容、事件的圖片或視頻以及事件的交辦反饋進度。 后臺管理系統管理員可以實時查看當前正在巡檢的人員數量和位置。對于每個巡檢員用戶,后臺管理員還可以查看其巡檢軌跡并回演該巡檢用戶在一段時間內的巡檢軌跡。通過APP端事件信息的上傳、服務器端事件信息的接收和后臺管理系統對事件信息的處理并將處理結果反饋給APP端巡檢員用戶,社區的突發事件將形成閉環管理,從而提高社區管理工作的質量和效率。 后臺管理系統管理員可以對任意時間段的巡檢人員巡檢路線以及發生的事件進行備份,同時可以導入備份文件,進行還原。 數據庫備份時間段的起止時間由后臺管理系統管理員根據需要選填,當數據庫完成備份后,對應時間段的數據也將會被刪除。 新冠肺炎疫情的防控經驗告訴我們,信息是基層治理的基礎,社區信息治理體系重構要以社區為重,樹立數據服務生活、技術服務群眾、安全服務發展的信息治理理念,取之于社區、用之于社區,通過社區內各個治理主體的協同參與和全環節的流程再造,構建基層社會治理體系中的信息治理共同體[15]。基于Android的社區巡檢系統的設計與實現,進一步促進了社區信息治理體系的建設與發展。 通過巡檢系統對社區的各項數據進行收集,實現社區的全面監測,大大降低了手工記錄的工作量,提高了工作效率。該系統目前已成功應用于江蘇省徐州市銅山區漢王鎮的社區管理工作,取得了不錯的效果,并且應用會越來越廣泛。3.4 傳輸過程中的斷點續傳
4 APP的實用效果
4.1 事件信息的上傳


4.2 事件信息的管理
4.3 巡檢信息的管理
4.4 數據的備份和恢復
5 結束語