孫莎莎
(北京老年醫(yī)院,北京 100095)
計(jì)算機(jī)技術(shù)的飛速發(fā)展及其在各個(gè)領(lǐng)域的廣泛滲透,推動(dòng)了醫(yī)院管理模式向規(guī)范化、系統(tǒng)化發(fā)展[1]。目前,部分醫(yī)院患者就醫(yī)仍然存在掛號(hào)、排隊(duì)檢查時(shí)間較長、就診時(shí)間短等問題;不同時(shí)段,醫(yī)院內(nèi)患者流量不均;患者獲取檢查報(bào)告仍然需要親臨醫(yī)院獲取等問題。為提高患者就診體驗(yàn)感,使患者錯(cuò)峰就診,減少患者院內(nèi)無效等待時(shí)間、方便患者獲取檢查結(jié)果,提高就醫(yī)滿意度,基于電腦和移動(dòng)設(shè)備的互聯(lián)網(wǎng)醫(yī)院系統(tǒng)成為越來越多醫(yī)院和患者的實(shí)際需求[2]。為此,設(shè)計(jì)了一個(gè)基于J2EE技術(shù)的醫(yī)院互聯(lián)網(wǎng)管理系統(tǒng),系統(tǒng)以JAVA為主要編程語言,以eclipse為開發(fā)工具,以開源的SSH為基本框架,使用MVC模式設(shè)計(jì)Struts架構(gòu),保證系統(tǒng)的數(shù)據(jù)處理能力,使用SQL作為后臺(tái)數(shù)據(jù)庫,保證數(shù)據(jù)的完整性和系統(tǒng)的存儲(chǔ)效率。經(jīng)過測試,系統(tǒng)達(dá)到了預(yù)期的要求,改變了傳統(tǒng)的醫(yī)院互聯(lián)網(wǎng)管理模式,豐富了管理系統(tǒng)的維度。
經(jīng)過實(shí)際調(diào)研,確認(rèn)需求分析:互聯(lián)網(wǎng)醫(yī)院系統(tǒng)應(yīng)依托于醫(yī)院現(xiàn)有的基礎(chǔ)業(yè)務(wù)系統(tǒng),如HIS(醫(yī)院信息系統(tǒng))、EMR(電子病歷系統(tǒng))、LIS(實(shí)驗(yàn)室信息系統(tǒng))和PACS(醫(yī)學(xué)影像存儲(chǔ)與傳輸系統(tǒng))等系統(tǒng),使用接口與已有系統(tǒng)無縫連接,提供預(yù)約掛號(hào)、診間支付、檢查預(yù)約、檢查查看、我的住院、我的病史、我的體檢等功能,為患者提供“一站式”、“無紙化”電腦端和移動(dòng)端(Android端)持續(xù)性醫(yī)療服務(wù),提升醫(yī)院服務(wù)水平,提高就醫(yī)滿意度。
由于醫(yī)院信息服務(wù)系統(tǒng)面向的用戶數(shù)眾多、并發(fā)業(yè)務(wù)處理數(shù)量大、地理分布較廣且分散,因此在考慮網(wǎng)絡(luò)結(jié)構(gòu)模型時(shí)應(yīng)選擇 B/S 結(jié)構(gòu)的模式[3-4]。J2EE運(yùn)用Java API技術(shù)保障系統(tǒng)數(shù)據(jù)的安全傳輸與訪問,具有很高的安全性。J2EE為B/S提供中間件框架的開發(fā)環(huán)境如Enterprise JavaBeans,解決了系統(tǒng)性能以及安全保障問題;其應(yīng)用系統(tǒng)對多種操作平臺(tái)都有很好的適用性,對硬件的要求相對不高[5]。
互聯(lián)網(wǎng)醫(yī)院系統(tǒng)的技術(shù)架構(gòu)主要包括3個(gè)部分:基礎(chǔ)業(yè)務(wù)系統(tǒng)、移動(dòng)服務(wù)平臺(tái)和用戶入口[2]。移動(dòng)服務(wù)平臺(tái)將在業(yè)務(wù)邏輯層整合醫(yī)院內(nèi)已有的多系統(tǒng)數(shù)據(jù),一方面提供安全可靠的授權(quán)訪問模式供患者通過入口查詢個(gè)人醫(yī)療數(shù)據(jù);另一方面具備高繼承性和擴(kuò)展性,為第三方應(yīng)用提供便利接口,保證院內(nèi)醫(yī)療數(shù)據(jù)的安全。該系統(tǒng)技術(shù)架構(gòu)如圖1所示。
圖1 互聯(lián)網(wǎng)醫(yī)院系統(tǒng)技術(shù)架構(gòu)
該系統(tǒng)為患者提供“一站式”服務(wù),提供從預(yù)約掛號(hào)、檢查、體檢、住院等網(wǎng)上醫(yī)療服務(wù)。并為了方便患者,本系統(tǒng)提供電腦網(wǎng)頁版和移動(dòng)版(Android系統(tǒng)),其系統(tǒng)功能如圖2所示。
圖2 互聯(lián)網(wǎng)醫(yī)院系統(tǒng)功能
該系統(tǒng)為患者如下幾個(gè)方面提供服務(wù):1)導(dǎo)診。患者通過“預(yù)約掛號(hào)”于就診前一周內(nèi)選擇科室、醫(yī)生,進(jìn)行預(yù)約掛號(hào)并管理自己的預(yù)約;2)診療?;颊呖稍诰驮\后通過此功能查看病歷、預(yù)約各項(xiàng)檢查、支付檢查費(fèi)用并查看檢查結(jié)果,縮短在醫(yī)院內(nèi)等待檢查的時(shí)間;3)支付?;颊呓Y(jié)束診療期間和診療完成后支付診療費(fèi)用、藥費(fèi)、檢查費(fèi)和體檢費(fèi)等各種費(fèi)用,并提供各項(xiàng)賬單以供查詢;4)體檢?;颊呖稍诖颂庮A(yù)約體檢、選擇體檢項(xiàng)目,并在體檢后查詢體檢結(jié)果;5)信息。為患者提供醫(yī)院簡介、醫(yī)院新聞、醫(yī)生介紹和投訴建議等服務(wù)。
軟件研發(fā)中的軟件體系結(jié)構(gòu)及工作模式的設(shè)計(jì)是至關(guān)重要的環(huán)節(jié),因此這也是該服務(wù)平臺(tái)的研究中首先要考慮的地方。綜合考慮之后,本系統(tǒng)的網(wǎng)絡(luò)結(jié)構(gòu)和技術(shù)平臺(tái)分別采取 B/S 模式和J2EE。系統(tǒng)網(wǎng)頁端使用MyEclipse開發(fā),移動(dòng)端使用Android Studio進(jìn)行開發(fā),Tomcat進(jìn)行部署,MySQL做為數(shù)據(jù)庫,使用SSH(struts2+spring+hibernate)框架B/S 模式,B/S 模式的結(jié)構(gòu)如圖3所示,SSH框架如圖4所示。基于B/S 設(shè)計(jì)的軟件具有較好的擴(kuò)展性、穩(wěn)定性、安全性,并且在運(yùn)行和維護(hù)方面成本較低。
圖3 B/S結(jié)構(gòu)模型
圖4 SSH框架
作為醫(yī)院與患者聯(lián)系的重要工具,門戶網(wǎng)站的主要任務(wù)是提供信息服務(wù),因此我們采用面向服務(wù)的分布式體系結(jié)構(gòu)-SOA架構(gòu)[6]。它可以有效整合現(xiàn)存的應(yīng)用系統(tǒng),這樣就能實(shí)現(xiàn)系統(tǒng)項(xiàng)目模塊單獨(dú)開發(fā),從而減少系統(tǒng)開發(fā)時(shí)間。SOA架構(gòu)在結(jié)構(gòu)上將其分為表現(xiàn)層、流程引擎、服務(wù)層、組件層和資源層[7]。表現(xiàn)層設(shè)有瀏覽器頁面和功能窗口,流程引擎利用工作流引擎實(shí)現(xiàn)各部門之間的業(yè)務(wù)協(xié)作,資源層提供各種業(yè)務(wù)系統(tǒng)及數(shù)據(jù)庫,具體結(jié)構(gòu)如圖5所示。
圖5 SOA 架構(gòu)
作為數(shù)據(jù)庫管理和開發(fā)的工具,SQL Server具備龐大的日志數(shù)據(jù)儲(chǔ)量、強(qiáng)大的數(shù)據(jù)查詢功能[8-9]。SQL Server Agent 能夠自動(dòng)地定時(shí)管理數(shù)據(jù)庫,Server Service監(jiān)督用戶行為以保證數(shù)據(jù)庫的完整性[10]。Microsoft SQL Server 2008能夠提供有效的可擴(kuò)展與分析的信息處理解決方案,并且支持WEB環(huán)境下管理系統(tǒng)系統(tǒng)的設(shè)計(jì)與開發(fā),因此可以應(yīng)用WEB 技術(shù)對其中的字段信息進(jìn)行查詢、刪除、篩選、分析等基本操作[11-12]。
系統(tǒng)根據(jù)基于J2EE的SSH框架以及MVC模式進(jìn)行設(shè)計(jì)與開發(fā)[13],系統(tǒng)的技術(shù)架構(gòu)層次可以分為表現(xiàn)層、業(yè)務(wù)層和持久層及數(shù)據(jù)庫層。對于系統(tǒng)各層次結(jié)構(gòu)通過分層架構(gòu)技術(shù)設(shè)計(jì):表現(xiàn)層采用 Struts 框架實(shí)現(xiàn)各種動(dòng)態(tài) DHTML頁面、表單處理等;業(yè)務(wù)層的各種容器和編程活動(dòng)由 Spring 框架實(shí)現(xiàn);持久層包含的各種結(jié)構(gòu)由 Hibernate 框架實(shí)現(xiàn)。
為了統(tǒng)一管理并維護(hù)系統(tǒng)的正常運(yùn)行,同時(shí)促進(jìn)各部門的業(yè)務(wù)協(xié)作,實(shí)現(xiàn)各級的信息資源共享,醫(yī)院互聯(lián)網(wǎng)管理系統(tǒng)基于 SOA設(shè)計(jì)了應(yīng)用架構(gòu)體系。另外在系統(tǒng)中引進(jìn)工作流技術(shù),方便系統(tǒng)管理人員定義系統(tǒng)中業(yè)務(wù)處理流程和跟蹤控制信息處理狀態(tài)[14]。根據(jù) SOA 架構(gòu)的應(yīng)用體系,本平臺(tái)分為4層架構(gòu):
1)數(shù)據(jù)層位于最底層,包括系統(tǒng)數(shù)據(jù)庫、網(wǎng)站存儲(chǔ)及各單位的私有數(shù)據(jù)。
2)數(shù)據(jù)層的上方是支撐引擎層,支撐著各種邏輯處理業(yè)務(wù),將數(shù)據(jù)層和訪問層隔開,降低系統(tǒng)耦合度。
3)第三層為SOA服務(wù)總線,設(shè)有各功能的標(biāo)準(zhǔn)化接口和SOA服務(wù)[15]。
4)最后一層是平臺(tái)的業(yè)務(wù)層,提供各種用戶的業(yè)務(wù)入口。
本系統(tǒng)網(wǎng)頁端為中型網(wǎng)站,實(shí)際運(yùn)行中會(huì)遇到放號(hào)時(shí)段高并發(fā)訪問的問題,主要采用以下方法優(yōu)化網(wǎng)站,減輕服務(wù)器負(fù)荷,保證服務(wù)器正常運(yùn)行。
1)用索引提高效率。
2)查詢優(yōu)化應(yīng)用。如合理使用 EXISTS 子句,在子查詢中,NOT IN 子句將執(zhí)行一個(gè)內(nèi)部的排序和合并,因?yàn)樗鼘ψ硬樵冎械谋韴?zhí)行了一個(gè)全表遍歷,因此NOT IN 都是低效的,采用 NOT EXISTS 代替 NOT IN 可以提高查詢效率,同樣可以使用 EXISTS 代替 IN[8]。
盡管使用元組件模型,例如生成器的腳本模型,但應(yīng)用程序開發(fā)的整個(gè)方法使用了組件方法和元組件方法。對于應(yīng)用程序原型,盡管某些組件是從適當(dāng)?shù)脑M件生成的,但它可以由其組件模型完全描述,不必必須生成所有組件,某些組件可以不在應(yīng)用程序規(guī)范中定義其功能。生成器腳本模型的目標(biāo)是盡可能簡化應(yīng)用程序規(guī)范,因此它必須僅包含生成器問題域內(nèi)不同的特性。Java數(shù)據(jù)庫管理應(yīng)用程序示例的組件模型如圖6所示。
圖6 Java數(shù)據(jù)庫管理應(yīng)用程序組件模型
為降低服務(wù)器負(fù)擔(dān),將新聞、醫(yī)生信息、檢查報(bào)告和體檢報(bào)告生成靜態(tài)html頁面,患者訪問此類靜態(tài)頁面,并不需要經(jīng)過網(wǎng)站進(jìn)行程序處理,減少頁面解析的時(shí)間。靜態(tài)html頁面可以減少數(shù)據(jù)庫數(shù)據(jù)讀取量和邏輯運(yùn)算工作量,另外,html靜態(tài)化還能帶來其他好處,如有利于搜索引擎的收入,提高網(wǎng)站的影響力;減少SQL注入攻擊;增加安全性等[10-11]。
本網(wǎng)站使用httpclient實(shí)現(xiàn)Html靜態(tài)化,導(dǎo)入httpclient的jar文件后,生成html靜態(tài)頁面的方法代碼如下:
public static booleanHopStaticHtml(String basePath,String target,String path,String name,String extension) {
boolean result = true;
HttpClient client = new HttpClient();
GetMethodgetMethod = new GetMethod(basePath + "/" + target);
System.err.println(path);
try {
client.executeMethod(getMethod);
File hopfilePath = new File(path);
if (!hopfilePath.exists()) {
hopfilePath.mkdirs();
}
File file = new File(path + name + extension);
Writer w = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file),"UTF-8"));
w.write(getMethod.getResponseBodyAsString());
w.flush();
w.close();
} catch (Exception e) {
e.printStackTrace();
result = false;
}
return result;
}
本系統(tǒng)運(yùn)行時(shí)存在大量圖片,如檢查報(bào)告、檢查圖片、新聞圖片、醫(yī)生照片等。大量圖片的存在,影響網(wǎng)站性能,為提高服務(wù)器的性能和穩(wěn)定性,將耗費(fèi)資源的圖片服務(wù)分離出來,使用單獨(dú)的圖片服務(wù)器(ImageServer)并對圖片服務(wù)器做更有針對性的性能優(yōu)化,如使用高轉(zhuǎn)數(shù)(15 000轉(zhuǎn))硬盤等方式,極大地提高了網(wǎng)站訪問的效率。技術(shù)層面,圖片上傳后可以使用ftp同步到圖片服務(wù)器[12]。
對被頻繁訪問的業(yè)務(wù)數(shù)據(jù)進(jìn)行緩存。在應(yīng)用系統(tǒng)中,通常會(huì)有一些業(yè)務(wù)數(shù)據(jù)被用戶頻繁訪問,建立中間層數(shù)據(jù)緩存非常有用,可以減少與數(shù)據(jù)庫的交互次數(shù),從而改善系統(tǒng)的性能[13]。使用hibernate的一級緩存機(jī)制,將用戶常訪問數(shù)據(jù)放入內(nèi)存中,避免頻繁向數(shù)據(jù)庫中讀取數(shù)據(jù),有效增加了服務(wù)器的抗壓能力。
以上措施有效降低Web服務(wù)器的系統(tǒng)壓力,提高了訪問速度和效率,滿足目前訪問需求,如隨著時(shí)間的推移,業(yè)務(wù)量的加大,還可以考慮硬件提升、服務(wù)器集群、負(fù)載均衡等方式提升網(wǎng)站性能,應(yīng)對高峰期訪問等問題。
對本系統(tǒng)的功能測試主要使用黑盒測試的方法。黑盒測試主要測試軟件的功能和界面。測試者不需要了解程序的內(nèi)部情況,只從輸入的合法性及正確性,規(guī)范性,范圍性中監(jiān)測系統(tǒng)的輸入輸出結(jié)果是否與預(yù)期的一致而進(jìn)行的測試[14]。
5.1.1 人工測試
對設(shè)計(jì)的醫(yī)院互聯(lián)網(wǎng)管理系統(tǒng)進(jìn)行人工測試,對每個(gè)模塊的測試結(jié)果如表1所示。
表1 人工測試
通過使用多個(gè)測試賬號(hào)對所有功能進(jìn)行多次測試,測試時(shí)網(wǎng)站和Android軟件運(yùn)行良好,基本達(dá)到設(shè)定目標(biāo)。
5.1.2 自動(dòng)化測試
利用AutoRunner自動(dòng)化測試工具進(jìn)行了測試并通過[15]。測試結(jié)果表明,系統(tǒng)運(yùn)行穩(wěn)定,所有功能完備。
5.2.1 網(wǎng)頁端
系統(tǒng)測試是軟件設(shè)計(jì)中必不可少的環(huán)節(jié),它根據(jù)前期設(shè)定的原則和目標(biāo)檢測系統(tǒng)的功能和性能,防止系統(tǒng)存在運(yùn)行錯(cuò)誤和漏洞而影響系統(tǒng)的穩(wěn)定性與安全性[16],在此可以事先設(shè)置測試的指標(biāo)。測試前要準(zhǔn)備環(huán)境,然后準(zhǔn)備硬件設(shè)備,主要有數(shù)據(jù)庫與WEB服務(wù)器各一臺(tái),測試電腦和用戶電腦若干臺(tái)以及路由器、交換機(jī)等其他設(shè)備。綜合考慮,服務(wù)器無需過高的配置,具體參數(shù)如表2所示。
表2 醫(yī)院互聯(lián)網(wǎng)管理系統(tǒng)性能指標(biāo)
隨后確定測試所需的網(wǎng)絡(luò)環(huán)境,其拓?fù)浣Y(jié)構(gòu)如圖7所示。
圖7 網(wǎng)絡(luò)測試環(huán)境示意圖
統(tǒng)計(jì)測試項(xiàng)目的數(shù)據(jù)結(jié)果,具體結(jié)果如表3。根據(jù)表中數(shù)據(jù)分析可知該信息服務(wù)系統(tǒng)在并發(fā)數(shù)為100的前提下系統(tǒng)的業(yè)務(wù)處理成功率達(dá)到了99%,基本上滿足了性能測試的指標(biāo)值,系統(tǒng)響應(yīng)時(shí)間略大于測試目標(biāo)指標(biāo)值,已經(jīng)很好地完成了系統(tǒng)測試提出的要求。從整體上來說該系統(tǒng)已經(jīng)完成設(shè)計(jì)提出的目標(biāo),因此也就具有完整的系統(tǒng)功能以及穩(wěn)定可靠的系統(tǒng)性能和較強(qiáng)的業(yè)務(wù)處理能力。
表3 測試結(jié)果列表
5.2.2 Android端
測試方法:通過Linux的資源監(jiān)控命令來實(shí)現(xiàn)對Android平臺(tái)的資源實(shí)時(shí)監(jiān)控。
測試機(jī)器配置:CPU:高通驍龍980、RAM容量:8 GB。
測試內(nèi)容:1.CPU%:CPU占用率2.RSS:實(shí)際占用的物理內(nèi)存數(shù),單位MB。
測試結(jié)果如圖8、圖9所示。
圖8 CPU占用率測試結(jié)果
圖9 內(nèi)存占用測試結(jié)果
如圖8、9所示,系統(tǒng)在運(yùn)行時(shí)比較穩(wěn)定,占用CPU不超過15%,內(nèi)存占用不超過300 MB,測試機(jī)型為中端機(jī)型配置,該系統(tǒng)可以在絕大部分手機(jī)上正常運(yùn)行。
我國現(xiàn)有的醫(yī)院互聯(lián)網(wǎng)管理系統(tǒng)存在呈現(xiàn)信息少、交互性低、利用率以及共享性差,業(yè)務(wù)辦理窗口少、程序繁瑣,部門協(xié)同處理不明顯等問題,因此本文采用SOA、J2EE技術(shù)等技術(shù),運(yùn)用面向服務(wù)的設(shè)計(jì)架構(gòu),根據(jù)MVC的設(shè)計(jì)模式開發(fā)了統(tǒng)一管理、互動(dòng)性強(qiáng)的門戶網(wǎng)站,實(shí)現(xiàn)了醫(yī)院信息服務(wù)的分級管理,提高了醫(yī)院各部門之間協(xié)同業(yè)務(wù)辦理的能力。該系統(tǒng)經(jīng)過優(yōu)化后盡心了詳細(xì)測試,能平穩(wěn)運(yùn)行使用。投入使用后,極大地方便了患者,減少了患者在醫(yī)院的無效等待時(shí)間,提升了醫(yī)療滿意度。目前該系統(tǒng)還在開發(fā)完善中,后續(xù)將推出基于微信和IOS系統(tǒng)的互聯(lián)網(wǎng)醫(yī)院平臺(tái)入口,更好地滿足廣大患者的需求。信息服務(wù)系統(tǒng)的應(yīng)用可以使得醫(yī)院信息資源得到有效整合,促進(jìn)信息共享,再加上系統(tǒng)提供便捷的業(yè)務(wù)辦理流程,這樣就極大地提高醫(yī)院各部門的工作效率。另外信息服務(wù)系統(tǒng)還為醫(yī)院進(jìn)行政策與信息公開提供了一個(gè)很好的平臺(tái),促進(jìn)了醫(yī)院工作的公開化和透明化進(jìn)程。