摘 要: 由于我國醫(yī)療資源分布不均,經(jīng)濟落后的小城市、農(nóng)村以及基層社區(qū)醫(yī)院不具備專業(yè)的醫(yī)務(wù)人員和完善的心臟功能健康檢查設(shè)備,不能及時為心臟病患者提供準(zhǔn)確的診斷結(jié)果并進行病情監(jiān)測。針對這一社會現(xiàn)狀,研究整合了目前廣泛應(yīng)用的Struts2,Spring和Hibernate(SSH)框架技術(shù),構(gòu)建了臨床心音動態(tài)網(wǎng)站以實現(xiàn)心音的在線聽診。在系統(tǒng)的設(shè)計實現(xiàn)中,首先根據(jù)需求分析,采用B/S架構(gòu)選擇MVC的開發(fā)模式,采用SSH框架技術(shù)對系統(tǒng)進行分層設(shè)計,層與層之間用接口連接。在構(gòu)建系統(tǒng)的總體框架后,分別介紹系統(tǒng)各個模塊(用戶模塊、心音數(shù)據(jù)模塊、權(quán)限模塊、人體健康指標(biāo)評估模塊、論壇模塊)的實現(xiàn)流程。和傳統(tǒng)Web開發(fā)技術(shù)相比,SSH框架技術(shù)在極大程度上提高了系統(tǒng)代碼的可重用性和可移植性。最后通過Junit單元測試與系統(tǒng)性能測試,對動態(tài)網(wǎng)站進行測試。系統(tǒng)性能良好,各功能均能滿足需求,達到了預(yù)期效果。
關(guān)鍵詞: 心音; SSH; B/S模式; 分層設(shè)計
中圖分類號: TN915.41?34 文獻標(biāo)識碼: A 文章編號: 1004?373X(2016)21?0145?05
Design and implementation of clinical cardiac sound management and
diagnosis system based on SSH framework
ZHAO Xiao1, FANG Yu2, WANG Haibin1, GAN Fengping1, QIN Guojin1
(1. Key Laboratory of Signal and Information Processing, Xihua University, Chengdu 610039, China;
2. Graduate School of Science and Engineering, Yamaguchi University, Ube 755?8611, Japan)
Abstract: Some small cities, rural areas and community hospitals lack of the professional medical staffs and accurate inspection equipments for heart function detection, and can′t provide the accurate diagnosis results and monitor the illness for cardiopath. Aiming at this social situation, the Struts2, Spring and Hibernate (SSH) framework technologies are integrated to establish the clinical cardiac sound dynamic website for online auscultation of cardiac sound. According to requirement analysis, the B/S framework and MVC development mode are selected for system design implementation. The SSH framework technology is used for system′s hierarchical design, and the layers are connected with interfaces. The realization processes of user module, cardiac sound data module, permission module, health indicator evaluation module and forum module are introduced respectively after constructing the general framework of the system. In comparison with the traditional Web development technology, the reusability and portability of the system code are highly improved with the SSH framework technology. The dynamic website was tested with Junit test and system performance test. The system has good performance, satisfies the requirements for all functions, and achieves the desired effect.
Keywords: cardiac sound; SSH; B/S mode; hierarchical design
0 引 言
隨著我國人口老齡化日益加劇,人們對醫(yī)療保健的需求繼續(xù)增加。近年來心臟病的發(fā)病率居高不下,威脅人民生命健康。無論是心臟病的預(yù)防、及時治療還是術(shù)后監(jiān)護都已成為社會健康的熱點問題。而我國醫(yī)療資源有限,經(jīng)濟發(fā)達的東部以及東南部沿海城市享有健全的心臟檢測及監(jiān)護資源,而在經(jīng)濟落后的小城市以及農(nóng)村(例如衛(wèi)生站)沒有條件配備大型精確的心臟檢測儀器。許多患者紛紛涌入二線乃至一線城市尋求高質(zhì)量的醫(yī)療服務(wù),加重了城市醫(yī)療負擔(dān),日常健康監(jiān)護方面也不能得到保障,非常不利于心臟病防治問題的解決。
心臟聽診是臨床常見的心臟病診斷手段。心音是一種具有振幅、周期等特征要素的機械振動信號,可以反映心臟機械功能狀態(tài)。
針對以上社會現(xiàn)狀,本文開發(fā)了一套基于臨床心音管理與診斷系統(tǒng),病人在家就能了解自己的心臟健康狀況,達到早知道,早治療的目的。
本系統(tǒng)通過接收患者的心音數(shù)據(jù)(由專業(yè)人員使用心音的采集儀器采集后直接上傳),安全有序地存儲患者信息,后臺服務(wù)器自動分析患者心臟健康狀況,對心臟健康狀況初步診斷。
當(dāng)下國內(nèi)醫(yī)療環(huán)境現(xiàn)狀以及網(wǎng)絡(luò)的飛速發(fā)展,將醫(yī)療服務(wù)與網(wǎng)絡(luò)結(jié)合已成為不可逆轉(zhuǎn)的趨勢。本文基于Java在網(wǎng)站設(shè)計維護方面的優(yōu)勢,與社區(qū)醫(yī)療服務(wù)相結(jié)合,致力于設(shè)計一款人性化的基于臨床心音管理與診斷系統(tǒng)。
1 系統(tǒng)搭建前期準(zhǔn)備工作
1.1 系統(tǒng)開發(fā)模式選擇
常用的系統(tǒng)開發(fā)模式有兩種:一種是C/S(Client/Server)即客戶端/服務(wù)器模式。它是一種典型的兩層架構(gòu),客戶端包含一個或多個在用戶電腦上運行的應(yīng)用程序,服務(wù)器端主要是數(shù)據(jù)庫服務(wù)器。一種是B/S(Browser/Server)即瀏覽器/服務(wù)器。B/S模式將顯示邏輯和事務(wù)處理邏輯分離開來,增加一層Web服務(wù)器用于處理業(yè)務(wù)邏輯。這種模式統(tǒng)一了客戶端,不再需要單獨安裝客戶端系統(tǒng),客戶端只需要安裝一個瀏覽器即可。
為了給居住在各地的患者提供服務(wù),系統(tǒng)應(yīng)建立于廣域網(wǎng)上。為了讓用戶使用本系統(tǒng)可以隨時隨地查詢自己的健康診斷結(jié)果,了解心臟健康狀況,采用方便快捷的瀏覽器訪問方式。綜上,考慮系統(tǒng)跨平臺性及二次開發(fā)問題,本系統(tǒng)選擇B/S模式。
1.2 系統(tǒng)分層和開發(fā)框架的選擇
本系統(tǒng)選用JaveEE三層架構(gòu)[1],分別為表示層、業(yè)務(wù)邏輯層、數(shù)據(jù)訪問層。層與層之間用接口隔離,各層之間相互不影響[2]。
本文整合比較成熟的框架技術(shù)(見表1),搭建心音管理診斷系統(tǒng)。
2 系統(tǒng)設(shè)計
2.1 系統(tǒng)總體架構(gòu)設(shè)計
本系統(tǒng)總體分成5個模塊,分別為用戶模塊、心音數(shù)據(jù)模塊、權(quán)限模塊、人體健康指標(biāo)評估模塊、論壇模塊[3]。圖1為各模塊之間的關(guān)系圖。
2.2 主頁結(jié)構(gòu)設(shè)計
系統(tǒng)主頁選用藍色為背景色,給人以清新自然之感。系統(tǒng)主頁分為4個部分:標(biāo)題欄、導(dǎo)航欄、顯示區(qū)、頁腳區(qū)。圖2為系統(tǒng)登錄頁面。
主頁設(shè)置導(dǎo)航欄是為了完成以下功能:引導(dǎo)用戶完成系統(tǒng)各內(nèi)容頁面間的跳轉(zhuǎn);快速定位,幫助用戶快速找到相應(yīng)的內(nèi)容;定位用戶在系統(tǒng)中所處的位置。幫助用戶識別當(dāng)前瀏覽的頁面與系統(tǒng)整體內(nèi)容間的關(guān)系,以及與系統(tǒng)中其他內(nèi)容的聯(lián)系和區(qū)分。
本系統(tǒng)設(shè)計了簡單的LOGO,標(biāo)題欄上使用jQuery[4]技術(shù)設(shè)計了一個動態(tài)循環(huán)滾動播放的公告欄,用于系統(tǒng)公告通知。在公告欄旁設(shè)計切換帳號的按鈕(退出按鈕),方便用戶操作。圖3為系統(tǒng)的主頁圖。
2.3 用戶模塊設(shè)計
用戶模塊的主要功能是存儲用戶的基本信息(登錄ID、姓名、身高、體重、聯(lián)系方式等),密碼使用MD5加密技術(shù)加密。數(shù)據(jù)庫選用MySQL存儲數(shù)據(jù)。表2為用戶基本數(shù)據(jù)在數(shù)據(jù)庫中的各字段設(shè)計,這里只列出部分字段,關(guān)聯(lián)字段和其他字段沒有列出。
另外,用戶模塊可以對用戶數(shù)據(jù)進行增、刪、查、改的操作并增加對用戶數(shù)據(jù)進行搜索的功能。
2.4 心音數(shù)據(jù)模塊設(shè)計
心音模塊的主要功能是存儲用戶的心音數(shù)據(jù)。用戶的心音數(shù)據(jù)可以通過在線上傳和實時采集兩種方式保存。在線上傳是通過編寫上傳控件通過網(wǎng)頁直接上傳用戶心音數(shù)據(jù)[5];另外,考慮到醫(yī)務(wù)人員使用需求,可以直接將前端采集到的心音數(shù)據(jù)通過WiFi直接上傳到服務(wù)器上,稱為實時采集。
由于病人心音數(shù)據(jù)比較大(100~1 000 Kb左右),一般不直接存入數(shù)據(jù)庫,而以存儲文件的路徑方式存儲[6]。考慮到病人心音數(shù)據(jù)的安全性,存入數(shù)據(jù)庫中的心音數(shù)據(jù)路徑使用MD5加密技術(shù)加密。用戶心音表設(shè)計見表3。
心音數(shù)據(jù)模塊也具有增、刪、查、改、搜的功能,具體實現(xiàn)和用戶模塊類似[7?8]。
2.5 權(quán)限模塊
為了確保系統(tǒng)能夠安全地運行,設(shè)計了權(quán)限模塊管理系統(tǒng)。系統(tǒng)的權(quán)限由超級管理員統(tǒng)一分配,不同的角色擁有不同的權(quán)限。
通過覆蓋Struts2的源碼來控制標(biāo)簽的顯示。在src目錄下創(chuàng)建一個包名為org.apache.struts2.views.jsp.ui的包,創(chuàng)建一個Java文件AnchorTag.java,拷貝Sturts2源碼進行修改。主要代碼如下:
public int doEndTag() throws JspException{
// 準(zhǔn)備顯示權(quán)限的User
User user = (User)pageContext.getSession().
getAttribute(\"user\");
String url = \"/\" + action;
if(user.hasPrivilegesByUrl(url))
{
return super.doEndTag(); //顯示超鏈接
}
else {
return EVAL_PAGE; //不生成與顯示超鏈接
}
}
通過不顯示超鏈接可以阻止沒有權(quán)限的用戶在網(wǎng)頁上點擊進入,但是不能控制用戶直接輸入URL地址訪問沒有訪問權(quán)限的網(wǎng)頁,這顯然是不安全的。
通過使用攔截器判斷用戶角色權(quán)限訪問JSP頁面,主要代碼如下:
class=\"com.zhaoxiao.bio.util.checkPrivilegeInterceptor\">
name=\"checkPrivilege\"> 2.6 人體健康指標(biāo)評估模塊 該模塊的主要功能是評估用戶的身體(心臟)健康程度,分為兩種方法評估:一種是醫(yī)生在線聽診之后給出診斷結(jié)論,供用戶在線查詢;一種是依靠后臺服務(wù)器提供的基于心音的心臟功能評估方法為患者提供身體健康指標(biāo)[5],供患者參考。圖4為系統(tǒng)評估模塊的界面。 由于心音分析應(yīng)用程序使用Matlab編程語言實現(xiàn),無法直接應(yīng)用,須轉(zhuǎn)化成可以直接應(yīng)用的Java診斷包,供健康評估業(yè)務(wù)邏輯的調(diào)用。 Matlab分析程序打包成Java軟件包的步驟如下: (1) 在Matlab命令窗口中輸入deploytool,彈出Deployment Project窗口,工程包命名為“Diagnose.prj”,選擇目標(biāo)類型為“Java Package”,單擊“OK”按鈕進行確認; (2) 彈出Deployment Tool窗口,點擊Class1選擇需要打包的Matlab程序,點擊“Build”編譯; (3) 編譯完成后生成Diagnose.java診斷應(yīng)用程序包。 利用打包好的Dia.java(由于與接口重名將Diagnose.java改名為Dia.java)設(shè)計診斷業(yè)務(wù)邏輯。通過在UserAction中的login()方法中寫入業(yè)務(wù)邏輯進行診斷,主要代碼如下: public interface Diagonse { public String diagnose(User u); } import com.zhaoxiao.bio.utils ... class UserAction extends BaseAction ... public String login() { ... //對用戶的心音數(shù)據(jù)在登錄時進行診斷,診斷結(jié)果直接插入數(shù)據(jù)庫在網(wǎng)頁上顯示 //拿到當(dāng)前用戶 User user = userService.find(model.get LoginName(),model.getPassword()); if(user == 1) { addFieldError(″login″,″error″); } else { //Dia實現(xiàn)了接口 Diagnose dia = new Dia(); String desc = Dia.diagnose(User); // 將診斷結(jié)果插入數(shù)據(jù)庫 //讓User為持久化狀態(tài) User user = userService.getById( model.getId()) user.setdescription(desc); //交給Service處理 userService.update(user); ... } } } 由于后續(xù)需要綜合多種分析方法以提高評估精度,所以設(shè)計接口,方法名取為diagnose(),返回值為String類型的診斷結(jié)果。 用戶在每次登錄的時候進行心音數(shù)據(jù)(txt類型)的分析,第二次登錄時做校驗,提高系統(tǒng)運行效率。圖5為本系統(tǒng)數(shù)據(jù)庫表設(shè)計圖。 3 系統(tǒng)測試 Junit單元測試解決程序邏輯問題,這里不再贅述。下面介紹系統(tǒng)性能測試: 首先搭建測試環(huán)境,測試環(huán)境如下: (1) 硬件環(huán)境: Dell成就5560筆記本電腦,64位WIN7操作系統(tǒng),Core i5處理器,4 GB內(nèi)存。 (2) 軟件環(huán)境:IE11,MySQL數(shù)據(jù)庫,MyEclipse10.0,tomcat7.0.57。 (3) 測試過程及結(jié)果: ① 將需要進行測試的項目利用MyEclipse導(dǎo)入Tomcat的webapps文件夾下。 ② 點擊MyEclipse中的start按鈕啟動tomcat服務(wù)器。 ③ 打開IE11瀏覽器,在地址欄中輸入http:// localhost:8080/Bio回車,出現(xiàn)登錄頁面。 ④ 對系統(tǒng)各個功能模塊(用戶模塊、心音數(shù)據(jù)模塊、權(quán)限模塊、人體健康指標(biāo)評估模塊、論壇模塊)進行測試,各功能均已實現(xiàn),系統(tǒng)運行良好。 經(jīng)過系統(tǒng)性能測試,表明該系統(tǒng)性能良好,實現(xiàn)了上述各模塊功能。 4 結(jié) 語 我國心臟健康檢測設(shè)備大多分布在一二線城市的大型醫(yī)院中,經(jīng)濟落后的農(nóng)村和基層社區(qū)醫(yī)院缺乏這樣的醫(yī)療資源。本文從這一實際情況出發(fā),開發(fā)了一套臨床心音管理與診斷系統(tǒng)以便幫助病人了解自己的健康問題。 本系統(tǒng)整合了目前成熟的Struts2,Hibernate3,Spring2.5框架技術(shù),搭建了上述心音管理診斷系統(tǒng),經(jīng)過系統(tǒng)性能測試,系統(tǒng)穩(wěn)定且用戶模塊、心音數(shù)據(jù)模塊、權(quán)限模塊、人體健康指標(biāo)評估模塊、論壇模塊功能均已實現(xiàn)。本系統(tǒng)為借助網(wǎng)絡(luò)的心音聽診和心臟功能監(jiān)護提供了基本框架。后續(xù)為了完善系統(tǒng)功能,心音處理算法的精確性和高效性還有待進一步提高。 參考文獻 [1] 付更麗,曹寶香.SOA?SSH 分層架構(gòu)的設(shè)計與應(yīng)用[J].計算機技術(shù)與發(fā)展,2010,20(1):74?77. [2] 白廣元.Java Web整合開發(fā)完全自學(xué)手冊:Struts2+Spring+Hibernate+Eclipse[M].北京:機械工業(yè)出版社,2009. [3] 李剛.輕量級JavaEE企業(yè)應(yīng)用實戰(zhàn):Struts2+Spring+Hibernate整合開發(fā)[M].3版.北京:電子工業(yè)出版社,2008. [4] 劉斌.精通Java Web整合開發(fā):JSP+AJAX+Struts2+Hibernate[M].2版.北京:電子工業(yè)出版社,2011. [5] KRUSZELNICKI K. Persist data with Java data objects, Part I [J]. Java world, 2002(3): 20?25. [6] 孫衛(wèi)琴.精通Hibernate:Java對象持久化技術(shù)詳解[M].2版.北京:電子工業(yè)出版社,2010. [7] 孟晨,趙春亮,張建國.泛型DAO模式在Java Web開發(fā)中的應(yīng)用[J].計算機應(yīng)用與軟件,2012,29(1):175?177. [8] 李淑芳,胡克寒,張鳳麗,等.基于SSH2框架的高??蒲芯W(wǎng)絡(luò)管理系統(tǒng)的實現(xiàn)[J].計算機應(yīng)用與軟件,2010,27(7):195?196. [9] 計文柯.Spring技術(shù)內(nèi)幕?深入解析 Spring 架構(gòu)與設(shè)計原理[M].北京:機械工業(yè)出版社,2010. [10] 王燕,王海濱,劉立漢.基于小波變換的心音信號降噪方法[J].信息與電子工程,2010(3):303?307.