彭德勇,肖飛,黃正東,宋莉莉
廣州軍區武漢總醫院 信息科,湖北 武漢 430070
目前,我院門診收費系統包括醫保、自費等多個收費系統,各系統并行運行,工作時操作人員必須進行系統切換,才能實現不同的收費功能,大大影響了工作效率[1]。各套程序在提取某一數據時的提取方式可能不一樣,從而導致提取的數據結果不一致;另外,如果數據提取方式發生變化需對程序進行改造,即各套程序都需要改造。所以,沒有一個統一的標準以及代碼的復用性低會帶來很多問題,且有些問題很難發現,解決起來還很困難,另外對程序的維護也會很困難。針對這些問題,本文提出了基于Web Service的醫院門診多個收費系統集成解決方案。
Web Service是一種構建應用程序的普遍模型,可以在任何支持網絡通信的操作系統中實施運行;Web Service是一種新的Web應用程序分支,是自包含、自描述的模塊化應用,可以發布、定位、Web調用;Web Service是一個應用組件,它邏輯性地為其他應用程序提供數據與服務,各應用程序通過網絡協議和規定的一些標準數據格式(Http、XML、Soap)來訪問Web Service,通過Web Service內部執行得到所需結果。Web Service可以執行從簡單的請求到復雜商務處理的任何功能,一旦部署以后,其他Web Service應用程序可以發現并調用它部署的服務[2-5]。
Web Service 是一個創建可互操作的分布式應用程序的新平臺,其目標在于實現跨平臺的可互操作性,它是完全基于XML、XSD 等獨立于平臺、獨立于軟件供應商的標準。Web Service 標準本身是建立在進一步標準,如HTTP和XML 的基礎之上的,通過使用這些被廣泛接受的技術,Web Service 不依賴于任何專有的系統或廠商,這樣就能在任何平臺上使用任何語言開發對Web Service的支持,如.NET、Java、Perl等。本文用.NET開發對Web Service的支持,并通過PowerBuider9.0的SOAP協議調用Web Service來實現醫院各收費系統的集成。
將醫保收費功能集成到地方收費程序中,收費操作在同一個窗口完成。系統會根據患者的費別進行判斷從而進入不同的處理流程。系統體系結構分為四個層次,包括Web Service層、醫保功能層、業務處理層和程序調用層;采用三層調用模式,醫保功能層調用Web Service層、業務處理層調用醫保功能層、程序調用業務處理層。其中業務處理層和醫保功能層在程序中進行單獨封裝。這樣一來,系統的集成性高,保證了低耦合性,在程序的移植和二次開發中更加方便快捷,系統體系結構,見圖1。

