OrganizePatientRegistrationInfo.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. using Newtonsoft.Json;
  2. using Newtonsoft.Json.Linq;
  3. using PTMedicalInsurance.Helper;
  4. using PTMedicalInsurance.Variables;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.Data;
  8. using System.Linq;
  9. using System.Text;
  10. using System.Threading.Tasks;
  11. namespace PTMedicalInsurance.Business.Core.SelfServiceMachine.Process.OutPat
  12. {
  13. class OrganizePatientRegistrationInfo : AbstractProcess
  14. {
  15. public override CallResult Process(JObject input)
  16. {
  17. //调用服务获取门诊诊断信息
  18. string diagnoses;
  19. if (hIS.getPatDiagnoses(Global.pat, out diagnoses) != 0)
  20. {
  21. outParam = JsonHelper.setExceptionJson(-1, "getPatDiagnoses", diagnoses).ToString();
  22. return Exception(-1,"",outParam);
  23. }
  24. JObject joHisRtnInfo = JObject.Parse(diagnoses);
  25. //组织入参
  26. JObject joReg = new JObject();
  27. try
  28. {
  29. JArray jaDiagnoses = JArray.Parse(JsonHelper.getDestValue(joHisRtnInfo, "diseinfo"));
  30. //结算方式
  31. string psn_setlway = "01";//按项目结算
  32. //转换下主要诊断
  33. for (int i = 0; i < jaDiagnoses.Count; i++)
  34. {
  35. string diag_type = JsonHelper.getDestValue((JObject)jaDiagnoses[i], "diag_type");
  36. switch (diag_type)
  37. {
  38. case "1":
  39. {
  40. jaDiagnoses[i]["diag_type_name"] = new JObject();
  41. jaDiagnoses[i]["diag_type_name"] = "西医主要诊断";
  42. break;
  43. }
  44. case "2":
  45. {
  46. jaDiagnoses[i]["diag_type_name"] = new JObject();
  47. jaDiagnoses[i]["diag_type_name"] = "西医其他诊断";
  48. break;
  49. }
  50. case "3":
  51. {
  52. jaDiagnoses[i]["diag_type_name"] = new JObject();
  53. jaDiagnoses[i]["diag_type_name"] = "中医主病诊断";
  54. break;
  55. }
  56. case "4":
  57. {
  58. jaDiagnoses[i]["diag_type_name"] = new JObject();
  59. jaDiagnoses[i]["diag_type_name"] = "中医主证诊断";
  60. break;
  61. }
  62. }
  63. }
  64. string diseCodg = "";
  65. string diseName = "";
  66. //如果是慢性病患者,查询慢病信息
  67. if (Global.pat.medType == "14")
  68. {
  69. string chronicDieseaseInfo = "";
  70. if (hBus.QueryOPChronicDisease(out chronicDieseaseInfo) != 0)
  71. {
  72. outParam = "检测到患者为慢病患者,但查询中心的慢病信息出错!";
  73. return Exception();
  74. }
  75. DataTable dtChronicDiesease = JsonConvert.DeserializeObject<DataTable>(chronicDieseaseInfo);
  76. // 获取当前日期
  77. DateTime today = DateTime.Today;
  78. var filteredRows = dtChronicDiesease.AsEnumerable()
  79. .Where(row =>
  80. {
  81. var endDateStr = row.Field<string>("enddate");
  82. if (string.IsNullOrEmpty(endDateStr)) return false;
  83. if (DateTime.TryParse(endDateStr, out DateTime endDate))
  84. {
  85. return endDate >= DateTime.Today;
  86. }
  87. return false;
  88. });
  89. // 构建新的 DataTable
  90. DataTable filteredTable = filteredRows.Any()
  91. ? filteredRows.CopyToDataTable()
  92. : dtChronicDiesease.Clone(); // 空数据时返回结构一致的空表
  93. if (filteredTable.Rows.Count == 0)
  94. {
  95. outParam = "该患者为慢病处方!但在中心未查询到慢病信息!请至人工窗口处理!";
  96. return Exception();
  97. }
  98. else if (filteredTable.Rows.Count > 1)
  99. {
  100. outParam = "该患者为慢病处方!但在中心未查询到多条慢病信息!请至人工窗口处理!";
  101. return Exception();
  102. }
  103. else
  104. {
  105. diseCodg = filteredTable.Rows[0]["opsp_dise_code"].ToString();
  106. diseName = filteredTable.Rows[0]["opsp_dise_name"].ToString();
  107. }
  108. }
  109. #region 组织挂号入参
  110. JObject joRegInpar = new JObject();
  111. string occurTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  112. joRegInpar.Add("psn_no", Global.pat.psn_no);
  113. joRegInpar.Add("insutype", Global.pat.insuType);
  114. joRegInpar.Add("begntime", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.begntime"));//挂号时间 occurTime
  115. joRegInpar.Add("mdtrt_cert_type", Global.pat.mdtrtcertType);
  116. joRegInpar.Add("mdtrt_cert_no", Global.pat.mdtrtcertNO);
  117. joRegInpar.Add("ipt_otp_no", Global.pat.adm_Dr.ToString());
  118. joRegInpar.Add("atddr_no", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.atddr_no"));
  119. joRegInpar.Add("dr_name", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.chfpdr_name"));
  120. joRegInpar.Add("dept_code", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.adm_dept_codg"));
  121. joRegInpar.Add("dept_name", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.adm_dept_name"));
  122. joRegInpar.Add("exp_content", "");
  123. joRegInpar.Add("caty", "A10");
  124. #endregion
  125. #region 组织就诊信息入参
  126. JObject joMdtrtinfo = new JObject();
  127. for (int i = 0; i < jaDiagnoses.Count; i++)
  128. {
  129. jaDiagnoses[i]["vali_flag"] = new JObject();
  130. jaDiagnoses[i]["vali_flag"] = "1";
  131. }
  132. joMdtrtinfo.Add("mdtrt_id", Global.pat.mdtrtID);
  133. joMdtrtinfo.Add("psn_no", Global.pat.psn_no); //人员编号
  134. joMdtrtinfo.Add("med_type", Global.pat.medType); //医疗类别
  135. joMdtrtinfo.Add("begntime", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.begntime")); //开始时间
  136. joMdtrtinfo.Add("main_cond_dscr", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.main_cond_dscr")); //主要病情描述
  137. joMdtrtinfo.Add("dise_codg", diseCodg); //病种编码
  138. joMdtrtinfo.Add("dise_name", diseName); //病种名称
  139. joMdtrtinfo.Add("birctrl_type", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.birctrl_type")); //计划生育手术类别
  140. //joMdtrtinfo.Add("birctrl_matn_date", ""); //计划生育手术或生育日期 JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.birctrl_matn_date") 20230228医保中心校验传正确时间或空
  141. joMdtrtinfo.Add("matn_type", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.matn_type")); //生育类别
  142. joMdtrtinfo.Add("expContent", ""); //字段扩展
  143. // 特殊2203A需要exp_content字段
  144. JObject ExportObj = new JObject();
  145. ExportObj.Add("dise_reim_mon", "");
  146. ExportObj.Add("deve_flag", "");
  147. ExportObj.Add("otp_reim_flag", "");
  148. ExportObj.Add("local_dise", ""); //单病种编码
  149. ExportObj.Add("ifen_flag", ""); //传染性标志
  150. //ExportObj.Add("cla_trt_flag", frmReg.claTrtFlag); //分级诊疗标志
  151. ExportObj.Add("trum_flag", "0"); //外伤标志
  152. //ExportObj.Add("ipt_type", frmReg.iptTypeCode); //住院类型(离院)
  153. ExportObj.Add("rel_ttp_flag","0"); //涉及第三方标志
  154. ExportObj.Add("mdtrt_grp_type", ""); //就诊人群类型
  155. ExportObj.Add("elec_bill_code", ""); //电子票据代码
  156. ExportObj.Add("elec billno_code", ""); //电子票据号码
  157. ExportObj.Add("otp_er_refl_flag", ""); //门诊转急诊
  158. joMdtrtinfo.Add("exp_content", ExportObj); //字段扩展
  159. #endregion
  160. #region 组织结算入参
  161. JObject joSetlInpar = new JObject();
  162. joSetlInpar.Add("psn_no", Global.pat.psn_no);
  163. joSetlInpar.Add("mdtrt_cert_type", Global.pat.mdtrtcertType);
  164. joSetlInpar.Add("mdtrt_cert_no", Global.pat.mdtrtcertNO);
  165. joSetlInpar.Add("med_type", Global.pat.medType);
  166. joSetlInpar.Add("medfee_sumamt", "");
  167. joSetlInpar.Add("psn_setlway", psn_setlway); //结算方式
  168. joSetlInpar.Add("mdtrt_id", Global.pat.mdtrtID);
  169. joSetlInpar.Add("chrg_bchno", Global.pat.adm_Dr.ToString());
  170. joSetlInpar.Add("acct_used_flag", "1");//个人账户使用标志
  171. joSetlInpar.Add("insutype", Global.pat.insuType);//险种类型
  172. joSetlInpar.Add("pub_hosp_rfom_flag", "");
  173. joSetlInpar.Add("exp_content", "");
  174. joSetlInpar.Add("mdtrt_mode", "0");
  175. #endregion
  176. joReg.Add("data", joRegInpar);
  177. joReg.Add("mdtrtinfo", joMdtrtinfo);
  178. joReg.Add("diseinfo", jaDiagnoses);
  179. joReg.Add("settlement", joSetlInpar);
  180. joReg.Add("patInfo", input);
  181. outParam = joReg.ToString();
  182. return Success();
  183. }
  184. catch (Exception ex)
  185. {
  186. outParam = "登记界面显示异常:" + ex.Message;
  187. return Exception(-1,"",outParam);
  188. }
  189. }
  190. }
  191. }