吳文涵,謝雨卿,談欣,王賽博,徐楷雯
(東南大學(xué)成賢學(xué)院 電子與計(jì)算機(jī)工程學(xué)院,江蘇南京,210088)
隨著時(shí)代的發(fā)展,滿大街的外賣小哥穿梭在城市街道,越來(lái)越多的人通過(guò)外賣平臺(tái)點(diǎn)單,去享受幾公里以外的美食,外賣在餐飲業(yè)的市場(chǎng)份額逐年增加。但隨著外賣單量的增加,一系列的問(wèn)題也相繼的出現(xiàn)。尤其是近幾年的疫情,外賣雖然有效避免外出,減少了公共場(chǎng)所人流量的同時(shí)為大眾提供服務(wù),但是由于無(wú)法送貨上門,將外賣置于室外,造成外賣丟失、錯(cuò)拿外賣、因環(huán)境影響造成的外賣變質(zhì)、放涼等問(wèn)題;高校方面,由于將近90%的大學(xué)禁止外賣小哥進(jìn)校園,給大學(xué)生生活造成不便,所以我們急需在外賣和校園內(nèi)部之間進(jìn)行一個(gè)對(duì)接。
由此,小程序+外賣自提取柜項(xiàng)目也應(yīng)運(yùn)而生,用戶選擇寄存柜功能,外賣員只需在程序內(nèi)接單,通過(guò)存件碼將外賣存入柜中即可。這樣不僅有效避免外賣丟失的問(wèn)題,同時(shí)寄存柜還具備消毒,保溫等功能,保證外賣口感與質(zhì)量。APP內(nèi)還附帶校內(nèi)跑腿功能,經(jīng)過(guò)身份驗(yàn)證的跑腿小哥,只需在app平臺(tái)上接單,即可收到取件碼等信息,將外賣送至校內(nèi)對(duì)應(yīng)位置。
如圖1所示,智能外賣柜系統(tǒng)分為軟件和硬件兩個(gè)大模塊。其中硬件模塊為具有照明、消毒、保溫及鎖控功能的實(shí)體寄存柜;軟件模塊又以對(duì)象的不同分為微信小程序端以及web網(wǎng)站端。小程序端的使用對(duì)象包含了直接用手機(jī)操作的用戶、跑腿以及外賣員;而web端則是使用電腦進(jìn)行異常情況處理以及后臺(tái)監(jiān)督的管理員。不同對(duì)象模塊對(duì)應(yīng)不同功能,從而完成從用戶下單到外賣員接受訂單將外賣通過(guò)存件碼放入柜中、跑腿通過(guò)取件碼將外賣送至用戶要求的校內(nèi)配送地址等一系列流程。
圖1 整體設(shè)計(jì)框架圖
通過(guò)對(duì)外賣寄存柜軟硬件結(jié)合的研究,初步模擬外賣柜現(xiàn)有功能的情況下,實(shí)現(xiàn)軟件性能及功能優(yōu)化,推出一款適用于學(xué)生群體的微信外賣提取平臺(tái)。系統(tǒng)硬件實(shí)現(xiàn)自動(dòng)寄存外賣,并上傳數(shù)據(jù)、系統(tǒng)數(shù)據(jù)庫(kù)實(shí)現(xiàn)用戶、外賣柜訂單、跑腿訂單的錄入、存儲(chǔ)、查找、刪除。系統(tǒng)軟件實(shí)現(xiàn)用戶與外賣柜在微信小程序這一平臺(tái)上進(jìn)行信息交互。同時(shí)還附加校園內(nèi)部跑腿服務(wù)包含外賣跑腿,及快遞跑腿兩大板塊。
(1)跑腿服務(wù),實(shí)現(xiàn)跑腿+外賣/快遞的一款校園跑腿小程序,支持設(shè)置學(xué)校,學(xué)生認(rèn)證成為跑腿員,支持定位功能,通過(guò)系統(tǒng)判斷距離遠(yuǎn)近,設(shè)置價(jià)格。用戶可在這服務(wù)板塊發(fā)布訂單,支付,取消訂單,查看歷史訂單,反饋;跑腿小哥可在這板塊接收訂單信息,選擇訂單,獲取報(bào)酬,查看歷史訂單,接收反饋。
圖2 系統(tǒng)整體結(jié)構(gòu)圖
圖3 身份選擇界面
圖4 用戶登錄界面
圖5 用戶注冊(cè)界面
(2)外賣自提取服務(wù),用戶可在這版塊選擇箱子功能,填寫提交寄存柜訂單,接收取件碼及寄件碼,查看外賣信息,一鍵取餐,超時(shí)及廢棄處理。外賣員可在這版塊放餐,聯(lián)系用戶獲知外賣存取狀態(tài),反饋;管理員可管理取件信息,查看箱子狀態(tài),接受用戶反饋,處理日常問(wèn)題
(1)注冊(cè)登錄:用戶、外賣員、跑腿員填寫相應(yīng)信息經(jīng)系統(tǒng)審核過(guò)后,即可注冊(cè)、登錄。注冊(cè)、登錄界面以用戶為例。
(2)外賣存柜:用戶首先在程序內(nèi)選擇需要提供寄存柜的服務(wù),以及寄存柜的功能,下單后生成寄存柜存件碼、取件碼等寄存柜信息。同時(shí),外賣員將收到消息接單,獲得對(duì)應(yīng)的存件碼,在小程序的功能框中輸入存件碼,對(duì)應(yīng)柜門即可彈開,放入寄存柜。用戶下單寄存柜時(shí)開始計(jì)時(shí),若柜子遲遲未使用,或外賣遲遲未出則超過(guò)一定時(shí)間,則開始額外按時(shí)計(jì)費(fèi)。用戶功能界面見圖6。
圖6 用戶功能界面圖
(3)取外賣:下單寄存柜服務(wù)后,系統(tǒng)會(huì)生成取件碼,用戶在小程序功能框中輸入取件碼,柜門即可打開,可以自取也可以由跑腿員代取。
(4)跑腿服務(wù):在用戶界面的“跑腿代拿”功能里,選擇需要跑腿代拿的訂單(或者自行填寫提交跑腿訂單,說(shuō)明需要代拿物品的位置,取件碼、要送達(dá)的位置、詳細(xì)信息及注意事項(xiàng)等)見圖7,若為外賣柜訂單生成的跑腿訂單系統(tǒng)自動(dòng)從數(shù)據(jù)庫(kù)中提取用戶的派送地址、聯(lián)系電話、該外賣所在寄存柜的信息,生成跑腿訂單,跑腿小哥可在訂單商城中查看用戶的訂單詳情,見圖8。接單后系統(tǒng)會(huì)顯示取件碼給跑腿小哥去代拿物品,并配送到跑腿訂單中填寫的位置。
圖7 跑腿訂單提交頁(yè)面
圖8 訂單詳情頁(yè)面
(5)異常情況:管理員可在PC端查找寄存柜對(duì)應(yīng)相關(guān)信息,寄存柜等若出故障系統(tǒng)也將提示。同時(shí)若出現(xiàn)嚴(yán)重超時(shí)未取的情況,管理員將根據(jù)系統(tǒng)提示進(jìn)行處理。
硬件與軟件的交互,存柜取餐、送餐等一系列行為都需要數(shù)據(jù)庫(kù)的支撐。
圖9 數(shù)據(jù)庫(kù)表設(shè)計(jì)1
圖10 數(shù)據(jù)庫(kù)表設(shè)計(jì)2
(1)記錄顧客,管理員,外賣員,跑腿員的個(gè)人信息,建立顧客表、管理員表、外賣員表、跑腿員表。實(shí)現(xiàn)注冊(cè)時(shí)個(gè)人信息表添入該類別信息。登錄時(shí),用戶名與密碼能和各個(gè)類別表中信息有照應(yīng)。
(2)在用戶下單柜子后會(huì)產(chǎn)生訂單表,記錄此訂單對(duì)應(yīng)的柜子編號(hào),所下單的客戶編號(hào),及下單時(shí)間。同時(shí)系統(tǒng)生成取件碼及存件碼,同時(shí)記錄在訂單表中。
在用戶下單跑腿時(shí),會(huì)存在一個(gè)初期的跑腿訂單表,在有跑腿員選擇接單后該跑腿訂單表正式成立。其中記錄用戶編號(hào),跑腿編號(hào),運(yùn)件類別及大小,及其對(duì)應(yīng)的結(jié)算方式計(jì)量出的價(jià)格。
(3)系統(tǒng)可依據(jù)小程序端輸入的存件碼,開柜門,檢測(cè)到關(guān)門后更新物流信息表。可依據(jù)小程序端輸入的取件碼,開柜門,檢測(cè)到柜門關(guān)閉后更新物流信息表。
(4)寄存柜表。記錄柜子的編號(hào)及狀態(tài),使用還是未使用。同時(shí)記錄柜子的功能是否開啟。
(1)SpringBoot后端架構(gòu)構(gòu)建
后端主要是用Java語(yǔ)言開發(fā)的基于Java語(yǔ)言的Maven構(gòu)建的SpringBoot,開發(fā)工具idea,服務(wù)器為阿里云輕量應(yīng)用服務(wù)器。由于項(xiàng)目中涉及數(shù)據(jù)庫(kù),則通過(guò)依spring-jdbc,把 spring-boot-starter-jdbc 加為應(yīng)用的依賴。來(lái)觸發(fā)數(shù)據(jù)訪問(wèn)相關(guān)的自動(dòng)配置行為??紤]到Mysql是關(guān)系型數(shù)據(jù)庫(kù),主要用于存放持久化數(shù)據(jù),將數(shù)據(jù)存儲(chǔ)在硬盤中,讀取速度較慢。redis是NOSQL,即非關(guān)系型數(shù)據(jù)庫(kù),也是緩存數(shù)據(jù)庫(kù),即將數(shù)據(jù)存儲(chǔ)在緩存中,緩存的讀取速度快,能夠大大的提高運(yùn)行效率,但是保存時(shí)間有限。則系統(tǒng)同時(shí)應(yīng)用了redis。實(shí)現(xiàn)兩者的取長(zhǎng)補(bǔ)短。
Spring框架功能很強(qiáng)大,但是就算是一個(gè)很簡(jiǎn)單的項(xiàng)目,我們也要配置很多東西。因此就有了Spring Boot框架,它的作用很簡(jiǎn)單,就是幫我們自動(dòng)配置。Spring Boot框架的核心就是自動(dòng)配置,只要存在相應(yīng)的jar包,Spring就幫我們自動(dòng)配置。[3]如果默認(rèn)配置不能滿足需求,我們還可以替換掉自動(dòng)配置類,使用我們自己的配置。另外,Spring Boot還集成了嵌入式的Web服務(wù)器,系統(tǒng)監(jiān)控等很多有用的功,讓我們快速構(gòu)建企業(yè)及應(yīng)用程序。
(2)程序與后端的通信
完成了小程序的后端開發(fā)后,需要小程序端發(fā)起網(wǎng)絡(luò)請(qǐng)求。主要調(diào)用的API即wx.request,完成簡(jiǎn)易的微信小程序端與Java后端編寫好的對(duì)應(yīng)接口進(jìn)行通信。由于Spring Boot能夠快速開發(fā)、便捷部署等特性,項(xiàng)目用它來(lái)構(gòu)建RESTful API。由于存在多終端的情況(移動(dòng)端,web前端,小程序等),所以我們會(huì)抽象出RESTful API并共用一些底層業(yè)務(wù)代碼。
由于接口眾多,并且細(xì)節(jié)復(fù)雜項(xiàng)目使用Swagger來(lái)自動(dòng)生成相應(yīng)的接口文檔。Swagger可以輕松的整合到Spring Boot中,并與Spring MVC程序配合組織出強(qiáng)大RESTful API文檔。它既可以減少我們創(chuàng)建文檔的工作量,同時(shí)說(shuō)明內(nèi)容又整合入實(shí)現(xiàn)代碼中,讓維護(hù)文檔和修改代碼整合為一體,可以讓我們?cè)谛薷拇a邏輯的同時(shí)方便的修改文檔說(shuō)明。另外Swagger2也提供了強(qiáng)大的頁(yè)面測(cè)試功能來(lái)調(diào)試每個(gè)RESTful API。
(3)Postman接口測(cè)試
項(xiàng)目中由于存在眾多接口且不同端的工作進(jìn)度不一樣故使用Postman來(lái)進(jìn)行接口測(cè)試。做接口測(cè)試的好處:節(jié)約時(shí)間,縮短項(xiàng)目成本;提高工作效率;提高系統(tǒng)的健壯性。
Postman是一個(gè)可擴(kuò)展的API開發(fā)和測(cè)試協(xié)同平臺(tái)工具,可以快速集成到CI/CD管道中。旨在簡(jiǎn)化測(cè)試和開發(fā)中的API工作流。
Postman 工具有 Chrome 擴(kuò)展和獨(dú)立客戶端,推薦安裝獨(dú)立客戶端。
Postman 有 個(gè) workspace 的概念,workspace 分 personal 和 team 類型。Personal workspace 只能自己查看的 API,Team workspace 可添加成員和設(shè)置成員權(quán)限,成員之間可共同管理 API。
(4)微信web開發(fā)者工具
項(xiàng)目前端主要使用的工具為微信開發(fā)者工具。它可以使開發(fā)者更方便、更安全地開發(fā)和調(diào)試基于微信的網(wǎng)頁(yè)。其中包含有機(jī)型選擇、預(yù)覽界面、遠(yuǎn)程調(diào)試、上傳代碼、ES語(yǔ)法轉(zhuǎn)換、域名信息、控制臺(tái)、資源文件等基礎(chǔ)功能。
機(jī)型選擇:小程序以IPhone6的屏幕尺寸為設(shè)計(jì)標(biāo)準(zhǔn)。
預(yù)覽界面:寫好視圖布局后點(diǎn)擊編譯,視圖界面刷新顯示。
遠(yuǎn)程調(diào)試:手機(jī)端和PC端開發(fā)工具聯(lián)調(diào)(非常實(shí)用)。
上傳代碼:上傳到騰訊服務(wù)器,提交審核必經(jīng)步驟??梢蕴顚懓姹咎?hào)和備注信息代碼體積,微信限制 2M 以內(nèi)。
ES語(yǔ)法轉(zhuǎn)換:開發(fā)中一般不校驗(yàn)合法域名信息。
域名信息:小程序后臺(tái)要做配置服務(wù)器域名,有request 域名,socket 域名以及uploadFile和downloadFile域名。
控制臺(tái):打印輸出信息,方便調(diào)試。
資源文件:對(duì)應(yīng)項(xiàng)目的文件目錄,一般可以在這里進(jìn)行斷點(diǎn)調(diào)試。
本地?cái)?shù)據(jù)存儲(chǔ):顯示的是本地存儲(chǔ)的數(shù)據(jù),對(duì)應(yīng)的相關(guān)API是wx.setStorageSync(key,data)。
視圖調(diào)試:標(biāo)組件以子父層級(jí)結(jié)構(gòu)呈現(xiàn),方便調(diào)試。
該系統(tǒng)主要由處理器模塊、通信模塊、溫度控制模塊、消毒模塊、電磁鎖模塊、照明模塊等組成。總體模塊結(jié)構(gòu)如圖11所示。
圖11 模塊結(jié)構(gòu)圖
控制器維持與云服務(wù)器onenet的通信連接;云服務(wù)器向電磁鎖控制器發(fā)出通電命令時(shí),電磁鎖控制器收到命令通入電流,打開外賣柜門;云服務(wù)器向照明控制器發(fā)出命令,控制照明燈的開關(guān);云服務(wù)器向紫外線控制器發(fā)出命令,控制紫外線燈開關(guān);云服務(wù)器向加熱片控制器發(fā)出命令,控制加熱片的開關(guān);電磁鎖控制通知按鍵被觸發(fā)時(shí),控制器發(fā)送提醒信息至取餐人的通訊設(shè)備上。
通過(guò)dtu的485接口與功能板連接,同時(shí)dtu用4G接口通過(guò)TCP/IP協(xié)議與云服務(wù)器連接,實(shí)現(xiàn)服務(wù)器與外賣柜之間的數(shù)據(jù)傳輸。
圖12 硬件電路板圖
采用加熱片,通過(guò)對(duì)于接口的通電控制外賣柜的保溫效果。當(dāng)通電時(shí),溫度先會(huì)緩慢上升,之后持續(xù)增高,當(dāng)增高到一定溫度時(shí),會(huì)通過(guò)停止輸送電壓的方式控制其停止加熱,從而保持溫度控制在合理區(qū)間,當(dāng)溫度降低時(shí),則重新輸送電壓,使之繼續(xù)加熱并重復(fù)之前過(guò)程。
采用紫外線燈,通過(guò)紫外線的消毒殺菌作用,保持外賣柜內(nèi)部的干凈和衛(wèi)生。紫外線燈能夠殺死外賣柜內(nèi)一些細(xì)菌等微生物。它能夠在短時(shí)間殺死細(xì)菌燈管離被消毒的物體越近,則細(xì)菌殺死更多更快速。只要有足夠的通電時(shí)間,在紫外線輻射的范圍,可保證細(xì)菌死亡率為百分之一百。
采用電磁鎖方式,控制外賣柜的開關(guān),當(dāng)電磁鎖通電時(shí),鎖控開關(guān)將啟動(dòng),通過(guò)電磁原理,當(dāng)電流通過(guò)硅鋼片時(shí),電磁鎖會(huì)產(chǎn)生強(qiáng)大的吸力緊緊的吸住吸附鐵板達(dá)到鎖門的效果??刂齐姶沛i電源后即斷電,電磁鎖失去吸力即可開門。通過(guò)處理器模塊發(fā)送相應(yīng)指令,控制電磁鎖的電流是否輸送,從而控制外賣柜門的開啟。當(dāng)電磁鎖開啟時(shí),將會(huì)關(guān)閉加熱、紫外線消毒功能,同時(shí)開啟照明功能。
采用5V照明燈,控制外賣柜內(nèi)的照明。當(dāng)柜門開啟時(shí),云服務(wù)器向照明控制器發(fā)出開啟指令,使照明燈開啟,經(jīng)過(guò)一段恰當(dāng)?shù)臅r(shí)間后,照明控制器將自動(dòng)發(fā)出關(guān)閉指令,使照明燈關(guān)閉。
使用寶塔面板服務(wù),實(shí)現(xiàn)對(duì)Linux服務(wù)器的可視化簡(jiǎn)易操作。在其上添加站點(diǎn),修改站點(diǎn)的配置文件。配置站點(diǎn)環(huán)境是LNNMP(Linux+Nginx+Mysql+PHP),同時(shí)在其上實(shí)現(xiàn)域名解析綁定,至此可以通過(guò)瀏覽器訪問(wèn)已備案的域名實(shí)現(xiàn)網(wǎng)站的訪問(wèn)。在寶塔面板中一鍵部署JavaWeb網(wǎng)站,并上傳網(wǎng)站的對(duì)應(yīng)包,實(shí)現(xiàn)網(wǎng)站訪問(wèn)[1]。
在寶塔面板中安裝使用phpMyAdmin來(lái)可視化管理Mysql數(shù)據(jù)庫(kù),實(shí)現(xiàn)與網(wǎng)站的聯(lián)通。
網(wǎng)頁(yè)端即為管理員端。里面分為外賣柜、訂單、用戶、跑腿員、異常情況、意見反饋6個(gè)模塊。
(1)包含了顧客,管理員,外賣員,跑腿員、外賣柜的信息,并且每個(gè)模塊都可以增刪改查。
(2)在用戶下單柜子后會(huì)產(chǎn)生訂單表,訂單編號(hào)由用戶編號(hào)和下單時(shí)間構(gòu)成,管理員可以根據(jù)訂單編號(hào)和用戶編號(hào)對(duì)每筆訂單進(jìn)行查找,完成每筆訂單的跑腿員可以拿到相應(yīng)的工資,直接在軟件里可結(jié)算[4]。
(3)管理員端可以顯示用戶、跑腿員、管理員對(duì)此軟件的反饋意見,也能看到外賣柜等是否出現(xiàn)異常情況。
外賣將是會(huì)持續(xù)發(fā)展的一個(gè)產(chǎn)業(yè),但問(wèn)題必然會(huì)隨著發(fā)展產(chǎn)生。由外賣衍生出的一系列服務(wù),不僅僅完善了送外賣這一過(guò)程,更是便利了廣大百姓。微信小程序聯(lián)合外賣寄存柜的應(yīng)用不僅適用于近年疫情期間的嚴(yán)格防控的要求,同時(shí)也讓送餐的最后一步更加靈活、人性化。