何承達 王初程 馬睿祺 馮芷菁 武漢大學計算機學院
隨著信息時代的高速發(fā)展,人們的出行越來越便利,然而如何選擇合適的出行路線卻一直是個難題。現(xiàn)有的導航與行程推薦APP都難以較好地支持本地交通與空鐵聯(lián)運的查詢,本系統(tǒng)旨在解決這一問題。通過民航航班、鐵路運輸、城市地鐵與城市公共交通等多種交通方式組合,考慮不同旅客需求,從時間最少、花費最少和換乘數(shù)最少三方面為旅客推薦合適的行程。本系統(tǒng)基于微信小程序開發(fā),跨平臺、交互友好,為旅客的出行提供便利。
(1)系統(tǒng)用戶,系統(tǒng)面向的用戶可以對兩地之間的路線進行搜索,對用戶自身的歷史行程記錄進行查看、刪除,對所選擇的地點的相關文章進行搜索、收藏,發(fā)布與地點相關的包含文本、圖片的文章。
(2)系統(tǒng)安全性,系統(tǒng)通過調(diào)用微信小程序接口獲取臨時登錄憑證code,并回傳到服務器。通過憑證進而換取用戶登錄態(tài)信息,包括用戶的唯一標識openid及本次登錄的會話密鑰session_key等,用戶數(shù)據(jù)的加解密通訊需要依賴會話密鑰完成。之后服務器可以根據(jù)用戶標識來生成自定義登錄態(tài),用于后續(xù)業(yè)務邏輯中前后端交互時識別用戶身份,從而提高網(wǎng)絡及用戶信息的安全性。
(3)系統(tǒng)數(shù)據(jù)儲存,系統(tǒng)的原始數(shù)據(jù)來源是騰訊地圖針對微信小程序的api,用戶信息數(shù)據(jù)存儲在后臺服務器,通過用戶的openid即可訪問用戶的歷史數(shù)據(jù)并上傳新的用戶數(shù)據(jù)。在微信小程序的一次使用過程中,搜索得到的路線數(shù)據(jù)將緩存在用戶設備中。
(1)數(shù)據(jù)結(jié)構(gòu),系統(tǒng)通過分層,將功能劃分為domain,service,web,config,util等多個層,充分將各功能中的不同部分進行解耦,同時有效的對不同功能進行了功能劃分,基于各層封裝實現(xiàn)了良好的安全性并使用RESTful風格的接口與前端進行交互,達到完全前后端分離的效果。
(2)數(shù)據(jù)操作,系統(tǒng)用戶進行的操作包含登錄認證,路線查詢,歷史行程管理和查看文章和發(fā)表文章。
(1)系統(tǒng)用戶管理 系統(tǒng)用戶可通過臨時登錄憑證code,在從服務器獲取到用戶的openid后可登錄本系統(tǒng)。
(2)路線搜索 系統(tǒng)用戶在登錄并授權相應權限后可進行路線搜索,系統(tǒng)用戶可輸入調(diào)整目的地,可從所調(diào)用的騰訊地圖api提供的位置信息以及路線中根據(jù)自身需求選擇路線,同時系統(tǒng)用戶還可收藏該路線。
(3)歷史路線管理 系統(tǒng)用戶可對歷史選擇的路線進行倒序查看以及刪除路線等操作。
(1)查看目的地文章 系統(tǒng)用戶進入微信小程序目的地界面,選擇目的地城市后,可查看推薦目的地相關文章?;蜉斎胛恼玛P鍵詞,在目的地相關范圍內(nèi)進行文章搜索。
(2)發(fā)布文章 系統(tǒng)用戶進入微信小程序目的地界面,點擊進入發(fā)布文章界面,發(fā)布的文章將以當前目的地界面所選定的城市為城市標簽,系統(tǒng)用戶可便攜文章標題、文章關鍵詞、上傳封面圖片、撰寫文章文本內(nèi)容并添加圖片,點擊上傳。
(1)采用SpringBoot框架實現(xiàn)后臺接口,實現(xiàn)RESTful接口對數(shù)據(jù)進行管理,并使用Redis實現(xiàn)并發(fā)處理。
(2)采用Spring Data JPA實現(xiàn)數(shù)據(jù)持久化,JPA基于非侵入式原則設計,因此可以很容易的和其它框架或者容器集成,且JPA擁有可媲美JDBC的查詢能力。
(3)MySql數(shù)據(jù)庫,MySQL是目前最主流的關系型數(shù)據(jù)庫管理系統(tǒng)之一。
(1)A-Star算法 A-Star算法為一種啟發(fā)式路線規(guī)劃算法,基于此算法可為用戶推薦路線信息。
(2)文章推薦 為了使路線規(guī)劃相關的推薦結(jié)果能夠更直觀的展現(xiàn)出來,與路線相關的推薦文章見圖4-1所示。
圖4-1 文章推薦結(jié)果
本系統(tǒng)基于微信小程序,采用前后端分離方式,接口遵循RESTful風格,直觀可讀性強。同時系統(tǒng)采用性能優(yōu)于常見的Dijkstra算法的啟發(fā)式路線規(guī)劃A-Star算法,為用戶出行需求推薦最優(yōu)的行程。