趙龍 張?jiān)迫A
摘? 要:隨著現(xiàn)代醫(yī)療條件不斷提升、患者就醫(yī)需求日益增加,醫(yī)院門(mén)診部門(mén)人流大幅度增加,部門(mén)運(yùn)轉(zhuǎn)壓力增大。為了緩解醫(yī)院門(mén)診業(yè)務(wù)壓力,優(yōu)化門(mén)診流程,合理分流人群,合理引導(dǎo)患者有序就診,本文設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)基于微服務(wù)理論的門(mén)診信息服務(wù)系統(tǒng),引導(dǎo)患者快速完成就醫(yī)環(huán)節(jié)、減少等候時(shí)間、避免糾紛,同時(shí)大幅度降低醫(yī)護(hù)工作人員維護(hù)就診秩序的工作量。
關(guān)鍵詞:微服務(wù);門(mén)診信息服務(wù);優(yōu)化流程
中圖分類(lèi)號(hào):TP311.5? ? ?文獻(xiàn)標(biāo)識(shí)碼:A
Abstract:With the continuous improvement of modern medical conditions and the increasing demand for medical treatment,the outpatient has increased substantially,which add additional pressure on the department.In order to ease the stress on the outpatient department,this paper designs and implements an outpatient information service system based on micro-service theory to optimize the medical process and patient management,guiding the patients to be treated orderly.With the help of this system,patients will be able to enjoy a more favorable medical environment with efficient treatment,less time for waiting and less disputes.Meanwhile,the workload for maintaining the order will be greatly reduced.
Keywords:micro-service;outpatient information service;optimization process
1? ?引言(Introduction)
伴隨著中國(guó)城鎮(zhèn)化建設(shè)的步伐,在大城市的帶動(dòng)下小城鎮(zhèn)的生活節(jié)奏也發(fā)生了難以想象的變化,居民的生活水平在不斷提升,對(duì)教育、醫(yī)療這些國(guó)民基礎(chǔ)項(xiàng)目的服務(wù)水平也越來(lái)越高,傳統(tǒng)的醫(yī)療服務(wù)效率低下,醫(yī)療資源無(wú)法得到更高效的使用,造成了一部分資源的浪費(fèi),降低了看病治病的效率。并且隨著醫(yī)院業(yè)務(wù)需求的增加,系統(tǒng)設(shè)計(jì)、更新?lián)Q代也變得更加復(fù)雜化。
傳統(tǒng)的Spring框架(MVC架構(gòu))并發(fā)量差、容錯(cuò)性差,當(dāng)用戶(hù)大規(guī)模訪問(wèn)時(shí)服務(wù)器后臺(tái)因?yàn)橐恍┰驅(qū)е路?wù)器奔潰,用戶(hù)體驗(yàn)很差,服務(wù)質(zhì)量得不到保障。而采用Spring(微服務(wù)架構(gòu)[1])可以將單個(gè)項(xiàng)目拆分成多個(gè)子模塊分別部署在不同服務(wù)器上,采用負(fù)載均衡策略對(duì)各個(gè)模塊進(jìn)行部署。高效地解決了在患者集中掛號(hào)時(shí)期的服務(wù)器宕機(jī)問(wèn)題,方便了醫(yī)患者使用,提高工作效率。
門(mén)診信息服務(wù)系統(tǒng)主要是為患者(或家屬)服務(wù)的信息系統(tǒng),它是數(shù)字化醫(yī)療[2]的重要組成部分,是醫(yī)院信息化建設(shè)的對(duì)外窗口。全方位向患者提供咨詢(xún)信息,向患者實(shí)時(shí)發(fā)布就醫(yī)進(jìn)程,引導(dǎo)患者進(jìn)行排隊(duì)候診,合理分散人流。對(duì)分布在不同場(chǎng)景的信息服務(wù)顯示屏、自助機(jī)具及其他相關(guān)硬件設(shè)備,進(jìn)行遠(yuǎn)程監(jiān)控和管理。
2? 微服務(wù)架構(gòu)的研究(Research on micro-service architecture)
微服務(wù)(Microservice)是在2012年的,作為加速Web和移動(dòng)應(yīng)用程序開(kāi)發(fā)進(jìn)程的一種方法,是一種架構(gòu)風(fēng)格和模式,通過(guò)將復(fù)雜的系統(tǒng)分解成更小的、批次協(xié)同工作的服務(wù),形成大規(guī)模的商業(yè)服務(wù),其是自主的、自包含的和可獨(dú)立部署的服務(wù)。當(dāng)今世界,許多企業(yè)構(gòu)建大型的、面向服務(wù)的企業(yè)應(yīng)用程序時(shí),都默認(rèn)將微服務(wù)作為標(biāo)準(zhǔn)。由于SpringBoot框架的強(qiáng)大,開(kāi)發(fā)微服務(wù)不再冗長(zhǎng)乏味。
SpringBoot的優(yōu)勢(shì):
(1)簡(jiǎn)化編碼:SpringBoot幫助開(kāi)發(fā)者快速建立并啟動(dòng)一個(gè)Web容器,在SpringBoot中只需要添加stater-web依賴(lài)即可更加方便管理依賴(lài)庫(kù)。
(2)簡(jiǎn)化配置:SpringBoot更多采用Java Config的方式,對(duì)Spring進(jìn)行配置無(wú)需提供復(fù)雜的xml、Annotation的配置方式。
(3)簡(jiǎn)化部署:SpringBoot內(nèi)嵌了tomcat、jetty等服務(wù)器,只需將項(xiàng)目打成jar包、war包,即可一鍵啟動(dòng)。
(4)簡(jiǎn)化監(jiān)控:我們可以引入spring-boot-start-actuator依賴(lài),直接使用 REST方式來(lái)獲取進(jìn)程的運(yùn)行期性能參數(shù),以達(dá)到監(jiān)控的目的,比較方便。但Spring Boot只是微框架,沒(méi)有相應(yīng)的服務(wù)發(fā)現(xiàn)與注冊(cè)的配套功能,沒(méi)有外圍監(jiān)控集成方案,沒(méi)有外圍安全管理方案,所以在微服務(wù)架構(gòu)中,還需要dubbo等來(lái)配合一起使用。
3? ?系統(tǒng)總體架構(gòu)設(shè)計(jì)((System design for the overall framework)
為了提高系統(tǒng)的高可用性,部署方便,提高模塊復(fù)用率,減少各模塊之間相互依賴(lài),方便升級(jí),以及系統(tǒng)的集中管理,采用多層分控結(jié)構(gòu)設(shè)計(jì)包括主服務(wù)單元、子服務(wù)單元以及顯示單元??傮w框架圖如圖1所示。
(1)數(shù)據(jù)庫(kù):主要負(fù)責(zé)醫(yī)院數(shù)據(jù)的存儲(chǔ)可分為患者信息,醫(yī)護(hù)信息、醫(yī)療設(shè)備信息、醫(yī)院綜合能力評(píng)估信(專(zhuān)家評(píng)審、患者評(píng)審、醫(yī)護(hù)自評(píng)等),醫(yī)院病歷數(shù)據(jù)(歷史病歷、常見(jiàn)病病歷、罕見(jiàn)病病歷等)。所有數(shù)據(jù)進(jìn)行統(tǒng)一的存儲(chǔ)與管理,一切數(shù)據(jù)均存儲(chǔ)在MySQL中,而對(duì)某些常用信息(醫(yī)護(hù)信息、長(zhǎng)期病患者慢性、病患者、ICU患者等一些特殊患者信心)會(huì)在Redis進(jìn)行二次存儲(chǔ),以方便讀取。
(2)具體服務(wù):把邏輯層處理過(guò)的最終數(shù)據(jù)通過(guò)接口調(diào)用的方式存儲(chǔ)到MySQL中,并對(duì)敏感數(shù)據(jù)進(jìn)行二次更新或存儲(chǔ)到Redis中。
(3)業(yè)務(wù)邏輯層:主要提供給屏幕顯示下達(dá)指令,實(shí)現(xiàn)順序叫號(hào)、重復(fù)叫號(hào)、過(guò)號(hào)等分診服務(wù)器操作,以及醫(yī)生、診室、診位信息的維護(hù)操作,計(jì)算統(tǒng)計(jì)醫(yī)院的評(píng)估值等操作,為用戶(hù)界面提供高效的支持。
(4)用戶(hù)界面:主要通過(guò)ElementUI+vue.js實(shí)現(xiàn)常規(guī)的顯示(患者掛號(hào)情況、醫(yī)生就診情況、患者取藥情況、醫(yī)院評(píng)估統(tǒng)計(jì)的實(shí)時(shí)顯示)設(shè)備運(yùn)轉(zhuǎn)統(tǒng)計(jì)、常見(jiàn)病處理方法展示等。
4? ?系統(tǒng)模塊設(shè)計(jì)(System module design)
4.1? ?信息發(fā)布模塊
給用戶(hù)提供編輯節(jié)目的頁(yè)面信息顯示服務(wù)器對(duì)終端設(shè)備按照組進(jìn)行管理,編輯號(hào)節(jié)目單之后可以選擇節(jié)目單適用哪些設(shè)備播放,節(jié)目單包括患者排隊(duì)信息、患者就診信息、醫(yī)生叫號(hào)信息、患者取藥信息以及醫(yī)院的常規(guī)通知信息,醫(yī)院評(píng)估信息等,具體結(jié)構(gòu)如圖2所示。
4.2? ?排隊(duì)叫號(hào)
排隊(duì)叫號(hào)系統(tǒng)分為醫(yī)生端叫號(hào)器、分診服務(wù)器、護(hù)士工作站、一次分診屏、二次分診屏,自助報(bào)到機(jī)。
(1)醫(yī)生端叫號(hào)器
采用虛擬叫號(hào)軟件或者跟診療系統(tǒng)結(jié)合的方式實(shí)現(xiàn),有三個(gè)功能:順序叫號(hào)、重復(fù)叫號(hào)、過(guò)號(hào)。操作調(diào)用分診服務(wù)器提供的接口。
(2)分診服務(wù)器
分診服務(wù)器是核心,主要進(jìn)行隊(duì)列的處理。
(3)分診屏幕
一次分診屏和二次分診屏只需要顯示二次就診隊(duì)列當(dāng)前狀態(tài)即可,每次隊(duì)列有變化,則觸發(fā)一次顯示刷新。顯示功能交給信息發(fā)布的顯示模塊進(jìn)行。
(4)護(hù)士工作站
護(hù)士工作站通過(guò)分診系統(tǒng)的接口對(duì)分診系統(tǒng)的排隊(duì)情況進(jìn)行調(diào)整。包括:醫(yī)護(hù)工作者信息維護(hù)、診室信息維護(hù)、診位信息維護(hù)、醫(yī)生和診位的對(duì)應(yīng)信息、對(duì)診位和醫(yī)生狀態(tài)的設(shè)定:開(kāi)診、暫停、閉診、一級(jí)分診隊(duì)列排隊(duì)順序調(diào)整,包括調(diào)整患者優(yōu)先級(jí),調(diào)整同優(yōu)先級(jí)的患者就診順序。
有分診實(shí)時(shí)統(tǒng)計(jì)功能,能夠顯示當(dāng)前診區(qū)的基本狀態(tài),比如今天總掛號(hào)量、總報(bào)到量、已經(jīng)就診人數(shù)、等待就診人數(shù),包括每個(gè)號(hào)別的統(tǒng)計(jì),每位醫(yī)生平均診治時(shí)間,實(shí)際開(kāi)診時(shí)間等等,提供給分診臺(tái)護(hù)士。
簡(jiǎn)化配置功能,盡量讓軟件配置與實(shí)際的場(chǎng)景相一致,如果出診沒(méi)有變動(dòng),則開(kāi)機(jī)自動(dòng)運(yùn)行,到點(diǎn)切換。如果出診有變化,護(hù)士能夠?qū)ε渲米鑫⒄{(diào)。
有群發(fā)短信功能,能夠讓護(hù)士在系統(tǒng)上給醫(yī)生群發(fā)通知短信,可以選擇定時(shí)發(fā)送或者自由發(fā)送,提醒醫(yī)生不要忘記出診時(shí)間。
具體的結(jié)果圖如圖3所示。
4.3? ?設(shè)備管理
此模塊的功能比較單一,通過(guò)監(jiān)測(cè)設(shè)備運(yùn)行情況,將運(yùn)行狀況實(shí)時(shí)回傳到告警管理中心并對(duì)故障設(shè)備進(jìn)行故障鑒定,制定報(bào)警級(jí)別。錄入設(shè)備信息,報(bào)警編號(hào)等方便檢修人員的進(jìn)一步查看檢修。
4.4? ?醫(yī)院綜合評(píng)估
通過(guò)對(duì)模糊綜合評(píng)價(jià)算法對(duì)評(píng)價(jià)因素(評(píng)價(jià)因素包括專(zhuān)家評(píng)審、患者評(píng)審、醫(yī)院工作人員的自我評(píng)價(jià)以及綜合治愈率)建立評(píng)價(jià)因素集和評(píng)語(yǔ)集,確定被評(píng)價(jià)因素的權(quán)重比和構(gòu)造模糊判斷矩陣,通過(guò)模糊理論將權(quán)重矩陣和判斷矩陣合成綜合評(píng)價(jià)矢量值,并對(duì)矢量值進(jìn)行結(jié)果分析,將綜合評(píng)價(jià)結(jié)果轉(zhuǎn)換為相應(yīng)實(shí)體對(duì)象入數(shù)據(jù)庫(kù)中。
5? ?系統(tǒng)實(shí)現(xiàn)(System implementation)
5.1? ?技術(shù)棧支持
該門(mén)診信息服務(wù)系統(tǒng)采用SpringBoot+Dubbo+Redis+RabbitMQ方式搭建系統(tǒng)架構(gòu)。
Dubbo是一款高性能、輕量級(jí)的開(kāi)源Java RPC框架它提供了三大核心能力:面向接口的遠(yuǎn)程方法調(diào)用,智能容錯(cuò)和負(fù)載均衡,以及服務(wù)自動(dòng)注冊(cè)和發(fā)現(xiàn)。該框架不僅實(shí)現(xiàn)了高性能、高可用性,而且使用方便,擴(kuò)展性極佳[3]。
Spring Boot是Java領(lǐng)域知名的微服務(wù)框架,微服務(wù)的目的在于化解整體架構(gòu)服務(wù)的復(fù)雜性,以簡(jiǎn)單快速的方式實(shí)現(xiàn)各個(gè)服務(wù)的部署和變更。而SpringBoot提供了形式多樣的庫(kù),支持JPA、RESTFul、Docker等技術(shù),能夠讓配置、部署和監(jiān)控變得簡(jiǎn)單方便[4]。
Rabbit MQ基于Erlang語(yǔ)言編寫(xiě),用于在分布式系統(tǒng)中存儲(chǔ)轉(zhuǎn)發(fā)異步消息,將彼此獨(dú)立的計(jì)算機(jī)連接形成松耦合的系統(tǒng),Rabbit MQ在易用性擴(kuò)展性、高可用性等方面表現(xiàn)不俗[5]。
Redis是一款基于內(nèi)存的、可持久化的非關(guān)系型Key-Value存儲(chǔ)系統(tǒng),它支持多種數(shù)據(jù)類(lèi)型,并支持原子性操作。Redis與其他Cache相比,擁有更多的數(shù)據(jù)結(jié)構(gòu)并支持更豐富的數(shù)據(jù)操作[6]。
5.2? ?數(shù)據(jù)訪問(wèn)實(shí)現(xiàn)
數(shù)據(jù)層MyBatis框架提供的注解標(biāo)注實(shí)現(xiàn)訪問(wèn)即通過(guò)編寫(xiě)mapper文件與標(biāo)注@Mapper的Dao層接口一一對(duì)應(yīng),實(shí)現(xiàn)對(duì)象關(guān)系映射。
5.3? ?業(yè)務(wù)邏輯層實(shí)現(xiàn)
本系統(tǒng)從前端返回的數(shù)據(jù)類(lèi)型均為application/json格式,采用類(lèi)注解@RestController的形式接收返回的數(shù)據(jù),通過(guò)@RequestMapping的匹配請(qǐng)求地址,查詢(xún)數(shù)據(jù)采用GET方式,@GetMapping請(qǐng)求數(shù)據(jù),以及POST方式@Post Mapping提交數(shù)據(jù),并采用DELETE方式@DeleteMapping刪除數(shù)據(jù),以及PUT方式@PutMapping修改數(shù)據(jù),同時(shí)采用@RequestParam和@PathVariable提供參數(shù)據(jù)。
5.4? ?頁(yè)面實(shí)現(xiàn)
系統(tǒng)采用ElementUI+VUE.js的前端架構(gòu)來(lái)實(shí)現(xiàn)頁(yè)面編寫(xiě),VUE負(fù)責(zé)與后臺(tái)數(shù)據(jù)交互和前端頁(yè)面數(shù)據(jù)的動(dòng)態(tài)渲染,ElementUI負(fù)責(zé)靜態(tài)頁(yè)面的編寫(xiě)。
6? ?結(jié)論(Conclusion)
本文描述了有關(guān)微服務(wù)架構(gòu)的理念和優(yōu)點(diǎn),并且基于微服務(wù)架構(gòu)體系開(kāi)發(fā)了大中型醫(yī)院的門(mén)診信息服務(wù)系統(tǒng)介紹了各模塊的設(shè)計(jì)以及實(shí)現(xiàn)方法,在實(shí)際業(yè)務(wù)中微服務(wù)的架構(gòu)體系為門(mén)診信息服務(wù)系統(tǒng)后續(xù)功能的擴(kuò)充,建立更加完善的醫(yī)療服務(wù)體系提供了良好的技術(shù)支撐。此系統(tǒng)的應(yīng)用極大優(yōu)化了患者就醫(yī)的流程,使得就醫(yī)更加方便、快捷,減少了醫(yī)療資源的浪費(fèi)。
參考文獻(xiàn)(References)
[1] Balalaie A,Heydarnoori A,Jamshidi P.Microservices Architecture Enables DevOps:Migration to a Cloud-Native Architecture[J].IEEE Software,2016,33(3):42-52.
[2] Steinhubl Steven R,Topol Eric J.Digital medicine,on its way to being just plain medicine[J].NPJ digital medicine,2018(1):1-5.
[3] 陳曉棟.基于Dubbo分布式框架的信用卡無(wú)卡大額分期系統(tǒng)設(shè)計(jì)[J].信息與電腦(理論版),2017(07):132-135.
[4] 溫曉麗,蘇浩偉,陳歡,等.基于SpringBoot微服務(wù)架構(gòu)的城市一卡通手機(jī)充值支撐系統(tǒng)研究[J].電子產(chǎn)品世界,2017,24(10): 59-62.
[5] 魚(yú)朝偉,詹舒波.基于Rabbit MQ的異步全雙工消息線(xiàn)的實(shí)現(xiàn)[J].軟件,2016,37(2):139-146.
[6] 曾超宇,李金香.Redis在高速緩存系統(tǒng)中的應(yīng)用[J].微型機(jī)與應(yīng)用,2013,32(12):11-13.