BaseBizComponent.cs 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using NHapi.Base.Model;
  6. using NHapi.Base.Parser;
  7. using NHapi.Model.V24.Segment;
  8. using NHapi.Model.V24.Message;
  9. using MediII.Common;
  10. using NHapi.Base.Util;
  11. using System.ComponentModel.Composition;
  12. using Microsoft.Practices.EnterpriseLibrary.Data;
  13. using System.Data.Common;
  14. using IL.Common;
  15. namespace MediII.Adapter.BizComponent.Base
  16. {
  17. [Export]
  18. public abstract class BaseBizComponent : IBizComponent
  19. {
  20. protected PipeParser parser = new PipeParser();
  21. //数据库连接
  22. protected Database ctx;
  23. static IBizBehavior BizBehavior { get; set; }
  24. public BaseBizComponent()
  25. {
  26. DatabaseProviderFactory factory = new DatabaseProviderFactory();
  27. ctx = factory.CreateDefault();
  28. }
  29. static BaseBizComponent()
  30. {
  31. string bizBehavior = System.Configuration.ConfigurationManager.AppSettings["BizBehavior"];
  32. if (string.IsNullOrEmpty(bizBehavior))
  33. {
  34. BizBehavior = new DefaultBizBehavior();
  35. }
  36. else
  37. {
  38. string[] ar = bizBehavior.Split(',');
  39. string assemblyName = ar[0];
  40. string typeName = ar[1];
  41. try
  42. {
  43. BizBehavior = Activator.CreateInstance(assemblyName, typeName).Unwrap() as IBizBehavior;
  44. }
  45. catch
  46. {
  47. BizBehavior = new DefaultBizBehavior();
  48. }
  49. }
  50. }
  51. /// <summary>
  52. /// 处理消息
  53. /// </summary>
  54. /// <param name="message">解析后消息的抽象类型</param>
  55. public abstract string DoProcess(string message,string msgType,string ID);
  56. /// <summary>
  57. ///实现处理的接口
  58. /// </summary>
  59. /// <param name="message">传入的消息字符</param>
  60. /// <returns></returns>
  61. public string Process(string message, string msgType,string ID)
  62. {
  63. //IMessage m = parser.Parse(message);
  64. //ISegment msh = (ISegment)m.GetStructure("MSH");
  65. //string messageID = Terser.Get(msh, 10, 0, 1, 1);
  66. OperateXmlUtil xmlHelper = new OperateXmlUtil();
  67. string messageID = xmlHelper.XpathRead(message, "//*[@root='2.16.156.10011.2.5.1.1']", "extension");
  68. string guid = MediII.Common.GUIDHelper.NewGUID();
  69. OnProcessing(guid, messageID, message,"HL7v3");
  70. string ack = DoProcess(message, msgType, ID);
  71. OnProcessed(guid, "", "", true);
  72. return ack;
  73. }
  74. /// <summary>
  75. /// 保存回复
  76. /// </summary>
  77. /// <param name="ack"></param>
  78. private void OnProcessed(string id, string messageID, string ack, bool successed)
  79. {
  80. BizBehavior.AfterProcess(id, messageID, ack, successed);
  81. }
  82. /// <summary>
  83. /// 保存接受信息
  84. /// </summary>
  85. /// <param name="message"></param>
  86. private void OnProcessing(string id, string messageID, string message, string Version)
  87. {
  88. BizBehavior.BeforeProcess(id, messageID, message, Version);
  89. }
  90. #region 取DB服务器当前时间
  91. public static DateTime GetNow(Database ctx)
  92. {
  93. DbCommand command = SqlDataAccess.GetSqlStringCommand(ctx, "SELECT GETDATE() sysdate ");
  94. object obj = SqlDataAccess.ExecuteScalar(ctx, command);
  95. if (obj != null)
  96. return Convert.ToDateTime(obj.ToString());
  97. else
  98. return Convert.ToDateTime(null);
  99. }
  100. #endregion
  101. }
  102. }