基于移動(dòng)互聯(lián)網(wǎng)的糖尿病醫(yī)療輔助系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
引 言
糖尿病是一種常見(jiàn)的慢性疾病,截止 2009 年,中國(guó)已經(jīng)成為僅次于印度的糖尿病第二大國(guó),糖尿病患者達(dá)到 4 315 萬(wàn)。在糖尿病防治過(guò)程中,需要自我檢測(cè)、用藥、飲食、運(yùn)動(dòng)以及醫(yī)患互動(dòng)五個(gè)方面的密切配合才能達(dá)到良好效果。伴隨著無(wú)線(xiàn)通信技術(shù)的發(fā)展,基于移動(dòng)互聯(lián)網(wǎng)的遠(yuǎn)程醫(yī)療技術(shù)得到快速發(fā)展,在慢性病防治領(lǐng)域發(fā)揮著重要作用[1-3]。
在移動(dòng)醫(yī)療系統(tǒng)中, 客戶(hù)端可以采用智能手機(jī)、平板電腦等移動(dòng)設(shè)備, 使用的操作系統(tǒng)包括 Android、iOS 和WindowsPhone,其中Android 系統(tǒng)基于Linux 系統(tǒng)內(nèi)核,是最具有移植性的移動(dòng)設(shè)備操作系統(tǒng),得到了眾多開(kāi)發(fā)廠(chǎng)商的支持。目前針對(duì)用戶(hù)需求和糖尿病防治的特點(diǎn),研究基于移動(dòng)互聯(lián)網(wǎng)的糖尿病醫(yī)療應(yīng)用的文章較少,糖尿病移動(dòng)終端應(yīng)用多集中在提高糖尿病的認(rèn)知和糖尿病的管控上,沒(méi)有科學(xué)的糖尿病管理流程,沒(méi)有形成高效的管理模式??傮w來(lái)看糖尿病移動(dòng)醫(yī)療技術(shù)還不成熟,還處在摸索階段[4-5]。
1 系統(tǒng)目標(biāo)及需求分析
本文從糖尿病預(yù)防特性入手,研究基于移動(dòng)互聯(lián)網(wǎng)的糖尿病醫(yī)療輔助系統(tǒng)及相關(guān)開(kāi)發(fā)技術(shù),旨在提高醫(yī)療效率,使醫(yī)療服務(wù)流程標(biāo)準(zhǔn)化 ;降低基礎(chǔ)醫(yī)療服務(wù)門(mén)檻,將稀缺的醫(yī)護(hù)資源利用最大化 ;加強(qiáng)醫(yī)患溝通,滿(mǎn)足用戶(hù)在需要幫助時(shí)可 隨時(shí)得到專(zhuān)業(yè)指導(dǎo)的心理。根據(jù)用戶(hù)需求,對(duì)系統(tǒng)進(jìn)行分析, 由以下工作組成 :
(1)數(shù)據(jù)管理 :注冊(cè)用戶(hù)可以向服務(wù)器端上傳個(gè)人的生 理數(shù)據(jù)、查看個(gè)人電子病歷。
(2)統(tǒng)計(jì)分析 :直觀(guān)顯示血壓、血糖等數(shù)據(jù),并且能對(duì) 數(shù)據(jù)進(jìn)行相關(guān)分析。
(3)教育指導(dǎo) :系統(tǒng)可以向用戶(hù)提供具有針對(duì)性的診療 信息。
(4)信息交互:醫(yī)護(hù)人員可以與患者進(jìn)行實(shí)時(shí)的信息交互。
(5)信息反饋:社區(qū)醫(yī)生可以通過(guò) PC 客戶(hù)端對(duì)病人進(jìn)行 初步篩選,制定相應(yīng)的隨訪(fǎng)計(jì)劃并給出針對(duì)性的診療方案。
2 系統(tǒng)的架構(gòu)設(shè)計(jì)
系統(tǒng)主要用戶(hù)由醫(yī)生和病人組成,這里的醫(yī)生與病人只是指人員身份,并非指病人成員一定患有糖尿病。未患糖尿病的人為了預(yù)防糖尿病也可以注冊(cè),這類(lèi)似于實(shí)際狀況中的病人去醫(yī)院就診,所以他的角色定義為病人。
系統(tǒng)整體架構(gòu)設(shè)計(jì)如圖 1 所示。基于移動(dòng)互聯(lián)網(wǎng)的糖尿病醫(yī)療輔助系統(tǒng)由服務(wù)器部分與客戶(hù)端部分組成。系統(tǒng)采用Tomcat 作為Web 服務(wù)器,響應(yīng)來(lái)自客戶(hù)端的各種請(qǐng)求,服務(wù)器端采用具有可擴(kuò)展性的三層模式,即控制器層+ 業(yè)務(wù)邏輯層+DAO 層結(jié)構(gòu)。服務(wù)器端控制器組件中的Servlet 類(lèi)負(fù)責(zé)與Android 客戶(hù)端進(jìn)行信息交互??蛻?hù)端軟件包括面向病人的移動(dòng)客戶(hù)端和面向醫(yī)生的PC 客戶(hù)端 ;移動(dòng)客戶(hù)端基于 Android 平臺(tái)開(kāi)發(fā) ;PC 客戶(hù)端基于B/S 模式開(kāi)發(fā),醫(yī)生可以通過(guò)瀏覽器訪(fǎng)問(wèn)系統(tǒng),并進(jìn)行相應(yīng)操作。系統(tǒng)采用SQLServer2005 數(shù)據(jù)庫(kù)存儲(chǔ)數(shù)據(jù)。
系統(tǒng)開(kāi)發(fā)框架如圖2所示。PC客戶(hù)端采用MVC模式開(kāi)發(fā), Android客戶(hù)端通過(guò)Layout 布局和 Activity類(lèi)實(shí)現(xiàn)用戶(hù)界面, 通過(guò)HttpClient組件訪(fǎng)問(wèn)服務(wù)器。服務(wù)器端的Servlet類(lèi)負(fù)責(zé)接收客戶(hù)端請(qǐng)求,并返回處理結(jié)果。DAO 層通過(guò)JDBC 實(shí)現(xiàn)數(shù)據(jù)庫(kù)的更新與查詢(xún)操作。
客戶(hù)端軟件由Android 客戶(hù)端與PC 客戶(hù)端組成,它功能結(jié)構(gòu)如圖 3 所示。
3 系統(tǒng)核心功能的實(shí)現(xiàn)
3.1 XML文件在 Android客戶(hù)端的應(yīng)用
醫(yī)護(hù)人員預(yù)先設(shè)定針對(duì)不同體征、不同年齡、不同病情人群的膳食、運(yùn)動(dòng)處方。由于 XML文件獨(dú)立于軟硬件,可移植性強(qiáng),因此采用XML文件存儲(chǔ)這些處方信息。Android客戶(hù)端只需要解析這些XML文件就可以獲取膳食、運(yùn)動(dòng)處方。病人可以根據(jù)醫(yī)生給出的診療信息選擇適合自己的膳食、運(yùn)動(dòng)處方。在 Android系統(tǒng)中,常見(jiàn)的 XML解析器有DOM解析器、SAX 解析器、PULL解析器。其中PULL方式最優(yōu)。它小巧輕便、解析速度快、簡(jiǎn)單實(shí)用,非常適合在Android移動(dòng)設(shè)備中使用。PULL解析技術(shù)是第三方開(kāi)發(fā)的開(kāi)源技術(shù),Android 系統(tǒng)中和 PULL方式相關(guān)的包是 org.xmlpull.v1,這個(gè)包提供給PULL解析器的工廠(chǎng)類(lèi)XmlPullParseFactory和PULL解析器XmlPullParse[6]。系統(tǒng)中的ReadXML類(lèi)負(fù)責(zé)解析 XML文件,通過(guò)判斷XML文件中的標(biāo)簽執(zhí)行不同的邏輯,將解析得到的信息存儲(chǔ)到List容器中供其他類(lèi)調(diào)用。ShowFoodActivity 類(lèi)與FoodDetilActivty類(lèi)負(fù)責(zé)將 List容器中的膳食處方信息呈現(xiàn)在ListView控件。在實(shí)際開(kāi)發(fā)過(guò)程中發(fā)現(xiàn) PULL方法簡(jiǎn)潔有效,可以很方便的將XML文件中的信息呈現(xiàn)在ListView 控件上。
3.2 Web技術(shù)在 Android客戶(hù)端的應(yīng)用
3.2.1 信息交互功能
糖尿病是一種慢性疾病,需要長(zhǎng)期的觀(guān)察和治療,每天都要進(jìn)行身體指標(biāo)的測(cè)量,時(shí)間碎片化。因此考慮對(duì)患者用戶(hù)建立個(gè)人電子病歷記錄。對(duì)用戶(hù)的醫(yī)療數(shù)據(jù)進(jìn)行科學(xué)的存儲(chǔ)與處理?;颊咝枰蟼鞯臄?shù)據(jù)包括血糖值、血壓值、體檢表和 回訪(fǎng)記錄表,由于它們的實(shí)現(xiàn)方法相同,因此主要介紹血糖 值上傳到服務(wù)器端的過(guò)程。JSON 是一種輕量級(jí)的數(shù)據(jù)交換 格式,同 XML 和 HTML文件相比,它更加簡(jiǎn)捷和靈活。所 以選擇 JSON 作為交互數(shù)據(jù)的格式。JSON 主要有兩種數(shù)據(jù)格 式,分別為 JSONArrary(數(shù)組形式,數(shù)據(jù)元素可以是對(duì)象) 和 JSONObject(對(duì)象形式),它們之間可以相互轉(zhuǎn)換,解析 JSON 的相關(guān)類(lèi)位于 org.json 包中 [7]。BloodSugarActivity 類(lèi) 負(fù)責(zé)錄入用戶(hù)每天測(cè)量到的血糖數(shù)據(jù),然后通過(guò) Http 協(xié)議將 封裝成 JSONObject 格式的數(shù)據(jù)發(fā)送到 Web 服務(wù)器端,服務(wù) 器端的 AndroidBloodSugarServlet 類(lèi)負(fù)責(zé)接收數(shù)據(jù),并將解 析好的數(shù)據(jù)交由 DAO 層的 BloodSugarDao 類(lèi)處理,最后將 數(shù)據(jù)存入 SQLServer2005 數(shù)據(jù)庫(kù)中。
數(shù) 據(jù) 處 理中心 模 塊 還 提 供了數(shù) 據(jù) 查 詢(xún) 功能, 采用 HttpClient 組件訪(fǎng)問(wèn) Web 端 Servlet 類(lèi),并將要查詢(xún)的參數(shù) post 到服務(wù)器端,服務(wù)器端做相應(yīng)的邏輯處理后把查詢(xún)得到 的 Java 對(duì)象封裝成 JSONObject 形式返回給客戶(hù)端,客戶(hù)端 解析 JSONObject 對(duì)象,然后通過(guò) ListView 控件呈現(xiàn)給用戶(hù), 實(shí)現(xiàn)查詢(xún)功能。
3.2.2 統(tǒng)計(jì)分析功能
糖尿病的長(zhǎng)期治療更貼切的是長(zhǎng)期管理,糖尿病數(shù)據(jù)具有連續(xù)性,可以根據(jù)特定條件對(duì)數(shù)據(jù)進(jìn)行提取、統(tǒng)計(jì),這樣用戶(hù)就可以通過(guò)一種直觀(guān)的方式了解血糖變化。
Android 客戶(hù)端采用對(duì)數(shù)據(jù)與頁(yè)面布局進(jìn)行分別處理的方法實(shí)現(xiàn)對(duì)血糖數(shù)據(jù)的統(tǒng)計(jì)。首先是數(shù)據(jù)的獲取問(wèn)題,由于HttpClient 組件具有易用性和靈活性,所以采用HttpClient 組件向服務(wù)器端發(fā)送請(qǐng)求、獲取數(shù)據(jù)。然后是頁(yè)面布局問(wèn)題,在HTML 文件中調(diào)用開(kāi)源圖形組件Ichartjs 在手機(jī)上實(shí)現(xiàn)復(fù)雜的布局效果。最后采用WebView 組件做數(shù)據(jù)與頁(yè)面布局間溝通的橋梁。最終在 Android 客戶(hù)端實(shí)現(xiàn)數(shù)據(jù)統(tǒng)計(jì)功能。具體步驟如下:
(1) 在 Layout中定義布局文件并添加WebView組件;
(2) 在 Activity類(lèi)中加載 Layout布局文件, 同時(shí)開(kāi)啟javascript 支持;
(3) 在 AndroidManifest.xml文件中添加允許網(wǎng)絡(luò)訪(fǎng)問(wèn)的權(quán)限,聯(lián)網(wǎng)獲取服務(wù)端的數(shù)據(jù)。
(4) 將來(lái)自服務(wù)器端的數(shù)據(jù)封裝成 JSONArray對(duì)象。
(5) 調(diào)用javascript方法將數(shù)據(jù)傳遞給HTML界面,實(shí)現(xiàn)數(shù)據(jù)更新。
(6) Activity類(lèi)通過(guò)調(diào)用WebView中的loadUrl方法獲取HTML 界面,最終實(shí)現(xiàn)數(shù)據(jù)統(tǒng)計(jì)功能。
3.3 Socket通信技術(shù)的應(yīng)用與實(shí)現(xiàn)
對(duì)于糖尿病這種慢性疾病,患者迫切希望就疾病、診療等問(wèn)題得到實(shí)時(shí)的答疑解惑,醫(yī)生也需要對(duì)患者的病情狀態(tài)及身體狀況進(jìn)行隨訪(fǎng)調(diào)查,以便后續(xù)的診療指導(dǎo)。糖尿病醫(yī)療輔助設(shè)計(jì)了互動(dòng)溝通功能模塊,注冊(cè)用戶(hù)可以和社區(qū)醫(yī)生進(jìn)行實(shí)時(shí)的信息交互。
Android操作系統(tǒng)提供了兩種通信方式 :分別是 Http通信和 Socket通信。Http連接基于“請(qǐng)求 - 響應(yīng)”模式,只有在用戶(hù)請(qǐng)求時(shí)才會(huì)建立連接通道,即客戶(hù)端向服務(wù)器發(fā)送請(qǐng)求后,服務(wù)器端才向客戶(hù)端返回?cái)?shù)據(jù)。Socket通信首先建立起兩者的連接,然后可以直接進(jìn)行數(shù)據(jù)傳輸,這種方式雙方都可以主動(dòng)發(fā)送信息。為了保證字節(jié)流的可靠性 [8],系統(tǒng)選擇面向連接的 TCPSocket方式傳輸信息。即時(shí)通信模塊服務(wù)器端的開(kāi)發(fā)步驟大致如下:
(1)在服務(wù)器端指定端口,實(shí)例化一個(gè) Server Socket, 自動(dòng)對(duì)客戶(hù)端傳入的端口號(hào)進(jìn)行監(jiān)聽(tīng)。
(2)收到請(qǐng)求后調(diào)用 Server Socket 的 accept()方法, 然后返回一個(gè)對(duì)應(yīng)于該客戶(hù)端的 Socket 對(duì)象。
(3)獲取位于該層的 Socket 流并進(jìn)行讀寫(xiě)操作。
(4)將數(shù)據(jù)封裝成流。
(5)對(duì) Socket 進(jìn)行讀寫(xiě)。
(6)關(guān)閉打開(kāi)的流。
客戶(hù)端的應(yīng)用開(kāi)發(fā)步驟大致如下:
(1)通過(guò) IP 地址和端口實(shí)例化 Socket,請(qǐng)求連接服務(wù)器。
(2)獲取 Socket上的流并進(jìn)行讀寫(xiě)。
(3)把流包裝進(jìn) BufferReader/PrintWriter 對(duì)象。
(4)對(duì) Socket 進(jìn)行讀寫(xiě)。
(5)關(guān)閉打開(kāi)的流。
即時(shí)通信模塊由兩部分組成 :PC 服務(wù)器端和Android 客戶(hù)端,PC 服務(wù)器端負(fù)責(zé)客戶(hù)端命令的接收與響應(yīng)以及信息的轉(zhuǎn)發(fā),客戶(hù)端主要完成通信信息的發(fā)送與接收。利用Socket 方式交換數(shù)據(jù),數(shù)據(jù)流量小,響應(yīng)速度快。
3.4 診療功能的實(shí)現(xiàn)
醫(yī)生用戶(hù)可以通過(guò)PC 客戶(hù)端錄入診療信息,診療模塊的設(shè)計(jì)遵循MVC 模式(JSP+Servlet+JavaBean),具體實(shí)現(xiàn)步驟如下:
(1) 創(chuàng)建診斷信息錄入界面 diagnoseinfo.jsp,此頁(yè)面用于放置診療信息的表單,錄入診療信息,表單的提交地址為diagnoseinfoServlet。
(2) 創(chuàng)建控制層對(duì)象 DiagnoseinfoServlet, 它是一個(gè)Servlet類(lèi),此類(lèi)通過(guò)doPost()方法對(duì)添加診療信息請(qǐng)求進(jìn)行處理。
(3) 創(chuàng) 建 模 式 層 用 到 的 JavaBean組 件, 分 別 為Diagnoseinfo類(lèi)與DiagnoseinfoDao類(lèi),其中Diagnoseinfo類(lèi)用于封裝診療信息,DiagnoseinfoDao類(lèi)用于封裝診療信息對(duì)象的數(shù)據(jù)庫(kù)操作。
數(shù) 據(jù)庫(kù)服務(wù) 器為 SQLServer2005,Web 服務(wù) 器采用Tomcat7.0,移動(dòng)客戶(hù)端使用Android 真機(jī)測(cè)試,主頁(yè)面如圖 4 所示。通過(guò)在瀏覽器中輸入U(xiǎn)RL 地址訪(fǎng)問(wèn)PC 客戶(hù)端,進(jìn)行測(cè)試。
結(jié) 語(yǔ)
針對(duì)糖尿病醫(yī)療管理需求,結(jié)合移動(dòng)互聯(lián)網(wǎng)技術(shù),本文設(shè)計(jì)并實(shí)現(xiàn)了基于移動(dòng)互聯(lián)網(wǎng)的糖尿病醫(yī)療輔助系統(tǒng)。系統(tǒng)采用服務(wù)器 /客戶(hù)端模式。測(cè)試后發(fā)現(xiàn)整個(gè)系統(tǒng)運(yùn)行流暢,功能完善。在實(shí)際應(yīng)用過(guò)程中可以有效的改善患者與醫(yī)生的感受, 有益于糖尿病這種慢性疾病的防治。