喬臻,袁駿毅,周晟劼
上海市胸科醫(yī)院 信息科,上海 200030
騰訊公司于2012年8月推出微信公眾平臺訂閱號和服務(wù)號后,不少組織和個人充分利用這一新媒體為其進行推廣并收到了很好的成效。隨后,微信公眾平臺開放了開發(fā)者模式,使平臺在原有功能的基礎(chǔ)上讓用戶可以開發(fā)其他功能,從此微信公眾平臺的功能可以無限大。由于基于微信平臺的醫(yī)療信息系統(tǒng)具有方便快捷、安全穩(wěn)定的優(yōu)勢,不少醫(yī)院搭建了基于微信公眾平臺訂閱號和服務(wù)號的醫(yī)療信息系統(tǒng),往往包括醫(yī)院介紹、專家簡介、預(yù)約掛號、報告查詢等功能,起到了良好的服務(wù)患者和宣傳推廣的效果[1]。然而由于服務(wù)號和訂閱號存在發(fā)送消息次數(shù)限制、關(guān)注權(quán)限過于開放、內(nèi)部保密性不佳等缺陷,并不適合作為面向醫(yī)院醫(yī)務(wù)人員提供內(nèi)部服務(wù)的平臺。
2014年9月,騰訊推出了適合于企業(yè)內(nèi)部管理、宣傳資訊的另一款公眾平臺——微信企業(yè)號,具有更加快捷和高效的特點,強調(diào)內(nèi)部管理,有效地實現(xiàn)權(quán)限控制與安全需求[2]。企業(yè)號可以幫助企業(yè)快速、低成本的實現(xiàn)高質(zhì)量的企業(yè)移動輕應(yīng)用,可以直接利用企業(yè)號的基本能力,加強員工的溝通和協(xié)同辦公,提升企業(yè)文化建設(shè)、公告通知、知識管理等,提高企業(yè)的運行效率[3]。微信企業(yè)號相對于服務(wù)號、訂閱號有更強的保密性,對于訂閱用戶可以進行身份驗證,能夠發(fā)送保密消息[4]。企業(yè)號的核心是通訊錄[5],它決定了哪些人可以關(guān)注;本質(zhì)是平臺上搭載的多個應(yīng)用,騰訊向企業(yè)號開發(fā)者提供了豐富的功能接口,以支持開發(fā)者進行企業(yè)號應(yīng)用開發(fā)[6]。
本文利用微信企業(yè)號能夠在移動端建立起員工與醫(yī)院內(nèi)部信息系統(tǒng)間的連接,具有保密性強以及支持分級權(quán)限管理的優(yōu)勢,搭建了基于微信企業(yè)號的醫(yī)院內(nèi)部服務(wù)平臺,并基于醫(yī)院決策層對醫(yī)療業(yè)務(wù)運行狀況了解的需要,結(jié)合HIS系統(tǒng)的實際和特點,開發(fā)了定時將醫(yī)院業(yè)務(wù)運行狀況數(shù)據(jù)推送給管理人員的功能模塊、醫(yī)療業(yè)務(wù)報表查詢功能模塊、總值班及各科室值班排班信息查詢功能模塊等,實現(xiàn)以安全、便捷、有效、經(jīng)濟的方式來滿足醫(yī)院各級管理決策層對醫(yī)院業(yè)務(wù)信息的及時了解的需求[7]。
為了與騰訊微信企業(yè)號平臺服務(wù)器進行消息通訊,需要在互聯(lián)網(wǎng)環(huán)境下,設(shè)置一臺微信企業(yè)號醫(yī)院內(nèi)部服務(wù)平臺前置機(以下簡稱前置機),并在該服務(wù)器上通過互聯(lián)網(wǎng)信息服務(wù)(Internet Information Services,IIS)部署網(wǎng)頁應(yīng)用程序和主頁型應(yīng)用網(wǎng)站。
為了使微信企業(yè)號院內(nèi)部服務(wù)平臺能從HIS、PACS、LIS、電子病案等系統(tǒng)獲取業(yè)務(wù)數(shù)據(jù),即從前置機上實現(xiàn)對HIS、PACS、LIS、電子病案等系統(tǒng)數(shù)據(jù)庫的訪問,實現(xiàn)報表查詢的功能,需要在醫(yī)院局域網(wǎng)環(huán)境下,再配置一臺業(yè)務(wù)中間件服務(wù)器,該服務(wù)器既連接HIS、PACS、LIS、電子病案等醫(yī)院信息系統(tǒng),同時又通過互聯(lián)網(wǎng)連接微信企業(yè)號院內(nèi)部服務(wù)平臺[8-9]。
在業(yè)務(wù)中間件服務(wù)器和HIS等系統(tǒng)之間通過防火墻、隔離網(wǎng)閘和安全網(wǎng)關(guān)等安全隔離設(shè)備進行連接,并采用IP映射和端口映射技術(shù),在網(wǎng)絡(luò)連通的同時,還能全面保護醫(yī)院醫(yī)療網(wǎng)絡(luò)的網(wǎng)絡(luò)安全和信息安全[10]。微信企業(yè)號院內(nèi)部服務(wù)平臺的系統(tǒng)架構(gòu),見圖1。
圖1 微信企業(yè)號院內(nèi)部服務(wù)平臺的系統(tǒng)架構(gòu)
本系統(tǒng)實現(xiàn)所需技術(shù)如下:
數(shù)據(jù)庫:Microsoft SQL Server 2008;系統(tǒng)架構(gòu):B/S架構(gòu);后臺程序語言:C#;前端展示:HTML5、Bootstrap WebUI框架、JavaScript腳本語言;應(yīng)用服務(wù)接口:Web Service。
針對醫(yī)院信息化系統(tǒng)建設(shè)存在的對決策支持力量較為薄弱,管理層人員對醫(yī)院醫(yī)療業(yè)務(wù)運行狀況的了解方式繁雜、重點不突出、決策滯后等問題,構(gòu)建了基于微信企業(yè)號的醫(yī)院內(nèi)部服務(wù)平臺,把醫(yī)療業(yè)務(wù)運行狀況數(shù)據(jù)放到移動終端,方便管理層人員及時查看信息,從而及時的做出決策?;谖⑿牌髽I(yè)號的醫(yī)院內(nèi)部服務(wù)平臺的總體功能結(jié)構(gòu)設(shè)計,見圖2。
圖2 微信企業(yè)號院內(nèi)部服務(wù)平臺總體功能架構(gòu)
1.2.1 業(yè)務(wù)數(shù)據(jù)查詢模塊
業(yè)務(wù)數(shù)據(jù)查詢模塊,能使用戶主動地獲取醫(yī)療業(yè)務(wù)運行狀況的相關(guān)數(shù)據(jù),滿足醫(yī)院管理決策層對醫(yī)療業(yè)務(wù)運行狀況數(shù)據(jù)按查詢條件進行自定義查詢的需求。根據(jù)不同級別管理者不同的業(yè)務(wù)關(guān)注需求,又細分為業(yè)務(wù)數(shù)據(jù)院長查詢模塊和業(yè)務(wù)數(shù)據(jù)科主任查詢模塊,實際效果,見圖3。
圖3 業(yè)務(wù)數(shù)據(jù)查詢模塊實際效果圖
業(yè)務(wù)數(shù)據(jù)查詢模塊采用網(wǎng)頁型應(yīng)用模式開發(fā),優(yōu)點是可以向用戶提供豐富的查詢條件,如查詢時間段、查詢業(yè)務(wù)范圍等,并能以網(wǎng)格的形式返回數(shù)據(jù)查詢結(jié)果,簡明直觀。
1.2.2 業(yè)務(wù)數(shù)據(jù)定時推送模塊
業(yè)務(wù)數(shù)據(jù)定時推送模塊,用于向用戶主動地推送醫(yī)療業(yè)務(wù)運行狀況相關(guān)數(shù)據(jù),按照時間頻率分為日報表和月報表,來滿足醫(yī)院管理決策層對醫(yī)療業(yè)務(wù)運行狀況在一個時間段內(nèi)的了解。業(yè)務(wù)數(shù)據(jù)定時推送模塊采用回調(diào)模式,當時間到達每天的設(shè)定時刻,以及每月第一天的設(shè)定時刻,程序會向指定用戶組(院領(lǐng)導(dǎo)或者科主任)發(fā)送相關(guān)業(yè)務(wù)報表(全院業(yè)務(wù)數(shù)據(jù)報表或者科室業(yè)務(wù)數(shù)據(jù)報表)。模塊運行效果,見圖4。
1.2.3 醫(yī)院值班信息查詢模塊
醫(yī)院值班信息查詢模塊,使用戶能夠通過微信企業(yè)號獲取醫(yī)院總值班及各科室的值班排班信息,相對于傳統(tǒng)紙質(zhì)排班表的查詢方式,具有實時便捷的優(yōu)點。
圖4 業(yè)務(wù)數(shù)據(jù)定時推送模塊實際效果圖
醫(yī)院值班信息查詢模塊采用自定義菜單模式,將各個值班部門設(shè)置在菜單欄中,以便用戶按需快速查詢。模塊運行效果,見圖5。
圖5 醫(yī)院值班信息查詢模塊實際效果圖
企業(yè)號管理員通過微信掃碼,登錄微信公眾平臺企業(yè)號后臺,即可對企業(yè)號進行設(shè)置管理。微信企業(yè)號后臺主要提供通訊錄、應(yīng)用中心、使用分析等功能。在通訊錄中,管理員可以導(dǎo)入用戶信息,設(shè)置用戶的組織架構(gòu)以及標簽分組,便于對不同組織架構(gòu)或標簽分組內(nèi)的用戶進行分類操作。通過應(yīng)用中心,可以新建應(yīng)用,目前微信企業(yè)號提供兩種類型的應(yīng)用,消息型應(yīng)用和網(wǎng)頁型應(yīng)用,前者可以自定義菜單,采用對話的形式,實現(xiàn)與用戶的消息互動;后者直接向用戶展現(xiàn)開發(fā)者提供的網(wǎng)頁,適用于承載帶有復(fù)雜查詢條件的業(yè)務(wù)報表。而在使用分析中,管理員可以隨時獲得任意時間段內(nèi)各應(yīng)用的使用情況,便于進行操作量統(tǒng)計。
綜上,在正式開發(fā)微信企業(yè)號之前,必須完成導(dǎo)入用戶通訊錄、編輯組織架構(gòu)和標簽分組、新建應(yīng)用、設(shè)置應(yīng)用可見范圍、設(shè)置應(yīng)用自定義目錄(消息型應(yīng)用)或主頁URL(主頁型應(yīng)用)等準備操作。
消息型應(yīng)用可以選擇設(shè)置為普通模式和回調(diào)模式。
普通模式下,可以通過簡單的界面編輯,來設(shè)置自定義菜單和自動回復(fù)內(nèi)容。適合作為提供固定信息查詢應(yīng)用的載體。
而開啟回調(diào)模式后,可以主動調(diào)用自主開發(fā)的接口,實現(xiàn)自定義功能,向用戶返回指定的信息。如果需要從數(shù)據(jù)庫中獲取信息,則必須采取這種模式。醫(yī)院業(yè)務(wù)數(shù)據(jù)定時推送模塊、醫(yī)院值班信息查詢模塊采用的都是回調(diào)模式下的消息型應(yīng)用。
在微信企業(yè)號后臺中開啟消息型應(yīng)用的回調(diào)模式時,企業(yè)號會要求開發(fā)者填寫應(yīng)用的URL、Token、EncodingAESKey 3個參數(shù)。URL是企業(yè)應(yīng)用接收企業(yè)號推送請求的訪問協(xié)議和地址,支持HTTP或HTTPS協(xié)議。Token可由企業(yè)任意填寫,用于生成簽名。EncodingAESKey用于消息體的加密,是AES密鑰的Base64編碼。當提交以上信息時,企業(yè)號將發(fā)送GET請求到填寫的URL上,GET請求攜帶4個參數(shù),企業(yè)在獲取時需要做UrlDecode處理,否則會驗證不成功。
因此,必須開發(fā)一個網(wǎng)站應(yīng)用程序(本平臺中創(chuàng)建的是visual 2010環(huán)境下的ASP.NET MVC 4.0項目),并通過IIS服務(wù)部署到前置機上,用于接收和返回企業(yè)號推送的HTTP請求,完成回調(diào)模式的驗證。同時接收企業(yè)號推送的消息與事件,植入邏輯處理和數(shù)據(jù)庫訪問操作代碼,并以XML和JSON消息的形式,通過HTTP POST和HTTP GET請求的方式返回給微信企業(yè)號服務(wù)器,再由微信企業(yè)號服務(wù)器將消息推送到用戶微信的APP端進行數(shù)據(jù)展示,以此實現(xiàn)消息型應(yīng)用的信息獲取和推送的功能。
定時推送醫(yī)療業(yè)務(wù)數(shù)據(jù),能夠滿足醫(yī)院決策層對醫(yī)療業(yè)務(wù)運行狀況的實時了解,提供輔助決策的作用。該模塊重要的是實現(xiàn)定時推送功能,平臺中采用自定義計時器委托(delegate),并在Controller的Index方法中開啟新線程,將計時器委托作為參數(shù)傳遞給線程的ThreadStart()方法來實現(xiàn)。計時器委托方法體結(jié)構(gòu)為一個死循環(huán),不停獲取系統(tǒng)時間,當系統(tǒng)時間與設(shè)置的報表推送時間一致時,則調(diào)用報表推送邏輯,向指定的用戶或用戶群體發(fā)送報表。
業(yè)務(wù)數(shù)據(jù)定時推送應(yīng)用需要定時從HIS系統(tǒng)中提取相應(yīng)的數(shù)據(jù),整合成業(yè)務(wù)報表相關(guān)文字信息,然后將該信息生成數(shù)據(jù)包,將數(shù)據(jù)包發(fā)出。程序流程為:① 通過計時器委托方法獲取當前系統(tǒng)時間;② 當前系統(tǒng)時間到達設(shè)定的報表推送時間時,從HIS數(shù)據(jù)庫獲取到需要發(fā)送的業(yè)務(wù)運行狀況信息;③ 將獲取到的HIS數(shù)據(jù)按需求整合成報表信息,作為參數(shù)準備給下一步調(diào)用使用;④ 發(fā)送企業(yè)號的corpid和corpsecret到微信服務(wù)器生成accesstoken;⑤ 將步驟③中生成的消息作為具體消息體,按照微信開發(fā)文檔上的消息類型數(shù)據(jù)格式生成數(shù)據(jù)包;⑥ 將數(shù)據(jù)包以HTTP POST請求的方式發(fā)送回微信企業(yè)號服務(wù)器。
網(wǎng)頁型應(yīng)用與只能夠提供自定義菜單界面和簡單消息發(fā)送返回交互的消息型應(yīng)用相比,顯然具有更高的界面自由度和信息承載量,用戶輸入的選擇性更強,信息展示方式也更為豐富。因此更適合作為對查詢條件復(fù)雜度,以及查詢結(jié)果展示結(jié)構(gòu)要求較高的應(yīng)用的載體。在本平臺中,醫(yī)院業(yè)務(wù)數(shù)據(jù)查詢模塊和醫(yī)院業(yè)務(wù)數(shù)據(jù)科主任查詢模塊,由于需要滿足自由選擇報表起始時間和門診住院業(yè)務(wù)范圍,以及以網(wǎng)格形式展示報表內(nèi)容的需求,因此均采用網(wǎng)頁型應(yīng)用進行實現(xiàn)。
本平臺網(wǎng)頁型應(yīng)用均使用HTML5語言、Bootstrap WebUI框架,以及JavaScript腳本語言進行編寫。HTML5是由萬維網(wǎng)聯(lián)盟(World Wide Web Consortium,W3C)于2014年10月完成標準化的Web標準,目前無論是電腦還是智能終端,互聯(lián)網(wǎng)的主要瀏覽器都對新標準提供了良好的支持[11]。Bootstrap框架一種是基于移動設(shè)備優(yōu)先的CSS/HTML框架,采用此框架可以開發(fā)“響應(yīng)式網(wǎng)頁”,可自動識別屏幕尺寸,從而調(diào)整出適合的網(wǎng)頁[12]。此外利用Bootstrap框架在網(wǎng)頁中實現(xiàn)動態(tài)表單的設(shè)計,允許用戶根據(jù)自己的需要,自由添加或者刪除表單中的元素[13]。
將開發(fā)完成的網(wǎng)站通過IIS服務(wù)部署在醫(yī)院微信企業(yè)號內(nèi)部服務(wù)平臺前置機上,隨后在微信企業(yè)號后臺中對網(wǎng)頁型應(yīng)用的主頁URL地址進行設(shè)置,即可完成應(yīng)用部署。用戶只要在微信企業(yè)號平臺中點擊網(wǎng)頁型應(yīng)用圖標,就會自動鏈接到設(shè)置好的URL地址,打開自主開發(fā)的網(wǎng)頁,進行業(yè)務(wù)報表條件選擇和查詢。
在醫(yī)院業(yè)務(wù)數(shù)據(jù)科主任查詢模塊中,在用戶打開該查詢模塊的網(wǎng)頁應(yīng)用時,系統(tǒng)必須對用戶的身份進行驗證,以獲悉用戶是屬于哪個科室,程序才能進行針對于該用戶所在科室的業(yè)務(wù)數(shù)據(jù)查詢和展示。
OAuth 2.0是一種先進流行的委托授權(quán)架構(gòu),該架構(gòu)可以讓資源擁有者委托第三方客戶端代表自己,實現(xiàn)對托管在資源服務(wù)器上受保護的HTTP資源或服務(wù)的訪問[14]。而要獲得微信用戶的身份信息,則需要調(diào)用微信企業(yè)號平臺提供的OAuth 2.0身份驗證接口[15]。根據(jù)微信企業(yè)號的OAuth 2.0身份驗證接口文檔,開發(fā)者可以構(gòu)建如下形式的鏈接:https://open.weixin.qq.com/connect/oauth2/authorize?appid=CORPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect,用戶點擊后,頁面將跳轉(zhuǎn)至redirect_uri?code=CODE&state=STATE,企業(yè)可根據(jù)code參數(shù)獲得員工的userid。
據(jù)此,本平臺在原有醫(yī)院業(yè)務(wù)數(shù)據(jù)科主任查詢應(yīng)用網(wǎng)站之外,另外編寫了一個身份驗證引導(dǎo)網(wǎng)頁,部署在前置機上,并在微信公眾平臺企業(yè)號后臺中,將該網(wǎng)頁的URL地址設(shè)置為醫(yī)院業(yè)務(wù)數(shù)據(jù)科主任查詢應(yīng)用的URL地址。
因此每當用戶在微信企業(yè)號平臺中點擊醫(yī)院業(yè)務(wù)數(shù)據(jù)科主任查詢應(yīng)用圖標,實際點擊的是身份驗證引導(dǎo)網(wǎng)頁,系統(tǒng)即可通過OAuth 2.0驗證接口獲得用戶的userid,即員工工號;再以工號為條件查詢HIS的員工基本信息庫,進一步獲取用戶所屬科室信息;隨后,將用戶的工號、科室代碼、科室名稱以URL傳參的形式添加在科主任查詢應(yīng)用網(wǎng)站的URL訪問地址之后,作為新的科主任查詢應(yīng)用網(wǎng)站訪問地址;最后通過refresh方法,控制頁面跳轉(zhuǎn)到帶有員工工號和科室信息的新的URL地址,實現(xiàn)了用戶身份信息的獲取和傳遞。
由于身份驗證引導(dǎo)網(wǎng)頁的處理邏輯非常迅速,幾乎瞬間就能跳轉(zhuǎn)到查詢應(yīng)用網(wǎng)頁,從用戶的角度來說,身份驗證操作是隱形的,因此本實現(xiàn)方式具有良好的用戶友好性。
我院于2016年3月啟用微信企業(yè)號院內(nèi)部服務(wù)平臺以來,經(jīng)過近一年的持續(xù)改進和運行,切實解決了傳統(tǒng)HIS模式下,醫(yī)院管理層對醫(yī)療業(yè)務(wù)運行狀況了解方式繁雜、信息傳遞不及時的問題,同時平臺還提供了常用信息查詢功能,為全體員工帶來便利,提升了內(nèi)部服務(wù)質(zhì)量。
利用基于微信企業(yè)號的醫(yī)院內(nèi)部服務(wù)平臺,除了可以實現(xiàn)醫(yī)院業(yè)務(wù)數(shù)據(jù)的查詢和定時推送,為醫(yī)院管理人員提供輔助決策依據(jù),還可以作為醫(yī)院移動OA平臺的入口,對醫(yī)院移動信息化建設(shè)和發(fā)展具有重大意義[16]。
[參考文獻]
[1] 王琦.微信公眾平臺在醫(yī)療信息化建設(shè)中的應(yīng)用和研究[J].福建電腦,2015,(4):1-2.
[2] 馬軍,馬堅,杜偉南,等.基于微信的醫(yī)療業(yè)務(wù)運行狀況推送平臺研究[J].醫(yī)療裝備,2016,29(7):116-118.
[3] 周解敏.微信公共平臺的營運開發(fā)——關(guān)于企業(yè)號的實踐與應(yīng)用[J].現(xiàn)代經(jīng)濟信息,2015,(10):153.
[4] 易偉.微信公眾平臺搭建與開發(fā)揭秘[M].北京:機械工業(yè)出版社,2015:2-4.
[5] 薛榮榮,閆學(xué)元.基于微信企業(yè)號的高校移動服務(wù)平臺研究[J].中國輕工教育,2016,(1):67-69.
[6] 周穎,陳敏蓮,胡外光,等.基于微信企業(yè)號的醫(yī)院輿情監(jiān)測響應(yīng)系統(tǒng)設(shè)計及應(yīng)用[J].中國數(shù)字醫(yī)學(xué),2017,12(2):56-58.
[7] 郭亞軍.微信公眾平臺在醫(yī)院信息化中的應(yīng)用[J].江蘇衛(wèi)生事業(yè)管理,2016,27(1):138-139.
[8] 謝晶晶.基于HTML5的移動辦公應(yīng)用研究[J].中國數(shù)字醫(yī)學(xué),2013,8(12):90-92.
[9] 唐俊開.HTML5移動WEB開發(fā)指南[M].北京:電子工業(yè)出版社,2012.
[10] 張麗,商洪濤,王彪,等.醫(yī)院微信服務(wù)平臺的設(shè)計與實現(xiàn)[J].中國醫(yī)學(xué)裝備,2015,10(12):46-48.
[11] 張玉清,賈巖,雷柯楠,等.HTML5新特性安全研究綜述[J].計算機研究與發(fā)展,2016,53(10):2163-2172.
[12] 舒后,熊一帆,葛雪嬌.基于Bootstrap框架的響應(yīng)式網(wǎng)頁設(shè)計與實現(xiàn)[J].北京印刷學(xué)院學(xué)報,2016,24(2):47-52.
[13] 談華宇,吳昶成,邱小平.基于Bootstrap框架的動態(tài)表單設(shè)計與實現(xiàn)[J].無線互聯(lián)科技,2015,(3):99-100.
[14] 沈海波.基于OAuth2.0的委托授權(quán)架構(gòu)[J].計算機與現(xiàn)代化,2016,(8):105-108.
[15] 萬園春,顧旸鋮,邱衛(wèi)東.微信交互協(xié)議和加密模式研究[J].微型電腦應(yīng)用,2015,3l(2):31-34.
[16] 朱瑾.微信與企業(yè)OA應(yīng)用整合的問題研究[J].科教導(dǎo)刊,2015,(3):153-155.