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