熊 煒,閔娟娟
(九江學(xué)院計(jì)算機(jī)與大數(shù)據(jù)科學(xué)學(xué)院,九江 332005)
隨著人們生活質(zhì)量的提高,越來越多的寵物走進(jìn)了普羅大眾的家中。在西方國(guó)家,寵物通常被視為家庭成員與重要朋友,作為家庭的一員,寵物的健康也被人們高度關(guān)注。學(xué)者Baker 提出區(qū)域之間寵物的醫(yī)療資源是大相徑庭的,為解決寵物遠(yuǎn)程就診問題,近年來已萌生了寵物在線平臺(tái)的概念,力圖突破時(shí)空的限制,提供專屬的醫(yī)療服務(wù)[1?4]。美國(guó)ATA 協(xié)會(huì)通過多項(xiàng)研究表明,伴隨著COVID?19 的出現(xiàn),遠(yuǎn)程問診得到了更多人的重視,在遠(yuǎn)程問診技術(shù)的發(fā)展之路上,有必要將寵物先引入遠(yuǎn)程問診作為研究[5]。
在我國(guó),調(diào)查顯示寵物醫(yī)療已經(jīng)占整體寵物服務(wù)業(yè)的29.2%[6],然而在如此巨大的市場(chǎng)需求下,卻隱藏著諸多問題:寵物醫(yī)療行業(yè)人才缺失、寵物醫(yī)療診所稀缺、寵物治療費(fèi)用昂貴,等等[7]。在如此困境之下,改革是必然的。2018 年4 月份,國(guó)務(wù)院正式發(fā)布了《關(guān)于促進(jìn)“互聯(lián)網(wǎng)+醫(yī)療健康”的發(fā)展意見》,互聯(lián)網(wǎng)+醫(yī)療成為我國(guó)醫(yī)療行業(yè)里的主流發(fā)展方向[8],其本質(zhì)是線上問診的合理應(yīng)用與推進(jìn)線上、線下相結(jié)合的問診流程。對(duì)于寵物醫(yī)療行業(yè)而言,這種改變無疑能促進(jìn)醫(yī)療資源分配的合理性,是一場(chǎng)傳統(tǒng)服務(wù)業(yè)與當(dāng)下互聯(lián)網(wǎng)相結(jié)合的一次技術(shù)革命。
綜上所述,使傳統(tǒng)寵物醫(yī)療行業(yè)搭上互聯(lián)網(wǎng)的便車,開發(fā)寵物問診平臺(tái)有利于對(duì)當(dāng)下寵物醫(yī)療資源進(jìn)行統(tǒng)籌規(guī)劃,吸引更多合格的、優(yōu)質(zhì)的寵物醫(yī)院與醫(yī)師加入,通過靈活的線上問診方式充分利用醫(yī)療資源,改善分配不均的現(xiàn)狀。同時(shí),可以利用智能推薦算法,結(jié)合用戶的操作進(jìn)行平均加權(quán),給予用戶智能化的推薦與人性化的流程,從而根據(jù)用戶的抉擇不斷對(duì)平臺(tái)進(jìn)行正向調(diào)節(jié)[9]。
在查閱現(xiàn)有互聯(lián)網(wǎng)醫(yī)療發(fā)展文獻(xiàn)、對(duì)相關(guān)群眾做出擇醫(yī)傾向調(diào)查、與現(xiàn)有寵物線上問診類平臺(tái)進(jìn)行功能分析與實(shí)際使用后,發(fā)現(xiàn)從聯(lián)系醫(yī)生到醫(yī)生審查病情,往往實(shí)時(shí)問診耗時(shí)更長(zhǎng),因此明確了“有問題及時(shí)診、線上線下強(qiáng)結(jié)合” 的基本方針[10]。經(jīng)過分析得出,平臺(tái)的主要功能有:智能推送醫(yī)生、線上問診、查看附近的醫(yī)院、查看平臺(tái)優(yōu)質(zhì)醫(yī)生、平臺(tái)藥物購買、訂單管理、疾病百科等。
寵物線上平臺(tái)功能如圖1所示。
圖1 寵物線上問診平臺(tái)功能
下面對(duì)用戶登錄后的核心功能做詳細(xì)介紹:
(1)智能推送醫(yī)生。用戶登錄后,平臺(tái)會(huì)根據(jù)用戶的偏好以及用戶的歷史操作智能推送符合用戶預(yù)期需求的優(yōu)質(zhì)醫(yī)生。
(2)線上問診。當(dāng)用戶在平臺(tái)添加好自己的寵物后,可以根據(jù)寵物現(xiàn)有情況對(duì)醫(yī)生專家發(fā)起圖文問診或預(yù)約線上即時(shí)問診。圖文問診中,用戶可以發(fā)送圖片以及文字對(duì)寵物病癥做出描述,適用于非急性病癥;線上即時(shí)問診針對(duì)急性病,可以與醫(yī)生進(jìn)行即時(shí)的溝通,通過圖片、文字和語音的方式對(duì)病癥做出更詳細(xì)的描述。這兩種方式的混合使用,實(shí)現(xiàn)了“有問題及時(shí)診”這一思想,使得醫(yī)生的問診效率能在必要時(shí)達(dá)到高點(diǎn)。
(3)查看附近醫(yī)院。用戶可以根據(jù)寵物的醫(yī)療服務(wù)需求,通過地圖范圍定位對(duì)線下的寵物醫(yī)院進(jìn)行篩選,在醫(yī)院板塊中可以看到醫(yī)院的基本介紹以及醫(yī)院內(nèi)的醫(yī)生,用戶可以在線上了解醫(yī)生后,就近選擇醫(yī)院前往問診,從而推動(dòng)了線上與線下的“強(qiáng)結(jié)合”。
(4)平臺(tái)藥物購買。用戶登錄后,可以根據(jù)醫(yī)生的建議在平臺(tái)的商店選擇藥品加入購物車或者直接購買。
在需求分析的階段,通過對(duì)目前市場(chǎng)的調(diào)研以及相關(guān)專業(yè)資料的查詢,得出一個(gè)合理的模型,用例圖是一個(gè)合理而直觀的方式。接下來將從管理員、用戶、醫(yī)生三個(gè)角度來探究平臺(tái)不同使用者的相應(yīng)功能:
(1)管理員角色是平臺(tái)的主要管理者,負(fù)責(zé)統(tǒng)籌管理醫(yī)院醫(yī)生、用戶訂單與上傳疾病資訊等。其存在能夠使得平臺(tái)數(shù)據(jù)更加可靠,確保平臺(tái)的正常運(yùn)作。
(2)用戶角色是平臺(tái)核心的主要需求者,用戶登錄平臺(tái)后,可以添加寵物、按條件查看寵物醫(yī)院、根據(jù)寵物情況對(duì)合適的醫(yī)生發(fā)起問診請(qǐng)求、評(píng)價(jià)醫(yī)生、根據(jù)醫(yī)生的建議或是自身的需求在平臺(tái)內(nèi)購買相應(yīng)藥品或?qū)⑺幤芳尤胭徫镘?、?duì)訂單進(jìn)行查看與修改、對(duì)個(gè)人信息做出修改。
(3)醫(yī)生角色是平臺(tái)問診功能的主要提供者,醫(yī)生登錄后,可以對(duì)醫(yī)生信息進(jìn)行修改,對(duì)接診時(shí)間做出修改,并對(duì)用戶發(fā)起的提問做出專業(yè)回復(fù)。
寵物線上問診平臺(tái)用例圖如圖2所示。
圖2 寵物線上問診平臺(tái)用例
數(shù)據(jù)庫的設(shè)計(jì)需要開發(fā)人員對(duì)系統(tǒng)的開發(fā)背景有整體性的了解,在設(shè)計(jì)數(shù)據(jù)庫時(shí),要從全面去考慮問題,不應(yīng)該只考慮數(shù)據(jù)庫在單個(gè)頁面上的作用,更需要從業(yè)務(wù)流程以及優(yōu)化的方面對(duì)表之間的合理性做整體的考量[11]。通過探究平臺(tái)系統(tǒng)內(nèi)實(shí)體與實(shí)體的聯(lián)系,畫出實(shí)體?聯(lián)系圖,如圖3所示。
圖3 系統(tǒng)實(shí)體-聯(lián)系
流程圖作為一個(gè)有效的說明工具,能夠輔助管理者做出決定,幫助確定可供選擇的行動(dòng)方案,并直觀地?cái)⑹鲆粋€(gè)業(yè)務(wù)的整體運(yùn)作步驟。
用戶的基本業(yè)務(wù)流程圖如圖4所示。
圖4 用戶的基本業(yè)務(wù)流程
本平臺(tái)分為微信小程序端與后臺(tái)管理端,在小程序端開發(fā)中,采用Hubuilder 與微信開發(fā)者工具作為開發(fā)工具,在開發(fā)語言上選擇以Vue為內(nèi)核的uni?app框架,結(jié)合SCSS、JavaScript與uView 2.0 作為頁面樣式支撐。uni?app 作為新生的編程框架,其優(yōu)勢(shì)在于一次編寫,能在多端使用,并且得益于插件庫中豐富的開源組件,使得在開發(fā)效率上也有了極大的提升。
在后臺(tái)方面選擇了當(dāng)下最常用的Spring?Boot+Mybatis?plus 作為基礎(chǔ)框架,極大提升了開發(fā)效率,并采取抽象工廠的設(shè)計(jì)模式,使得系統(tǒng)將具體的類進(jìn)行抽離,在編寫時(shí)只需要通過相應(yīng)的抽象接口進(jìn)行使用。數(shù)據(jù)庫方面,使用MySQL 與Redis,將暫時(shí)性的緩存信息存入Re?dis,減輕反復(fù)查詢的負(fù)擔(dān),重要核心的數(shù)據(jù)存入MySQL,以確保數(shù)據(jù)的持續(xù)儲(chǔ)存。在安全性方面,使用JWT 生成用戶的唯一token,存入Redis中,并使用Spring Security對(duì)安全訪問進(jìn)行控制,這兩項(xiàng)技術(shù)成熟實(shí)用,能夠減輕開發(fā)者在安全代碼上的重復(fù)工作。前后端分離的交互如圖5所示。
圖5 前后端分離交互
在用戶使用平臺(tái)的過程中,其中最重要的核心模塊有三:一是智能推薦,二是與平臺(tái)醫(yī)生的即時(shí)問診技術(shù),三是使用Spring Security、JWT與Redis三位一體的權(quán)限認(rèn)證。
3.2.1 智能推薦
本平臺(tái)采取的是推薦算法中的基于領(lǐng)域的算法。根據(jù)平臺(tái)的性質(zhì)與實(shí)際調(diào)查,選擇了基于物品的協(xié)調(diào)過濾算法(Item CF)。相較于基于用戶的協(xié)調(diào)過濾算法(User CF),Item CF 更加關(guān)注用戶的歷史性操作數(shù)據(jù),更能從歷史操作中挖掘出用戶的潛在興趣,給予用戶更豐富的醫(yī)生供其選擇[12]。在試驗(yàn)下,Item CF 也具備良好的召回率、精確度,并同時(shí)保證了對(duì)數(shù)據(jù)的高覆蓋度[13]。其算法的本質(zhì)是為用戶建設(shè)偏好文檔,假設(shè)選擇醫(yī)生A 的用戶大多數(shù)也會(huì)選擇醫(yī)生B,那么我們認(rèn)為醫(yī)生A 與醫(yī)生B 相似,相似度高的醫(yī)生更符合用戶偏好,將會(huì)優(yōu)先推送給用戶。這個(gè)推薦往往是穩(wěn)定的,因?yàn)樵卺t(yī)生數(shù)量小于用戶數(shù)量的平臺(tái)上,避免了頻繁更新醫(yī)生的相似度。其中用戶關(guān)于醫(yī)生的操作記錄將被轉(zhuǎn)化為用戶對(duì)醫(yī)生偏好程度的影響因子,系統(tǒng)中的用戶操作對(duì)應(yīng)的影響因子如表1所示。
表1 用戶操作影響因子表
假設(shè)有四名用戶A、B、C、D 對(duì)四名寵物醫(yī)生a,b,c,d進(jìn)行了操作,如表2所示。
表2 用戶操作表
那么根據(jù)表1中的對(duì)應(yīng)操作與影響因子相互轉(zhuǎn)化轉(zhuǎn)換,如表3所示。
表3 用戶操作對(duì)應(yīng)影響因子表
此時(shí)可以通過余弦公式:
便可以計(jì)算出相應(yīng)的醫(yī)生之間的相似度,但是在表2中可以發(fā)現(xiàn),用戶A習(xí)慣于對(duì)每個(gè)醫(yī)生進(jìn)行反復(fù)的查看與問診。這是因?yàn)槟愁愑脩魧?duì)醫(yī)生頻繁訪問與形成習(xí)慣性的問診后,便會(huì)造成影響因子數(shù)據(jù)的不規(guī)范性,此時(shí)使用余弦公式計(jì)算出的結(jié)果便不那么準(zhǔn)確了,此時(shí)就需要算法考慮自動(dòng)修正這部分?jǐn)?shù)據(jù)。這里改用皮爾遜相關(guān)系數(shù)公式,原理是將用戶的操作因子抽象成為醫(yī)生的向量,再將兩個(gè)用戶操作對(duì)應(yīng)的醫(yī)生向量減去它們對(duì)應(yīng)的平均值,再通過余弦公式來進(jìn)行計(jì)算[14]。
養(yǎng)生旅游業(yè)發(fā)展起步晚,沒有形成統(tǒng)一規(guī)劃的格局,吸引力較低。養(yǎng)生旅游作為一種體驗(yàn)式旅游項(xiàng)目,游客停留時(shí)間較長(zhǎng),對(duì)旅游設(shè)施要求高,而旅游道的線路長(zhǎng),彎道大,車道窄,容易使游客感到疲倦與不適。目前,在普洱旅游道內(nèi)主要以養(yǎng)生為主題的酒店稀少,可接待人數(shù)少,難以滿足游客需求。此外,農(nóng)家樂成了主要的接待機(jī)構(gòu),缺乏規(guī)范,設(shè)施簡(jiǎn)陋,衛(wèi)生條件等不符合養(yǎng)生食療理念。
皮爾遜相關(guān)系數(shù)公式為:
其中:系數(shù)P即反應(yīng)操作向量Ri,p與Ri,p之間的關(guān)系,當(dāng)其間取值在[?1,1]之間,這個(gè)相關(guān)性可以是弱的也可以是強(qiáng)的[15]。皮爾遜相關(guān)系數(shù)越大,我們認(rèn)為醫(yī)生向量相似度越強(qiáng)。當(dāng)兩個(gè)向量為正相關(guān)時(shí),在通常情況下取約定系數(shù)范圍對(duì)應(yīng)強(qiáng)度,如表4所示。
表4 系數(shù)強(qiáng)度表
本例中借助Python 進(jìn)行系數(shù)計(jì)算,其核心代碼如下:
通過對(duì)用戶操作矩陣的計(jì)算,我們可以得到醫(yī)生相關(guān)系數(shù),如圖6所示。
圖6 醫(yī)生相關(guān)系數(shù)
所以在本例中,當(dāng)出現(xiàn)新注冊(cè)的用戶E 僅查看過醫(yī)生b后,我們可以根據(jù)相似度,以醫(yī)生c、醫(yī)生a、醫(yī)生d的順序?qū)ζ溥M(jìn)行智能推薦。隨著用戶日常操作所產(chǎn)生的數(shù)據(jù)日益豐富,傳統(tǒng)協(xié)同過濾算法的表現(xiàn)也日趨良好[16]。至此,通過統(tǒng)計(jì)用戶歷史操作并進(jìn)行計(jì)算便可以預(yù)測(cè)用戶對(duì)醫(yī)生的偏好,從而達(dá)到智能推薦的效果。
3.2.2 即時(shí)問診
平臺(tái)采用的即時(shí)通訊技術(shù)源于集成環(huán)信SDK,一套通訊組件內(nèi)部含有多個(gè)子系統(tǒng),開發(fā)難度大,開發(fā)周期長(zhǎng),整體的成本高昂[17]。所以對(duì)于個(gè)人開發(fā)者,有著良好可擴(kuò)展性、可靠性與穩(wěn)定性的第三方SDK 顯然是首選。此時(shí),便可以獲得一套涵蓋文字、emoji 表情、語音、圖片的完善聊天頁面。然而,僅僅是一個(gè)聊天界面顯然是不夠的,我們必須要考慮兩個(gè)問題,首先是用戶與醫(yī)生在未讀的情況下,是否有未讀消息的提示,其次是如何使得這單問診在規(guī)定時(shí)間內(nèi)自動(dòng)結(jié)束。
為解決未讀消息的提示,系統(tǒng)將對(duì)兩種情況分別進(jìn)行討論,第一種是當(dāng)前角色在發(fā)送消息時(shí),需要更新的是Redis 中對(duì)應(yīng)角色的未讀消息。第二種是關(guān)于已讀消息,此處并不能使用慣性思維,即進(jìn)入聊天界面便所有消息已讀,因?yàn)楫?dāng)前角色在發(fā)送消息,對(duì)方角色也同樣可能在發(fā)送消息,會(huì)造成Redis 中的未讀消息數(shù)量超出實(shí)際的情況。故只能在退出時(shí),清空對(duì)方在Redis中發(fā)送的未讀消息數(shù)量。
為了使問診訂單在超出規(guī)定時(shí)間后自動(dòng)結(jié)束,平臺(tái)在用戶開始即時(shí)問診訂單后,使用expire方法設(shè)置倒計(jì)時(shí),將用戶與醫(yī)生的消息回復(fù)數(shù)量全部初始化為0,將其存入Redis中。注意此處訂單與消息數(shù)量不可以設(shè)置為同一個(gè)Key,否則訂單自動(dòng)結(jié)束后未讀消息將會(huì)一并自毀。
即時(shí)通訊效果圖如圖7所示。
圖7 即時(shí)通訊效果
3.2.3 權(quán)限認(rèn)證
身份認(rèn)證是系統(tǒng)中的核心功能,確認(rèn)合法性,確保核心資源的安全與穩(wěn)定是本平臺(tái)的重要考核指標(biāo)[18]。平臺(tái)實(shí)際采用的身份認(rèn)證系統(tǒng)使用了SpringBoot+Spring Security,相較于使用Spring+Spring Security 通過控制反轉(zhuǎn),注入依賴與面向切面編程的方式,引入SpringBoot 簡(jiǎn)化了對(duì)于文檔的編寫,將代碼量進(jìn)行了大幅度的縮減[19?20]。本平臺(tái)驗(yàn)證當(dāng)前角色的操作是否符合權(quán)限需求,都以在接收請(qǐng)求時(shí),請(qǐng)求頭中攜帶的token 是否能夠在系統(tǒng)中解析出相應(yīng)的權(quán)限字段作為判定標(biāo)準(zhǔn)。
Spring Security 的本質(zhì)是由一串過濾器組成的過濾鏈,如圖8所示。
圖8 過濾鏈
在過濾鏈中,過濾器UsernamePasswordAu?thenticationFilter 承擔(dān)處理用戶在登錄頁面填寫的用戶名密碼后的請(qǐng)求登錄操作的功能職責(zé)。然而在平臺(tái)的登錄流程中,自帶的過濾器無法按照預(yù)期,即登錄成功后在內(nèi)部響應(yīng)JWT生成的token,所以需要自定義的Controller 接口接收由前端傳入的賬號(hào)與密碼,再通過UserDetail?Service 對(duì)信息進(jìn)行校驗(yàn)。若用戶輸入的賬號(hào)與密碼成功匹配,將通過ProviderManager 的方法生成JWT 存入Redis中完成登錄流程;若匹配失敗,則將被過濾器ExceptionTranslationFilter 捕獲,拋出異常并返回給前端。
登錄時(shí)序圖如圖9所示。
圖9 登錄時(shí)序
認(rèn)證過程中出現(xiàn)異常的核心代碼如下:
寵物線上問診平臺(tái)實(shí)現(xiàn)了智能化的醫(yī)生推薦、查看篩選附近診所、線上問診、平臺(tái)購買與訂單管理等功能。系統(tǒng)界面簡(jiǎn)潔大方,運(yùn)行流暢,可擴(kuò)展性高,Spring Security 與JWT 的結(jié)合使得平臺(tái)還有更多權(quán)限變更的操作空間。使用該平臺(tái),不僅用戶能夠突破周邊醫(yī)療資源的匱乏困境,而且寵物也能在萬里之外獲得優(yōu)質(zhì)醫(yī)生的診斷,同時(shí)醫(yī)院與醫(yī)生也能通過該平臺(tái)獲取額外的知名度。目前寵物醫(yī)療與互聯(lián)網(wǎng)相結(jié)合在國(guó)內(nèi)仍是一片巨大的藍(lán)海,相信在未來,線上寵物問診能夠讓更多養(yǎng)寵人士受益,助力于寵物經(jīng)濟(jì)的良性發(fā)展。