ADT_A04B02_Handler.cs 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  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.Transactions;
  7. using System.Data;
  8. using IL.Common;
  9. using System.Xml;
  10. namespace MediII.Adapter.BizComponent.ADT
  11. {
  12. public class ADT_A04B02_Handler : ADTHandler
  13. {
  14. public override void Handler(string m, string ID)
  15. {
  16. //门诊就诊,收费明细
  17. //初始化
  18. var rtnMsg = string.Empty;
  19. var msgHead = string.Empty;
  20. var msgBody = string.Empty;
  21. var resultCode = string.Empty;
  22. var result = string.Empty;
  23. WebService server = new WebService();
  24. OperateXmlUtil xmlHelper = new OperateXmlUtil();
  25. //读取配置的凭证号
  26. var cert = System.Configuration.ConfigurationManager.AppSettings["cert"];
  27. //读取就诊流水号
  28. string visitNo = m;
  29. //拼接接口访问参数
  30. msgBody = xmlHelper.GetMsgBody(visitNo, "MZ_ID", index, size);
  31. msgHead = xmlHelper.GetMsgHead("getOutCostDetail", cert);
  32. //接口访问
  33. rtnMsg = server.TestInterface(msgHead, msgBody);
  34. //存储访问记录
  35. MessageHelper.SaveSendMsg(Scanctx, ID, "ADT^A04[B02]", msgHead, msgBody, rtnMsg);
  36. //消息判断是否成功
  37. if (!xmlHelper.isSuccess(rtnMsg, ref resultCode, ref result))
  38. {
  39. //存储访问记录
  40. throw new Exception(result);
  41. }
  42. //更新发送表,保存留档
  43. //返回数据解析
  44. XmlNode root= xmlHelper.GetContentRootNode(rtnMsg);
  45. XmlNodeList list = root.SelectNodes("//returnContents//returnContent");
  46. if (list.Count <= 0)
  47. return;
  48. using (var scope = new TransactionScope(TransactionScopeOption.RequiresNew))
  49. {
  50. var delSql = @"delete from dbo.original_data_menzhen where mz_id=@mz_id";
  51. var cmd = ctx.DBGetSqlStringCommand(delSql);
  52. ctx.AddInParameter(cmd, "mz_id", System.Data.DbType.String, visitNo);
  53. ctx.DBExecuteNonQuery(cmd);//
  54. //门诊收费明细
  55. var osql = @"insert into dbo.original_data_menzhen(mz_id,patient_id,fee_date,torder_unit_id,order_doctor_id,exec_unit_id,exec_doctor_id,fee_type_id,fee_type_name,item_id,item_name,item_quantity,price,fee) VALUES(
  56. @mz_id,@patient_id,@fee_date,@torder_unit_id,@order_doctor_id,@exec_unit_id,@exec_doctor_id,@fee_type_id,@fee_type_name,@item_id,@item_name,@item_quantity,@price,@fee);";
  57. foreach (XmlElement xn in list)
  58. {
  59. var ocmd = ctx.DBGetSqlStringCommand(osql);
  60. ctx.AddInParameter(ocmd, "mz_id", System.Data.DbType.String, xn.SelectSingleNode("mz_id").InnerText);
  61. ctx.AddInParameter(ocmd, "patient_id", System.Data.DbType.String, xn.SelectSingleNode("patient_id").InnerText);
  62. ctx.AddInParameter(ocmd, "fee_date", System.Data.DbType.DateTime, xn.SelectSingleNode("fee_date").InnerText);
  63. ctx.AddInParameter(ocmd, "torder_unit_id", System.Data.DbType.String, xn.SelectSingleNode("Torder_unit_id").InnerText);
  64. ctx.AddInParameter(ocmd, "order_doctor_id", System.Data.DbType.String, xn.SelectSingleNode("order_doctor_id").InnerText);
  65. ctx.AddInParameter(ocmd, "exec_unit_id", System.Data.DbType.String, xn.SelectSingleNode("exec_unit_id").InnerText);
  66. ctx.AddInParameter(ocmd, "exec_doctor_id", System.Data.DbType.String, xn.SelectSingleNode("exec_doctor_id").InnerText);
  67. ctx.AddInParameter(ocmd, "fee_type_id", System.Data.DbType.String, xn.SelectSingleNode("fee_type_id").InnerText);
  68. ctx.AddInParameter(ocmd, "fee_type_name", System.Data.DbType.String, xn.SelectSingleNode("fee_type_name").InnerText);
  69. ctx.AddInParameter(ocmd, "item_id", System.Data.DbType.String, xn.SelectSingleNode("item_id").InnerText);
  70. ctx.AddInParameter(ocmd, "item_name", System.Data.DbType.String, xn.SelectSingleNode("item_name").InnerText);
  71. decimal item_quantity = 0;
  72. decimal.TryParse(StrHelepr.ObjToStrTrim(xn.SelectSingleNode("item_quantity").InnerText), out item_quantity);
  73. ctx.AddInParameter(ocmd, "item_quantity", DbType.Decimal, item_quantity);
  74. decimal price = 0;
  75. decimal.TryParse(StrHelepr.ObjToStrTrim(xn.SelectSingleNode("price").InnerText), out price);
  76. ctx.AddInParameter(ocmd, "price", System.Data.DbType.Decimal, price);
  77. decimal fee = 0;
  78. decimal.TryParse(StrHelepr.ObjToStrTrim(xn.SelectSingleNode("fee").InnerText), out fee);
  79. ctx.AddInParameter(ocmd, "fee", System.Data.DbType.Decimal, fee);
  80. //ctx.AddInParameter(ocmd, "item_quantity", DbType.Decimal, xn.SelectSingleNode("item_quantity").InnerText);
  81. //ctx.AddInParameter(ocmd, "price", System.Data.DbType.Decimal, xn.SelectSingleNode("price").InnerText);
  82. //ctx.AddInParameter(ocmd, "fee", System.Data.DbType.Decimal, xn.SelectSingleNode("fee").InnerText);
  83. ctx.DBExecuteNonQuery(ocmd);//
  84. }
  85. scope.Complete();
  86. //DiagFlag = 20;
  87. }
  88. }
  89. public string GetDiagNo(string icdCode)
  90. {
  91. try
  92. {
  93. var sql = string.Format("SELECT DiagNo FROM HealthCare.dbo.Diag WHERE IcdCode='{0}'", icdCode);
  94. var obj = ctx.DBExecuteScalar(CommandType.Text, sql);
  95. var val = StrHelepr.Obj2StrTrim(obj);
  96. if (string.IsNullOrWhiteSpace(val))
  97. {
  98. val = icdCode;
  99. }
  100. return val;
  101. }
  102. catch (Exception ex)
  103. {
  104. IL.Common.LogHelper.LogError(string.Format("获取DiagNo错误:{0} {1}\r\n{2}", icdCode, ex.Message, ex.StackTrace), LogCatagories.MQAccess);
  105. return string.Empty;
  106. }
  107. }
  108. public string GetBedNo(Database ctx, string roombed)
  109. {
  110. var sql = "SELECT Top 1 BedNo FROM HealthCare.dbo.Bed WHERE RoomBed=@RoomBed";
  111. var cmd = ctx.DBGetSqlStringCommand(sql);
  112. ctx.AddInParameter(cmd, "RoomBed", DbType.String, roombed);
  113. var obj = StrHelepr.Obj2StrTrim(ctx.DBExecuteScalar(cmd));
  114. if (string.IsNullOrWhiteSpace(obj))
  115. {
  116. obj = roombed;
  117. }
  118. return obj;
  119. }
  120. }
  121. }