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