方路平 林玨偉 姚家慶 盛邱煬
1(浙江工業大學 浙江 杭州 310023)2(寧波明星科技發展有限公司 浙江 寧波 315100)
隨著移動應用的日益流行[1],互聯網基本完成了從傳統模式向移動設備接入模式轉變的過程。各種各樣的移動應用覆蓋了人們生活的各個方面,給人們的生活提供了許多便利。在此背景下,遠程醫療[2]和移動醫療[3]也得到了極大的發展,眾多基于iOS的交互式遠程醫療平臺也應運而生[4-5]。
在眼視光學中,驗光可以測出受檢眼與正視眼間的聚散差異程度,是最基礎又最重要的工作之一[6]。目前的驗光設備,需要驗光技師在旁操作,對于驗光技師造成了很大不便。據統計,在目前的驗光場所尤其是眼鏡店中,優質的驗光技師十分稀缺,很多時候亟需優質眼光服務的患者難以得到滿足。另外,在患者資料整理歸檔的方面,并沒有一個統一完善的管理系統,大大降低了驗光的效率,阻礙了眼視光治療的發展。
本文提出了一套行之有效的遠程驗光管理系統,主要包括了遠程驗光和患者醫療檔案管理兩大功能。前者使得一位驗光技師可以通過網絡或藍牙等信息手段自由控制不同方位的多臺驗光儀;后者則將每位患者的診療檔案,包括既往史、驗光記錄、治療習慣等信息整理保存到統一的數據庫中。系統在操作界面與操作流程上做了一定程度的設計與優化,與患者檔案相結合,極大提升了驗光技師的工作效率與驗光質量。
總體的設計框圖如圖1所示。整個系統由客戶端(平板電腦)、驗光設備(CV-7600,寧波明星科技)和服務器組成。圖中虛線代表互聯網連接,實線代表藍牙連接。驗光技師使用客戶端軟件,通過藍牙控制驗光設備,或者通過互聯網與服務器建立連接[7],訪問服務器接口。通過接口可以訪問患者檔案,了解患者信息,也可以自由控制驗光設備。驗光過程中所有儀器的反饋都會實時地顯示在客戶端上,方便驗光技師操作診斷。
本系統支持兩種驗光模式:本地驗光和遠程驗光。驗光技師使用客戶端進行本地驗光操作的流程如圖2所示。驗光技師在打開客戶端軟件后,先登錄到本地的驗光技師賬號,如果還沒有賬號,可以通過管理員創建賬號。同時,管理員也有權限刪除或修改驗光技師的信息。登錄賬號后,進行系統設置(非必須,默認加載上次設置)、選擇或編輯當前患者,再通過藍牙連接設備,即可在客戶端上對設備進行操作并且獲取反饋數據。如果是新患者,驗光技師可以使用客戶端添加患者資料,并且上傳至服務器;如果是老患者,驗光技師可以通過客戶端查看患者的資料,包括既往病史、驗光歷史、用眼習慣、遺傳史等。在了解了患者的詳細資料后,驗光技師可以根據患者的特點,進行更有針對性的驗光診斷。在驗光過程中,驗光技師可以手動控制每一步的操作流程,也可以加載自定義的自動化操作流程。驗光完成后,驗光技師可以直接在客戶端上確認并打印處方。

圖2 軟件使用流程圖
驗光技師在進行遠程驗光時的操作如圖3所示。驗光技師可以在任何有網絡的環境下,使用客戶端,與服務器建立socket連接。在連接成功后,登錄驗光技師賬號,并且保持心跳連接,進入排隊取號狀態。如此時有患者在門店要求該驗光技師驗光,客戶端會接到叫號請求,驗光技師在確認后即可遠程控制驗光設備。在網絡狀況良好的情況下,驗光技師可以像本地驗光時一樣進行驗光操作,并且得到實時的數據。在完成驗光后,驗光技師隨時可以選擇是否結束等待叫號,如果選擇結束,則發送結束遠程請求和注銷登錄請求,然后關閉socket連接,結束遠程驗光。如此,一名優秀的驗光技師,就可以在任意地點,同時給多個驗光室以及驗光設備提供驗光服務,很好地解決了優秀驗光人員不足的問題。

