using System; using System.Collections.Generic; using System.Linq; using System.Text; using MediII.Common; 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 Database ctx; protected Database HealthCarectx; static IBizBehavior BizBehavior { get; set; } public BaseBizComponent() { DatabaseProviderFactory factory = new DatabaseProviderFactory(); ctx = factory.CreateDefault(); HealthCarectx = factory.Create("HealthCare"); } 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); /// ///实现处理的接口 /// /// 传入的消息字符 /// public string Process(string message,string msgType) { 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); OnProcessed(guid, "", ack, 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 } }