趙龍 張云華


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