using System; using System.Collections.Generic; using System.Linq; using System.Text; using NHapi.Base.Model; using NHapi.Base.Parser; using NHapi.Model.V24.Segment; using NHapi.Model.V24.Message; using MediII.Common; using NHapi.Base.Util; using System.ComponentModel.Composition; using Microsoft.Practices.EnterpriseLibrary.Data; using System.Data.Common; using IL.Common; namespace MediII.Adapter.BizComponent.Base { [Export] public abstract class BaseBizComponent : IBizComponent { protected PipeParser parser = new PipeParser(); //数据库连接 protected Database ctx; static IBizBehavior BizBehavior { get; set; } public BaseBizComponent() { DatabaseProviderFactory factory = new DatabaseProviderFactory(); ctx = factory.CreateDefault(); } static BaseBizComponent() { string bizBehavior = System.Configuration.ConfigurationManager.AppSettings["BizBehavior"]; if (string.IsNullOrEmpty(bizBehavior)) { BizBehavior = new DefaultBizBehavior(); } else { string[] ar = bizBehavior.Split(','); string assemblyName = ar[0]; string typeName = ar[1]; try { BizBehavior = Activator.CreateInstance(assemblyName, typeName).Unwrap() as IBizBehavior; } catch { BizBehavior = new DefaultBizBehavior(); } } } /// /// 处理消息 /// /// 解析后消息的抽象类型 public abstract string DoProcess(string message,string msgType,string ID); /// ///实现处理的接口 /// /// 传入的消息字符 /// public string Process(string message, string msgType,string ID) { //IMessage m = parser.Parse(message); //ISegment msh = (ISegment)m.GetStructure("MSH"); //string messageID = Terser.Get(msh, 10, 0, 1, 1); OperateXmlUtil xmlHelper = new OperateXmlUtil(); string messageID = xmlHelper.XpathRead(message, "//*[@root='2.16.156.10011.2.5.1.1']", "extension"); string guid = MediII.Common.GUIDHelper.NewGUID(); OnProcessing(guid, messageID, message,"HL7v3"); string ack = DoProcess(message, msgType, ID); OnProcessed(guid, "", "", true); return ack; } /// /// 保存回复 /// /// private void OnProcessed(string id, string messageID, string ack, bool successed) { BizBehavior.AfterProcess(id, messageID, ack, successed); } /// /// 保存接受信息 /// /// private void OnProcessing(string id, string messageID, string message, string Version) { BizBehavior.BeforeProcess(id, messageID, message, Version); } #region 取DB服务器当前时间 public static DateTime GetNow(Database ctx) { DbCommand command = SqlDataAccess.GetSqlStringCommand(ctx, "SELECT GETDATE() sysdate "); object obj = SqlDataAccess.ExecuteScalar(ctx, command); if (obj != null) return Convert.ToDateTime(obj.ToString()); else return Convert.ToDateTime(null); } #endregion } }