ADTHandler.cs 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243
  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[B01]": return new ADT_A01B01_Handler();// 住院就诊信息登记、相关明细任务生成
  56. case "ADT^A01[B02]": return new ADT_A01B02_Handler();// 住院处方单
  57. case "ADT^A01[B03]": return new ADT_A01B03_Handler();// 住院收费明细
  58. case "ADT^A01[B04]": return new ADT_A01B04_Handler();// 住院转科转床
  59. case "ADT^A03": return new ADT_A03_Handler();//患者出院信息
  60. case "ADT^A04[B01]": return new ADT_A04B01_Handler();// 门诊处方单
  61. case "ADT^A04[B02]": return new ADT_A04B02_Handler();//门诊收费明细
  62. case "ADT^A04[B03]": return new ADT_A04B03_Handler();//门诊挂号
  63. case "ADT^A08[B01]": return new ADT_A08B01_Handler();//门急诊诊断信息
  64. case "ADT^A08[B02]": return new ADT_A08B02_Handler();//住院诊断信息
  65. case "ADT^A31": return new ADT_A31_Handler();//患者基本信息
  66. case "ADT^A90": return new ADT_A90_Handler();//病案首页信息
  67. case "ADT^A91": return new ADT_A91_Handler();//发票金额
  68. case "ADT^A92": return new ADT_A92_Handler();//药品领用出库信息
  69. default: throw new NotImplementedException();
  70. }
  71. }
  72. catch (Exception ex)
  73. {
  74. LogHelper.LogError(ex, LogCatagories.General);
  75. throw ex;
  76. }
  77. }
  78. /// <summary>
  79. /// 待实现的处理
  80. /// </summary>
  81. /// <param name="m">传入的消息结构</param>
  82. /// <returns>ACK</returns>
  83. public abstract void Handler(TaskMessage m);
  84. #region 获取字典信息
  85. /// <summary>
  86. /// 获取字典信息
  87. /// </summary>
  88. /// <returns></returns>
  89. protected DataTable GetDictionView(Database ctx, string viewName)
  90. {
  91. var ntb = new DataTable();
  92. var sql = string.Format("SELECT CodeID,CodeName,HisCodeID,MedCodeID FROM HealthCare.dbo.[{0}] WHERE IsDel=0", viewName);
  93. var cmd = MySqlDataAccess.GetSqlStringCommand(ctx, sql);
  94. ntb.Load(MySqlDataAccess.ExecuteReader(ctx, cmd));
  95. return ntb;
  96. }
  97. /// <summary>
  98. /// 获取本地Zone
  99. /// </summary>
  100. /// <param name="ctx"></param>
  101. /// <param name="hisZone"></param>
  102. /// <returns></returns>
  103. protected string GetZone(Database ctx, string hisZone)
  104. {
  105. var sql = string.Format("SELECT top 1 Zone FROM HealthCare.dbo.HisInfo WHERE HisZone='{0}'", hisZone);
  106. var cmd = MySqlDataAccess.GetSqlStringCommand(ctx, sql);
  107. var val = StrHelepr.Obj2StrTrim(MySqlDataAccess.ExecuteScalar(ctx, cmd));
  108. if (string.IsNullOrEmpty(val))
  109. {
  110. return hisZone;
  111. }
  112. return val;
  113. }
  114. #endregion
  115. #region 取序列
  116. ///<summary>
  117. /// 取序列
  118. /// </summary>
  119. protected string GetSeq(Database ctx, string seqName)
  120. {
  121. string sql = string.Format("SELECT NEXT VALUE FOR {0}", seqName);
  122. var cmd = MySqlDataAccess.GetSqlStringCommand(ctx, sql);
  123. object obj = MySqlDataAccess.ExecuteScalar(ctx, cmd);
  124. if (obj != null)
  125. return obj.ToString();
  126. else
  127. return "0";
  128. }
  129. #endregion
  130. #region 取服务器当前时间
  131. /// <summary>
  132. /// 获取当前时间
  133. /// </summary>
  134. internal DateTime GetNow(Database ctx)
  135. {
  136. object obj = (DateTime)MySqlDataAccess.ExecuteScalar(ctx, CommandType.Text, "select SYSDATE()");
  137. if (obj != null)
  138. return Convert.ToDateTime(obj.ToString());
  139. else
  140. return DateTime.Now;
  141. }
  142. #endregion
  143. /// <summary>
  144. /// 添加床位日志
  145. /// </summary>
  146. /// <param name="ctx">数据库操作类</param>
  147. /// <param name="visitNo"></param>
  148. /// <param name="updateUser"></param>
  149. /// <param name="OperateTypeInstr"></param>
  150. /// <param name="remark"></param>
  151. /// <param name="oldMsg"></param>
  152. /// <param name="newMsg"></param>
  153. protected void AddNewWardLog(Database ctx, string visitNo, string updateUser, string OperateTypeInstr, string remark, string oldMsg, string newMsg)
  154. {
  155. 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) ";
  156. var cmd = MySqlDataAccess.GetSqlStringCommand(ctx, sql);
  157. MySqlDataAccess.AddInParameter(ctx, cmd, "VisitNo", DbType.AnsiString, visitNo);
  158. MySqlDataAccess.AddInParameter(ctx, cmd, "UpdateUser", DbType.AnsiString, updateUser);
  159. MySqlDataAccess.AddInParameter(ctx, cmd, "OperateTypeInstr", DbType.AnsiString, OperateTypeInstr);
  160. MySqlDataAccess.AddInParameter(ctx, cmd, "IP", DbType.AnsiString, NetHelper.GetIP());
  161. MySqlDataAccess.AddInParameter(ctx, cmd, "Mac", DbType.AnsiString, NetHelper.GetMacAddress());
  162. MySqlDataAccess.AddInParameter(ctx, cmd, "Remark", DbType.AnsiString, remark);
  163. MySqlDataAccess.AddInParameter(ctx, cmd, "OldContent", DbType.AnsiString, oldMsg);
  164. MySqlDataAccess.AddInParameter(ctx, cmd, "NewContent", DbType.AnsiString, newMsg);
  165. MySqlDataAccess.ExecuteNonQuery(ctx, cmd);
  166. }
  167. /// <summary>
  168. /// 获取参数
  169. /// </summary>
  170. /// <param name="ctx"></param>
  171. /// <param name="key"></param>
  172. /// <returns></returns>
  173. protected string GetParam(Database ctx, string key)
  174. {
  175. try
  176. {
  177. var sql = string.Format("SELECT ParamValue FROM HealthCare.dbo.SiteParamCtrl WHERE SiteNo='0000' AND ParamID='{0}' AND IsDel=0", key);
  178. var cmd = MySqlDataAccess.GetSqlStringCommand(ctx, sql);
  179. var obj = MySqlDataAccess.ExecuteScalar(ctx, cmd);
  180. return StrHelepr.Obj2StrTrim(obj);
  181. }
  182. catch (Exception ex)
  183. {
  184. IL.Common.LogHelper.LogError(string.Format("获取参数错误:{0} {1}\r\n{2}", key, ex.Message, ex.StackTrace), LogCatagories.MQAccess);
  185. return string.Empty;
  186. }
  187. }
  188. protected int GetScanTaskCount(string visitNo,string type)
  189. {
  190. var sql = "SELECT count(1) FROM HL7_Scan WHERE VisitNo=?VisitNo and TaskType=?TaskType and TaskStatus=1 and UpdateTime>'2023-01-01'";
  191. var cmd = ctx.DBGetSqlStringCommand(sql);
  192. ctx.AddInParameter(cmd, "VisitNo", DbType.String, visitNo);
  193. ctx.AddInParameter(cmd, "TaskType", DbType.String, type);
  194. var obj = int.Parse(StrHelepr.Obj2StrTrim(ctx.DBExecuteScalar(cmd)));
  195. return obj;
  196. }
  197. protected void SetNextTask(TaskMessage msg)
  198. {
  199. var sql = string.Format(@"INSERT INTO TaskMessage(TaskID, VisitNo, TaskType, TypeName, TaskStatus, Parameter1, Parameter2, Parameter3, ErrMsg, ErrNm,
  200. TaskTime, Reserve1, Reserve2, Reserve3) VALUES(MD5(UUID()),null,'{0}','{1}',1,'{2}','{3}','{4}',null,0,'{5}',null,null,'{6}')",
  201. msg.TaskType, msg.TypeName, msg.Parameter1, msg.Parameter2, int.Parse(msg.Parameter3) + 1, msg.TaskTime,
  202. msg.Reserve3);
  203. var cmd = ctx.DBGetSqlStringCommand(sql);
  204. ctx.DBExecuteNonQuery(cmd);
  205. }
  206. //protected void SetMsgType(int TaskStatus,string )
  207. }
  208. }