ADT_A01B02_Handler.cs 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Transactions;
  6. using System.Data;
  7. using System.Data.Common;
  8. using IL.Common;
  9. using System.Xml;
  10. namespace MediII.Adapter.BizComponent.ADT
  11. {
  12. /// <summary>
  13. /// 住院就诊记录
  14. /// </summary>
  15. public class ADT_A01B02_Handler : ADTHandler
  16. {
  17. public override void Handler(string m, string ID)
  18. {
  19. var isql = @"insert into dbo.zhuyuan_original(No,patient_zyh,patient_id,RY_DATE,RY_UNIT,RY_BQ,RY_BED,CY_DATE,CY_UNIT,CY_BQ,age,patient_name,Sex,address,JG_DOCT_GH,SZ_DOCT_GH,Nurse_grade,ICD_CODE_RY1,ICD_CODE_RY2,ICD_CODE_RY3,ICD_CODE_RY4,ICD_CODE_CY1,ICD_CODE_CY2,ICD_CODE_CY3,ICD_CODE_CY4,CY_Kind) Value();";
  20. //初始化
  21. var rtnMsg = string.Empty;
  22. var msgHead = string.Empty;
  23. var msgBody = string.Empty;
  24. var resultCode = string.Empty;
  25. var result = string.Empty;
  26. WebService server = new WebService();
  27. OperateXmlUtil xmlHelper = new OperateXmlUtil();
  28. //读取配置的凭证号
  29. var cert = System.Configuration.ConfigurationManager.AppSettings["cert"];
  30. var index = System.Configuration.ConfigurationManager.AppSettings["PageIndex"];
  31. var size = System.Configuration.ConfigurationManager.AppSettings["PageSize"];
  32. //读取就诊流水号
  33. //string visitNo = xmlHelper.XpathRead(m, "//*[@root='2.16.156.10011.2.5.1.9']", "extension");
  34. string visitNo = m;
  35. //拼接接口访问参数
  36. msgBody = xmlHelper.GetMsgBody(visitNo, "id", index, size);
  37. msgHead = xmlHelper.GetMsgHead("getInHospPresc", cert);
  38. //接口访问
  39. rtnMsg = server.TestInterface(msgHead, msgBody);
  40. //存储访问记录
  41. MessageHelper.SaveSendMsg(Scanctx, ID, "ADT^A01[B02]", msgHead, msgBody, rtnMsg);
  42. //消息判断是否成功
  43. if (!xmlHelper.isSuccess(rtnMsg, ref resultCode, ref result))
  44. {
  45. //存储访问记录
  46. throw new Exception(result);
  47. }
  48. //更新发送表,保存留档
  49. //返回数据解析
  50. XmlNode root = xmlHelper.GetContentRootNode(rtnMsg);
  51. XmlNodeList list = root.SelectNodes("//returnContents//returnContent");
  52. if (list.Count <= 0)
  53. return;
  54. using (TransactionScope scope = new TransactionScope(TransactionScopeOption.RequiresNew))
  55. {
  56. var delSql = @"delete from dbo.zhuyuan_medical_order where id=@id";
  57. var cmd = ctx.DBGetSqlStringCommand(delSql);
  58. ctx.AddInParameter(cmd, "id", System.Data.DbType.String, visitNo);
  59. ctx.DBExecuteNonQuery(cmd);//
  60. var osql = @"insert into dbo.zhuyuan_medical_order(id,medical_order_id,fee_date,yfdm,yfmc,cflx,cfje,cfdzs,yjts,kdksdm,kdys) VALUES(
  61. @id,@medical_order_id,@fee_date,@yfdm,@yfmc,@cflx,@cfje,@cfdzs,@yjts,@kdksdm,@kdys );";
  62. decimal cfje = 0;
  63. DateTime feedate;
  64. decimal yjts = 0;
  65. foreach (XmlElement xn in list)
  66. {
  67. var dcmd = ctx.DBGetSqlStringCommand(osql);
  68. ctx.AddInParameter(dcmd, "id", System.Data.DbType.String, xn.SelectSingleNode("id").InnerText);
  69. ctx.AddInParameter(dcmd, "medical_order_id", System.Data.DbType.String, xn.SelectSingleNode("medical_order_id").InnerText);
  70. try
  71. {
  72. if (DateTime.TryParse(xn.SelectSingleNode("fee_date").InnerText, out feedate))
  73. {
  74. ctx.AddInParameter(dcmd, "fee_date", System.Data.DbType.DateTime, feedate);
  75. }
  76. else
  77. {
  78. continue;
  79. }
  80. }
  81. catch
  82. {
  83. continue;
  84. }
  85. ctx.AddInParameter(dcmd, "yfdm", System.Data.DbType.String, xn.SelectSingleNode("yfdm").InnerText);
  86. ctx.AddInParameter(dcmd, "yfmc", System.Data.DbType.String, xn.SelectSingleNode("yfmc").InnerText);
  87. ctx.AddInParameter(dcmd, "cflx", System.Data.DbType.String, xn.SelectSingleNode("cflx").InnerText);
  88. try
  89. {
  90. decimal.TryParse(xn.SelectSingleNode("cfje").InnerText, out cfje);
  91. }
  92. catch
  93. {
  94. }
  95. ctx.AddInParameter(dcmd, "cfje", System.Data.DbType.Decimal, cfje);
  96. ctx.AddInParameter(dcmd, "cfdzs", System.Data.DbType.String, xn.SelectSingleNode("cfdzs").InnerText);
  97. try{
  98. decimal.TryParse(xn.SelectSingleNode("yjts").InnerText, out yjts);
  99. }catch{
  100. }
  101. ctx.AddInParameter(dcmd, "yjts", System.Data.DbType.Decimal, yjts);
  102. ctx.AddInParameter(dcmd, "kdksdm", System.Data.DbType.String, xn.SelectSingleNode("kdksdm").InnerText);
  103. ctx.AddInParameter(dcmd, "kdys", System.Data.DbType.String, xn.SelectSingleNode("kdys").InnerText);
  104. ctx.DBExecuteNonQuery(dcmd);//
  105. }
  106. scope.Complete();
  107. }
  108. }
  109. /// <summary>
  110. /// 获取门诊就诊次数
  111. /// </summary>
  112. /// <returns></returns>
  113. private int GetOutNumByChartNo(string chartNo)
  114. {
  115. string OutPatientSql = @"select count(1)
  116. from HealthCare.dbo.OutPatient a, HealthCare.dbo.VisitRecord b
  117. where a.VisitNo = b.VisitNo AND b.ChartNo= @ChartNo
  118. AND a.VisitStatus<>'D' ";
  119. var cmd = SqlDataAccess.GetSqlStringCommand(ctx, OutPatientSql);
  120. SqlDataAccess.AddInParameter(ctx, cmd, "ChartNo", DbType.AnsiString, chartNo);
  121. return int.Parse(StrHelepr.Obj2StrTrim(SqlDataAccess.ExecuteScalar(ctx, cmd))); //看诊次数
  122. }
  123. /// <summary>
  124. /// 获取急诊就诊次数
  125. /// </summary>
  126. /// <returns></returns>
  127. private int GetEmgNumByChartNo(string chartNo)
  128. {
  129. string EmgPatientSql = @"select count(1) from HealthCare.dbo.Emergency a, HealthCare.dbo.VisitRecord b
  130. where a.VisitNo = b.VisitNo
  131. AND b.ChartNo= @ChartNo AND a.VisitStatus<>'D' ";
  132. var cmd = SqlDataAccess.GetSqlStringCommand(ctx, EmgPatientSql);
  133. SqlDataAccess.AddInParameter(ctx, cmd, "ChartNo", DbType.AnsiString, chartNo);
  134. return int.Parse(StrHelepr.Obj2StrTrim(SqlDataAccess.ExecuteScalar(ctx, cmd))); //看诊次数
  135. }
  136. }
  137. }