ADTHandler.cs 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using Microsoft.Practices.EnterpriseLibrary.Data;
  6. using System.Data;
  7. using System.Data.Common;
  8. using System.Transactions;
  9. using System.Text.RegularExpressions;
  10. using System.Management;
  11. using IL.Common;
  12. using MediII.Adapter.ReceiveToScanModel;
  13. namespace MediII.Adapter.BizComponent.ADT
  14. {
  15. /// <summary>
  16. ///
  17. /// </summary>
  18. public abstract class ADTHandler
  19. {
  20. static readonly string SEDING_APPLICATION = System.Configuration.ConfigurationManager.AppSettings["SedingApplication"];
  21. //数据库连接
  22. protected Database ctx;
  23. /// <summary>
  24. ///
  25. /// </summary>
  26. public ADTHandler()
  27. {
  28. DatabaseProviderFactory factory = new DatabaseProviderFactory();
  29. ctx = factory.CreateDefault();
  30. }
  31. protected string GetZone(string value)
  32. {
  33. string sql = @"SELECT Zone FROM HealthCare.dbo.HisInfo WHERE HisZone = @HisZone";
  34. var command1 = ctx.GetSqlStringCommand(sql.ToString());
  35. ctx.AddInParameter(command1, "HisZone", System.Data.DbType.AnsiString, value);
  36. DataTable dt = ctx.ExecuteDataSet(command1).Tables[0];
  37. string ZONE = "";
  38. if (dt.Rows.Count > 0)
  39. {
  40. ZONE = dt.Rows[0]["Zone"].ToString();
  41. }
  42. return ZONE;
  43. }
  44. /// <summary>
  45. /// 根据事件类型获取不同的处理类
  46. /// </summary>
  47. /// <param name="evntType">消息类型</param>
  48. /// <returns>ADTHandler的子类</returns>
  49. public static ADTHandler GetHandler(string evntType)
  50. {
  51. try
  52. {
  53. switch (evntType)
  54. {
  55. case "ADT^A01": return new ADT_A01_Handler();// 住院患者
  56. case "ADT^A02": return new ADT_A02_Handler();//住院更新
  57. case "ADT^A05": return new ADT_A05_Handler();//门诊患者更新
  58. case "ADT^A04": return new ADT_A04_Handler();// 门诊患者入院
  59. //case "A08": return new ADT_A08_Handler();//患者信息修改:
  60. //case "A10": return new ADT_A10_Handler();//入科
  61. //case "A11": return new ADT_A11_Handler();//取消入院
  62. //case "A13": return new ADT_A13_Handler();//取消出院(ADT^A13)
  63. //case "A16": return new ADT_A16_Handler();//患者预出院
  64. //case "A25": return new ADT_A25_Handler();//患者取消预出院
  65. //case "A28": return new ADT_A28_Handler();//患者建档
  66. //case "A31": return new ADT_A31_Handler();//患者基本信息修改(ADT^A31)
  67. //case "A29": return new ADT_A29_Handler();//删除婴儿信息(ADT^A29^ADT_A21)
  68. //case "A54": return new ADT_A54_Handler();//修改主治医生
  69. //case "A60": return new ADT_A60_Handler();//患者副作用信息修改
  70. default: throw new NotImplementedException();
  71. }
  72. }
  73. catch (Exception ex)
  74. {
  75. LogHelper.LogError(ex, LogCatagories.General);
  76. throw ex;
  77. }
  78. }
  79. /// <summary>
  80. /// 待实现的处理
  81. /// </summary>
  82. /// <param name="m">传入的消息结构</param>
  83. /// <returns>ACK</returns>
  84. public abstract void Handler(string m);
  85. #region 获取字典信息
  86. /// <summary>
  87. /// 获取字典信息
  88. /// </summary>
  89. /// <returns></returns>
  90. protected DataTable GetDictionView(Database ctx, string viewName)
  91. {
  92. var ntb = new DataTable();
  93. var sql = string.Format("SELECT CodeID,CodeName,HisCodeID,MedCodeID FROM HealthCare.dbo.[{0}] WHERE IsDel=0", viewName);
  94. var cmd = SqlDataAccess.GetSqlStringCommand(ctx, sql);
  95. ntb.Load(SqlDataAccess.ExecuteReader(ctx, cmd));
  96. return ntb;
  97. }
  98. /// <summary>
  99. /// 获取本地Zone
  100. /// </summary>
  101. /// <param name="ctx"></param>
  102. /// <param name="hisZone"></param>
  103. /// <returns></returns>
  104. protected string GetZone(Database ctx, string hisZone)
  105. {
  106. var sql = string.Format("SELECT top 1 Zone FROM HealthCare.dbo.HisInfo WHERE HisZone='{0}'", hisZone);
  107. var cmd = SqlDataAccess.GetSqlStringCommand(ctx, sql);
  108. var val = StrHelepr.Obj2StrTrim(SqlDataAccess.ExecuteScalar(ctx, cmd));
  109. if (string.IsNullOrEmpty(val))
  110. {
  111. return hisZone;
  112. }
  113. return val;
  114. }
  115. #endregion
  116. #region 取序列
  117. ///<summary>
  118. /// 取序列
  119. /// </summary>
  120. protected string GetSeq(Database ctx, string seqName)
  121. {
  122. string sql = string.Format("SELECT NEXT VALUE FOR {0}", seqName);
  123. var cmd = SqlDataAccess.GetSqlStringCommand(ctx, sql);
  124. object obj = SqlDataAccess.ExecuteScalar(ctx, cmd);
  125. if (obj != null)
  126. return obj.ToString();
  127. else
  128. return "0";
  129. }
  130. #endregion
  131. #region 取服务器当前时间
  132. /// <summary>
  133. /// 获取当前时间
  134. /// </summary>
  135. internal DateTime GetNow(Database ctx)
  136. {
  137. object obj = (DateTime)SqlDataAccess.ExecuteScalar(ctx, CommandType.Text, "select GETDATE()");
  138. if (obj != null)
  139. return Convert.ToDateTime(obj.ToString());
  140. else
  141. return DateTime.Now;
  142. }
  143. #endregion
  144. /// <summary>
  145. /// 添加床位日志
  146. /// </summary>
  147. /// <param name="ctx">数据库操作类</param>
  148. /// <param name="visitNo"></param>
  149. /// <param name="updateUser"></param>
  150. /// <param name="OperateTypeInstr"></param>
  151. /// <param name="remark"></param>
  152. /// <param name="oldMsg"></param>
  153. /// <param name="newMsg"></param>
  154. protected void AddNewWardLog(Database ctx, string visitNo, string updateUser, string OperateTypeInstr, string remark, string oldMsg, string newMsg)
  155. {
  156. var sql = @" INSERT INTO HealthCare.dbo.Log_WardOperateLog( VisitNo , UpdateUser , UpdateDateTime , OperateTypeInstr , IP , Mac , Remark , OldContent , NewContent) VALUES( @VisitNo , @UpdateUser , GETDATE() , @OperateTypeInstr , @IP , @Mac , @Remark , @OldContent , @NewContent) ";
  157. var cmd = SqlDataAccess.GetSqlStringCommand(ctx, sql);
  158. SqlDataAccess.AddInParameter(ctx, cmd, "VisitNo", DbType.AnsiString, visitNo);
  159. SqlDataAccess.AddInParameter(ctx, cmd, "UpdateUser", DbType.AnsiString, updateUser);
  160. SqlDataAccess.AddInParameter(ctx, cmd, "OperateTypeInstr", DbType.AnsiString, OperateTypeInstr);
  161. SqlDataAccess.AddInParameter(ctx, cmd, "IP", DbType.AnsiString, NetHelper.GetIP());
  162. SqlDataAccess.AddInParameter(ctx, cmd, "Mac", DbType.AnsiString, NetHelper.GetMacAddress());
  163. SqlDataAccess.AddInParameter(ctx, cmd, "Remark", DbType.AnsiString, remark);
  164. SqlDataAccess.AddInParameter(ctx, cmd, "OldContent", DbType.AnsiString, oldMsg);
  165. SqlDataAccess.AddInParameter(ctx, cmd, "NewContent", DbType.AnsiString, newMsg);
  166. SqlDataAccess.ExecuteNonQuery(ctx, cmd);
  167. }
  168. /// <summary>
  169. /// 获取参数
  170. /// </summary>
  171. /// <param name="ctx"></param>
  172. /// <param name="key"></param>
  173. /// <returns></returns>
  174. protected string GetParam(Database ctx, string key)
  175. {
  176. try
  177. {
  178. var sql = string.Format("SELECT ParamValue FROM HealthCare.dbo.SiteParamCtrl WHERE SiteNo='0000' AND ParamID='{0}' AND IsDel=0", key);
  179. var cmd = SqlDataAccess.GetSqlStringCommand(ctx, sql);
  180. var obj = SqlDataAccess.ExecuteScalar(ctx, cmd);
  181. return StrHelepr.Obj2StrTrim(obj);
  182. }
  183. catch (Exception ex)
  184. {
  185. IL.Common.LogHelper.LogError(string.Format("获取参数错误:{0} {1}\r\n{2}", key, ex.Message, ex.StackTrace), LogCatagories.MQAccess);
  186. return string.Empty;
  187. }
  188. }
  189. protected int GetScanTaskCount(string visitNo,string type)
  190. {
  191. var sql = "SELECT count(1) FROM dbo.HL7_Scan WITH(NOLOCK) WHERE VisitNo=@VisitNo and TaskType=@TaskType and TaskStatus=1 and UpdateTime>'2023-01-01'";
  192. var cmd = ctx.DBGetSqlStringCommand(sql);
  193. ctx.AddInParameter(cmd, "VisitNo", DbType.String, visitNo);
  194. ctx.AddInParameter(cmd, "TaskType", DbType.String, type);
  195. var obj = int.Parse(StrHelepr.Obj2StrTrim(ctx.DBExecuteScalar(cmd)));
  196. return obj;
  197. }
  198. }
  199. }