ADT_A01B03_Handler.cs 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  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_A01B03_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. //读取就诊流水号
  31. //string visitNo = xmlHelper.XpathRead(m, "//*[@root='2.16.156.10011.2.5.1.9']", "extension");
  32. string visitNo = m;
  33. //拼接接口访问参数
  34. msgBody = xmlHelper.GetMsgBody(visitNo, "patient_zyh",index,size);
  35. msgHead = xmlHelper.GetMsgHead("getInHospCostDetail", cert);
  36. //接口访问
  37. rtnMsg = server.TestInterface(msgHead, msgBody);
  38. //存储访问记录
  39. MessageHelper.SaveSendMsg(Scanctx, ID, "ADT^A01[B03]", msgHead, msgBody, rtnMsg);
  40. //消息判断是否成功
  41. if (!xmlHelper.isSuccess(rtnMsg, ref resultCode, ref result))
  42. {
  43. //存储访问记录
  44. throw new Exception(result);
  45. }
  46. //更新发送表,保存留档
  47. //返回数据解析
  48. XmlNode root = xmlHelper.GetContentRootNode(rtnMsg);
  49. XmlNodeList list = root.SelectNodes("//returnContents//returnContent");
  50. if (list.Count <= 0)
  51. return;
  52. using (TransactionScope scope = new TransactionScope(TransactionScopeOption.RequiresNew))
  53. {
  54. var delSql = @"delete from dbo.original_data_zhuyuan where patient_zyh=@patient_zyh";
  55. var cmd = ctx.DBGetSqlStringCommand(delSql);
  56. ctx.AddInParameter(cmd, "patient_zyh", System.Data.DbType.String, visitNo);
  57. ctx.DBExecuteNonQuery(cmd);//
  58. var fsql = @"insert into dbo.original_data_zhuyuan(patient_zyh,patient_id,fee_date,order_unit_id,order_doctor_id,exec_unit_id,exec_doctor_id,patient_unit_id,bed_doctor_id,bq_id,bed_id,fee_type_id,fee_type_name,item_id,item_name,item_quantity,price,fee) VALUES(
  59. @patient_zyh,@patient_id,@fee_date,@order_unit_id,@order_doctor_id,@exec_unit_id,@exec_doctor_id,@patient_unit_id,@bed_doctor_id,@bq_id,@bed_id,@fee_type_id,@fee_type_name,@item_id,@item_name,@item_quantity,@price,@fee);";
  60. //住院收费数据
  61. foreach (XmlElement xn in list)
  62. {
  63. var dcmd = ctx.DBGetSqlStringCommand(fsql);
  64. ctx.AddInParameter(dcmd, "patient_zyh", System.Data.DbType.String, xn.SelectSingleNode("patient_zyh").InnerText);
  65. ctx.AddInParameter(dcmd, "patient_id", System.Data.DbType.String, xn.SelectSingleNode("patient_id").InnerText);
  66. ctx.AddInParameter(dcmd, "fee_date", System.Data.DbType.DateTime, xn.SelectSingleNode("fee_date").InnerText);
  67. ctx.AddInParameter(dcmd, "order_unit_id", System.Data.DbType.String, xn.SelectSingleNode("order_unit_id").InnerText);
  68. ctx.AddInParameter(dcmd, "order_doctor_id", System.Data.DbType.String, xn.SelectSingleNode("order_doctor_id").InnerText);
  69. ctx.AddInParameter(dcmd, "exec_unit_id", System.Data.DbType.String, xn.SelectSingleNode("exec_unit_id").InnerText);
  70. ctx.AddInParameter(dcmd, "exec_doctor_id", System.Data.DbType.String, xn.SelectSingleNode("exec_doctor_id").InnerText);
  71. ctx.AddInParameter(dcmd, "patient_unit_id", System.Data.DbType.String, xn.SelectSingleNode("patient_unit_id").InnerText);
  72. ctx.AddInParameter(dcmd, "bed_doctor_id", System.Data.DbType.String, xn.SelectSingleNode("bed_doctor_id").InnerText);
  73. ctx.AddInParameter(dcmd, "bq_id", System.Data.DbType.String, xn.SelectSingleNode("bq_id").InnerText);
  74. ctx.AddInParameter(dcmd, "bed_id", System.Data.DbType.String, xn.SelectSingleNode("bed_id").InnerText);
  75. ctx.AddInParameter(dcmd, "fee_type_id", System.Data.DbType.String, xn.SelectSingleNode("fee_type_id").InnerText);
  76. ctx.AddInParameter(dcmd, "fee_type_name", System.Data.DbType.String, xn.SelectSingleNode("fee_type_name").InnerText);
  77. ctx.AddInParameter(dcmd, "item_id", System.Data.DbType.String, xn.SelectSingleNode("item_id").InnerText);
  78. ctx.AddInParameter(dcmd, "item_name", System.Data.DbType.String, xn.SelectSingleNode("item_name").InnerText);
  79. decimal item_quantity = 0;
  80. try
  81. {
  82. decimal.TryParse(xn.SelectSingleNode("item_quantity").InnerText, out item_quantity);
  83. }
  84. catch
  85. {
  86. }
  87. ctx.AddInParameter(dcmd, "item_quantity", System.Data.DbType.Decimal, item_quantity);
  88. decimal price = 0;
  89. try
  90. {
  91. decimal.TryParse(xn.SelectSingleNode("price").InnerText, out price);
  92. }
  93. catch
  94. {
  95. }
  96. ctx.AddInParameter(dcmd, "price", System.Data.DbType.Decimal, price);
  97. ctx.AddInParameter(dcmd, "fee", System.Data.DbType.Decimal, xn.SelectSingleNode("fee").InnerText);
  98. ctx.DBExecuteNonQuery(dcmd);//
  99. }
  100. scope.Complete();
  101. }
  102. }
  103. /// <summary>
  104. /// 获取门诊就诊次数
  105. /// </summary>
  106. /// <returns></returns>
  107. private int GetOutNumByChartNo(string chartNo)
  108. {
  109. string OutPatientSql = @"select count(1)
  110. from HealthCare.dbo.OutPatient a, HealthCare.dbo.VisitRecord b
  111. where a.VisitNo = b.VisitNo AND b.ChartNo= @ChartNo
  112. AND a.VisitStatus<>'D' ";
  113. var cmd = SqlDataAccess.GetSqlStringCommand(ctx, OutPatientSql);
  114. SqlDataAccess.AddInParameter(ctx, cmd, "ChartNo", DbType.AnsiString, chartNo);
  115. return int.Parse(StrHelepr.Obj2StrTrim(SqlDataAccess.ExecuteScalar(ctx, cmd))); //看诊次数
  116. }
  117. /// <summary>
  118. /// 获取急诊就诊次数
  119. /// </summary>
  120. /// <returns></returns>
  121. private int GetEmgNumByChartNo(string chartNo)
  122. {
  123. string EmgPatientSql = @"select count(1) from HealthCare.dbo.Emergency a, HealthCare.dbo.VisitRecord b
  124. where a.VisitNo = b.VisitNo
  125. AND b.ChartNo= @ChartNo AND a.VisitStatus<>'D' ";
  126. var cmd = SqlDataAccess.GetSqlStringCommand(ctx, EmgPatientSql);
  127. SqlDataAccess.AddInParameter(ctx, cmd, "ChartNo", DbType.AnsiString, chartNo);
  128. return int.Parse(StrHelepr.Obj2StrTrim(SqlDataAccess.ExecuteScalar(ctx, cmd))); //看诊次数
  129. }
  130. }
  131. }