趙升枝 仲梁維
摘 要:隨著信息技術、網絡通信及存儲硬件設施的飛速發展,使得社會資源的共享成本越來越低,商業化的實現成為一種可能。因此,在出行時,存在一個可以短期內存儲隨身物品的共享存儲柜無疑會給用戶帶來極大便利。鑒于當前情況,采用Java企業級框架搭建一個基于微信公眾號的共享存儲柜平臺。系統采用Eclipse開發工具,MySQL數據庫,Spring Boot框架進行搭建。系統經過測試使用,運行穩定,實現了存儲柜的共享理念,提高了用戶出行的便利性。
關鍵詞:共享;存儲柜;微信公眾號;Java;Spring Boot
中圖分類號:TP399 文獻標識碼:A
Abstract:With the rapid development of information technology,network communication and storage hardware,sharing social resources becomes a possibility.Therefore,if there is a shared storage cabinet that can store objects for a short time when traveling,it will undoubtedly bring great convenience to users.In view of the current situation,the Java enterprise-level framework is adopted to build a shared storage platform based on WeChat public platform.The system is built with Eclipse development tools,MySQL database and Spring Boot framework.The system has been tested and used,running steadily,realizing the sharing concept of storage cabinets,and improving the convenience of user trips.
Keywords:share;storage cabinet;WeChat public platform;Java;Spring Boot
1 引言(Introduction)
近幾年,隨著計算機技術的飛速發展,及硬件設備的完善,可以處理及保存的的數據越來越多,使得資源共享成為一個可能,并且成為了一種必然趨勢。資源的共享可以使社會資源實現統一調配,使得社會資源得到更加高效、更加細粒度的利用,并且使得社會生活更加便利。
在一些人口密集、或用戶停留時間比較長的地方,比如地鐵口、大型的商場門口、公園、游樂園附近、步行街口,或者在小區、公司等常住位置,具有很強的臨時存儲需求。共享的存儲柜[1],可以作為快遞柜使用,節省快遞等待時間成本,也可以為游客、居民、行人提供臨時存放物品的服務。節省了大量人力成本,具有廣泛的運用場景。
本文采用B/S服務,通過用Java微服務架構Spring Boot[2]搭建后臺服務系統,實現存儲柜共享平臺的控制、管理、運營。采用MySQL數據庫[3]作為數據本地持久化工具。通過微信公眾號作為流量入口,為用戶提供便利的使用入口實現存儲柜的共享。
2 共享存儲柜平臺技術分析(Technical analysis of shared storage cabinet platform)
2.1 后臺服務系統技術分析
在基于web開發的后臺服務系統中,Java語言和Linux[4]系統一直是最廣泛最穩定的開發
語言和運行服務器的組合,在運行效率和安全性方面有著與生俱來的優勢。在存儲柜共享使用中,面臨高并發、高訪問量等嚴苛的性能及安全要求,Java企業級系統框架則是解決此類問題的優先解。
Spring Boot是基于Spring的Java微服務框架,適合敏捷開發。首先Spring Boot利用Maven[5]實現依賴管理,將系統依賴Jar包通過配置式導入。同時由于該框架依然具有Spring非入侵式編程、控制反轉的特點,使系統的可移植性、可復用性、擴展性得到極大提升。
2.2 流量入口技術分析
現如今生活節奏加快,使得便捷、快速的應用共容易得到青睞。因此用微信公眾號平臺[6]作為流量入口。一方面微信有著龐大的用戶基數,可以更加快速進行推廣,積累用戶;另一方面基于微信用戶系統實現平臺用戶識別,盡可能簡化用戶操作流程,提高用戶體驗度。
3 共享存儲柜平臺整體設計(The overall design of the shared storage cabinet platform)
3.1 流程設計
后臺服務通過微信公眾號作為用戶標識,進行業務處理。核心流程分為存儲流程與取件流程。
存儲過程中當前用戶在客戶終端選取存儲柜體類型,生成包含終端設備號、用戶手機號、柜體信息的二維碼。用戶掃碼支付,服務器處理支付信息,當支付成功時向客戶終端推送消息,打開柜門,用戶存放物品。
在取件過程中,客戶終端機生成帶設備號信息的取件二維碼。用戶掃碼訪問服務器,服務器查詢當前設備當前用戶的使用信息,向客戶端推送開柜信息,打開柜門,用戶取出物品。
3.2 功能模塊設計
平臺系統共包括二維碼模塊、訂單模塊、柜體分配模塊、支付模塊、異常檢測模塊、報修模塊、消息推送模塊等功能模塊。根據此核心模塊提供相關API接口實現客戶終端機服務。整個后臺服務系統部署在阿里云服務器上。同時系統采用MAVEN[4]進行依賴管理,使項目管理模塊化便于項目的搭建及擴展。以下簡述各模塊核心功能。
(1)二維碼模塊。用于負責根據用戶訂單信息動態生成包含設備、用戶信息、所選柜體信息等的二維碼,是平臺核心功能的入口。
(2)訂單模塊。該模塊為平臺核心模塊,主要分為當前業務訂單、完成業務訂單、支付訂單三部分組成。當前業務訂單是用戶在使用柜體過程中,從存儲到取件整個過程的訂單記錄;完成業務訂單為業務結束后的訂單記錄;支付訂單為用戶在業務過程中產生的支付行為而生成的訂單記錄。三個部分在業務過程中相互依存完成整個業務訂單過程。
(3)柜體分配模塊。根據當前位置當前時段柜體信息,及用戶需求信息進行柜體分配,完成對客戶終端實體的智能操作。
(4)支付模塊。根據訂單信息完成與微信支付接口對接,實現業務支付功能。
(5)異常檢測模塊。該模塊用于檢測業務過程中訂單信息的異常,根據返回異常的種類采取對應措施保證系統的正常運行。
(6)報修模塊。針對于客戶終端的服務,提供用戶與服務器之間的聯系通道,便于在極端的情況下,系統未能檢測異常,由用戶直接進行報修處理。
(7)消息推送模塊。用于將服務器處理過的服務信息,如柜體分配,異常處理等消息推送客戶機終端,實現具體服務。
3.3 數據實體設計
4 共享存儲柜平臺模塊實現(Shared storage cabinet platform module implementation)
4.1 二維碼模塊實現
二維碼模塊利用谷歌推出的二維碼工具google-zxing實現。提供二維碼生成API接口,根據用戶信息生成二維碼圖片,并將文件數據流傳到客戶終端。
4.2 訂單模塊實現
訂單模塊分為當前業務訂單,完成業務訂單,及支付訂單。當用戶掃描開箱二維碼后訪問后臺服務,服務器訪問柜體分配模塊選取合適的柜體信息,生成該用戶的當前業務訂單,同時生成支付訂單。當用戶調用支付接口,支付成功之后,回調服務器后續接口,更新支付訂單狀態及當前業務訂單狀態,最后將信息通過信息推送模塊將信息推送客戶終端。
4.3 柜體分配模塊
柜體分配模塊主要分柜體顯示和柜體分配兩個功能。
(1)柜體顯示。根據終端機編號device_id,查詢符合該地點投放的各尺寸柜體使用情況,并在每次分配或業務結束后重新顯示。
(2)柜體分配。根據用戶所在終端機編號device_id及所選柜體尺寸規格,在柜體信息數據里搜索符合要求柜體。若存在,則將終端機編號所需柜體尺寸信息生成開箱二維碼。
4.4 支付模塊
支付業務通過微信支付實現。支付模塊主要實現微信支付API的對接。
(1)支付信息參數生成。對接微信支付API需要特定的參數。為提高系統復用性將支付參數生成一個簡單的JavaBean對象。根據用戶掃描二維碼的信息,生成支付參數對象。
(2)簽名生成。為保證支付安全,需要確認收到的訂單信息與發送信息一致,所有需要將所傳參數根據一定規則生成一個數字簽名在接收參數時進行驗證。根據微信文檔簽名要求,將支付參數對象轉為符合規定的參數字符串,經過MD5加密,生成簽名參數。
(3)支付功能。將生成的參數字符串以UTF-8編碼,以post方式訪問微信支付接口,同時將支付訂單信息放入數據庫。
(4)支付回調功能。支付完成后根據傳遞的回調接口,訪問支付回調功能。根據回調信息成功與否更新支付訂單狀、業務訂單狀態,并推送相應的成功失敗H5頁面。
4.5 異常檢測模塊
異常檢測分為惰性檢測與積極檢測兩個主要核心。
(1)惰性檢測。在用戶使用柜體后回調檢測接口,檢測業務訂單過程有無異常,若有異常則系統凍結該柜體。
(2)積極檢測。系統啟動時同時啟動一個servlet容器,通過ScheduledExecutorService工具類執行一個周期為1分鐘的定時監測任務,檢測業務過程有無異常。
4.6 報修模塊
在系統發生異常且異常檢測模塊并未檢測出故障時,由用戶直接向系統提交報修信息。用戶在客戶端進入報修界面,輸入報修柜體、原因及用戶手機號提交服務器。服務器匹配設備號及柜體,將異常原因傳入異常信息庫,并將該設備相應柜體關閉。同時記錄報修人信息,進行信譽評定,防止惡意報修影響系統正常運行。
4.7 消息推送模塊
系統采用Redis[7]實現消息隊列。Redis作為非關系數據庫IO連接數高,可以支持頻繁連接,同時可以很好適應Java序列化傳輸,高效實現系統性能。Java采用Jedis進行Redis的存儲和Redis的連接池設置,再利用Redis中list的push和pop進行數據出入隊列的操作。將連接該模塊的Message存入Redis,并以一定頻率去掃描發送給所需目標用戶。
5 共享存儲柜平臺關鍵邏輯實現(Key logicimplementation of shared storage cabinet platform)
5.1 存件過程具體實現
(1)用戶在客戶端輸入所選柜體尺寸、手機號然后連同柜體設備號一起發送到后臺服務器。
(2)后臺服務器接到信息由柜體模塊進行柜體分配。根據客戶端所傳設備號,匹配locker表單L_No數據,同時確定符合條件的柜體信息。
(3)確定柜體信息后,通過訂單模塊計算該尺寸柜體所需的訂單費用,并生成訂單信息的二維碼圖片,將數據流寫入Response對象,發送客戶端。
(4)用戶用微信掃描客戶端二維碼,通過微信API獲取用戶對平公眾號的openID,若該用戶使用過此平臺,則重新更新手機號,否則將用戶信息存入customer數據表中。然后在業務訂單數據表cur_order中生成當前次業務訂單,同時在支付訂單數據表pay_order生成支付訂單信息,支付狀態為待支付。
(5)后臺服務調用微信支付接口,并提供回調訪問地址,當微信支付完成時,回調服務地址。
(6)微信服務回調后臺服務器更新支付訂單,并更新業務訂單插入開箱時間即O_Depositopentime字段,同時修改柜體狀態,變為開柜使用狀態。然后將該柜體信息存放到開鎖消息隊列。
(7)消息推送模塊掃描隊列,將開鎖消息推送對應客戶端,打開柜門,同時通過訪問第三方短信接口,向用戶提供的手機發送開箱相關信息。
(8)客戶端關閉柜門,觸發后臺柜體關閉模塊,將柜體狀態變為關箱占用狀態,并將關箱時間插入業務訂單數據中,即O_Depositclosetim字段,完成存件業務邏輯。
5.2 取件過程實現
(1)用戶取件掃描取件二維碼,通過微信API獲取當前用戶openID,用來在customer數據中匹配存件用戶。
(2)根據用戶信息,通過業務訂單獲取柜體標識L_SubNo,并在locker數據表中匹配同名字段,獲取用戶將要打開的柜體信息。
(3)修改柜狀態為開柜使用狀態,并將當前時間插入業務訂單數據中,即O_Pickopentime字段。
(4)將需要打開的柜體信息放入開鎖消息隊列。
(5)消息推送模塊掃描隊列,將開鎖消息推送對應客戶端,打開柜門,同時通過訪問第三方短信接口,向用戶提供的手機發送取件開箱相關信息。
(6)當柜門關閉,觸發后臺柜體關閉模塊,根據業務訂單時間信息判定為取件后的關閉操作,更改柜體狀態為關箱可用狀態,同時將關箱時間插入業務數據中,即O_Pickclosetime字段,完成取件業務邏輯。
6 結論(Conclusion)
本平臺采用Spring Boot微服務架構,基于微信公眾號搭建,實現了開發的敏捷化,模塊化,對于系統的擴展性有極大的提高。同時基于微信公眾號實現用戶標識,不但有龐大的流量入口而且簡化了系統用戶邏輯處理,快捷高效地實現了存儲柜共享管理。在系統設計方面,對整個系統業務流程、模塊功能及數據實體設計進行了分析討論。本平臺經過測試運行,達到預期設計,已初步實現盈利。而且由于模塊化設計不但滿足了存儲柜共享功能,還具有很高的擴展性,為以后平臺的擴展提供了便利。
參考文獻(References)
[1] 杜慶,高飛翔,藍丹莉.共享經濟下的校園智能儲物柜應用研究[J].現代經濟信息,2018(7):361.
[2] 王永和,張勁松,鄧安明,周智勛.Spring Boot研究和應用[M].信息工程,2016,10:91-94.
[3] 李榮國,王見.MySQL數據庫在自動測試系統中的應用[J].計算機應用,2011,31(S2):169-171;175.
[4] 杜華.Linux編程技術詳解[M].北京:人民郵電出版社,2007.
[5] 李俊杰.Maven在企業Java軟件產品中的應用[J].電腦知識與技術,2011,7(7):1562-1565.
[6] 謝遠超.微信公眾號信息服務平臺的設計與實現[D].中山大學,2014.
[7] 邱祝文.基于redis的分布式緩存系統架構研究[J].網絡安全技術與應用,2014(10):52-54.
作者簡介:
趙升枝(1995-),男,碩士生.研究領域:軟件開發.
仲梁維(1962-),男,碩士,教授.研究領域:計算機輔助智能設計制造.