方路平 林玨偉 姚家慶 盛邱煬
1(浙江工業(yè)大學(xué) 浙江 杭州 310023)2(寧波明星科技發(fā)展有限公司 浙江 寧波 315100)
隨著移動應(yīng)用的日益流行[1],互聯(lián)網(wǎng)基本完成了從傳統(tǒng)模式向移動設(shè)備接入模式轉(zhuǎn)變的過程。各種各樣的移動應(yīng)用覆蓋了人們生活的各個方面,給人們的生活提供了許多便利。在此背景下,遠(yuǎn)程醫(yī)療[2]和移動醫(yī)療[3]也得到了極大的發(fā)展,眾多基于iOS的交互式遠(yuǎn)程醫(yī)療平臺也應(yīng)運(yùn)而生[4-5]。
在眼視光學(xué)中,驗光可以測出受檢眼與正視眼間的聚散差異程度,是最基礎(chǔ)又最重要的工作之一[6]。目前的驗光設(shè)備,需要驗光技師在旁操作,對于驗光技師造成了很大不便。據(jù)統(tǒng)計,在目前的驗光場所尤其是眼鏡店中,優(yōu)質(zhì)的驗光技師十分稀缺,很多時候亟需優(yōu)質(zhì)眼光服務(wù)的患者難以得到滿足。另外,在患者資料整理歸檔的方面,并沒有一個統(tǒng)一完善的管理系統(tǒng),大大降低了驗光的效率,阻礙了眼視光治療的發(fā)展。
本文提出了一套行之有效的遠(yuǎn)程驗光管理系統(tǒng),主要包括了遠(yuǎn)程驗光和患者醫(yī)療檔案管理兩大功能。前者使得一位驗光技師可以通過網(wǎng)絡(luò)或藍(lán)牙等信息手段自由控制不同方位的多臺驗光儀;后者則將每位患者的診療檔案,包括既往史、驗光記錄、治療習(xí)慣等信息整理保存到統(tǒng)一的數(shù)據(jù)庫中。系統(tǒng)在操作界面與操作流程上做了一定程度的設(shè)計與優(yōu)化,與患者檔案相結(jié)合,極大提升了驗光技師的工作效率與驗光質(zhì)量。
總體的設(shè)計框圖如圖1所示。整個系統(tǒng)由客戶端(平板電腦)、驗光設(shè)備(CV-7600,寧波明星科技)和服務(wù)器組成。圖中虛線代表互聯(lián)網(wǎng)連接,實線代表藍(lán)牙連接。驗光技師使用客戶端軟件,通過藍(lán)牙控制驗光設(shè)備,或者通過互聯(lián)網(wǎng)與服務(wù)器建立連接[7],訪問服務(wù)器接口。通過接口可以訪問患者檔案,了解患者信息,也可以自由控制驗光設(shè)備。驗光過程中所有儀器的反饋都會實時地顯示在客戶端上,方便驗光技師操作診斷。
本系統(tǒng)支持兩種驗光模式:本地驗光和遠(yuǎn)程驗光。驗光技師使用客戶端進(jìn)行本地驗光操作的流程如圖2所示。驗光技師在打開客戶端軟件后,先登錄到本地的驗光技師賬號,如果還沒有賬號,可以通過管理員創(chuàng)建賬號。同時,管理員也有權(quán)限刪除或修改驗光技師的信息。登錄賬號后,進(jìn)行系統(tǒng)設(shè)置(非必須,默認(rèn)加載上次設(shè)置)、選擇或編輯當(dāng)前患者,再通過藍(lán)牙連接設(shè)備,即可在客戶端上對設(shè)備進(jìn)行操作并且獲取反饋數(shù)據(jù)。如果是新患者,驗光技師可以使用客戶端添加患者資料,并且上傳至服務(wù)器;如果是老患者,驗光技師可以通過客戶端查看患者的資料,包括既往病史、驗光歷史、用眼習(xí)慣、遺傳史等。在了解了患者的詳細(xì)資料后,驗光技師可以根據(jù)患者的特點(diǎn),進(jìn)行更有針對性的驗光診斷。在驗光過程中,驗光技師可以手動控制每一步的操作流程,也可以加載自定義的自動化操作流程。驗光完成后,驗光技師可以直接在客戶端上確認(rèn)并打印處方。
圖2 軟件使用流程圖
驗光技師在進(jìn)行遠(yuǎn)程驗光時的操作如圖3所示。驗光技師可以在任何有網(wǎng)絡(luò)的環(huán)境下,使用客戶端,與服務(wù)器建立socket連接。在連接成功后,登錄驗光技師賬號,并且保持心跳連接,進(jìn)入排隊取號狀態(tài)。如此時有患者在門店要求該驗光技師驗光,客戶端會接到叫號請求,驗光技師在確認(rèn)后即可遠(yuǎn)程控制驗光設(shè)備。在網(wǎng)絡(luò)狀況良好的情況下,驗光技師可以像本地驗光時一樣進(jìn)行驗光操作,并且得到實時的數(shù)據(jù)。在完成驗光后,驗光技師隨時可以選擇是否結(jié)束等待叫號,如果選擇結(jié)束,則發(fā)送結(jié)束遠(yuǎn)程請求和注銷登錄請求,然后關(guān)閉socket連接,結(jié)束遠(yuǎn)程驗光。如此,一名優(yōu)秀的驗光技師,就可以在任意地點(diǎn),同時給多個驗光室以及驗光設(shè)備提供驗光服務(wù),很好地解決了優(yōu)秀驗光人員不足的問題。
圖3 遠(yuǎn)程驗光服務(wù)執(zhí)行流程
系統(tǒng)采用了C/S架構(gòu),服務(wù)端使用了ThinkPHP[8]框架和MySQL數(shù)據(jù)庫,使用PHP語言進(jìn)行開發(fā),連接遵循h(huán)ttp協(xié)議。客戶端使用了MVC架構(gòu)[9]和SQLite數(shù)據(jù)庫,在Xcode環(huán)境下,使用Objective-C語言進(jìn)行開發(fā)。測試環(huán)境為iPhone simulator和iPad air 2真機(jī)。本文主要介紹客戶端程序的實現(xiàn)。
客戶端程序采用模塊化開發(fā)理念,實現(xiàn)多模塊獨(dú)立運(yùn)作,又相互融合的設(shè)計結(jié)構(gòu),共包含登錄模塊、管理員模塊、驗光模塊、患者模塊、驗光數(shù)據(jù)模塊、通信模塊、遠(yuǎn)程模塊、打印模塊、設(shè)置模塊等9個模塊。模塊設(shè)計如表1所示。其中,患者模塊中的患者信息和驗光數(shù)據(jù)模塊中的驗光數(shù)據(jù),會使用本地數(shù)據(jù)庫進(jìn)行儲存和讀取。
表1 模塊功能設(shè)計表
患者模塊主要實現(xiàn)了本地和遠(yuǎn)程患者的增改查,患者驗光記錄的查看和當(dāng)前患者的選擇。包括:
(1) 本地患者的增改查,遠(yuǎn)程患者的查詢。
(2) 本地患者和遠(yuǎn)程患者的選定。
(3) 本地患者和遠(yuǎn)程患者的最近驗光記錄查詢。
(4) 查找支持姓名和電話。
患者信息將被存儲在SQLite數(shù)據(jù)庫中,使用JKDBModel框架進(jìn)行存取。每一個記錄包括了云id、姓名、性別、年齡、聯(lián)系方式、門店信息、既往史等86個字段,其中以云id為主鍵。由于字段數(shù)量大,且每個字段的屬性不同,為了規(guī)范化,需要在UI上對于每個單元格的操作作限制。包括文本輸入、單選、多選、日期格式、是否是必填等,使得存入數(shù)據(jù)庫的數(shù)據(jù)規(guī)范,同時也是基礎(chǔ)的防SQL注入處理[10]。如果使用固定單元格,不僅開發(fā)效率極低,維護(hù)難度較大,也非常不利于后期的功能擴(kuò)展,所以在患者信息輸入模塊的設(shè)計上使用了MVVM架構(gòu)[11],即模型(model)、視圖(view)、視圖模型(view model)。
建立單元格模型文件DM_Cell,模型結(jié)構(gòu)見表2。其中,type為枚舉類型,枚舉列表見表3,由type控制單元格的輸入類型。對于不同類型的單元格,制作不同的單元格視圖模型,包括不同類型單元格的點(diǎn)擊方法。然后在一個Plist文件中,以字典的形式儲存每一個單元格的模型信息。在控制器的viewWillLoad方法中加載Plist文件,讓控制器在加載頁面之前讀取每個單元格對應(yīng)的字典,根據(jù)字典加載不同的單元格模型。在cellForRowAtIndexPath方法中,根據(jù)索引號對應(yīng)的單元格模型,讀取模型中的type屬性,加載對應(yīng)的單元格視圖模型,并且根據(jù)模型初始化視圖中的一些屬性來進(jìn)行顯示。不同類型的單元格對應(yīng)的點(diǎn)擊方法或者跳轉(zhuǎn)動作都在視圖模型中實現(xiàn)完畢,如有額外需要,也可重寫此類方法。當(dāng)患者確認(rèn)個人信息時,控制器先判斷isNecessary屬性為YES的單元格是否都有信息,然后根據(jù)tagStr屬性來存入數(shù)據(jù)庫。若是后期需要更新數(shù)據(jù)庫,只需要修改Plist文件就可以更新UI界面;若是后期需要修改表格的樣式或者點(diǎn)擊功能,只需要修改相應(yīng)的單元格視圖模型就可以實現(xiàn)。利用這種方式,可以極大地提升開發(fā)效率,并且利于后期維護(hù)和擴(kuò)展。
表2 DM_Cell單元格模型結(jié)構(gòu)表
表3 type枚舉列表
驗光模塊包含數(shù)值區(qū)、操作區(qū)、視標(biāo)選擇區(qū)、視標(biāo)預(yù)覽區(qū)、側(cè)邊欄5個部分。程序中的其他模塊大部分皆在本模塊被調(diào)用。本模塊的大多數(shù)功能通過Objective-C實現(xiàn),但部分底層操作邏輯和數(shù)據(jù)通過C語言編寫,經(jīng)Objective-C封裝后調(diào)用。驗光模塊的界面如圖4所示。其中,操作區(qū)UI完全模仿真實驗光儀的操作臺樣式,讓驗光技師不會太生疏。數(shù)值區(qū)體現(xiàn)了驗光過程中檢測的實時數(shù)據(jù)。
圖4 驗光模塊界面
通信模塊包括藍(lán)牙和網(wǎng)絡(luò)兩部分。網(wǎng)絡(luò)部分用于全程序的網(wǎng)絡(luò)連接管理,主要為患者檔案同步、驗光數(shù)據(jù)同步、 云視光驗光技師登錄與注銷、遠(yuǎn)程驗光服務(wù)等功能提供支持。本模塊HTTP請求功能基于AFNetworking框架實現(xiàn),socket基于 GCDAsyncSocket框架實現(xiàn),XML基于KissXML框架實現(xiàn)。遠(yuǎn)程驗光中,網(wǎng)絡(luò)連接使用自定義的協(xié)議,協(xié)議格式如圖5所示。
圖5 協(xié)議格式
藍(lán)牙部分用于App 與電腦驗光儀、綜合驗光儀、查片儀、液晶視力表等藍(lán)牙設(shè)備的連接與數(shù)據(jù)傳輸。藍(lán)牙部分的底層代碼,包括藍(lán)牙數(shù)據(jù)的解析等,用C語言編寫,用Objective-C對其封裝后使用。
驗光數(shù)據(jù)模塊用于處理、同步和展示驗光數(shù)據(jù),在驗光模塊、患者模塊和管理員模塊中皆有調(diào)用??稍谠O(shè)置中定制本模塊樣式。驗光數(shù)據(jù)存儲于SQLite數(shù)據(jù)庫中,基于JKDBModel框架開發(fā)。驗光數(shù)據(jù)模塊界面見圖6。數(shù)據(jù)包括電腦驗光儀(RM)的球鏡(SPH)、柱鏡(CYL)、軸位(AXS)數(shù)值,查片儀(TL)的球鏡、柱鏡、軸位、添加值(ADD)、瞳距(PD),還有綜合驗光儀近用數(shù)據(jù)(CV-NEAR)和遠(yuǎn)用數(shù)據(jù)(CV-FAR)和最終數(shù)據(jù)(FINAL-NEAR/FINAL-FAR),包括球鏡、柱鏡、軸位、水平棱角(H)、垂直棱角(V)、瞳距、添加值。
圖6 驗光數(shù)據(jù)模塊界面
打印模塊用于打印機(jī)的連接、相關(guān)數(shù)據(jù)傳輸與驗光數(shù)據(jù)的打印。本模塊基于UartLib框架開發(fā)。診斷處方的確認(rèn)和打印都在打印模塊中實現(xiàn),模塊界面見圖7。
圖7 打印模塊界面
遠(yuǎn)程模塊用于完成遠(yuǎn)程驗光的相關(guān)操作,驗光技師可以通過PC端或者移動端遠(yuǎn)程控制驗光設(shè)備進(jìn)行驗光。
(1) 進(jìn)入后顯示當(dāng)前賬號驗光技師信息。
(2) 點(diǎn)擊驗光室后,點(diǎn)擊右側(cè)驗光室確認(rèn)驗光室。
(3) 點(diǎn)擊患者后,查看當(dāng)前患者信息。
(4) 點(diǎn)擊排隊后,可在右側(cè)查看當(dāng)前在線專家名單。點(diǎn)擊專家后開始取號排隊,等待專家叫號。
(5) 點(diǎn)擊左欄左上角“返回”鍵可返回主界面。點(diǎn)擊右上角“結(jié)束”,結(jié)束當(dāng)前遠(yuǎn)程驗光。
不同于使用藍(lán)牙進(jìn)行控制,遠(yuǎn)程驗光時,移動端的操作指令并不是直接發(fā)送給驗光設(shè)備,而是要通過服務(wù)器轉(zhuǎn)發(fā)給驗光設(shè)備。數(shù)據(jù)發(fā)送流程如圖8所示,當(dāng)移動端接受驗光請求后,服務(wù)端會給移動端和驗光設(shè)備分配一對id號。驗光開始后,驗光技師在移動端進(jìn)行操作,移動端將包含了操作命令的XML格式數(shù)據(jù)包發(fā)送給服務(wù)器。數(shù)據(jù)包包括排隊號、專家號、請求實體,請求實體包括請求碼、操作類型、操作值。請求碼表示的是請求類型,包括登錄認(rèn)證、登錄應(yīng)答、心跳應(yīng)答、取號、叫號、開始控制、結(jié)束控制、數(shù)據(jù)同步等類型。操作類型包括加減度數(shù)、切換鏡片、旋轉(zhuǎn)角度等。操作值代表了操作的具體數(shù)值或者鏡片對應(yīng)的序號。服務(wù)器根據(jù)移動端的id號,找到對應(yīng)的設(shè)備id,并且將數(shù)據(jù)包轉(zhuǎn)發(fā)給驗光設(shè)備。驗光設(shè)備收到數(shù)據(jù)包后,解析XML數(shù)據(jù),根據(jù)指令執(zhí)行操作,并且將操作后的反饋數(shù)據(jù)發(fā)送回服務(wù)器。服務(wù)器再根據(jù)id號轉(zhuǎn)發(fā)給移動端,在移動端上進(jìn)行顯示。如此循環(huán),完成整個驗光操作。
圖8 遠(yuǎn)程模塊數(shù)據(jù)發(fā)送流程圖
本系統(tǒng)結(jié)合寧波明星科技CV7600電腦驗光儀,在基于iOS平臺的移動智能終端上實現(xiàn)了遠(yuǎn)程驗光的完整流程。僅通過iPad,驗光技師就可以很好地完成遠(yuǎn)程控制驗光設(shè)備、實時接收驗光數(shù)據(jù)、遠(yuǎn)程眼科診斷、患者信息整理歸檔等工作。目前應(yīng)用已通過測試,在蘋果應(yīng)用商店中上架,并在多家驗光室和眼科醫(yī)院中推廣使用,使用情況良好,反響甚佳。利用智能移動終端完成遠(yuǎn)程驗光操作,可以優(yōu)化驗光流程,提升自動化程度,降低人工成本,大大提高驗光效率與質(zhì)量。如能在更多驗光室中推廣,對于提高驗光服務(wù)的質(zhì)量,有著很好的促進(jìn)作用。