圖1 三層調用模式
打開Visual Studio,新建一個ASP.NET WEB服務應用程序項目,按默認情況,Web Service 放在Servicel.asmx中,類代碼放在Service1.asmx.cs 中。首先,對醫保相關動態鏈接庫(DLL)進行引用,調用外部函數。以實現連接醫保前置機功能為例,代碼如下:
(1)外部函數引用醫保接口提供的動態庫,聲明該動態庫提供的函數,供程序調用。
[DllImport("hnbridge.dll")]
private static extern long Initialize(string svrIP, long svrPort,int SndBufSize, int RecvBufSize);
注:在調用DLL前,初始化調用環境變量。整個調用工程只需調用該函數一次即可。
[DllImport("hnbridge.dll")]
private static extern long CreateInstace();
注:創建一個功能調用實例。在進行一個新的功能調用前必須執行該操作,以取得調用的處理句柄。返回的句柄將成為其他功能調用的入口參數。
[DllImport("hnbridge.dll")]
private static extern long SetParam(long pDataHandle, String paramName, String paramValue);
注:提供功能調用的參數組,如功能號以及其他功能的調用參數。
[DllImport("hnbridge.dll")]
private static extern long Run(long pDataHandle);
注:運行調用實例。pDataHandle:功能調用的處理句柄,由接口函數CreateInstace()創建。
[DllImport("hnbridge.dll")]
private static extern long DestroyInstance(long pDataHandle);
注:釋放功能函數調用句柄。
[DllImport("hnbridge.dll")]
private static extern long GetSysMessage(long pDataHandle,ref String Message1, uint nMaxMessage);
注:獲取詳細的系統信息。通過該函數可以獲取功能調用的返回信息;如果系統發生異常,則返回最后一次錯誤的出錯信息。
(2) 定義 Web Service方法。
[WebMethod(Description = "連接醫保前置機")]
//定義的Web Service
public long ConnectToYbServer(string fn, string yybh, string userid, string pwd, string jbr, string jbrq, string ClientType, string computer, string ip, string mac, string ybip,long port, ref string errMsg)
{
//聲明變量
long rnt,handle;
int sndBufSize = 16384;
int recvBufSize = 16384;
string fhz=string.Empty, msg=string.Empty;
//調用醫保接口函數進行初始化,連接醫保前置機
rnt = Initialize(ybip, port, sndBufSize, recvBufSize);
if (rnt <= 0) { return rnt; }//如果初始化失敗,函數返回handle = CreateInstace();//創建調用實例
rnt = SetParam(handle, "FN", fn); //設置功能號
rnt = SetParam(handle, "YYBH", yybh);//醫院編號
rnt = SetParam(handle, "USERID", userid);//醫院HIS登錄用戶
rnt = SetParam(handle, "PWD", pwd);//醫院HIS登錄密碼
rnt = SetParam(handle, "JBR", jbr);//經辦人
rnt = SetParam(handle, "JBRQ", jbrq);//經辦日期
rnt = SetParam(handle, "CLIENTTYPE", "HIS");//客戶端類型
rnt = SetParam(handle, "COMPUTER", computer);// 醫院HIS登錄計算機名
rnt = SetParam(handle, "IP", ip);//醫院HIS登錄計算機IP地址
rnt = SetParam(handle, "MAC", mac);//醫院HIS登錄計算機MAC地址
rnt = Run(handle); //運行該調用實例,向服務器發送請求并接收響應
if (rnt != 1)//如果實例運行不成功
{
GetSysMessage(handle, ref errMsg, 1024); //取詳細信息
DestroyInstance(handle); ///釋放調用實例
return rnt;//函數返回
}
//獲取返回的單項數據
rnt = GetParam(handle, "FHZ", ref fhz, 1024);//返回值
rnt = GetParam(handle, "MSG", ref msg, 1024);//返回信息
if (fhz != "1")//如果返回值不為’1’
{
errMsg = "連接醫保前置機服務器失敗!" + msg;//設置返回信息
DestroyInstance(handle);//釋放調用實例
return -1;//函數返回
}
rnt = DestroyInstance(handle); ///釋放調用實例
if (rnt != 1)//如果釋放調用實例失敗
{
errMsg = "HNHISBridge釋放調用實例操作異常!";//設置返回信息
return rnt;//函數返回
}
return rnt;//函數返回
}
將此WebService發布成IIS方式供門診收費程序調用。
使用PowerBuilder編程工具創建Web Service Proxy Wizard項目,程序在調用Web Service前必須引用一個pbwsclient90.pbd文件。所有醫保功能封裝在一個用戶對象中,如u_ybinterface對象,該對象中連接醫保前置機的函數名為uf_connect_yb,此函數調用Web Service接口代碼如下:

我院門診收費系統集成后,大大減輕了收費員工作量,同時也降低了收費的差錯率;解決了集成前數據不一致的問題,使數據的來源更加可靠,程序維護起來更加方便。對新引入的業務系統能夠通過這種方式,使用已經開發的Web Services接口實現與醫院信息系統(HIS)連接[6-7]。
本文主要介紹Web Service技術體系以及實現我院門診收費系統集成解決方案,針對我院多個門診收費系統各自為政的弊端,結合Web Service的特點和要求,構建了一種動態的、可控的、統一的全面集成化框架模式。該集成模式突破了傳統的集成方案在應用范圍等多方面的限制,提供了松藕合的遠程調用方式,完全屏蔽了不同軟件平臺之間的差異,不需要對現有系統做大的改動就可以實現集成的高可用性和高擴展性,拓展了現有系統之間的互操作能力。此技術對醫院信息系統集成提供了一種新的思路。
[1]夏慧,熊俊芬,張帆."軍衛1號"工程與武漢地方醫療保險系統的對接[J].醫學信息,2003,9(16):497-498.
[2]柴曉路.Web Services技術架構[M].北京:電子工業出版社,2003.
[3]端妮,郭文明,張雪林.基于Web service的遠程放射系統集成模型研究[J].南方醫科大學學報,2007,27(8):1203-1205.
[4]譚顯東,李存斌,樊建平,等.基于Web Services的電力營銷管理信息系統框架研究[J].計算機工程與設計,2008,(7):1820-1823.
[5]W3C.Web Service Architecture [EB/OL].(2004-02-11)[2014-03-01].http://www.w3c.org/TR/ws-arch.
[6]劉芳.分布式醫療信息系統互聯技術[J].中國醫療設備,2012,27(5):108-110.
[7]余浩,保鵬飛.HIS系統Web Services接口設計與實現[J].中國醫療設備, 2011,26(4):43-45.