OutPatientIntegratedServices.cs 35 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784
  1. using Newtonsoft.Json.Linq;
  2. using PTMedicalInsurance.Business;
  3. using PTMedicalInsurance.Helper;
  4. using PTMedicalInsurance.Variables;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.ComponentModel;
  8. using System.Data;
  9. using System.Diagnostics;
  10. using System.Drawing;
  11. using System.Linq;
  12. using System.Text;
  13. using System.Threading;
  14. using System.Threading.Tasks;
  15. using System.Windows.Forms;
  16. namespace PTMedicalInsurance.Forms
  17. {
  18. public partial class OutPatientIntegratedServices : Form
  19. {
  20. private HisIrisServices hIS = new HisIrisServices();
  21. private MIIrisServices mIS = new MIIrisServices();
  22. private CenterBusiness cBus = new CenterBusiness();
  23. private XmlHelper xmler = new XmlHelper();
  24. private HisMainBusiness hBus = new HisMainBusiness();
  25. private YHComInvoker yhHelper = new YHComInvoker();
  26. private string aka130;
  27. private string inpar_48;
  28. private JObject joPatInfo;
  29. private JObject joDiagnoses;
  30. private JObject joFee;
  31. private JObject joSettlRtn;
  32. private int selectedPsnTypeIndex;
  33. public int rtnFlag = -1;
  34. public string rtnMsg; //返回的信息
  35. public DataTable DtDiagnose { get; set; }
  36. public DataTable DtSpecDise { get; set; }
  37. public DataTable DtPsnType { get; set; }
  38. #region 设置表格
  39. private void AddDGVColumn(DataGridView dgv, string headerText, string dataPropertyName, int width = 120)
  40. {
  41. DataGridViewColumn newColumn = new DataGridViewTextBoxColumn();
  42. newColumn.HeaderText = headerText;
  43. newColumn.Width = width;
  44. newColumn.DataPropertyName = dataPropertyName;
  45. newColumn.Name = dataPropertyName;
  46. dgv.Columns.Add(newColumn);
  47. }
  48. private void setDgvPsnType()
  49. {
  50. AddDGVColumn(dgvPersonType, "城乡居民类别", "ykc296", 80);
  51. AddDGVColumn(dgvPersonType, "城乡居民类别名称", "YKC297", 200);
  52. AddDGVColumn(dgvPersonType, "开始时间", "AAE030");
  53. AddDGVColumn(dgvPersonType, "结束时间", "AAE031");
  54. dgvPersonType.ColumnHeadersDefaultCellStyle.Font = new Font("宋体", 9, FontStyle.Bold);
  55. dgvPersonType.ColumnHeadersHeight = 20;
  56. }
  57. private void setDgvSpecDise()
  58. {
  59. AddDGVColumn(dgvSpeDise, "医院编码", "akb020", 80);
  60. AddDGVColumn(dgvSpeDise, "分中心", "YAB003", 200);
  61. AddDGVColumn(dgvSpeDise, "疾病编码", "YKA026");
  62. AddDGVColumn(dgvSpeDise, "病种名称", "YKA027");
  63. AddDGVColumn(dgvSpeDise, "开始时间", "AAE030");
  64. AddDGVColumn(dgvSpeDise, "结束时间", "AAE031");
  65. AddDGVColumn(dgvSpeDise, "拼音助记码", "YKA260", 60);
  66. AddDGVColumn(dgvSpeDise, "病种标志名称", "YKD112");
  67. AddDGVColumn(dgvSpeDise, ">补助标准", "YKA068", 300);
  68. AddDGVColumn(dgvSpeDise, ">病种标志编码", "YKD111", 300);
  69. dgvSpeDise.ColumnHeadersDefaultCellStyle.Font = new Font("宋体", 9, FontStyle.Bold);
  70. dgvSpeDise.ColumnHeadersHeight = 20;
  71. }
  72. #endregion
  73. public OutPatientIntegratedServices()
  74. {
  75. InitializeComponent();
  76. cbCardType.SelectedIndex = 1;
  77. cbAKA130.SelectedIndex = 0;
  78. dgvDiagnose.DataSource = DtDiagnose;
  79. rbGuiYang.Checked = true;
  80. setDgvPsnType();
  81. setDgvSpecDise();
  82. string errMsg = "";
  83. if (yhHelper.initYHCom(out errMsg) != 0)
  84. {
  85. rtnMsg = "初始化银海COM组件失败" + errMsg;
  86. Close();
  87. }
  88. if (GetAndShowDiagnoses(out errMsg) != 0)
  89. {
  90. rtnMsg = "获取诊断信息错误,请联系管理员!" + errMsg;
  91. MessageBox.Show(rtnMsg);
  92. }
  93. dgvDiagnose.DataSource = DtDiagnose;
  94. }
  95. #region 获取参保信息
  96. private int readCard(out string outParam)
  97. {
  98. outParam = "";
  99. string errorMsg = "";
  100. JObject joCardInfo = new JObject();
  101. try
  102. {
  103. JObject joInput = new JObject();
  104. if (rbGuiZhou.Checked)
  105. {
  106. Global.pat.patExtend.prm_yabtch = "9900";
  107. }
  108. if (rbGuiYang.Checked)
  109. {
  110. Global.pat.patExtend.prm_yabtch = "0100";
  111. }
  112. if (rbGongShang.Checked)
  113. {
  114. Global.pat.patExtend.prm_yabtch = "GS01";
  115. }
  116. JObject joTmp = new JObject();
  117. joTmp.Add("prm_payoptype", cbCardType.Text.Substring(0, 2));
  118. joTmp.Add("prm_yabtch", Global.pat.patExtend.prm_yabtch);
  119. if (yhHelper.invokeYHCom("03", joTmp, out errorMsg) != 0)
  120. {
  121. outParam = "读卡失败" + errorMsg;
  122. return -1;
  123. }
  124. else
  125. {
  126. outParam = errorMsg;
  127. return 0;
  128. }
  129. }
  130. catch (Exception ex)
  131. {
  132. outParam = "异常:" + ex.Message;
  133. return -1;
  134. }
  135. }
  136. private int ShowPatInsuInfo(string patInfo,out string msg)
  137. {
  138. msg = "";
  139. try
  140. {
  141. JObject joOutput = JObject.Parse(patInfo);
  142. JObject joPatInfo = JObject.FromObject(joOutput["output"]);
  143. rtbPatientInsuInfo.AppendText("01.个人编号:" + joPatInfo["prm_aac001"] + System.Environment.NewLine);
  144. rtbPatientInsuInfo.AppendText("02.医疗人员类别:" + convertDictionaryValue("akc021", joPatInfo["prm_akc021"].ToString()) + System.Environment.NewLine);
  145. rtbPatientInsuInfo.AppendText("03.公务员级别:" + convertDictionaryValue("ykc120", joPatInfo["prm_ykc120"].ToString()) + System.Environment.NewLine); //prm_ykc120
  146. rtbPatientInsuInfo.AppendText("04.参保所属分中心:" + joPatInfo["prm_yab139"] + System.Environment.NewLine);
  147. rtbPatientInsuInfo.AppendText("05.执行社会保险办法:" + convertDictionaryValue("ykb065", joPatInfo["prm_ykb065"].ToString()) + System.Environment.NewLine); //prm_ykb065
  148. rtbPatientInsuInfo.AppendText("06.异地安置标志:" + convertDictionaryValue("ykc150", joPatInfo["prm_ykc150"].ToString()) + System.Environment.NewLine);//prm_ykc150
  149. rtbPatientInsuInfo.AppendText("07.姓名:" + joPatInfo["prm_aac003"] + System.Environment.NewLine);
  150. rtbPatientInsuInfo.AppendText("08.性别:" + convertDictionaryValue("aac004", joPatInfo["prm_aac004"].ToString()) + System.Environment.NewLine);//prm_aac004
  151. rtbPatientInsuInfo.AppendText("09.公民身份号:" + joPatInfo["prm_aac002"] + System.Environment.NewLine);
  152. rtbPatientInsuInfo.AppendText("10.出生日期:" + joPatInfo["prm_aac006"] + System.Environment.NewLine);
  153. rtbPatientInsuInfo.AppendText("11.实足年龄:" + joPatInfo["prm_akc023"] + System.Environment.NewLine);
  154. rtbPatientInsuInfo.AppendText("12.单位编号:" + joPatInfo["prm_aab001"] + System.Environment.NewLine);
  155. rtbPatientInsuInfo.AppendText("13.单位名称:" + joPatInfo["prm_aab004"] + System.Environment.NewLine);
  156. rtbPatientInsuInfo.AppendText("14.个人参保状态:" + convertDictionaryValue("aac031", joPatInfo["prm_aac031"].ToString()) + System.Environment.NewLine);//prm_aac031
  157. rtbPatientInsuInfo.AppendText("15.个人账户余额:" + joPatInfo["prm_akc087"] + System.Environment.NewLine);
  158. rtbPatientInsuInfo.AppendText("16.分中心编号:" + joPatInfo["prm_yab003"] + System.Environment.NewLine);
  159. rtbPatientInsuInfo2.AppendText("17.居民医疗人员类别:" + convertDictionaryValue("ykc280", joPatInfo["prm_ykc280"].ToString()) + System.Environment.NewLine);//prm_ykc280
  160. rtbPatientInsuInfo2.AppendText("18.居民医疗人员身份:" + convertDictionaryValue("ykc281", joPatInfo["prm_ykc281"].ToString()) + System.Environment.NewLine);//prm_ykc281
  161. rtbPatientInsuInfo2.AppendText("19.行政职务:" + joPatInfo["prm_aac020"] + System.Environment.NewLine);
  162. rtbPatientInsuInfo2.AppendText("20.住院状态:" + joPatInfo["prm_ykc023"] + System.Environment.NewLine);
  163. rtbPatientInsuInfo2.AppendText("21.电话:" + joPatInfo["prm_ aae005"] + System.Environment.NewLine);
  164. rtbPatientInsuInfo2.AppendText("22.地址:" + joPatInfo["prm_aae006"] + System.Environment.NewLine);
  165. rtbPatientInsuInfo2.AppendText("23.二维码:" + joPatInfo["prm_yae921"] + System.Environment.NewLine);
  166. rtbPatientInsuInfo2.AppendText("24.卡号:" + joPatInfo["prm_yac005"] + System.Environment.NewLine);
  167. rtbPatientInsuInfo2.AppendText("25.特殊病标识:" + convertDictionaryValue("symbol", joPatInfo["prm_symbol"].ToString()) + System.Environment.NewLine);//prm_symbol
  168. rtbPatientInsuInfo2.AppendText("26.是否待遇等待期:" + joPatInfo["prm_ykc101"] + System.Environment.NewLine);
  169. //rtbPatientInsuInfo2.AppendText("27.特殊疾病信息:" + joPatInfo["prm_ykc010"] + System.Environment.NewLine);
  170. //rtbPatientInsuInfo2.AppendText("28.人员类别:" + joPatInfo["prm_ykc296"] + System.Environment.NewLine);
  171. rtbPatientInsuInfo2.AppendText("29.二维码类型:" + joPatInfo["prm_qrcodetype"] + System.Environment.NewLine);
  172. rtbPatientInsuInfo2.AppendText("30.账户共济授权人编码:" + joPatInfo["prm_auther_no"] + System.Environment.NewLine);
  173. rtbPatientInsuInfo2.AppendText("31.账户共济授权人证件号码:" + joPatInfo["prm_auther_certno"] + System.Environment.NewLine);
  174. rtbPatientInsuInfo2.AppendText("32.账户共济授权人姓名:" + joPatInfo["prm_auther_name"] + System.Environment.NewLine, Color.Fuchsia, new Font("宋体", 12));
  175. rtbPatientInsuInfo2.AppendText("33.账户共济授权人参保区划:" + joPatInfo["prm_auther_insu_admdvs"] + System.Environment.NewLine);
  176. //rtbPatientInsuInfo2.AppendText("34.门诊统筹限额已累计金额:" + joPatInfo["prm_yka128"] + System.Environment.NewLine);
  177. rtbPatientInsuInfo2.AppendText("34.门诊统筹限额已累计金额:" + joPatInfo["prm_yka128"] + System.Environment.NewLine, Color.Fuchsia, new Font("宋体", 12));
  178. DataTable dt = null ;
  179. if (string.IsNullOrEmpty(joPatInfo["prm_ykc296"].ToString()))
  180. {
  181. }
  182. else
  183. {
  184. JObject joPsnType = JObject.FromObject(joPatInfo["prm_ykc296"]);
  185. dt = (DataTable)joPsnType["row"].ToObject(typeof(DataTable));
  186. DtPsnType = (DataTable)joPsnType["row"].ToObject(typeof(DataTable));
  187. for (int i = 0; i < dt.Rows.Count; i++)
  188. {
  189. DataRow dr = dt.Rows[i];
  190. dr["ykc296"] = convertDictionaryValue("ykc296", dr["ykc296"].ToString());
  191. //dr["ykc296"] = "测试";
  192. }
  193. dgvPersonType.DataSource = dt;
  194. }
  195. if (string.IsNullOrEmpty(joPatInfo["prm_ykc010"].ToString()))
  196. { }
  197. else
  198. {
  199. JObject joSpecDise = JObject.FromObject(joPatInfo["prm_ykc010"]);
  200. DtSpecDise = (DataTable)joSpecDise["row"].ToObject(typeof(DataTable));
  201. dgvSpeDise.DataSource = DtSpecDise;
  202. }
  203. return 0;
  204. }
  205. catch (Exception ex)
  206. {
  207. msg = ex.Message;
  208. Global.writeLog("ShowPatInsuInfo", patInfo,msg);
  209. return -1;
  210. }
  211. }
  212. #endregion
  213. #region 获取诊断信息
  214. private int GetAndShowDiagnoses(out string outparam)
  215. {
  216. //调用服务获取门诊诊断信息
  217. outparam = "";
  218. if (hIS.getPatDiagnoses(Global.pat, out outparam) != 0)
  219. {
  220. return -1;
  221. }
  222. JObject joTmp = JObject.Parse(outparam);
  223. try
  224. {
  225. JArray jaDiagnoses = JArray.Parse(JsonHelper.getDestValue(joTmp, "diseinfo"));
  226. //转换下主要诊断
  227. for (int i = 0; i < jaDiagnoses.Count; i++)
  228. {
  229. string diag_type = JsonHelper.getDestValue((JObject)jaDiagnoses[i], "diag_type");
  230. switch (diag_type)
  231. {
  232. case "1":
  233. {
  234. jaDiagnoses[i]["diag_type_name"] = new JObject();
  235. jaDiagnoses[i]["diag_type_name"] = "西医主要诊断";
  236. break;
  237. }
  238. case "2":
  239. {
  240. jaDiagnoses[i]["diag_type_name"] = new JObject();
  241. jaDiagnoses[i]["diag_type_name"] = "西医其他诊断";
  242. break;
  243. }
  244. case "3":
  245. {
  246. jaDiagnoses[i]["diag_type_name"] = new JObject();
  247. jaDiagnoses[i]["diag_type_name"] = "中医主病诊断";
  248. break;
  249. }
  250. case "4":
  251. {
  252. jaDiagnoses[i]["diag_type_name"] = new JObject();
  253. jaDiagnoses[i]["diag_type_name"] = "中医主证诊断";
  254. break;
  255. }
  256. }
  257. }
  258. //展示到界面
  259. DtDiagnose = (DataTable)jaDiagnoses.ToObject(typeof(DataTable));
  260. //组织门诊结算诊断入参
  261. JArray jaRow = new JArray();
  262. for (int i = 0; i < jaDiagnoses.Count; i++)
  263. {
  264. jaDiagnoses[i]["vali_flag"] = new JObject();
  265. jaDiagnoses[i]["vali_flag"] = "1";
  266. if (jaDiagnoses[i]["maindiag_flag"].ToString() == "1")
  267. {
  268. Global.pat.discDiagName = jaDiagnoses[i]["diag_name"].ToString();
  269. }
  270. jaRow.Add(jaDiagnoses[i]);
  271. }
  272. JObject joDiagRow = new JObject();
  273. joDiagRow.Add("row", jaRow);
  274. outparam = joDiagRow.ToString();
  275. return 0;
  276. }
  277. catch (Exception ex)
  278. {
  279. outparam = "登记界面显示异常:" + ex.Message;
  280. Global.writeLog("GetAndShowDiagnoses", joTmp.ToString(), outparam);
  281. return -1;
  282. }
  283. }
  284. #endregion
  285. #region 获取费用信息
  286. private int GetFee(out string outparam)
  287. {
  288. string hisFee;
  289. JObject jo = new JObject();
  290. try
  291. {
  292. //获取HIS费用
  293. if (hIS.getHisFee(Global.pat, out hisFee) != 0)
  294. {
  295. outparam = hisFee;
  296. return -1;
  297. }
  298. joFee = JObject.Parse(hisFee);
  299. //处理
  300. //调用医保平台转换HIS费用(转换医保编码等)
  301. JObject joHisFee = JObject.Parse(hisFee);
  302. if (mIS.convertHisFeeWithInsuCode(joHisFee, out outparam) != 0)
  303. {
  304. return -1;
  305. }
  306. JObject joRow = new JObject();
  307. JArray jaRow = new JArray();
  308. JArray jaFeeDetail = JArray.Parse(JsonHelper.getDestValue(JObject.Parse(outparam), "data"));
  309. decimal sumFee = 0;
  310. //转换
  311. for (int i = 0; i < jaFeeDetail.Count; i++)
  312. {
  313. decimal cnt = decimal.Parse(jaFeeDetail[i]["cnt"].ToString());
  314. decimal pric = decimal.Parse(jaFeeDetail[i]["pric"].ToString());
  315. decimal sumamt = decimal.Parse(jaFeeDetail[i]["det_item_fee_sumamt"].ToString());
  316. sumFee = sumFee + sumamt;
  317. JObject joTmp = new JObject();
  318. joTmp.Add("yka105", jaFeeDetail[i]["feedetl_sn"]);//记账流水号
  319. joTmp.Add("ykd125", jaFeeDetail[i]["medins_list_codg"]); //医院项目流水号
  320. joTmp.Add("ykd126", jaFeeDetail[i]["medins_list_codg"]); //医院项目名称
  321. joTmp.Add("yka002", jaFeeDetail[i]["med_list_codg"]);//医保通用项目编码
  322. joTmp.Add("yka003", jaFeeDetail[i]["med_list_codg"]);//医保通用项目名称
  323. joTmp.Add("akc226", cnt.ToString("#0.0000"));//数量
  324. joTmp.Add("akc225", pric.ToString("#0.000000"));//实际价格
  325. joTmp.Add("yka315", jaFeeDetail[i]["det_item_fee_sumamt"]);//明细项目费用总额
  326. joTmp.Add("yka097", jaFeeDetail[i]["bilg_dept_codg"]);//开单科室编码
  327. joTmp.Add("yka098", jaFeeDetail[i]["bilg_dept_name"]);//开单科室名称
  328. joTmp.Add("ykd102", jaFeeDetail[i]["bilg_dr_ID"]);//开单医生公民身份号码
  329. joTmp.Add("ykd103", jaFeeDetail[i]["bilg_dr_codg"]);//国家医保医生编码
  330. joTmp.Add("yka099", jaFeeDetail[i]["bilg_dr_name"]);//开单医生姓名
  331. joTmp.Add("yka100", jaFeeDetail[i]["acord_dept_codg"]);//受单科室编码
  332. joTmp.Add("yka101", jaFeeDetail[i]["acord_dept_name"]);//受单科室名称
  333. joTmp.Add("ykd106", jaFeeDetail[i]["orders_dr_ID"]);//受单医生公民身份号码
  334. joTmp.Add("yka102", jaFeeDetail[i]["orders_dr_name"]);//受单医生姓名
  335. joTmp.Add("yke123", jaFeeDetail[i]["fee_ocur_time"]);//明细发生时间
  336. joTmp.Add("ykc141", Global.user.name);//经办人姓名
  337. joTmp.Add("aae036", jaFeeDetail[i]["fee_ocur_time"]);//经办时间
  338. joTmp.Add("aae013", "");//备注
  339. joTmp.Add("akc229", "");//慢性病药品用药天数
  340. joTmp.Add("yke201", "");//中药使用方式
  341. joTmp.Add("yka295", "");//最小计价单位
  342. joTmp.Add("aka074", "");//规格
  343. joTmp.Add("aka070", "");//剂型
  344. joTmp.Add("yae374", "");//剂型名称
  345. joTmp.Add("yke009", "");//是否医院制剂
  346. joTmp.Add("yke186", "1");//医院审批标志
  347. joTmp.Add("yka821", jaFeeDetail[i]["hosp_appr_flag"]);//项目报销标志
  348. joTmp.Add("yka830", jaFeeDetail[i]["med_list_codg"]);//国家目录编码
  349. joTmp.Add("yka831", jaFeeDetail[i]["med_list_codg"]);//国家目录名称
  350. jaRow.Add(joTmp);
  351. }
  352. joRow.Add("row", jaRow);
  353. jo.Add("dataset", joRow);
  354. jo.Add("prm_hisfyze", sumFee.ToString("#0.00"));
  355. outparam = jo.ToString();
  356. return 0;
  357. }
  358. catch (Exception ex)
  359. {
  360. outparam = "获取费用异常:" + ex.Message;
  361. Global.writeLog("GetFee", jo.ToString(), "获取费用异常:" + ex.Message);
  362. return -1;
  363. }
  364. }
  365. #endregion
  366. #region 组织入参
  367. private int Set41Inpar(out string outparam)
  368. {
  369. outparam = "";
  370. JObject joInpar = new JObject();
  371. string errMsg = "";
  372. try
  373. {
  374. //获取诊断
  375. if(GetAndShowDiagnoses(out errMsg) != 0)
  376. {
  377. outparam = errMsg;
  378. return -1;
  379. }
  380. joInpar.Add("diselist", JObject.Parse(errMsg));
  381. //获取费用
  382. if (GetFee(out errMsg) != 0)
  383. {
  384. outparam = errMsg;
  385. return -1;
  386. }
  387. JObject joFee = JObject.Parse(errMsg);
  388. joInpar.Add("dataset", JObject.Parse(JsonHelper.getDestValue(joFee, "dataset")));
  389. joInpar.Add("prm_hisfyze", JsonHelper.getDestValue(joFee, "prm_hisfyze")); //费用总额
  390. //获取其他入参
  391. joInpar.Add("prm_akc190", "");//就诊编号
  392. joInpar.Add("prm_aac001", Global.pat.psn_no);//个人编号
  393. joInpar.Add("prm_ykc173", Global.pat.discDiagName);//门诊诊断信息
  394. joInpar.Add("prm_aka130", Global.pat.medType);//支付类别
  395. joInpar.Add("prm_yka110", "");//发票号
  396. joInpar.Add("prm_aae013", "");//备注
  397. joInpar.Add("prm_aae011", Global.user.ID);//经办人编码
  398. joInpar.Add("prm_ykc141", Global.user.name);//经办人姓名
  399. joInpar.Add("prm_ykb065", Global.pat.insuType);//执行社会保险办法
  400. joInpar.Add("ELEC_BILLNO_CODE", "");//电子票据号码
  401. joInpar.Add("ELEC_BILL_CODE", "");//电子票据代码
  402. joInpar.Add("ELEC_BILL_CHKCODE", "");//电子票据校验码
  403. joInpar.Add("prm_yabtch", Global.pat.patExtend.prm_yabtch);
  404. outparam = joInpar.ToString();
  405. return 0;
  406. }
  407. catch (Exception ex)
  408. {
  409. outparam = "设置41入参异常:" + ex.Message;
  410. Global.writeLog("", joInpar.ToString(), "设置41入参异常:" + ex.Message);
  411. return -1;
  412. }
  413. }
  414. private void Set48fInpar(out string outparam)
  415. {
  416. JObject joParam = new JObject();
  417. joParam.Add("prm_yae921", Global.pat.qrCodeID);//二维码ID
  418. joParam.Add("prm_aac001", Global.pat.psn_no);//个人编码
  419. joParam.Add("prm_count", 1);//HIS 本次就诊结算次数
  420. joParam.Add("prm_hisfyze", Global.settl.sumamt);//本次就诊总费用
  421. joParam.Add("prm_misecond", 10000);//等待患者确认响应时间
  422. joParam.Add("prm_yabtch", Global.pat.patExtend.prm_yabtch);
  423. outparam = joParam.ToString();
  424. }
  425. #endregion
  426. #region 存入MI
  427. private int saveToMi(out string errMsg)
  428. {
  429. errMsg = "";
  430. try
  431. {
  432. //存储参保信息
  433. JObject joBaseInfo = JObject.Parse(JsonHelper.getDestValue(joPatInfo, "output"));
  434. if (mIS.insertPatCurInsuInfo(joBaseInfo, out errMsg) != 0)
  435. {
  436. return -1;
  437. }
  438. //存储登记信息
  439. if (mIS.saveOutpatRegisterInfo(JObject.Parse(inpar_48), joSettlRtn, out errMsg) != 0)
  440. {
  441. return -1 ;
  442. }
  443. //存储费用信息
  444. if (mIS.insertFee(JArray.Parse(JsonHelper.getDestValue(joFee, "result")), out errMsg) != 0)
  445. {
  446. return -1 ;
  447. }
  448. return 0;
  449. }
  450. catch (Exception ex)
  451. {
  452. errMsg = "saveToMi:" + ex.Message;
  453. return -1;
  454. }
  455. }
  456. #endregion
  457. public delegate int MyInvoke(out string outParam);
  458. public delegate void test(object o);
  459. #region Button事件
  460. private void btReadCard_Click(object sender, EventArgs e)
  461. {
  462. string errMsg;
  463. try
  464. {
  465. //object[] o = new object[2];
  466. //mainThreadSynContext = new WindowsFormsSynchronizationContext();//当前主线程没有UI
  467. //mainThreadSynContext = SynchronizationContext.Current;//当前的主线程有UI
  468. //mainThreadSynContext.Post(new SendOrPostCallback(tt), o);//抛到主线程之中
  469. //errMsg = (string)o[1];
  470. //object[] o = new object[1];
  471. //int a = (int)this.Invoke(mi, o);
  472. //if (a != 0)
  473. //{
  474. // MessageBox.Show(this, (string)o[0]);
  475. // return;
  476. //}
  477. //string patInfo = (string)o[0];
  478. if (readCard(out errMsg) != 0)
  479. {
  480. MessageBox.Show(errMsg);
  481. return;
  482. }
  483. string patInfo = xmler.ToJSON(errMsg);
  484. //展示患者信息
  485. if (ShowPatInsuInfo(patInfo, out errMsg) != 0)
  486. {
  487. rtnMsg = "读卡提示:" + errMsg;
  488. MessageBox.Show(errMsg);
  489. return;
  490. };
  491. //设置全局变量
  492. joPatInfo = JObject.Parse(patInfo);
  493. if (hBus.setGlobalPatAfaterShowPatInfo(patInfo, out errMsg) != 0) MessageBox.Show("设置全局变量提示:" + errMsg);
  494. }
  495. catch (Exception ex)
  496. {
  497. MessageBox.Show("读卡异常:" + ex.Message);
  498. }
  499. }
  500. private void btSettlement_Click(object sender, EventArgs e)
  501. {
  502. try
  503. {
  504. //查询MIS是否有RecordID记录,如果有,则提示,并记录
  505. string sqlStr = $"SELECT 1 FROM SQLUser.BS_MedInsuSettlement WHERE Interface_Dr = {Global.inf.interfaceDr} AND Adm_Dr = '{Global.pat.adm_Dr}' AND RecordID ='{Global.pat.recordID}' ";
  506. JObject joSqlstr = new JObject();
  507. joSqlstr.Add("sqlStr", sqlStr);
  508. JObject joRecordRows = mIS.DynamicQuery(joSqlstr,"查询当前RecorID是否已存在数据!");
  509. if (JsonHelper.getDestValue(joRecordRows, "result.total") != "0")
  510. {
  511. MessageBox.Show("检测到存在重复结算,注意是否存在网络卡顿,延迟等情况,并即时向管理员反馈!");
  512. return;
  513. }
  514. if ((string.IsNullOrEmpty(Global.pat.psn_no)) || (string.IsNullOrEmpty(Global.pat.psn_no)) || (string.IsNullOrEmpty(Global.pat.psn_no)))
  515. {
  516. MessageBox.Show("未获取到有效的参保信息,请先点击读卡按钮!");
  517. return;
  518. }
  519. if (cbMutualAid.Checked && (string.IsNullOrEmpty(Global.pat.patExtend.prm_auther_certno) || string.IsNullOrEmpty(Global.pat.patExtend.prm_auther_no)))
  520. {
  521. MessageBox.Show("未检测到该患者有共济授权人,请取消勾选共济结算!!");
  522. return;
  523. }
  524. Global.pat.medType = cbAKA130.Text.Substring(0, cbAKA130.Text.IndexOf("."));
  525. Global.pat.payByQrCode = cbxQrCodePay.Checked;
  526. if (DtPsnType != null)
  527. {
  528. Global.pat.patExtend.ykc296 = DtPsnType.Rows[dgvPersonType.CurrentRow.Index]["ykc296"].ToString();
  529. }
  530. string errMsg = "";
  531. if (Global.pat.patExtend.prm_yabtch != "GS01")
  532. {
  533. ////事前分析
  534. if ((Global.curEvt.ext.isOpenAnalysis) && (Global.operationType == OperationType.SettlementOP))
  535. {
  536. if (hBus.PreAnalysis("1","", out errMsg) != 0)
  537. {
  538. MessageBox.Show(errMsg);
  539. return;
  540. }
  541. }
  542. }
  543. //组织入参
  544. if (Set41Inpar(out errMsg) != 0)
  545. {
  546. rtnMsg = errMsg;
  547. MessageBox.Show("Set41Inpar" + errMsg);
  548. return;
  549. }
  550. inpar_48 = errMsg;
  551. if (Global.pat.payByQrCode)
  552. {
  553. string inpar_48f;
  554. Set48fInpar(out inpar_48f);
  555. if (yhHelper.invokeYHCom("48f", JObject.Parse(inpar_48f), out errMsg) != 0)
  556. {
  557. MessageBox.Show(errMsg);
  558. rtnMsg = errMsg;
  559. return;
  560. }
  561. }
  562. //string inpar = xmler.ToXML(errMsg);
  563. //调用结算
  564. if (yhHelper.invokeYHCom("48", JObject.Parse(inpar_48), out errMsg) != 0)
  565. {
  566. MessageBox.Show(errMsg);
  567. rtnMsg = errMsg;
  568. return;
  569. }
  570. //将主结算的jylsh,jyyzm保存
  571. string mainJylsh = Global.curEvt.msgid;
  572. string mainJyyzm = Global.curEvt.jyyzm;
  573. //存储结算信息
  574. Global.pat.admType = 1; //门诊标志
  575. joSettlRtn = JObject.Parse(xmler.ToJSON(errMsg));
  576. Global.pat.mdtrtID = JsonHelper.getDestValue(joSettlRtn, "output.prm_akc190");
  577. //返回给云医保平台结算信息
  578. if (mIS.saveSettlement(joSettlRtn, out errMsg) != 0)
  579. {
  580. rtnMsg = "结算成功,但云医保平台保存失败" + errMsg;
  581. yhHelper.cancleYHCom(out errMsg);
  582. MessageBox.Show(rtnMsg);
  583. return;
  584. }
  585. JObject joSettlement = JObject.Parse(errMsg);
  586. //相关信息存到医保平台
  587. saveToMi(out errMsg);
  588. //如果有共济支付,进行共济支付结算
  589. if (cbMutualAid.Checked)
  590. {
  591. decimal psnCashPay = decimal.Parse(JsonHelper.getDestValue(joSettlRtn, "output.psn_cash_pay"));
  592. if (psnCashPay == 0)
  593. {
  594. MessageBox.Show("该患者自付金额为0,不需要进行共济支付!");
  595. }
  596. else
  597. {
  598. //开启自付界面,因涉及到多次自付
  599. JObject joMa = new JObject();
  600. joMa.Add("setl_id", JsonHelper.getDestValue(joSettlRtn, "output.prm_yka103"));
  601. joMa.Add("psnCashPay", psnCashPay);
  602. joMa.Add("MainSettlInfo", joSettlRtn);
  603. MutualAid frmMA = new MutualAid(joMa);
  604. if (frmMA.dtSumumt.Rows.Count != 0)
  605. {
  606. frmMA.WindowState = FormWindowState.Maximized;
  607. if (frmMA.ShowDialog() == DialogResult.OK)
  608. {
  609. joSettlement = JObject.Parse(frmMA.finalSettlementInfo);
  610. joSettlRtn = frmMA.joMainSettlInfo;
  611. }
  612. else
  613. {
  614. rtnMsg = "开启共济支付失败,原因为收款员取消共济支付!";
  615. MessageBox.Show(rtnMsg);
  616. return;
  617. }
  618. }
  619. else
  620. {
  621. rtnMsg = "开启共济支付失败,原因为未检测到有效的被共济人的医保结算数据!";
  622. MessageBox.Show(rtnMsg);
  623. return;
  624. }
  625. }
  626. }
  627. //返回给HIS
  628. if (hIS.returnOutpatSettlementInfo(joSettlement, joSettlRtn, out errMsg) != 0)
  629. {
  630. rtnMsg = "返回结算信息给HIS" + errMsg;
  631. yhHelper.cancleYHCom(out errMsg);
  632. MessageBox.Show(rtnMsg);
  633. return;
  634. }
  635. string rtnHis = errMsg;
  636. //确认中心结算
  637. Global.curEvt.jyyzm = mainJyyzm;
  638. Global.curEvt.msgid = mainJylsh;
  639. if (yhHelper.confirmYHCom(out errMsg) != 0)
  640. {
  641. rtnMsg = "中心确认失败" + errMsg;
  642. yhHelper.cancleYHCom(out errMsg);
  643. MessageBox.Show(rtnMsg);
  644. return;
  645. }
  646. else
  647. {
  648. JObject joHisServieRtn = JObject.Parse(rtnHis);
  649. hBus.returnToFrontEndAfterSettlement(joSettlement, joHisServieRtn, out rtnHis);
  650. rtnMsg = JsonHelper.setIrisReturnValue(0, "结算成功", JObject.Parse(rtnHis)).ToString();
  651. rtnFlag = 0;
  652. Close();
  653. return;
  654. }
  655. }
  656. catch (Exception ex)
  657. {
  658. Global.writeLog(ex.Message);
  659. throw;
  660. }
  661. }
  662. private void btExit_Click(object sender, EventArgs e)
  663. {
  664. Close();
  665. }
  666. #endregion
  667. #region 转换
  668. private string convertDictionaryValue(string type, string code)
  669. {
  670. try
  671. {
  672. JObject joRtn = mIS.getSpecDictionary(Global.inf.interfaceDr.ToString(), type, code);
  673. string errMsg = "";
  674. JArray ja = JArray.Parse(JsonHelper.getDestValue(joRtn, "result.data"));
  675. if (ja.Count == 1)
  676. {
  677. return ja[0]["name"].ToString();
  678. }
  679. else
  680. {
  681. return code;
  682. }
  683. }
  684. catch (Exception ex)
  685. {
  686. Global.writeLog("convertDictionaryValue",ex.Message,"");
  687. return code;
  688. }
  689. }
  690. #endregion
  691. private void rbGongShang_CheckedChanged(object sender, EventArgs e)
  692. {
  693. if (rbGongShang.Checked)
  694. {
  695. cbAKA130.SelectedIndex = 10;
  696. }
  697. else
  698. {
  699. cbAKA130.SelectedIndex = 0;
  700. }
  701. }
  702. }
  703. public static class RichTextBoxColorExtensions
  704. {
  705. public static void AppendText(this Sunny.UI.UIRichTextBox rtb, string text, Color color, Font font, bool isNewLine = false)
  706. {
  707. rtb.SuspendLayout();
  708. rtb.SelectionStart = rtb.TextLength;
  709. rtb.SelectionLength = 0;
  710. rtb.SelectionColor = color;
  711. rtb.SelectionFont = font;
  712. rtb.AppendText(isNewLine ? $"{text}{ Environment.NewLine}" : text);
  713. rtb.SelectionColor = rtb.ForeColor;
  714. rtb.ScrollToCaret();
  715. rtb.ResumeLayout();
  716. }
  717. }
  718. }