You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

293 lines
11 KiB

2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
  1. using Dapper;
  2. using log4net.Repository.Hierarchy;
  3. using Npgsql;
  4. using ServiceReferenceHzcyHis;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.Data.Common;
  8. using System.Linq;
  9. using System.ServiceModel;
  10. using System.Text;
  11. using System.Threading.Tasks;
  12. using static ServiceReferenceHzcyHis.bstjPortTypeClient;
  13. namespace Shentun.Peis.PlugIns.Gem
  14. {
  15. public class ChargeRequestPlugInsGem : ChargeRequestPlugInsBase
  16. {
  17. private string _endpointAddress = "";
  18. public ChargeRequestPlugInsGem(string parmValue) : base(parmValue)
  19. {
  20. _endpointAddress = InterfaceConfig.GetSection("Interface").GetSection("EndpointAddress").Value;
  21. }
  22. public override async Task<ChargeRequestPlugInsOut> SendRequestAsync(ChargeRequestPlugInsInput input)
  23. {
  24. //建立人员档案
  25. var patientRegisterForPlugIns = await GetPatientRegisterForPlugInsAsync(input.ChargeRequestId);
  26. var chargeRequestForPlugIns = await GetChargeRequestForPlugInsAsync(input.ChargeRequestId);
  27. if(chargeRequestForPlugIns == null)
  28. {
  29. throw new Exception("没有申请单信息");
  30. }
  31. if (!chargeRequestForPlugIns.Asbitems.Any())
  32. {
  33. throw new Exception("申请单没有组合项目信息");
  34. }
  35. if (patientRegisterForPlugIns.BirthDate == null)
  36. {
  37. throw new Exception("出生日期不能为空");
  38. }
  39. var hisPatientQueryInput = new HisPatientQueryInput()
  40. {
  41. Data = new HisPatientQueryDataInput()
  42. {
  43. MsgHeader = new HisMsgHeaderInput()
  44. {
  45. Sender = "PEIS",
  46. MsgType = "SVR_ODS_1101",
  47. MsgVersion = "3.1",
  48. },
  49. Patient = new HisPatientQueryPatientInput()
  50. {
  51. IdCard = patientRegisterForPlugIns.IdNo,
  52. IdCardCode = "01",
  53. Name = patientRegisterForPlugIns.PatientName,
  54. Sex = "1",
  55. BirthDate = ((DateTime)patientRegisterForPlugIns.BirthDate).ToString("yyyy-MM-dd", System.Globalization.DateTimeFormatInfo.InvariantInfo),
  56. PatientPhone = patientRegisterForPlugIns.MobileTelephone,
  57. EthnicGroupCode = "01",
  58. WorkUnit = patientRegisterForPlugIns.CustomerOrgName,
  59. Address = patientRegisterForPlugIns.Address,
  60. }
  61. }
  62. };
  63. var result = await PatientQuery(hisPatientQueryInput);
  64. if (result.MsgHeader.Status != "true")
  65. {
  66. throw new Exception("建立HIS档案失败"+ result.MsgHeader.Detail);
  67. }
  68. //更新人员登记信息
  69. using (DbConnection conn = new NpgsqlConnection(AppConnctionStr))
  70. {
  71. conn.Execute(@"update patient_register set his_patient_id = @HisPatientId
  72. where id = @PatientRegisterId",
  73. new { HisPatientId = result.Patient.PatientId,
  74. PatientRegisterId = patientRegisterForPlugIns.PatientRegisterId
  75. });
  76. }
  77. //发送项目
  78. var hisInput = new HisMecSaveInput()
  79. {
  80. Data = new HisMecSaveDataInput()
  81. {
  82. MsgHeader = new HisMsgHeaderInput()
  83. {
  84. Sender = "PEIS",
  85. MsgType = "SVR_ODS_6101",
  86. MsgVersion = "3.1",
  87. },
  88. Items = new List<HisMecSaveDataItemInput>()
  89. {
  90. new HisMecSaveDataItemInput()
  91. {
  92. ExamRequestNo =chargeRequestForPlugIns.ChargeRequestNo,
  93. FeeType = "1",
  94. EmpId = result.Patient.PatientId,
  95. DeptId = "",
  96. DoctId = "",
  97. ExeDeptId = "",
  98. Tjunit = patientRegisterForPlugIns.CustomerOrgName,
  99. Tjfee = chargeRequestForPlugIns.Asbitems.Sum(o=>o.Charges).ToString(),
  100. Ztxm = "",
  101. Remark = "体检科"
  102. },
  103. }
  104. }
  105. };
  106. var mecSaveResult = await MecSave(hisInput);
  107. if (mecSaveResult.MsgHeader.Status != "true")
  108. {
  109. throw new Exception("建立HIS档案失败" + mecSaveResult.MsgHeader.Detail);
  110. }
  111. //更新申请单信息
  112. using (DbConnection conn = new NpgsqlConnection(AppConnctionStr))
  113. {
  114. conn.Execute(@"update charge_request set his_charge_no = @HisChargeNo
  115. where id = @ChargeRequestId",
  116. new
  117. {
  118. HisChargeNo = mecSaveResult.MsgHeader.Yjxh,
  119. ChargeRequestId = input.ChargeRequestId
  120. });
  121. }
  122. return new ChargeRequestPlugInsOut();
  123. }
  124. public override async Task<ChargeRequestPlugInsOut> CancelRequestAsync(ChargeRequestPlugInsInput input)
  125. {
  126. var chargeRequestForPlugIns = await GetChargeRequestForPlugInsAsync(input.ChargeRequestId);
  127. if (chargeRequestForPlugIns == null)
  128. {
  129. throw new Exception("没有申请单信息");
  130. }
  131. var hisInput = new HisCancelQrCodeInput()
  132. {
  133. Data = new HisCancelQrCodeDataInput()
  134. {
  135. MsgHeader = new HisMsgHeaderInput()
  136. {
  137. Sender = "PEIS",
  138. MsgType = "SVR_ODS_6105",
  139. MsgVersion = "3.1",
  140. },
  141. Item = new HisCancelQrCodeDataItemInput()
  142. {
  143. Yjxh = chargeRequestForPlugIns.HisChargeNo,
  144. ExamRequestNo = chargeRequestForPlugIns.ChargeRequestNo
  145. }
  146. }
  147. };
  148. var result = await CancelQrCode(hisInput);
  149. if (result.MsgHeader.Status != "true")
  150. {
  151. throw new Exception("作废申请单失败" + result.MsgHeader.Detail);
  152. }
  153. await CancelAppChargeRequestAsync(input.ChargeRequestId);
  154. return new ChargeRequestPlugInsOut();
  155. }
  156. public override Task DoWorkAsync()
  157. {
  158. throw new Exception("格尔木DoWorkAsync。。。");
  159. //return base.DoWorkAsync();
  160. }
  161. public override async Task<ChargeRequestPlugInsOut> RefundRequestAsync(ChargeRequestPlugInsInput input)
  162. {
  163. var chargeRequestForPlugIns = await GetChargeRequestForPlugInsAsync(input.ChargeRequestId);
  164. if (chargeRequestForPlugIns == null)
  165. {
  166. throw new Exception("没有申请单信息");
  167. }
  168. var hisInput = new HisAgreeRefundInput()
  169. {
  170. Data = new HisAgreeRefundDataInput()
  171. {
  172. MsgHeader = new HisMsgHeaderInput()
  173. {
  174. Sender = "PEIS",
  175. MsgType = "SVR_ODS_6105",
  176. MsgVersion = "3.1",
  177. },
  178. Item = new HisAgreeRefundDataItemInput()
  179. {
  180. Yjxh = chargeRequestForPlugIns.HisChargeNo,
  181. ExamRequestNo = chargeRequestForPlugIns.ChargeRequestNo
  182. }
  183. }
  184. };
  185. var result = await AgreeRefund(hisInput);
  186. if (result.MsgHeader.Status != "true")
  187. {
  188. throw new Exception("允许退费申请失败" + result.MsgHeader.Detail);
  189. }
  190. await RefundAppChargeRequestAsync(input.ChargeRequestId);
  191. return new ChargeRequestPlugInsOut();
  192. }
  193. public async Task<HisPatientQueryOut> PatientQuery(HisPatientQueryInput input)
  194. {
  195. using (var client = CreateClient())
  196. {
  197. input.SeviceBaseArg.Service = "patientQuery";
  198. var data = XmlHelper.SerializeToXml(input.Data);
  199. var resultStr = (await client.invokeAsync(input.SeviceBaseArg.Service,
  200. input.SeviceBaseArg.Urid,
  201. input.SeviceBaseArg.Pwd,
  202. data)).@return;
  203. var result = XmlHelper.DeserializeXml<HisPatientQueryOut>(resultStr);
  204. return result;
  205. }
  206. }
  207. public async Task<HisMecSaveOut> MecSave(HisMecSaveInput input)
  208. {
  209. using (var client = CreateClient())
  210. {
  211. input.SeviceBaseArg.Service = "mecSave";
  212. var data = XmlHelper.SerializeToXml(input.Data);
  213. var resultStr = (await client.invokeAsync(input.SeviceBaseArg.Service,
  214. input.SeviceBaseArg.Urid,
  215. input.SeviceBaseArg.Pwd,
  216. data)).@return;
  217. var result = XmlHelper.DeserializeXml<HisMecSaveOut>(resultStr);
  218. return result;
  219. }
  220. }
  221. public async Task<HisOutBase> CancelQrCode(HisCancelQrCodeInput input)
  222. {
  223. using (var client = CreateClient())
  224. {
  225. input.SeviceBaseArg.Service = "cancelQrCode";
  226. var data = XmlHelper.SerializeToXml(input.Data);
  227. var resultStr = (await client.invokeAsync(input.SeviceBaseArg.Service,
  228. input.SeviceBaseArg.Urid,
  229. input.SeviceBaseArg.Pwd,
  230. data)).@return;
  231. var result = XmlHelper.DeserializeXml<HisOutBase>(resultStr);
  232. return result;
  233. }
  234. }
  235. public async Task<HisOutBase> PayStatus(HisPayStatusInput input)
  236. {
  237. using (var client = CreateClient())
  238. {
  239. input.SeviceBaseArg.Service = "payStatus";
  240. var data = XmlHelper.SerializeToXml(input.Data);
  241. var resultStr = (await client.invokeAsync(input.SeviceBaseArg.Service,
  242. input.SeviceBaseArg.Urid,
  243. input.SeviceBaseArg.Pwd,
  244. data)).@return;
  245. var result = XmlHelper.DeserializeXml<HisOutBase>(resultStr);
  246. return result;
  247. }
  248. }
  249. public async Task<HisOutBase> AgreeRefund(HisAgreeRefundInput input)
  250. {
  251. using (var client = CreateClient())
  252. {
  253. input.SeviceBaseArg.Service = "agreeRefund";
  254. var data = XmlHelper.SerializeToXml(input.Data);
  255. var resultStr = (await client.invokeAsync(input.SeviceBaseArg.Service,
  256. input.SeviceBaseArg.Urid,
  257. input.SeviceBaseArg.Pwd,
  258. data)).@return;
  259. var result = XmlHelper.DeserializeXml<HisOutBase>(resultStr);
  260. return result;
  261. }
  262. }
  263. private bstjPortTypeClient CreateClient()
  264. {
  265. return new bstjPortTypeClient(EndpointConfiguration.bstjHttpSoap11Endpoint,
  266. _endpointAddress);
  267. }
  268. }
  269. }