王振輝, 王振鐸
(1.西安翻譯學(xué)院, 工程技術(shù)學(xué)院, 陜西, 西安 710105;2.西安思源學(xué)院, 電子信息工程學(xué)院, 陜西, 西安 710038)
高校圖書館是大學(xué)生課外獲取知識的一個重要場所,是素質(zhì)教育重要文化陣地。在互聯(lián)網(wǎng)+國家戰(zhàn)略引領(lǐng)下,加快圖書館信息化建設(shè),特別是創(chuàng)新服務(wù)模式,將網(wǎng)上網(wǎng)下商務(wù)模式O2O的優(yōu)勢完美結(jié)合應(yīng)用于傳統(tǒng)圖書館行業(yè),提高圖書館工作效率和管理水平,是高校圖書館急需解決的問題。特別是在后疫情時代,線下現(xiàn)場業(yè)務(wù)和線上電子業(yè)務(wù)組合的O2O模式的創(chuàng)新發(fā)展,也是亟待完善的課題。
作為輕量級應(yīng)用的微信小程序,它具有開發(fā)快,成本低,免安裝等優(yōu)點,其“用完即走”理念,可以升級傳統(tǒng)圖書館信息服務(wù)水平,為用戶提供了無處不在的軟件服務(wù)。小程序能聚焦讀者,細(xì)分服務(wù),更好挖掘用戶功能需求,用符合用戶喜好的形式開展信息服務(wù)。小程序和O2O模式結(jié)合可以更方便地提供線上體驗和篩選服務(wù),并通過位置服務(wù)等使圖書館線下資源得到推廣和高效利用。
近年來,在圖書館界對微信服務(wù)在圖書館的應(yīng)用進行了理論和實踐研究。蘆曉紅分析了圖書館微信小程序應(yīng)用場景并指出小程序服務(wù)內(nèi)容主要集中在圖書館宣傳、館藏查詢、圖書借閱、資訊活動、圖書推薦、圖書館占座/房間預(yù)訂、讀者個人中心等[1]。程柳音分析了圖書館微信公眾平臺服務(wù)現(xiàn)狀和優(yōu)勢,指出公眾平臺存在注冊管理不規(guī)范、推廣不專業(yè)、服務(wù)類型不夠多樣化等問題并提出解決對策[2]。張楠對42所“雙一流”高校圖書館微信公眾平臺作為研究對象提出新冠肺炎疫情期間高校圖書館微信服務(wù)提升策略[3]。綜上所述,圖書館對小程序研究還處于邊應(yīng)用邊改進階段,相關(guān)理論研究和實踐經(jīng)驗還不夠成熟,并且高校圖書館小程序提供的服務(wù)與城市公共圖書館微信小程序提供服務(wù)由于應(yīng)用場合和場景不同有較大差距。高校圖書館在借鑒公共圖書館的建設(shè)思路,將微信小程序結(jié)合O2O模式,應(yīng)對公共安全事件的綜合研究和服務(wù)實踐性文章幾乎沒有。
為此,文章提出了基于微信小程序和O2O模式的高校圖書館管理系統(tǒng)框架,通過線上預(yù)約、線下配送,入館人員統(tǒng)計、座位預(yù)訂與間隔選座等功能為應(yīng)對公共衛(wèi)生安全事件提供技術(shù)保障。系統(tǒng)以 MySQL作為數(shù)據(jù)庫,采用JSON作為小程序前端和圖書館Web應(yīng)用數(shù)據(jù)的交互標(biāo)準(zhǔn),使用微服務(wù)框架,提升了小程應(yīng)用的通用性、可擴展性和可靠性。
研究以西安翻譯學(xué)院圖書館為實踐對象,利用其現(xiàn)有的圖書信息管理系統(tǒng),充分考慮讀者對圖書館線上線下業(yè)務(wù)的需求,設(shè)計基于微信的圖書館小程序。
(1) 小程序+二維碼實現(xiàn)O2O模式
小程序服務(wù)為讀者提供無處不在的服務(wù),通過研究用戶場景不斷構(gòu)建新的服務(wù)生態(tài),來使圖書館的服務(wù)深入讀者。小程序服務(wù)具有二維碼信息量大、容錯性強、技術(shù)可靠、使用方便、成本低等優(yōu)點,在眾多領(lǐng)域得到廣泛應(yīng)用。利用小程序+二維碼可以優(yōu)化圖書館線下服務(wù)。
(2) 微服務(wù)理念
設(shè)計時使用Spring Cloud微服務(wù),將小程序后臺系統(tǒng)的各模塊獨立為組件,降低系統(tǒng)復(fù)雜性。各組件服務(wù)通過接口進行相互通信,從而快速構(gòu)建高內(nèi)聚、低耦合的復(fù)用系統(tǒng),也可靈活應(yīng)對系統(tǒng)業(yè)務(wù)變化。小程序可以通過請求restful API訪問后臺的微服務(wù)組件。
(3) Ajax+JSON實現(xiàn)異步數(shù)據(jù)通信
JSON文件是小程序的配置文件,也是小程序與后臺Web服務(wù)進行數(shù)據(jù)交互的標(biāo)準(zhǔn),直接決定小程序響應(yīng)時間。使用AJax通過在后臺與服務(wù)器進行少量數(shù)據(jù)交換,Ajax 可以使小程序視圖實現(xiàn)異步數(shù)據(jù)更新,從而使用戶擁有良好使用體驗。
圖書館小程序的體系結(jié)構(gòu)(圖1)分為3層。第一層是系統(tǒng)前端,即微信小程序,負(fù)責(zé)人機交互,是讀者線上辦理業(yè)務(wù)的窗口;第二層是系統(tǒng)后臺,即圖書館Web應(yīng)用,為小程序數(shù)據(jù)提供Web服務(wù)接口,同時也是圖書館業(yè)務(wù)員和管理人員業(yè)務(wù)處理平臺;第三層是系統(tǒng)數(shù)據(jù),即圖書館數(shù)據(jù)庫,存儲讀者、圖書館業(yè)務(wù)人員、管理員、圖書等業(yè)務(wù)數(shù)據(jù)。
圖1 圖書館小程序系統(tǒng)架構(gòu)
與公共圖書館小程序提供咨詢、活動直播和資訊類功能相比,高校圖書館小程序更多提供的是基礎(chǔ)性服務(wù)。當(dāng)然各高校讀者和圖書館業(yè)務(wù)又存在差異,所以功能也不盡相同。本文圖書館微信小程序設(shè)計了五大功能模塊,分別是讀者中心、圖書業(yè)務(wù)、座位預(yù)訂、咨詢活動和圖書推薦。這五大功能模塊完成了圖書館信息發(fā)布,日常業(yè)務(wù)辦理及自習(xí)室座位管理工作。圖2是小程序功能結(jié)構(gòu)圖。
圖2 圖書館小程序功能結(jié)構(gòu)圖
在圖2中,核心功能是讀者認(rèn)證與身份識別、讀書借閱和座位預(yù)訂和使用。下面概要介紹一下這些功能的實現(xiàn)邏輯。
1.3.1 讀者認(rèn)證與識別
由于系統(tǒng)用戶群體定位的是教師和學(xué)生,所以該款小程序使用前先要進行注冊。學(xué)生填寫學(xué)號等學(xué)生信息,教師填寫教師編號等教師信息。讀者登錄時使用學(xué)號或教師編號結(jié)合密碼進行,密碼忘記可以使用注冊的手機號找回。由于涉及線下無接觸取書等實名操作,系統(tǒng)專門設(shè)計了人臉數(shù)據(jù)采集模塊和驗證模塊,以保證系統(tǒng)操作的可追溯性。
1.3.2 座位預(yù)訂和使用
圖書館座位使用總體分為小程序預(yù)約—掃描確認(rèn)—離場確認(rèn)3個業(yè)務(wù)流程。
(1) 預(yù)約座位
讀者首先選擇自習(xí)室,再選擇時間段,系統(tǒng)顯示自習(xí)室中未使用的座位號。用戶確認(rèn)選座即可。若選座后臨時有事情,無法使用座位,可以使用“取消預(yù)約”功能,方便他人使用。
(2) 使用座位
讀者進入自習(xí)室,掃描座位上的二維碼進行“簽到”,中間有事掃描使用“臨時離開”功能,座位自動保留30分鐘。超過時間回來使用要重新使用“簽到功能”。座位使用完畢后掃描辦理“簽離”功能,釋放座位。
(3) 管理員管理座位
自習(xí)室管理員端可以查看座位狀態(tài),對座位進行實時干預(yù)。當(dāng)一個座位超過30分鐘后沒人使用,將自動反饋給管理員端,管理員可以每隔一段時間對這些座位進行清理,釋放座位占用狀態(tài)為可用狀態(tài)。
1.3.3 線上圖書預(yù)約借閱線下取書
圖書館小程序致力智慧圖書館運營場景,搭建了“在線圖書預(yù)約→圖書配送到柜→取書柜自提”的整體解決方案。具體來說,學(xué)生通過微信小程序線上預(yù)約后,圖書館配送團隊(學(xué)校勤工儉學(xué)學(xué)生完成)完成掃碼投送,學(xué)生以掃碼形式自助取書,從而實現(xiàn)無人交付、避免人群聚集、實現(xiàn)無接觸取書服務(wù)。
圖書館微信小程序的數(shù)據(jù)保存在阿里云后臺MySQL數(shù)據(jù)庫中。在設(shè)計時兼顧三范式和性能要求(適當(dāng)冗余)。小程序存儲的數(shù)據(jù)主要是圖書、座位、讀者、管理員、預(yù)借圖書預(yù)訂座位和活動通知?,F(xiàn)以座位預(yù)訂表創(chuàng)建為例,介紹其結(jié)構(gòu)描述信息(表1)。
表1 座位預(yù)訂表結(jié)構(gòu)
系統(tǒng)實現(xiàn)使用MINA框架及微服務(wù)設(shè)計思想,開發(fā)具有原生App體驗的服務(wù),使用戶有更好的使用體驗。小程序自身主要由兩個獨立運行的模塊組成:View模塊(視圖層)和Service(業(yè)務(wù)邏輯層)模塊。View模塊負(fù)責(zé)交互界面的顯示,通過WeixinJSBridge來與后臺通信,由WXML和WXSS結(jié)合編寫,通過組件進行展示。Service模塊負(fù)責(zé)后臺的邏輯操作,同樣通過WeixinJSBridge與后臺通信,使用JavaScript引擎提供運行環(huán)境和小程序特有的功能。因此,本項目業(yè)務(wù)邏輯是通過編寫各個頁面綁定的.js腳本文件來完成的。業(yè)務(wù)邏輯層處理完數(shù)據(jù)后,會將其發(fā)送往數(shù)據(jù)層,并在視圖層接收事件反饋。系統(tǒng)主界面提供了位置定位、圖書查詢、座位預(yù)訂等主要功能導(dǎo)航,方便讀者辦理業(yè)務(wù)。主界面如圖3所示。
圖3 圖書館微信小程序主界面
2.2.1 二維碼生成與識別技術(shù)
二維碼QRCode使用方便,在圖書借閱、座位簽到等場景中會應(yīng)用到。其中二維碼生成功能如果是后臺Web系統(tǒng),可使用Google Zxing組件[4]。小程序中生成二維碼API微信沒有公開。所以可以采用第三方的插件實現(xiàn),GitHub中的weapp-qrcode可以實現(xiàn),但相比之下base64-weapp-qrcode.js插件兼容性更好,且基于base64編碼輸出二維碼時,不依賴canvas。
生成二維碼的核心代碼如下:
ready: function() {
var imgData = QR.drawImg(this.data.value, {
typeNumber: 4, //碼點大小 1-40,數(shù)字越大,碼點越小,二維碼會顯得越密集
errorCorrectLevel: 'H', //糾錯等級 H等級最高
size: parseInt(rpx2px * this.data.width)
})
this.setData({
qrcodeURL: imgData
})
二維碼保存讀者業(yè)務(wù)數(shù)據(jù),如果只是一項數(shù)據(jù),如讀者編號,直接以字符串方式提供保存即可,如果包含多項數(shù)據(jù),比如讀者編號,圖書編號,那么可以先把這幾項數(shù)據(jù)以JSON串格式保存,解析更為方便。
二維碼生成后的識別可以使用微信掃一掃接口,也可以用第三方插件jsQR或qrcodejs實現(xiàn),但后者的缺點是識別精度較低,不穩(wěn)定。因此,掃描識別二維碼時直接用小程序開發(fā)的API即可。
掃碼識別的核心代碼如下:
wx.scanCode({
scanType: 'qrCode',
success: (res) => {
//根據(jù)掃碼的結(jié)果跳轉(zhuǎn)至目標(biāo)頁面進行展示...
}
}) const QR = require("../../utils/qrcode.js");
QR.api.draw(str, canvasId, cavW, cavH);
2.1.1 ig藥液的制備 取金芪降糖片去包衣,粉碎,過40目篩,混合均勻,精密稱取該粉末適量,生理鹽水配制為0.7 g/mL的混懸液,超聲30 min,靜置24 h,于4℃保存。
2.2.2 人臉采集與識別技術(shù)
小程序上傳人臉照片功能涉及采集、存儲用戶生物特征(人臉照片或人臉視頻),微信平臺暫不支持此功能。但圖書館系統(tǒng)中如有強追溯用戶操作行為時,如支持人臉識別認(rèn)證登錄、圖書轉(zhuǎn)借認(rèn)證、電子借書證辦理等功能就會涉及人臉數(shù)據(jù)采集或照片上傳。低成本解決方案時用小程序后臺Web應(yīng)用采集人像照片文件,前臺小程序負(fù)責(zé)人臉識別認(rèn)證即可。也可以在小程序中調(diào)用攝像功能。具體處理流程是前端通過小程序調(diào)用攝像頭進行人臉定位成功后把抓拍的圖片傳到后臺,后臺通過騰訊云(也可以是百度AI或阿里云的實人認(rèn)證接口)做人臉檢測對比即可[5]。
2.2.3 位置服務(wù)功能
小程序可以解決圖書館內(nèi)方向辨識度低和結(jié)構(gòu)相似的缺點,為用戶提供方便快捷的圖書館導(dǎo)引服務(wù),同時可以根據(jù)讀者位置,進行最近路線圖書配送服務(wù)[6]。
在小程序中位置服務(wù)功能可以使用騰訊位置服務(wù),也可以使用第三方公司如百度或高德地圖API接口。但是第三方地圖API只能通過接口獲取數(shù)據(jù),地圖不能直接引入小程序,所以使用騰訊位置服務(wù)能開發(fā)出功能更為強大、兼容性更好。
小程序中使用騰訊位置服務(wù)進行定位服務(wù)的實現(xiàn)步驟如下:
(1) 注冊一個騰訊位置服務(wù)的帳號;
(3) 下載微信小程序JavaScript SDK,放入到小程序項目中;
(4) 登錄微信小程序后臺,添加 request 合法域名 https://apis.map.qq.com;
(5) 在app.json中配置permission字段,以獲取用戶定位信息;
(6) 調(diào)用 wx.getLocation獲取當(dāng)前用戶的地理位置(微信返回的是經(jīng)緯度、速度等參數(shù));
(7) 使用JavaScript SDK 的API函數(shù)逆地址解析(qqmapsdk.reverseGeocoder將經(jīng)緯度信息轉(zhuǎn)換為包括國家,省、市、區(qū)、街道等具體地理位置信息)即可。
為了測試該小程序的功能、性能及用戶體驗,筆者從軟件工程專業(yè)學(xué)生中隨機選擇了30名學(xué)生進行軟件的真機測試,真機Android版本均為8.0以上,機型為iphone,華為、小米、紅米、vivo、OPPO。從參與測試的同學(xué)的使用反饋來看,該系統(tǒng)的主要圖書預(yù)借、座位預(yù)訂功能正確,系統(tǒng)能實時響應(yīng)用戶請求。系統(tǒng)的主要問題反映在位置服務(wù)精度問題,即系統(tǒng)精度在50米到100米之間,誤差很大。經(jīng)過分析,微信小程序有兩種定位模式,一種是 wgs84(GPS) , 一種是 gcj02(火星坐標(biāo)),默認(rèn)wgs84,wgs84 返回的是 gps 坐標(biāo),gcj02 返回的是 wx.openLocation 的坐標(biāo)。在計算距離的時候gcj02定位更為精確。具體代碼在app.js的onload事件中將type值修改為gcj02,具體參考代碼如下:
wx.getLocation({
type: 'gcj02',
success (res) {
const latitude = res.latitude
const longitude = res.longitude
const speed = res.speed
const accuracy = res.accuracy
}
})
由于各公司地圖標(biāo)注的經(jīng)緯度和實際有一定偏差,為了更好提高位置定位準(zhǔn)確度,軟件在測試過程中根據(jù)所使用的地圖,先計算偏移,然后對經(jīng)緯度進行修正來查出準(zhǔn)確的地圖位置。經(jīng)過以上修改,重新測試后,系統(tǒng)精度在0.5 m以內(nèi)。當(dāng)然,位置定位精度和手機設(shè)備也有關(guān)。在測試過程中,發(fā)現(xiàn)高端手機iPhone,華為Mate40位置偏差最小,而測試使用的低端手機紅米位置偏差最大,有時紅米還會提示無法定位位置,經(jīng)開啟紅米手機的GPS定位,才能正確提供位置服務(wù),當(dāng)然這只是小概率事件,但也從一個側(cè)面說明,手機定位的準(zhǔn)確度對小程序定位準(zhǔn)確度是有影響的。
隨著移動互聯(lián)網(wǎng)技術(shù)和通訊技術(shù)的迅速普及和發(fā)展,高校傳統(tǒng)圖書館移動服務(wù)逐漸發(fā)力。本文依托微信小程序服務(wù)優(yōu)勢,設(shè)計了一個圖書館移動端服務(wù)小程序,為讀者提供了便捷、可靠的新服務(wù)模式。隨著用戶電子業(yè)務(wù)操作習(xí)慣的養(yǎng)成,小程序在圖書館管理中的作用也將不斷擴大。本文為圖書館等文化部門開展O2O服務(wù)和自主個性化需求的移動應(yīng)用服務(wù)提供了參考。