白 天, 郭書(shū)宇, 趙 為, 邱宇東, 張 杰
(吉林大學(xué) a. 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院; b. 教育部符號(hào)計(jì)算與知識(shí)工程重點(diǎn)實(shí)驗(yàn)室, c. 軟件學(xué)院, 長(zhǎng)春 130012)
近年來(lái), 隨計(jì)算機(jī)互聯(lián)網(wǎng)技術(shù)的快速發(fā)展, 各行各業(yè)都已經(jīng)融入計(jì)算機(jī)互聯(lián)網(wǎng)技術(shù), 推進(jìn)“互聯(lián)網(wǎng)+政務(wù)服務(wù)”工作也成為了黨中央、 國(guó)務(wù)院做出的重大決策部署。當(dāng)前各地區(qū)各部門(mén)積極推進(jìn)網(wǎng)上政務(wù)服務(wù)平臺(tái)建設(shè), 開(kāi)展網(wǎng)上辦事, 有效優(yōu)化了政府服務(wù)、 方便了企業(yè)和群眾, 為大眾創(chuàng)業(yè)、 萬(wàn)眾創(chuàng)新?tīng)I(yíng)造了良好環(huán)境[1]。傳統(tǒng)的市政設(shè)施巡檢方式和信息管理亟待轉(zhuǎn)型。在傳統(tǒng)的市政工程模式中, 沒(méi)有系統(tǒng)的工作流程, 巡檢員使用自己便利的方式進(jìn)行信息交流溝通和數(shù)據(jù)傳遞, 如打電話、 發(fā)短信等, 導(dǎo)致巡檢過(guò)程中問(wèn)題上報(bào)信息不準(zhǔn)確、 不及時(shí), 數(shù)據(jù)存儲(chǔ)方式陳舊, 不利于后期管理的信息統(tǒng)一處理[2,3]; 后臺(tái)工作流程復(fù)雜, 沒(méi)有規(guī)定的任務(wù)派發(fā)、 打印單據(jù)機(jī)制, 直接導(dǎo)致了工作效率的低下。筆者提出的“智慧”市政信息管理系統(tǒng), 利用Android設(shè)備的便攜性、 移動(dòng)性, 統(tǒng)一問(wèn)題上報(bào)的路徑, 使用圖像信息解決一些無(wú)法用文字描述信息的毛病, 并結(jié)合定位信息增強(qiáng)了信息的準(zhǔn)確性, 便于維修員的快速查找和前往目的地進(jìn)行維修[4]; 管理員通過(guò)此系統(tǒng)瀏覽Web網(wǎng)頁(yè)能直接對(duì)所有工程信息進(jìn)行查看和管理, 能直接對(duì)每個(gè)任務(wù)進(jìn)行派發(fā)和打印單據(jù), 極大簡(jiǎn)化了工作流程[5,6]。另外, 此系統(tǒng)還包含微信公眾平臺(tái)使市民參與到市政設(shè)施的維護(hù)工作, 市民們可隨時(shí)將身邊的問(wèn)題上報(bào)到系統(tǒng)中, 為市民發(fā)現(xiàn)問(wèn)題提供了一個(gè)信息出口。
系統(tǒng)主要由移動(dòng)端, 瀏覽器端, 服務(wù)器端和微信公眾號(hào)4個(gè)部分組成[7,8]。
移動(dòng)設(shè)備以Android操作系統(tǒng)核心, 基于Java編程。工作流程如下: 進(jìn)入移動(dòng)設(shè)備app, 首頁(yè)地圖會(huì)自動(dòng)獲取GPS(Global Positioning System)信息, 選擇問(wèn)題上傳, 表單會(huì)自動(dòng)填充地理信息和經(jīng)緯度, 點(diǎn)擊拍照添加圖片信息, 另外需手動(dòng)選擇問(wèn)題類(lèi)型和輸入附加的問(wèn)題描述等, 點(diǎn)擊上傳, 一個(gè)完整的工程信息會(huì)上傳到后臺(tái)服務(wù)器; 在工程列表界面, 點(diǎn)擊每個(gè)工程可查看對(duì)應(yīng)的詳細(xì)信息; 在某個(gè)工程維修完成后, 需在移動(dòng)設(shè)備端對(duì)其進(jìn)行維修后的上傳, 方法大致和發(fā)現(xiàn)問(wèn)題上傳類(lèi)似[9]。
瀏覽器端主要使用JSP(Java Server Pages)、 html5、 JavaScript等技術(shù)開(kāi)發(fā), 可在瀏覽器上查看更詳細(xì)的工程信息, 并可以對(duì)每個(gè)工程指派維修人員; 另外還有打印工程對(duì)應(yīng)的流水單和任務(wù)派發(fā)單的功能。后臺(tái)服務(wù)器端用于處理移動(dòng)設(shè)備端上傳信息, 將信息存儲(chǔ)到數(shù)據(jù)庫(kù)等, 另外處理瀏覽器端的業(yè)務(wù)邏輯。微信公眾號(hào)用于市民發(fā)現(xiàn)問(wèn)題上報(bào)[10]。系統(tǒng)總體流程圖如圖1所示。
圖1 系統(tǒng)主要功能框圖Fig.1 The diagram of the system main functions
本系統(tǒng)采用的是GPS和Network定位的結(jié)合[11]。GPS, 需要GPS硬件支持, 直接和衛(wèi)星交互獲取當(dāng)前經(jīng)緯度, 目前大部分的智能手機(jī)都支持GPS模塊。通過(guò)GPS方式準(zhǔn)確度是最高的, GPS利用衛(wèi)星通信的通道, 在沒(méi)有網(wǎng)絡(luò)連接的情況下也能用, 不過(guò)GPS定位也有相應(yīng)的缺點(diǎn): 1) 耗電高; 2) 從GPS模塊啟動(dòng)到獲取第一次定位數(shù)據(jù), 可能需要比較長(zhǎng)的時(shí)間; 3) 室內(nèi)使用效率低。Network定位: 包括基站定位和wi-fi定位。利用手機(jī)基站信息、 wi-fi信息等發(fā)送到指定的位置服務(wù)器; 位置服務(wù)器接收后, 直接返回粗略的經(jīng)緯度和精度信息。對(duì)應(yīng)的provider字段是LocationManager.NETWORK_PROVIDER, 是一種低精度, 低耗電的初略定位方式。主要流程如圖2所示。
GPS定位詳細(xì)步驟如下。
1) 調(diào)用函數(shù)獲取一個(gè)LocationManager實(shí)例。
2) 調(diào)用getLastKnowLocation()方法獲取當(dāng)前的位置信息, 返回的Location對(duì)象中, 包含了可確定位置的信息, 如經(jīng)度、 緯度和速度等。
3) 設(shè)定監(jiān)聽(tīng)位置變化: locationManager.requestLocationUpdates(provider,2000,10,locationListener); 其中第1個(gè)參數(shù)是定位的方法, GPS定位或網(wǎng)絡(luò)定位; 第2個(gè)參數(shù)是產(chǎn)生位置改變事件的時(shí)間間隔, 單位為μs; 第3個(gè)參數(shù)是距離條件, 單位是m; 第4個(gè)參數(shù)是回調(diào)函數(shù), 在滿足條件后的位置改變事件的處理函數(shù)。
4) 在AndroidManifest.xml文件中加入用戶許可。
Network定位詳細(xì)步驟如下。
1) 向百度獲取網(wǎng)絡(luò)定位服務(wù)apk(AndroidPackage), 并集成至system/app目錄下, 有時(shí)需同步獲取其運(yùn)行時(shí)需要的庫(kù), 并集成與指定目錄, 一般是system/lib目錄下, 其包名為: com.amap.android.location。
2) 配置Config.xml文件(frameworks/base/core/res/res/values)。
3) 網(wǎng)絡(luò)服務(wù)binder的邏輯在LocationManagerService.java中l(wèi)oadProviderLocked方法中。
定位界面如圖3所示。
圖2 定位實(shí)現(xiàn)流程圖 圖3 定位地圖界面 Fig.2 Positioning flow chart Fig.3 Location map interface
該系統(tǒng)的拍照功能直接通過(guò)調(diào)用移動(dòng)設(shè)備的相機(jī)功能實(shí)現(xiàn)。內(nèi)部類(lèi)android.view.SurfaceHolder提供了SurfaceView, 這個(gè)類(lèi)可以實(shí)現(xiàn)照相功能, SurfaceView還可以進(jìn)行視頻音頻的播放。在該類(lèi)的基礎(chǔ)上, 通過(guò)Camera類(lèi)提供的內(nèi)部方法, 對(duì)相機(jī)的參數(shù)進(jìn)行一些相應(yīng)的設(shè)置, 以達(dá)到拍照時(shí)想要的效果, Camera內(nèi)部還定義了若干個(gè)接口完成一些相應(yīng)的操作。主要流程如圖4所示。拍照功能詳細(xì)步驟如下。
1) 調(diào)用Camera的open方法打開(kāi)攝像頭。
2) 調(diào)用getParammeters獲取相機(jī)的參數(shù): Parameters param=MainActivity.this.camera.getParameters();
3) 調(diào)用setParammeters將設(shè)置的參數(shù)傳遞到相機(jī): camera.setParameters(param);
4) 在拍照的時(shí)候必然需要先進(jìn)行預(yù)覽全景, 在預(yù)覽的某一時(shí)刻進(jìn)行拍照。主要代碼如下。
MainActivity.this.camera.setPreviewDisplay(MainActivity.this.sufh);
MainActivity.this.camera.startPreview();
5) 圖片保存。拍照界面如圖5所示。
圖4 拍照功能實(shí)現(xiàn)流程圖 圖5 拍照界面 Fig.4 Camera function flow chart Fig.5 Camera interface
2.3.1 服務(wù)器搭建
該系統(tǒng)的后臺(tái)服務(wù)器使用Apache的Tomcat服務(wù)器, 使用JavaEE中的SSH框架進(jìn)行開(kāi)發(fā)。Tomcat由Apache、 Sun和其他一些公司及個(gè)人共同開(kāi)發(fā)而成, 具有處理HTML頁(yè)面的功能, 另外它還提供Servlet和JSP(Java Server Pages)容器, 已經(jīng)成為目前比較流行的Web 應(yīng)用服務(wù)器。SSH在J2EE項(xiàng)目中表示了3種框架, 即Spring+Struts+Hibernate。Struts對(duì)經(jīng)典MVC(Model View Controller)模式提供了對(duì)應(yīng)的組件。Spring是一個(gè)輕量級(jí)的控制反轉(zhuǎn)(IoC)和面向切面(AOP)的容器框架, 用于解決開(kāi)發(fā)過(guò)程中的一些復(fù)雜性問(wèn)題。Hibernate是一個(gè)對(duì)象關(guān)系映射框架, 用于完成數(shù)據(jù)的持久化。
Tomcat服務(wù)器搭建環(huán)境步驟如下。
1) 前期Java環(huán)境。
2) 在Tomcat官網(wǎng)找到對(duì)應(yīng)版本的下載文件。
3) 添加系統(tǒng)環(huán)境變量, 變量名: Path; 變量值: %CATALINA_HOME%in等。其中CATALINA_HOME為T(mén)omcat安裝地址。
2.3.2 移動(dòng)端工程上傳
Android SDK附帶了Apache的HttpClient API。Apache HttpClient是一個(gè)完善的HTTP客戶端, 它提供了對(duì)HTTP協(xié)議的全面支持, 可使用HTTP GET和POST進(jìn)行訪問(wèn)。具體步驟如下。
1) 配置Android中的單元測(cè)試。所有配置信息均在AndroidManifest.xml中完成。
2) 獲取Android上下文環(huán)境。繼承android.test.AndroidTestCase類(lèi)。
3) 使用了HttpPost, URL后面并沒(méi)有附帶參數(shù)信息, 參數(shù)信息被包裝成一個(gè)由NameValuePair類(lèi)型組成的集合的形式, 然后經(jīng)過(guò)UrlEncodedFormEntity處理后調(diào)用HttpPost的setEntity方法進(jìn)行參數(shù)設(shè)置, 最后由HttpClient執(zhí)行。
4) 多部件POST請(qǐng)求。需用到一個(gè)HttpMime開(kāi)源項(xiàng)目, 該組件是專(zhuān)門(mén)處理與MIME類(lèi)型有關(guān)的操作, 需把其中的HttpMime.jar包放到項(xiàng)目中。
5) 服務(wù)端使用apache開(kāi)源項(xiàng)目FileUpload進(jìn)行處理, 所以需要commons-fileupload和commons-io這兩個(gè)項(xiàng)目的jar包。
6) 在系統(tǒng)啟動(dòng)時(shí)就創(chuàng)建一個(gè)HttpClient; 重寫(xiě)了onLowMemory()和onTerminate()方法, 在內(nèi)存不足和應(yīng)用結(jié)束時(shí)關(guān)閉連接, 釋放資源。當(dāng)實(shí)例化DefaultHttpClient時(shí), 傳入一個(gè)ClientConnectionManager實(shí)例, 負(fù)責(zé)管理HttpClient的HTTP連接。
該系統(tǒng)采用的是MySQL數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)的存儲(chǔ)。MySQL是一個(gè)關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng), 是目前最流行的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)之一。系統(tǒng)最關(guān)鍵的一張表是工程信息表, 該表中的字段對(duì)應(yīng)了移動(dòng)設(shè)備端上傳問(wèn)題的各種信息和維修完成上傳的信息等。建表的SQL語(yǔ)言如下。
CREATE TABLE ‘project_inf’(//工程表‘pro_id’int(11) NOT NULL auto_increment,‘pro_address’ varchar(255) default NULL,‘findpic’ varchar(255) default NULL,‘find_time’ datetime default NULL,‘findvideo’ varchar(255) default NULL,‘pro_finder’ varchar(255) default NULL,‘pro_lat’ decimal(17,7) default NULL,‘pro_lon’ decimal(17,7) default NULL,‘pro_state’ int(11) default NULL,‘project_material’ varchar(255) default NULL,‘service_desc’ varchar(255) default NULL,‘service_pic’ varchar(255) default NULL,‘service_time’ datetime default NULL,‘service_video’ varchar(255) default NULL,‘pro_desc’ varchar(255) default NULL,‘pro_type’ varchar(255) default NULL,‘emp_id’ int(11) default NULL,PRIMARY KEY(‘pro_id’),KEY ‘FKC7FFDDBB2C2C58AA’ (‘emp_id’),
CONSTRAINT ‘FKC7FFDDBB2C2C58AA’ FOREIGN KEY (‘emp_id’) REFERENCES ‘employee_inf’ (‘emp_id’)
) ENGINE=InnoDB DEFAULT CHARSET=gbk
瀏覽器端的設(shè)計(jì)主要由后臺(tái)服務(wù)器中的業(yè)務(wù)邏輯和前端網(wǎng)頁(yè)開(kāi)發(fā)組成。后臺(tái)服務(wù)器主要由實(shí)體類(lèi)層、 DAO層、 Service層、 Action層等組成。業(yè)務(wù)邏輯層體現(xiàn)在Service層代碼中, 具體實(shí)現(xiàn)方法在DAO層中實(shí)現(xiàn), Action層為具體的各個(gè)功能實(shí)現(xiàn), 前端網(wǎng)頁(yè)的跳轉(zhuǎn)由配置文件Struts.xml設(shè)定。前端網(wǎng)頁(yè)的功能主要有: 工程列表的查看、 每個(gè)工程對(duì)應(yīng)詳細(xì)信息、 任務(wù)派發(fā)、 工程對(duì)應(yīng)流水單和任務(wù)單的打印。工程詳細(xì)信息界面和任務(wù)單界面如圖6和圖7所示。
圖6 工程詳細(xì)信息界面 圖7 任務(wù)單界面 Fig.6 Engineering details interface Fig.7 Task list interface
圖8 CPU使用率 Fig.8 CPU usage
本系統(tǒng)使用的是Android Device Monitor工具。該工具集成在Android Studio中, 使用該工具主要是測(cè)試程序中線程的狀態(tài)和使用情況, 切換到Threads選項(xiàng)卡后就可看到當(dāng)前程序運(yùn)行時(shí)的狀態(tài)、 耗時(shí)和累計(jì)使用時(shí)間。經(jīng)過(guò)測(cè)試, 在內(nèi)存為2 GByte, CPU(Model View Controller)是驍龍808的手機(jī)上內(nèi)存消耗與UI渲染沒(méi)有超過(guò)性能標(biāo)準(zhǔn)。所有的線程都是用于異步網(wǎng)絡(luò)操作, 由OkHttp框架封裝的比較穩(wěn)定。如圖8所示, CPU利用率一直維持在約20%下, 占用資源少, 實(shí)用性高。
功能應(yīng)用測(cè)試: 登錄界面如圖9a所示, 用戶使用在瀏覽器端注冊(cè)了的賬號(hào)登錄, 登錄后進(jìn)入到主界面菜單。選擇“發(fā)現(xiàn)”按鈕進(jìn)行工程上報(bào), 如圖9b所示。當(dāng)某個(gè)用戶上傳一個(gè)問(wèn)題后, 其他用戶可收到推送消息。如果一個(gè)工程在被指派維修人員完成后, 需進(jìn)行維修后的上傳, 和問(wèn)題上報(bào)相似。在工程列表欄可以看到所有的工程列表, 如圖9c所示。在聯(lián)系人欄, 有模糊搜索功能, 可看到市政公司所有員工的電話信息等, 可進(jìn)行直接撥號(hào)。在用戶信息界面, 可看到自己的個(gè)人信息等。設(shè)置界面, 有退出登錄, 清除緩存等功能。
a 登錄界面 b 上傳界面 c 工程列表界面圖9 系統(tǒng)測(cè)試界面和結(jié)果Fig.9 The system test interface and results
在系統(tǒng)實(shí)現(xiàn)完成后, 經(jīng)某市政公司的實(shí)際應(yīng)用半年, 已產(chǎn)生幾百條工程數(shù)據(jù), 實(shí)現(xiàn)了工程信息的統(tǒng)一化管理, 極大地提高了工作效率。工程列表如圖10所示。
圖10 工程列表Fig.10 Engineering list
為更好地滿足市政工程這一傳統(tǒng)行業(yè)與互聯(lián)網(wǎng)行業(yè)的結(jié)合, 設(shè)計(jì)了用于市政設(shè)施問(wèn)題上報(bào)和維修的移動(dòng)設(shè)備和后臺(tái)信息管理的瀏覽器端進(jìn)行顯示與統(tǒng)一的系統(tǒng), 實(shí)現(xiàn)了問(wèn)題的及時(shí)上報(bào)、 后臺(tái)數(shù)據(jù)精確長(zhǎng)久存儲(chǔ)、 瀏覽器端多元化展示等功能。測(cè)試結(jié)果表明, 此系統(tǒng)采用當(dāng)下流行的移動(dòng)設(shè)備, 優(yōu)勢(shì)明顯且系統(tǒng)占用資源較少, 擁有較強(qiáng)的移動(dòng)性和穩(wěn)定性, 可簡(jiǎn)化市政公司的工作流程和提高工作效率, 市場(chǎng)應(yīng)用價(jià)值高。