圖3 遠程驗光服務執行流程
系統采用了C/S架構,服務端使用了ThinkPHP[8]框架和MySQL數據庫,使用PHP語言進行開發,連接遵循http協議。客戶端使用了MVC架構[9]和SQLite數據庫,在Xcode環境下,使用Objective-C語言進行開發。測試環境為iPhone simulator和iPad air 2真機。本文主要介紹客戶端程序的實現。
客戶端程序采用模塊化開發理念,實現多模塊獨立運作,又相互融合的設計結構,共包含登錄模塊、管理員模塊、驗光模塊、患者模塊、驗光數據模塊、通信模塊、遠程模塊、打印模塊、設置模塊等9個模塊。模塊設計如表1所示。其中,患者模塊中的患者信息和驗光數據模塊中的驗光數據,會使用本地數據庫進行儲存和讀取。

表1 模塊功能設計表
患者模塊主要實現了本地和遠程患者的增改查,患者驗光記錄的查看和當前患者的選擇。包括:
(1) 本地患者的增改查,遠程患者的查詢。
(2) 本地患者和遠程患者的選定。
(3) 本地患者和遠程患者的最近驗光記錄查詢。
(4) 查找支持姓名和電話。
患者信息將被存儲在SQLite數據庫中,使用JKDBModel框架進行存取。每一個記錄包括了云id、姓名、性別、年齡、聯系方式、門店信息、既往史等86個字段,其中以云id為主鍵。由于字段數量大,且每個字段的屬性不同,為了規范化,需要在UI上對于每個單元格的操作作限制。包括文本輸入、單選、多選、日期格式、是否是必填等,使得存入數據庫的數據規范,同時也是基礎的防SQL注入處理[10]。如果使用固定單元格,不僅開發效率極低,維護難度較大,也非常不利于后期的功能擴展,所以在患者信息輸入模塊的設計上使用了MVVM架構[11],即模型(model)、視圖(view)、視圖模型(view model)。
建立單元格模型文件DM_Cell,模型結構見表2。其中,type為枚舉類型,枚舉列表見表3,由type控制單元格的輸入類型。對于不同類型的單元格,制作不同的單元格視圖模型,包括不同類型單元格的點擊方法。然后在一個Plist文件中,以字典的形式儲存每一個單元格的模型信息。在控制器的viewWillLoad方法中加載Plist文件,讓控制器在加載頁面之前讀取每個單元格對應的字典,根據字典加載不同的單元格模型。在cellForRowAtIndexPath方法中,根據索引號對應的單元格模型,讀取模型中的type屬性,加載對應的單元格視圖模型,并且根據模型初始化視圖中的一些屬性來進行顯示。不同類型的單元格對應的點擊方法或者跳轉動作都在視圖模型中實現完畢,如有額外需要,也可重寫此類方法。當患者確認個人信息時,控制器先判斷isNecessary屬性為YES的單元格是否都有信息,然后根據tagStr屬性來存入數據庫。若是后期需要更新數據庫,只需要修改Plist文件就可以更新UI界面;若是后期需要修改表格的樣式或者點擊功能,只需要修改相應的單元格視圖模型就可以實現。利用這種方式,可以極大地提升開發效率,并且利于后期維護和擴展。

表2 DM_Cell單元格模型結構表

表3 type枚舉列表
驗光模塊包含數值區、操作區、視標選擇區、視標預覽區、側邊欄5個部分。程序中的其他模塊大部分皆在本模塊被調用。本模塊的大多數功能通過Objective-C實現,但部分底層操作邏輯和數據通過C語言編寫,經Objective-C封裝后調用。驗光模塊的界面如圖4所示。其中,操作區UI完全模仿真實驗光儀的操作臺樣式,讓驗光技師不會太生疏。數值區體現了驗光過程中檢測的實時數據。

