李曉輝,李明彩,金松林,李莉
(1.河南科技學(xué)院信息工程學(xué)院,河南新鄉(xiāng)453003;2.新鄉(xiāng)醫(yī)學(xué)院醫(yī)學(xué)工程學(xué)院,河南新鄉(xiāng)453003)
隨著我國科技和醫(yī)療衛(wèi)生事業(yè)的發(fā)展,廣大居民更加關(guān)注個人健康狀況.同時,我國已進入人口老齡化社會[1],居民的健康關(guān)乎經(jīng)濟發(fā)展和社會進步.2017年7月14日,全國老齡辦、民政部、教育部、住房和城鄉(xiāng)建設(shè)部、國家衛(wèi)生計生委等五部委聯(lián)合發(fā)布了《關(guān)于制定和實施老年人照顧服務(wù)項目的意見》[2],其中規(guī)定國家對65歲以上老年人進行免費體檢;此外,政府機關(guān)、企事業(yè)單位均定期對職工進行體檢[3-4].可見,體檢已成為了解身體健康狀況的主要途徑.
各大醫(yī)院、社會機構(gòu)設(shè)立了體檢中心,采用信息化手段對體檢流程和數(shù)據(jù)進行管理,開發(fā)了體檢信息管理系統(tǒng)[5-6].但這些系統(tǒng)中,除體檢業(yè)務(wù)外,大多還需要與檢驗系統(tǒng)(LIS)和影像系統(tǒng)(PACS)對接[7-10],數(shù)據(jù)拓撲復(fù)雜、操作有延遲,導(dǎo)致客戶在體檢預(yù)約和查詢時體驗不夠好.因此,本文將預(yù)約和查詢數(shù)據(jù)從體檢系統(tǒng)中分離,設(shè)計了一款手機端體檢預(yù)約查詢App,以期提高體檢客戶體驗和操作效率.
對于國內(nèi)的體檢中心,體檢流程主要包括體檢預(yù)約、體檢登記、繳費并打印指引單、科室分檢、總檢、領(lǐng)取體檢報告等環(huán)節(jié).其中體檢預(yù)約、體檢登記和領(lǐng)取體檢報告功能可進行整合,確定體檢預(yù)約查詢App總體功能結(jié)構(gòu),如圖1所示.
圖1 App總體功能結(jié)構(gòu)Fig.1 The overall functional structure of the App
(1)注冊登錄功能.客戶可以將個人信息進行注冊,其中進行過體檢預(yù)約的客戶默認注冊成功,賬號為手機號,密碼通過手機短信發(fā)送,注冊成功后即可登錄App進行相關(guān)的操作.
(2)體檢預(yù)約功能.客戶能夠通過手機端進行預(yù)約,確定體檢的日期,并登記客戶的主要信息(姓名、年齡、性別、聯(lián)系方式等),能夠查詢預(yù)約情況和取消預(yù)約.系統(tǒng)能夠在體檢前一天通過手機端和短信推送提醒.
(3)體檢報告查詢功能.可通過注冊的手機號查詢關(guān)聯(lián)的歷次體檢報告,也可通過姓名和體檢號查詢單次的體檢報告.體檢報告信息包括總檢和科室分檢結(jié)論,對異常信息進行標識.
(4)健康資訊功能.提供關(guān)于身體健康方面的文章和體檢報告的解讀.
(5)體檢信息管理功能.后臺管理員實現(xiàn)體檢預(yù)約、體檢報告、健康資訊等信息的管理.
App設(shè)計采用展示層、服務(wù)層和數(shù)據(jù)層三層架構(gòu),如圖2所示.將數(shù)據(jù)、業(yè)務(wù)邏輯和數(shù)據(jù)展示進行分離.展示層實現(xiàn)客戶端數(shù)據(jù)請求和數(shù)據(jù)的展示,采用Delphi的FireMonkey技術(shù),通過一次編程和業(yè)務(wù)邏輯的實現(xiàn),分別封裝出IOS和Android兩個版本的App程序;服務(wù)層實現(xiàn)對請求數(shù)據(jù)的控制和邏輯操作,并將結(jié)果返回到展示層,該層采用Delphi的DataSnap技術(shù)開發(fā)出WebService服務(wù);數(shù)據(jù)存儲層采用SQLServer數(shù)據(jù)庫管理系統(tǒng)進行數(shù)據(jù)的存儲和操作,影像數(shù)據(jù)存儲在服務(wù)器特定的目錄下.其中展示層和服務(wù)層之間采用TCP/IP協(xié)議借助于Json技術(shù)進行通信,服務(wù)層和數(shù)據(jù)存儲層可位于不同的云服務(wù)器,通過TCP/IP協(xié)議通信.
圖2 App設(shè)計架構(gòu)Fig.2 The design architecture of the App
系統(tǒng)中數(shù)據(jù)的存儲包括客戶信息、體檢結(jié)果和影像圖像.其中客戶信息和體檢結(jié)果為文本或者數(shù)值,采用SQLServer數(shù)據(jù)庫進行存儲,而影像數(shù)據(jù)存儲在云服務(wù)器固定的目錄中,在數(shù)據(jù)庫中存儲影像文件的超鏈接即可.故將數(shù)據(jù)庫表劃分為客戶總檢信息表、客戶分檢信息表和影像信息表等.客戶總檢信息表結(jié)構(gòu)如表1所示.
表1 客戶總檢信息Tab.1 Customer summary examination information
客戶分檢信息表結(jié)構(gòu)如表2所示.
表2 客戶分檢信息Tab.2 Customer department examination information
體檢數(shù)據(jù)來自于各體檢中心,每天均產(chǎn)生新的體檢數(shù)據(jù),隨著體檢數(shù)據(jù)的增多,數(shù)據(jù)庫進行查詢的效率會逐漸降低.針對以上問題,采用數(shù)據(jù)庫分庫、分表的方式進行處理,同時,對于時間較早的數(shù)據(jù),進行及時歸檔.
服務(wù)層將展示層的數(shù)據(jù)請求進行處理,并對數(shù)據(jù)存儲層中的數(shù)據(jù)進行操作,將操作結(jié)果返回到展示層.該層采用Delphi語言的DataSnap組件實現(xiàn),在創(chuàng)建DataSnap程序時,系統(tǒng)會默認創(chuàng)建ServerContainerUnit1.pas、ServerMethodUnit1.pas和Unit1.pas三個單元文件.
ServerCaontainerUnit1.pas文件用于設(shè)置服務(wù)層的支持的協(xié)議和服務(wù)狀態(tài),需設(shè)置TDSTCPServerTransport、TDSServer和 TDSServerClass三個控件.其中 TDSTCPServerTransport用于 TCP/IP通信,TDSServer代表服務(wù)的狀態(tài),需將其AutoStart屬性設(shè)置為true,表示程序運行后自動啟動DataSnap服務(wù),TDSServerClass組件將服務(wù)端特定的類發(fā)布給遠程客戶端,用于遠程調(diào)用.
ServerMethodUnit1.pas文件完成前臺數(shù)據(jù)的請求和對數(shù)據(jù)庫的操作.首先根據(jù)連接的數(shù)據(jù)庫類型設(shè)置其驅(qū)動程序,App中數(shù)據(jù)存儲采用SQLServer,選用FDPhyMSSQLDriverLink即可;其次借助FDConnnection1控件,并設(shè)置其連接的數(shù)據(jù)庫服務(wù)器名稱、數(shù)據(jù)庫名稱、用戶名和密碼,得到連接數(shù)據(jù)存儲層的Connection對象;然后加入FDQuery控件,該控件可獲取SQL語句,并將返回結(jié)果通過DataSetProvider控件返回到手機端.
Unit1.pas文件作為服務(wù)層的主控界面,如圖3所示.設(shè)置一個文本框和兩個按鈕,其中文本框用來在啟動服務(wù)前設(shè)置服務(wù)層的端口號,兩個按鈕分別通過單擊事件,表示服務(wù)層的啟動和關(guān)閉.
圖3 服務(wù)層主控界面Fig.3 Main control interface of service layer
目前,主流的手機端App平臺包括IOS和Android,為了兼容平臺,本App采用Delphi的FireMonkey技術(shù),一次編程,可以分別編譯IOS和Android兩個版本的手機端程序.同時,手機端App需要滿足界面美觀,操作簡單,主要功能實現(xiàn)如下.
3.1.1 歡迎界面設(shè)計 打開App后會進入歡迎界面,采用左右滾動的4張圖展示App的特色.將4張圖片分別放置到TabItem中,并設(shè)置TabIndex的索引值Index,然后按照先后順序統(tǒng)一放入TabControl容器中,由于圖片僅需左右滑動操作,將TabControl的TabPosition值折修改為none,采用GestureMnager對象實現(xiàn)對圖片左右滑動的控制,當向左滑動圖像時,采用ChangeTabAction方法修改顯示的TabItem對象切換圖片,反之,按逆序執(zhí)行.
3.1.2 功能布局設(shè)計 App各功能分布在界面下方,采用選項卡的形式展示,當點擊某項功能時,即跳轉(zhuǎn)到對應(yīng)的功能界面,如圖4所示.功能布局的設(shè)置同歡迎界面設(shè)計,由于功能界面需要采用選項卡形式,故將TabControl容器的TabPosition值修改為Bottom.
圖4 功能布局界面Fig.4 Interface of function layout
體檢客戶在預(yù)約界面中可以進行體檢預(yù)約,首先選擇體檢的城市,會出現(xiàn)該城市對應(yīng)的體檢中心列表,選擇需要預(yù)約的體檢中心,然后單擊體檢預(yù)約按鈕即可填寫客戶的預(yù)約信息,在圖4中已顯示有關(guān)信息.體檢中心的選擇通過ComboBox控件實現(xiàn),在App啟動時會將城市列表顯示在當前位置處,當選擇好城市后,將查詢體檢中心的SQL語句發(fā)送到服務(wù)端,服務(wù)端返回數(shù)據(jù).進入預(yù)約后,將客戶填寫的信息插入到數(shù)據(jù)庫PEISPATIENT表,完成預(yù)約.
客戶體檢完成后,會形成全面的體檢報告,但體檢報告和影像圖像存儲在各體檢中心本地服務(wù)器,因此需要首先將其上傳到云數(shù)據(jù)庫,以備遠程查詢.
3.3.1 上傳體檢報告功能設(shè)計 為了便于體檢中心進行操作,上傳體檢報告功能采用操作窗口形式.分別為云數(shù)據(jù)庫、本地數(shù)據(jù)庫創(chuàng)建Text控件,用于輸入數(shù)據(jù)庫引擎、數(shù)據(jù)庫名稱、用戶名和密碼,兩個數(shù)據(jù)庫分別通過Connection控件連接云數(shù)據(jù)庫.對于影像圖像,需要在窗口中創(chuàng)建FTP控件,實現(xiàn)將影像圖像上傳.此外,通過設(shè)置Text控件接收需要上傳數(shù)據(jù)的條件(如:某客戶信息或者一定期限內(nèi)的體檢信息),根據(jù)條件構(gòu)建查詢語句對本地數(shù)據(jù)庫進行查詢,并將查詢結(jié)果保存在TADOquery控件中,然后將查詢結(jié)果逐條插入到云數(shù)據(jù)庫中.其中,由于影像圖像是按照相對地址存放在數(shù)據(jù)庫中,需要通過FTP形式上傳到云服務(wù)器對應(yīng)的磁盤目錄,同時,當影像圖像上傳不成功時,體檢數(shù)據(jù)要進行事務(wù)回滾,以保證數(shù)據(jù)一致性.
3.3.2 體檢報告查詢功能設(shè)計 體檢報告查詢根據(jù)手機端選擇的體檢中心、客戶賬號和查詢密碼,組成查詢語句對PEISPATIENT表進行查詢,當有查詢結(jié)果記錄數(shù)為0時,提示“未查詢到您的記錄,請重新輸入!”.當查詢結(jié)果記錄數(shù)大于等于1時,則跳轉(zhuǎn)到結(jié)果顯示頁面,將PEISPATIENT表中的Conclusion(總檢結(jié)論)字段顯示在總檢結(jié)論中,各科室的分檢結(jié)果根據(jù)客戶體檢號進一步在PEISPATIENEXAMITEM中進行查詢,并顯示在分檢結(jié)果頁面,如圖5所示.
圖5 體檢報告頁面Fig.5 Page of physical examination report
用戶在預(yù)約時,必須輸入個人的手機號,通過調(diào)用阿里云短信平臺發(fā)送驗證碼,驗證通過后,即默認注冊成功,密碼通過阿里云短信平臺發(fā)送到手機.登錄時,通過手機號碼和密碼即可成功登錄.登錄成功后即可進行體檢預(yù)約、體檢報告查詢、個人信息修改等操作.
體檢預(yù)約App基于北京標軟信息技術(shù)有限公司體檢軟件平臺對預(yù)約和報告查詢功能進行測試.
App測試環(huán)境選用云服務(wù)器和云數(shù)據(jù)庫,其中云服務(wù)器負責(zé)服務(wù)端的運行和體檢影像的存儲,云數(shù)據(jù)庫負責(zé)體檢報告數(shù)據(jù)、體檢科室的存儲,硬件和軟件配置信息如下:
品牌:阿里云服務(wù)器C
PU:4 塊,雙核 CPU
內(nèi)存:128 G
硬盤:10 TB
帶寬:200 MB
系統(tǒng):Windows Server 2012
云數(shù)據(jù)庫:SQL Server 2008R2
體檢預(yù)約功能測試包括App終端界面測試和功能測試.在終端界面測試方面,客戶可以通過預(yù)約頁面,選擇體檢城市(默認通過手機GPS定位功能,確定城市,亦可根據(jù)需要選擇其他城市),然后在選擇體檢中心位置會自動彈出所選城市的體檢中心,選定體檢中心后,即可通過體檢預(yù)約按鈕,跳轉(zhuǎn)到登記界面,用于登記個人信息和聯(lián)系方式.在功能測試方面,客戶按流程登記信息并提交后,數(shù)據(jù)會提交到遠程服務(wù)器,并將數(shù)據(jù)登記在SQL Server數(shù)據(jù)庫中.經(jīng)測試,體檢預(yù)約功能達到了預(yù)期的效果.
體檢報告查詢功能包括體檢數(shù)據(jù)上傳測試和體檢報告查詢測試.
4.3.1 上傳體檢報告功能測試 上傳體檢報告界面如圖6所示,通過連接數(shù)據(jù)庫按鈕,彈出的輸入框,分別設(shè)置本地數(shù)據(jù)庫、云數(shù)據(jù)庫和FTP服務(wù)器的相關(guān)設(shè)置信息,選擇自動上傳當天體檢數(shù)據(jù)或者總檢時間,即可查詢得到本地數(shù)據(jù)庫的體檢報告,并將數(shù)據(jù)自動上傳到云數(shù)據(jù)庫.經(jīng)查看云數(shù)據(jù)庫,影像字段和存儲位置一一對應(yīng),實現(xiàn)了上傳功能.
圖6 上傳體檢報告圖Fig.6 Upload report page
4.3.2 體檢報告查詢功能測試 用戶點擊查看體檢報告,跳轉(zhuǎn)入體檢報告查詢頁面,體檢客戶可通過選擇體檢中心所在的省、城市、體檢中心,并輸入體檢號和密碼,查詢體檢號對應(yīng)的一次體檢報告.如果體檢客戶需要查詢多次體檢報告,可通過登錄的方式查看.體檢報告展示頁面,可查看總監(jiān)醫(yī)生的建議和各科室分檢的詳細結(jié)果.
為了兼容IOS和Android手機端平臺,基于Delphi的相關(guān)技術(shù)開發(fā)了體檢預(yù)約查詢App,該App采用展示層、服務(wù)層、數(shù)據(jù)存儲層三層架構(gòu),將手機端、數(shù)據(jù)控制和數(shù)據(jù)存儲進行分離,實現(xiàn)了體檢預(yù)約查詢功能.但隨著體檢數(shù)據(jù)量逐漸增加,體檢報告查詢時間延遲較大,對數(shù)據(jù)庫進行了多服務(wù)器分庫、分表的優(yōu)化處理,并且對較早的數(shù)據(jù)進行了數(shù)據(jù)歸檔.該App在北京標軟信息技術(shù)有限公司平臺進行了測試,用戶體驗較好,達到了預(yù)期效果,運行穩(wěn)定.