張千,方麗華,張萬義,薛萊,張浩宇,翟兆芹
( 1.中國石油大學(華東)計算機與通信工程學院,山東 青島266580;2. 中石化勝利石油管理局勝利醫(yī)院,山東 東營257091)
伴隨著中國移動互聯(lián)網(wǎng)技術(shù)高速發(fā)展,基于移動終端涌現(xiàn)出了種類繁多的移動醫(yī)療APP,為百姓提供著便捷及時的醫(yī)療資訊和診療服務。目前國內(nèi)的移動醫(yī)療App主要面向西醫(yī)和西藥,其中尋醫(yī)問診需求,是用戶最為直接和迫切的需求。在健康和醫(yī)療類信息在互聯(lián)網(wǎng)上更輕松獲得的今天,用戶更需要的不僅僅是唾手可得的互聯(lián)網(wǎng)資訊,更深層次的需求是和醫(yī)生專家進行直接的溝通和交流[1]。
近年來國家層面不斷加碼支持中醫(yī)藥行業(yè)的發(fā)展,特別是隨著健康觀念變化和醫(yī)學模式轉(zhuǎn)變,中醫(yī)藥越來越顯示出獨特優(yōu)勢,時下中醫(yī)的問診需求與日俱增。然而國內(nèi)主流診斷方式多以西醫(yī)為主,中醫(yī)資源有限,中醫(yī)專家的門診服務供不應求。一些常見病的患者為了避免醫(yī)院掛號就醫(yī)難的問題,往往會選擇自行到藥店購買中成藥,由于患者普遍缺乏中醫(yī)藥理論常識,因此購藥時會咨詢藥店,針對病癥推薦相應的中成藥。而藥店往往會存在為牟取利益,歧義引導顧客購買價格偏高藥物的現(xiàn)象,且療效并未達到預期效果,因此造成患者病程延長、藥費昂貴且徒增抱怨。
大數(shù)據(jù)時代的來臨,使互聯(lián)網(wǎng)技術(shù)和中醫(yī)診療技術(shù)的結(jié)合日益緊密,這將進一步促進醫(yī)藥行業(yè)線上線下融合。[2]在各項鼓勵政策的加持下,傳統(tǒng)中醫(yī)與互聯(lián)網(wǎng)結(jié)合的APP開始涌現(xiàn),如叮當中醫(yī)、小鹿醫(yī)館、平安好醫(yī)生國醫(yī)館、金華佗、微中醫(yī)等,市場反應頗為熱烈,但目前的APP都是基于線上咨詢或發(fā)展線上中醫(yī)館的模式,并非為用戶提供自助便利的辨證購藥服務。而中醫(yī)藥項目對于藥店來說,是不可或缺的發(fā)展業(yè)態(tài)之一[3]。
針對上述現(xiàn)狀及問題,本項目與山東省名中醫(yī)藥專家、全國名老中醫(yī)藥專家學術(shù)繼承指導老師張萬義博士合作,旨在將中醫(yī)診療思想、中醫(yī)辨證和處方經(jīng)驗進行整合,開發(fā)一款便民的“智能自助中醫(yī)藥推薦系統(tǒng)-萬義中醫(yī)APP”,為患者提供常見病的辨證診斷結(jié)果及合理的藥物推薦方案。形成線上自助診療模式。使患者高效低價地享受到專業(yè)中醫(yī)診療服務,無需了解中醫(yī)藥理便可以獲得科學、高效、實惠的中成藥推薦,緩解“看病難,買藥貴”的現(xiàn)狀。迎合廣大民眾自主購藥的便利需求,探索中醫(yī)藥便民零售的新模式。
智能自助中醫(yī)辨證與中成藥推薦系統(tǒng)-萬義中醫(yī)主要解決時下名老中醫(yī)就醫(yī)資源緊缺的情況下,常見病患者自助就醫(yī)購藥的問題。系統(tǒng)涉及到不同使用者的需求,將軟件設計的用戶分為三種不同的權(quán)限:患者、醫(yī)生、管理員。
患者無需在醫(yī)院掛號、門診,只需在萬義中醫(yī)問診系統(tǒng)上填寫常見病癥的診斷問卷,即可獲得辨證診療結(jié)果,根據(jù)診療結(jié)果給出合理的藥物推薦方案?;颊呖芍苯尤ジ浇乃幏抠I藥,節(jié)約了就醫(yī)時間和藥費成本。醫(yī)生的角色需求是維護病癥數(shù)據(jù)庫,對藥品、病癥、科室、診斷關(guān)系等進行增刪改查。管理員負責維護整個系統(tǒng),并對后臺流量進行監(jiān)控。為方便醫(yī)生對后續(xù)常見病癥的錄入,開發(fā)了常見病癥錄入系統(tǒng)。整個系統(tǒng)后臺采用springboot+mybatis +mysql+eazyui的框架結(jié)構(gòu),構(gòu)成了一個完整的C/S架構(gòu)的系統(tǒng)[4]。
本系統(tǒng)總體架構(gòu)包括服務端和客戶端,萬義中醫(yī)APP的開發(fā)分為前臺開發(fā)和后臺開發(fā)兩部分[5]。前臺主要用于展示病癥、提供問卷和獲取用戶問卷回答,后臺使用Java進行數(shù)據(jù)處理以及數(shù)據(jù)庫的增刪改查。整個軟件由APP前端、Java后臺、MySQL數(shù)據(jù)庫三部分構(gòu)成??蛻舳伺c服務端根據(jù)C/S架構(gòu)進行設計,客戶端只是收集用戶的信息,而處理等方面都在后臺運行,減小了手機端的負擔,從而使用戶擁有更加完美的用戶體驗。采用C/S結(jié)構(gòu)相對更加安全,客戶端和后臺可以實現(xiàn)異步維護,用戶的個人信息安全能夠保障[6]。
軟件分為用戶前端,管理員前端和服務端。用戶在APP端選擇科室病癥,填寫問卷,然后繳納手續(xù)費,獲取診斷結(jié)果。服務端同時為微信小程序和Android APP提供服務。服務端根據(jù)用戶的請求返回簽名后的訂單信息,根據(jù)用戶回答的問卷進行判斷返回診斷結(jié)果。具體如圖1所示。
圖1 系統(tǒng)邏輯架構(gòu)圖
1.3.1 邏輯架構(gòu)
為了方便用戶使用,智能自助中醫(yī)辨證與中成藥推薦系統(tǒng)在邏輯架構(gòu)上分為歡迎頁展示、登錄、科室分類展示、選擇病癥、填寫問卷、繳納手續(xù)費、獲取診斷結(jié)果以及反饋評價等功能步驟,用戶可以按照APP的引導流程,進行相應的操作,最終實現(xiàn)為患者診斷病情、推薦藥物的功能。
系統(tǒng)結(jié)構(gòu)如圖2所示:
圖2 物理結(jié)構(gòu)圖
1.3.2 科室分類展示頁設計
萬義中醫(yī)APP中科室分類功能符合用戶就醫(yī)的習慣,同時將雜亂無章的病癥排列組合,便于用戶快速找到相應的病癥。科室分類的數(shù)據(jù)結(jié)構(gòu)模擬了一個表格,每一個科室對應了一個病情的列表,整體效果圖如圖3所示:
圖3 科室分類展示頁
1.3.3 病情問卷頁設計
萬義中醫(yī)App的核心功能是診斷病癥,需要獲取到用戶的身體狀況信息,因此問卷的設計是重點。病情問卷頁如圖4所示:
圖4 病情問卷頁
可以發(fā)現(xiàn),問卷的組成由三個要素,標題、題干和選項。標題的名字就是病情名,題干就是病癥的具體病情,選項是具體病情的具體表現(xiàn)。為了獲取到用戶的輸入,對每一個選項確定一個唯一的值,可以把病名+題干+選項的組合作為主鍵來確定。在數(shù)據(jù)庫中體現(xiàn)為sickdetail表。該表保存了所有的選項,選項通過sd_index聚集在題干下,題干通過ill_name組合成問卷。
題干的列表組成了問卷,問卷的標題即病名可以通過上一個Activity獲得。
用戶點擊了某種病癥后,App向服務器發(fā)起請求,服務器返回問卷的json數(shù)據(jù),App獲取數(shù)據(jù)后進行解析。這里使用谷歌的gson包對Java對象實現(xiàn)json序列化和反序列化。
1.3.4 支付頁設計
萬義中醫(yī)APP在通過支付寶的接入申請后,在螞蟻金服開放平臺創(chuàng)建了App,獲取了Appid,隨即可以開始使用支付寶的支付功能。在用戶填寫完問卷之后,將彈出一個確認支付手續(xù)費的對話框,對話框采用Android原生的AlertDialog實現(xiàn),在提交按鈕上添加監(jiān)聽函數(shù),同時創(chuàng)建AlertDialog。
點擊確認后,App彈出支付寶的支付頁面。生產(chǎn)環(huán)境中手續(xù)費為2元,支付頁面的效果如下點擊確認后,App彈出支付寶的支付頁面。支付頁面的效果如圖5所示:
圖5 支付頁面
如果用戶的手機中沒有支付寶,則App會跳轉(zhuǎn)到支付寶H5頁面。然后填寫支付寶的賬號和密碼,即可完成本次支付。
支付功能的實現(xiàn)需要開通手機相關(guān)權(quán)限,這樣就完成了前端App的支付環(huán)境搭建。在支付頁面,需要通過OKHTTP3在服務端獲取訂單信息。從服務器請求到簽名后的訂單信息后,由App客戶端向支付寶的服務器發(fā)起支付請求,如果支付成功,則會跳轉(zhuǎn)進入結(jié)果頁,如果支付失敗,則彈出失敗的提示。
前端App訂單信息的獲取依賴于服務端訂單信息的生成,支付寶支付接口采用RSA非對稱加密算法,在創(chuàng)建應用后需要配置密鑰。密鑰包含:
應用公鑰:由商戶自己生成的RSA公鑰(與應用私鑰必須匹配),商戶需上傳應用公鑰到支付寶開放平臺,以便支付寶使用該公鑰驗證該交易是否是商戶發(fā)起的。
應用私鑰:由商戶自己生成的RSA私鑰(與應用公鑰必須匹配),商戶開發(fā)者使用應用私鑰對請求字符串進行加簽。
支付寶公鑰:支付寶的RSA公鑰,商戶使用該公鑰驗證該結(jié)果是否是支付寶返回的。
需要使用支付寶提供的生成工具,生成公鑰和私鑰,將公鑰上傳到支付寶的網(wǎng)站。私鑰寫在代碼中,按照支付寶的訂單規(guī)則,生成訂單信息。然后使用支付寶提供的簽名工具對訂單信息進行簽名,簽名中包含了應用私鑰和Appid還有pid。簽名后的訂單信息將發(fā)送到App。如果公鑰和私鑰不匹配的話則驗簽失敗,支付失敗。注意私鑰必須寫在服務端,由服務端提供接口調(diào)用,不能直接寫在App代碼中,否則apk被反編譯后,黑客可以竊取私鑰,產(chǎn)生安全問題。公鑰和私鑰可以修改,修改后的公鑰必須上傳到螞蟻金服開放平臺,私鑰必須在相應的代碼處修改。
在支付寶的服務器驗簽成功后,此筆訂單為有效訂單。用戶可以進行支付。
1.3.5 診斷頁設計
在用戶提交了問卷之后,后臺需要對用戶的問卷需要進行判斷和處理。診斷功能的原理圖如圖6所示:
圖6 診斷原理圖
一個病情illness下面有若干個病癥sick,每個病癥的特點對應了一個選項的集合。用戶的選擇結(jié)果也構(gòu)成了一個集合。在后臺,系統(tǒng)將每個病癥的選項集合與用戶的選擇集合求交集,交集的大小為匹配度u_matchs,將匹配度u_matchs和數(shù)據(jù)庫中recipe表的matchs比較,只要u_matchs>=matchs,即可判斷用戶的可能病癥,并且根據(jù)該病癥推薦相應的藥物。
萬義中醫(yī)App后臺提供為整個系統(tǒng)提供了數(shù)據(jù)支持服務,同時為醫(yī)生維護數(shù)據(jù)提供了入口。APP前端采用eazyUI作為前端框架。easyui是一種基于jQuery的用戶界面插件集合,為創(chuàng)建現(xiàn)代化,互動,JavaScript應用程序,提供必要的功能。病癥錄入分為三個步驟,第一步是錄入病名和科室;第二步是錄入病癥;第三步是錄入診斷關(guān)系和對應藥物。醫(yī)生在錄入時需要事先準備相應的數(shù)據(jù),經(jīng)過分析處理得出。
后臺系統(tǒng)運行在tomcat服務器上,由于Spring Boot內(nèi)嵌了tomcat服務器,在部署到生產(chǎn)環(huán)境時,需要修改項目的pom.xml文件后,再使用maven的打包功能將項目打包成可以部署在服務器上的war包。同時,在tomcat服務器默認的配置下,<Context>標簽沒有指定任何內(nèi)容,項目的靜態(tài)資源路徑會出現(xiàn)問題,相對路徑的起始路徑為webApps,而不是工程路徑,從而報錯。需要修改tomcat的server.xml。 <Alias></Alias> 標簽把 host 的別名指定為服務器的IP地址,然后在<Context>標簽中,將path屬性改為空,這樣在使用url:http://139.199.159.173:8080/htzx/admin訪問的時候,就可以使得靜態(tài)資源的相對路徑正確,也可以添加另外一個<Context>,把path屬性改為項目名稱,可以起到同樣的效果。如果要把url改成更加常見的形式,如wyzy.com/admin,只需要把<Alias>標簽的內(nèi)容改成公司的域名,然后把tomcat的http端口修改成80端口,就可以實現(xiàn)常見形式的訪問。
本文基于對智能自助中醫(yī)辨證與中成藥推薦系統(tǒng)有充分理解患者就醫(yī)場景的基礎(chǔ)上,設計并實現(xiàn)了一個能夠?qū)ΤR姴“Y在線快速診療及藥物推薦APP。為驗證系統(tǒng)的可靠性與作用,系統(tǒng)開發(fā)基本完成后,測試證明了系統(tǒng)的可靠性及高效性。經(jīng)驗證本系統(tǒng)創(chuàng)新了傳統(tǒng)的中醫(yī)診療模式,改傳統(tǒng)的人工診療為線上自動診療,并具有用戶認證和線上支付的功能,一定程度上解決了中醫(yī)診療“名醫(yī)診療貴,看病排長隊”的弊病,大大縮減了中醫(yī)診療所需的費用和時間,提高了診療效率。