方路平 林珏伟 姚家庆 盛邱煬
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,验光技师就可以很好地完成远程控制验光设备、实时接收验光数据、远程眼科诊断、患者信息整理归档等工作。目前应用已通过测试,在苹果应用商店中上架,并在多家验光室和眼科医院中推广使用,使用情况良好,反响甚佳。利用智能移动终端完成远程验光操作,可以优化验光流程,提升自动化程度,降低人工成本,大大提高验光效率与质量。如能在更多验光室中推广,对于提高验光服务的质量,有着很好的促进作用。