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