梁天鴻 聶佳偉 呂偉豪南京郵電大學(xué)通達(dá)學(xué)院
由于學(xué)院正方系統(tǒng)空教室查詢功能不向?qū)W生開放,許多學(xué)生在日常學(xué)習(xí)、期末復(fù)習(xí)或考研準(zhǔn)備中,難以知曉學(xué)校教學(xué)樓是否有空教室以供自習(xí)。同時(shí),存在單人占據(jù)一個(gè)自習(xí)室,后來者因擔(dān)心產(chǎn)生誤解和影響而放棄同教室自習(xí),既造成校園自習(xí)室資源的浪費(fèi),也耽誤了學(xué)生寶貴自習(xí)時(shí)間。通達(dá)自習(xí)通以二維碼為媒介,配合后臺(tái)云數(shù)據(jù)庫管理,為學(xué)院有效管理自習(xí)教室提供了科學(xué)依據(jù)。
通達(dá)自習(xí)通是一款基于微信平臺(tái),能實(shí)現(xiàn)對(duì)自習(xí)室進(jìn)行科學(xué)管理與查詢的微信小程序,通過小程序的云開發(fā)功能,實(shí)現(xiàn)對(duì)自習(xí)室數(shù)據(jù)的記錄、修改、查詢。使用者在給予該小程序登錄接口的授權(quán)并調(diào)用權(quán)限后,對(duì)自習(xí)室已布置的靜態(tài)二維碼標(biāo)簽掃描簽到,微信后臺(tái)會(huì)調(diào)用云函數(shù)自動(dòng)記錄最新的數(shù)據(jù),在云數(shù)據(jù)庫中對(duì)信息進(jìn)行修改。使用者也可以查詢各個(gè)教室的使用情況及用戶的最近自習(xí)時(shí)間記錄,從而選擇合適的教室進(jìn)行學(xué)習(xí),采用定位計(jì)算距離并判斷的函數(shù),限制只有在教室200 m內(nèi)才能簽到,有效防止有人惡意掃碼占位。
在本程序的前端界面實(shí)現(xiàn)中,采用了適配微信小程序的語言wxml、wxss、js進(jìn)行編譯。微信小程序的框架包含兩部分:View視圖層、App Service邏輯層。View層用來渲染頁面結(jié)構(gòu),AppService層用來邏輯處理、數(shù)據(jù)請(qǐng)求、接口調(diào)用,在兩個(gè)線程里運(yùn)行。其中,視圖層使用WebView渲染,邏輯層使用JSCore運(yùn)行,通過在app.json里創(chuàng)建各頁面Page的配置文件,以wxml和wxss編寫視圖層,由組件來進(jìn)行展示;邏輯層中的動(dòng)態(tài)數(shù)據(jù)均來自對(duì)應(yīng)Page的data,可以通過setData方法修改數(shù)據(jù),從而將數(shù)據(jù)進(jìn)行處理后發(fā)送給視圖層。最后,基于系統(tǒng)層的JSBridage為視圖層與邏輯層間提供了數(shù)據(jù)傳輸和事件系統(tǒng),可以讓開發(fā)者更方便地聚焦于數(shù)據(jù)與邏輯上。
2.2.1 云開發(fā)環(huán)境配置
圖1 云開發(fā)流程
云開發(fā)是一套解決小程序前后端開發(fā)的云端工具,如圖1所示,提供了一整套云服務(wù)及簡(jiǎn)單、易用的API和管理界面,以盡可能降低后端開發(fā)成本,讓開發(fā)者能夠?qū)W⒂诤诵臉I(yè)務(wù)邏輯的開發(fā),盡可能輕松地完成后端的操作和管理。
(1)云函數(shù)。是一段運(yùn)行在云端的代碼,無需管理服務(wù)器,在開發(fā)工具內(nèi)編寫、一鍵上傳部署即可運(yùn)行后端代碼。完全使用Node.js編寫,可以操作云端數(shù)據(jù)庫和存儲(chǔ)空間。小程序提供了專門用于云函數(shù)調(diào)用的API,開發(fā)者可以在云函數(shù)內(nèi)使用wx-server-sdk提供的getWXContext方法獲取到每次調(diào)用的上下文(appid、openid等),無需維護(hù)復(fù)雜的鑒權(quán)機(jī)制,即可獲取天然可信任的用戶登錄態(tài)(openid)。
(2)云數(shù)據(jù)庫。云開發(fā)提供了一個(gè)既可在小程序前端操作,也能在云函數(shù)中讀寫的MongoDB數(shù)據(jù)庫,可提供每日5萬次的數(shù)據(jù)庫讀取請(qǐng)求,滿足絕大部分小程序應(yīng)用。另外,一個(gè)數(shù)據(jù)庫可以有多個(gè)集合(相當(dāng)于關(guān)系型數(shù)據(jù)中的表),集合可看作一個(gè)JSON數(shù)組,數(shù)組中的每個(gè)對(duì)象就是一條記錄,記錄的格式是 JSON對(duì)象。通過對(duì)創(chuàng)建的數(shù)據(jù)庫進(jìn)行修改,可以使用云函數(shù)來操作數(shù)據(jù)庫的讀寫。
(3)云存儲(chǔ)。云開發(fā)提供了一塊存儲(chǔ)空間,在小程序前端直接上傳/下載云端文件,在云開發(fā)控制臺(tái)可視化管理。微信平臺(tái)推出基于“無服務(wù)開發(fā)小程序”,即Serveless。基于Servelss架構(gòu)的小程序依賴云平臺(tái)提供的后臺(tái)服務(wù),使得在小程序端可以分別調(diào)用wx.cloude.uploadfile和wx.cloude.downloadfile完成上傳和下載云文件操作。
2.2.2 云數(shù)據(jù)庫設(shè)計(jì)
在數(shù)據(jù)庫的使用中,直接使用云數(shù)據(jù)庫功能,建立了一個(gè)class的云數(shù)據(jù)庫來存儲(chǔ)各個(gè)教室的使用情況。這個(gè)數(shù)據(jù)庫包含的字段有:教室人數(shù)、教室名、在該教室的簽到/簽退時(shí)間;每次簽到或者簽退,都會(huì)通過調(diào)用自己定義的qiandao云函數(shù),來記錄教室的人數(shù)、時(shí)間與教室的變化。
鑒于實(shí)現(xiàn)整個(gè)系統(tǒng)功能的需要,設(shè)計(jì)出了系統(tǒng)實(shí)現(xiàn)流程。
首先,在小程序文件夾中建立cloud和miniprogram兩個(gè)目錄,并在package文件中配置,通過編寫數(shù)據(jù)庫函數(shù)cloud.database().collection(class),在小程序云端創(chuàng)建教室數(shù)據(jù)庫。由于要充分利用每個(gè)自習(xí)教室,所以要將大量自習(xí)教室納入規(guī)劃,為每個(gè)空閑教室生成有唯一標(biāo)識(shí)性的二維碼。其次,創(chuàng)建自習(xí)教室的同時(shí),可以設(shè)置自習(xí)教室的正常使用時(shí)間和最大容量人數(shù),若不在正常使用時(shí)間范圍內(nèi),或超過自習(xí)教室課容納人數(shù),則不允許簽到或簽退操作。
為了防止自習(xí)教室的靜態(tài)二維碼被故意保存后,在非自習(xí)教室區(qū)域外進(jìn)行掃碼簽到、干擾正常使用,本團(tuán)隊(duì)在程序中添加了distance∶function與wx.getLocation函數(shù),對(duì)簽到進(jìn)行距離限制。distance∶function函數(shù)是對(duì)使用者與簽到教室之間的距離進(jìn)行計(jì)算,wx.getLocation函數(shù)是獲取簽到者經(jīng)緯度,再調(diào)用distance∶function函數(shù)與設(shè)定好的經(jīng)緯度進(jìn)行計(jì)算,得到距離。通過條件語句進(jìn)行判定,若簽到距離在200 m之內(nèi),就會(huì)跳轉(zhuǎn)簽到按鈕,否則將無法跳轉(zhuǎn),不能進(jìn)行簽到。
掃碼簽到是通達(dá)自習(xí)通的核心功能。首先,小程序中編有wx.scanCode函數(shù),允許從相機(jī)和相冊(cè)中調(diào)取圖片進(jìn)行掃碼。用戶在掃描相應(yīng)自習(xí)教室的二維碼后,微信服務(wù)器向系統(tǒng)跳轉(zhuǎn)用戶的信息,系統(tǒng)判斷用戶的唯一性和自習(xí)教室否處于正常狀態(tài)(使用時(shí)間范圍內(nèi)和可容納人數(shù)范圍內(nèi)),將二維碼攜帶的信息及掃描用戶的微信openid發(fā)送到業(yè)務(wù)服務(wù)器,在簽到/簽退成功后,調(diào)用_getYMDTime與_getcurrentTime函數(shù)獲取此時(shí)刻時(shí)間,并將其存入定義的times數(shù)組中。其次,再將class數(shù)據(jù)庫與times數(shù)組中的數(shù)據(jù)渲染到界面上,顯示在哪個(gè)時(shí)刻在哪個(gè)教室簽到/簽退,并且簽到/簽退的同時(shí)都會(huì)調(diào)取qiandao云函數(shù)對(duì)數(shù)據(jù)庫中教室的人數(shù)進(jìn)行實(shí)時(shí)修改,保證數(shù)據(jù)的準(zhǔn)確。
本設(shè)計(jì)項(xiàng)目可以基本解決自習(xí)教室資源和學(xué)生自習(xí)時(shí)間浪費(fèi)的問題,實(shí)現(xiàn)自主簽到循環(huán)過程,有利于合理分配空閑教室,方便學(xué)生找到適合自己學(xué)習(xí)的教室。通達(dá)自習(xí)通現(xiàn)可在學(xué)院自習(xí)教室投入使用,運(yùn)行狀況良好,但也存在不足之處,例如:定位簽到存在一定偏差,短距離內(nèi)不能保證二維碼不會(huì)被學(xué)生誤掃,簽退功能對(duì)于人為因素敏感性高。當(dāng)然,只要學(xué)生積極學(xué)習(xí),并誠信使用通達(dá)自習(xí)通,所有問題都將迎刃而解。