圖4 驗光模塊界面
通信模塊包括藍牙和網絡兩部分。網絡部分用于全程序的網絡連接管理,主要為患者檔案同步、驗光數據同步、 云視光驗光技師登錄與注銷、遠程驗光服務等功能提供支持。本模塊HTTP請求功能基于AFNetworking框架實現,socket基于 GCDAsyncSocket框架實現,XML基于KissXML框架實現。遠程驗光中,網絡連接使用自定義的協議,協議格式如圖5所示。

圖5 協議格式
藍牙部分用于App 與電腦驗光儀、綜合驗光儀、查片儀、液晶視力表等藍牙設備的連接與數據傳輸。藍牙部分的底層代碼,包括藍牙數據的解析等,用C語言編寫,用Objective-C對其封裝后使用。
驗光數據模塊用于處理、同步和展示驗光數據,在驗光模塊、患者模塊和管理員模塊中皆有調用。可在設置中定制本模塊樣式。驗光數據存儲于SQLite數據庫中,基于JKDBModel框架開發。驗光數據模塊界面見圖6。數據包括電腦驗光儀(RM)的球鏡(SPH)、柱鏡(CYL)、軸位(AXS)數值,查片儀(TL)的球鏡、柱鏡、軸位、添加值(ADD)、瞳距(PD),還有綜合驗光儀近用數據(CV-NEAR)和遠用數據(CV-FAR)和最終數據(FINAL-NEAR/FINAL-FAR),包括球鏡、柱鏡、軸位、水平棱角(H)、垂直棱角(V)、瞳距、添加值。

圖6 驗光數據模塊界面
打印模塊用于打印機的連接、相關數據傳輸與驗光數據的打印。本模塊基于UartLib框架開發。診斷處方的確認和打印都在打印模塊中實現,模塊界面見圖7。

圖7 打印模塊界面
遠程模塊用于完成遠程驗光的相關操作,驗光技師可以通過PC端或者移動端遠程控制驗光設備進行驗光。
(1) 進入后顯示當前賬號驗光技師信息。
(2) 點擊驗光室后,點擊右側驗光室確認驗光室。
(3) 點擊患者后,查看當前患者信息。
(4) 點擊排隊后,可在右側查看當前在線專家名單。點擊專家后開始取號排隊,等待專家叫號。
(5) 點擊左欄左上角“返回”鍵可返回主界面。點擊右上角“結束”,結束當前遠程驗光。
不同于使用藍牙進行控制,遠程驗光時,移動端的操作指令并不是直接發送給驗光設備,而是要通過服務器轉發給驗光設備。數據發送流程如圖8所示,當移動端接受驗光請求后,服務端會給移動端和驗光設備分配一對id號。驗光開始后,驗光技師在移動端進行操作,移動端將包含了操作命令的XML格式數據包發送給服務器。數據包包括排隊號、專家號、請求實體,請求實體包括請求碼、操作類型、操作值。請求碼表示的是請求類型,包括登錄認證、登錄應答、心跳應答、取號、叫號、開始控制、結束控制、數據同步等類型。操作類型包括加減度數、切換鏡片、旋轉角度等。操作值代表了操作的具體數值或者鏡片對應的序號。服務器根據移動端的id號,找到對應的設備id,并且將數據包轉發給驗光設備。驗光設備收到數據包后,解析XML數據,根據指令執行操作,并且將操作后的反饋數據發送回服務器。服務器再根據id號轉發給移動端,在移動端上進行顯示。如此循環,完成整個驗光操作。

圖8 遠程模塊數據發送流程圖
本系統結合寧波明星科技CV7600電腦驗光儀,在基于iOS平臺的移動智能終端上實現了遠程驗光的完整流程。僅通過iPad,驗光技師就可以很好地完成遠程控制驗光設備、實時接收驗光數據、遠程眼科診斷、患者信息整理歸檔等工作。目前應用已通過測試,在蘋果應用商店中上架,并在多家驗光室和眼科醫院中推廣使用,使用情況良好,反響甚佳。利用智能移動終端完成遠程驗光操作,可以優化驗光流程,提升自動化程度,降低人工成本,大大提高驗光效率與質量。如能在更多驗光室中推廣,對于提高驗光服務的質量,有著很好的促進作用。