using Newtonsoft.Json.Linq; using PTMedicalInsurance.Business; using PTMedicalInsurance.Helper; using PTMedicalInsurance.Variables; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Drawing; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; namespace PTMedicalInsurance.Forms { public partial class OutPatientIntegratedServices : Form { private HisIrisServices hIS = new HisIrisServices(); private MIIrisServices mIS = new MIIrisServices(); private CenterBusiness cBus = new CenterBusiness(); private XmlHelper xmler = new XmlHelper(); private HisMainBusiness hBus = new HisMainBusiness(); private YHComInvoker yhHelper = new YHComInvoker(); private string aka130; private string inpar_48; private JObject joPatInfo; private JObject joDiagnoses; private JObject joFee; private JObject joSettlRtn; private int selectedPsnTypeIndex; public int rtnFlag = -1; public string rtnMsg; //返回的信息 public DataTable DtDiagnose { get; set; } public DataTable DtSpecDise { get; set; } public DataTable DtPsnType { get; set; } #region 设置表格 private void AddDGVColumn(DataGridView dgv, string headerText, string dataPropertyName, int width = 120) { DataGridViewColumn newColumn = new DataGridViewTextBoxColumn(); newColumn.HeaderText = headerText; newColumn.Width = width; newColumn.DataPropertyName = dataPropertyName; newColumn.Name = dataPropertyName; dgv.Columns.Add(newColumn); } private void setDgvPsnType() { AddDGVColumn(dgvPersonType, "城乡居民类别", "ykc296", 80); AddDGVColumn(dgvPersonType, "城乡居民类别名称", "YKC297", 200); AddDGVColumn(dgvPersonType, "开始时间", "AAE030"); AddDGVColumn(dgvPersonType, "结束时间", "AAE031"); dgvPersonType.ColumnHeadersDefaultCellStyle.Font = new Font("宋体", 9, FontStyle.Bold); dgvPersonType.ColumnHeadersHeight = 20; } private void setDgvSpecDise() { AddDGVColumn(dgvSpeDise, "医院编码", "akb020", 80); AddDGVColumn(dgvSpeDise, "分中心", "YAB003", 200); AddDGVColumn(dgvSpeDise, "疾病编码", "YKA026"); AddDGVColumn(dgvSpeDise, "病种名称", "YKA027"); AddDGVColumn(dgvSpeDise, "开始时间", "AAE030"); AddDGVColumn(dgvSpeDise, "结束时间", "AAE031"); AddDGVColumn(dgvSpeDise, "拼音助记码", "YKA260", 60); AddDGVColumn(dgvSpeDise, "病种标志名称", "YKD112"); AddDGVColumn(dgvSpeDise, ">补助标准", "YKA068", 300); AddDGVColumn(dgvSpeDise, ">病种标志编码", "YKD111", 300); dgvSpeDise.ColumnHeadersDefaultCellStyle.Font = new Font("宋体", 9, FontStyle.Bold); dgvSpeDise.ColumnHeadersHeight = 20; } #endregion public OutPatientIntegratedServices() { InitializeComponent(); cbCardType.SelectedIndex = 1; cbAKA130.SelectedIndex = 0; dgvDiagnose.DataSource = DtDiagnose; rbGuiYang.Checked = true; setDgvPsnType(); setDgvSpecDise(); string errMsg = ""; if (yhHelper.initYHCom(out errMsg) != 0) { rtnMsg = "初始化银海COM组件失败" + errMsg; Close(); } if (GetAndShowDiagnoses(out errMsg) != 0) { rtnMsg = "获取诊断信息错误,请联系管理员!" + errMsg; MessageBox.Show(rtnMsg); } dgvDiagnose.DataSource = DtDiagnose; } #region 获取参保信息 private int readCard(out string outParam) { outParam = ""; string errorMsg = ""; JObject joCardInfo = new JObject(); try { JObject joInput = new JObject(); if (rbGuiZhou.Checked) { Global.pat.patExtend.prm_yabtch = "9900"; } if (rbGuiYang.Checked) { Global.pat.patExtend.prm_yabtch = "0100"; } if (rbGongShang.Checked) { Global.pat.patExtend.prm_yabtch = "GS01"; } JObject joTmp = new JObject(); joTmp.Add("prm_payoptype", cbCardType.Text.Substring(0, 2)); joTmp.Add("prm_yabtch", Global.pat.patExtend.prm_yabtch); if (yhHelper.invokeYHCom("03", joTmp, out errorMsg) != 0) { outParam = "读卡失败" + errorMsg; return -1; } else { outParam = errorMsg; return 0; } } catch (Exception ex) { outParam = "异常:" + ex.Message; return -1; } } private int ShowPatInsuInfo(string patInfo,out string msg) { msg = ""; try { JObject joOutput = JObject.Parse(patInfo); JObject joPatInfo = JObject.FromObject(joOutput["output"]); rtbPatientInsuInfo.AppendText("01.个人编号:" + joPatInfo["prm_aac001"] + System.Environment.NewLine); rtbPatientInsuInfo.AppendText("02.医疗人员类别:" + convertDictionaryValue("akc021", joPatInfo["prm_akc021"].ToString()) + System.Environment.NewLine); rtbPatientInsuInfo.AppendText("03.公务员级别:" + convertDictionaryValue("ykc120", joPatInfo["prm_ykc120"].ToString()) + System.Environment.NewLine); //prm_ykc120 rtbPatientInsuInfo.AppendText("04.参保所属分中心:" + joPatInfo["prm_yab139"] + System.Environment.NewLine); rtbPatientInsuInfo.AppendText("05.执行社会保险办法:" + convertDictionaryValue("ykb065", joPatInfo["prm_ykb065"].ToString()) + System.Environment.NewLine); //prm_ykb065 rtbPatientInsuInfo.AppendText("06.异地安置标志:" + convertDictionaryValue("ykc150", joPatInfo["prm_ykc150"].ToString()) + System.Environment.NewLine);//prm_ykc150 rtbPatientInsuInfo.AppendText("07.姓名:" + joPatInfo["prm_aac003"] + System.Environment.NewLine); rtbPatientInsuInfo.AppendText("08.性别:" + convertDictionaryValue("aac004", joPatInfo["prm_aac004"].ToString()) + System.Environment.NewLine);//prm_aac004 rtbPatientInsuInfo.AppendText("09.公民身份号:" + joPatInfo["prm_aac002"] + System.Environment.NewLine); rtbPatientInsuInfo.AppendText("10.出生日期:" + joPatInfo["prm_aac006"] + System.Environment.NewLine); rtbPatientInsuInfo.AppendText("11.实足年龄:" + joPatInfo["prm_akc023"] + System.Environment.NewLine); rtbPatientInsuInfo.AppendText("12.单位编号:" + joPatInfo["prm_aab001"] + System.Environment.NewLine); rtbPatientInsuInfo.AppendText("13.单位名称:" + joPatInfo["prm_aab004"] + System.Environment.NewLine); rtbPatientInsuInfo.AppendText("14.个人参保状态:" + convertDictionaryValue("aac031", joPatInfo["prm_aac031"].ToString()) + System.Environment.NewLine);//prm_aac031 rtbPatientInsuInfo.AppendText("15.个人账户余额:" + joPatInfo["prm_akc087"] + System.Environment.NewLine); rtbPatientInsuInfo.AppendText("16.分中心编号:" + joPatInfo["prm_yab003"] + System.Environment.NewLine); rtbPatientInsuInfo2.AppendText("17.居民医疗人员类别:" + convertDictionaryValue("ykc280", joPatInfo["prm_ykc280"].ToString()) + System.Environment.NewLine);//prm_ykc280 rtbPatientInsuInfo2.AppendText("18.居民医疗人员身份:" + convertDictionaryValue("ykc281", joPatInfo["prm_ykc281"].ToString()) + System.Environment.NewLine);//prm_ykc281 rtbPatientInsuInfo2.AppendText("19.行政职务:" + joPatInfo["prm_aac020"] + System.Environment.NewLine); rtbPatientInsuInfo2.AppendText("20.住院状态:" + joPatInfo["prm_ykc023"] + System.Environment.NewLine); rtbPatientInsuInfo2.AppendText("21.电话:" + joPatInfo["prm_ aae005"] + System.Environment.NewLine); rtbPatientInsuInfo2.AppendText("22.地址:" + joPatInfo["prm_aae006"] + System.Environment.NewLine); rtbPatientInsuInfo2.AppendText("23.二维码:" + joPatInfo["prm_yae921"] + System.Environment.NewLine); rtbPatientInsuInfo2.AppendText("24.卡号:" + joPatInfo["prm_yac005"] + System.Environment.NewLine); rtbPatientInsuInfo2.AppendText("25.特殊病标识:" + convertDictionaryValue("symbol", joPatInfo["prm_symbol"].ToString()) + System.Environment.NewLine);//prm_symbol rtbPatientInsuInfo2.AppendText("26.是否待遇等待期:" + joPatInfo["prm_ykc101"] + System.Environment.NewLine); //rtbPatientInsuInfo2.AppendText("27.特殊疾病信息:" + joPatInfo["prm_ykc010"] + System.Environment.NewLine); //rtbPatientInsuInfo2.AppendText("28.人员类别:" + joPatInfo["prm_ykc296"] + System.Environment.NewLine); rtbPatientInsuInfo2.AppendText("29.二维码类型:" + joPatInfo["prm_qrcodetype"] + System.Environment.NewLine); rtbPatientInsuInfo2.AppendText("30.账户共济授权人编码:" + joPatInfo["prm_auther_no"] + System.Environment.NewLine); rtbPatientInsuInfo2.AppendText("31.账户共济授权人证件号码:" + joPatInfo["prm_auther_certno"] + System.Environment.NewLine); rtbPatientInsuInfo2.AppendText("32.账户共济授权人姓名:" + joPatInfo["prm_auther_name"] + System.Environment.NewLine, Color.Fuchsia, new Font("宋体", 12)); rtbPatientInsuInfo2.AppendText("33.账户共济授权人参保区划:" + joPatInfo["prm_auther_insu_admdvs"] + System.Environment.NewLine); //rtbPatientInsuInfo2.AppendText("34.门诊统筹限额已累计金额:" + joPatInfo["prm_yka128"] + System.Environment.NewLine); rtbPatientInsuInfo2.AppendText("34.门诊统筹限额已累计金额:" + joPatInfo["prm_yka128"] + System.Environment.NewLine, Color.Fuchsia, new Font("宋体", 12)); DataTable dt = null ; if (string.IsNullOrEmpty(joPatInfo["prm_ykc296"].ToString())) { } else { JObject joPsnType = JObject.FromObject(joPatInfo["prm_ykc296"]); dt = (DataTable)joPsnType["row"].ToObject(typeof(DataTable)); DtPsnType = (DataTable)joPsnType["row"].ToObject(typeof(DataTable)); for (int i = 0; i < dt.Rows.Count; i++) { DataRow dr = dt.Rows[i]; dr["ykc296"] = convertDictionaryValue("ykc296", dr["ykc296"].ToString()); //dr["ykc296"] = "测试"; } dgvPersonType.DataSource = dt; } if (string.IsNullOrEmpty(joPatInfo["prm_ykc010"].ToString())) { } else { JObject joSpecDise = JObject.FromObject(joPatInfo["prm_ykc010"]); DtSpecDise = (DataTable)joSpecDise["row"].ToObject(typeof(DataTable)); dgvSpeDise.DataSource = DtSpecDise; } return 0; } catch (Exception ex) { msg = ex.Message; Global.writeLog("ShowPatInsuInfo", patInfo,msg); return -1; } } #endregion #region 获取诊断信息 private int GetAndShowDiagnoses(out string outparam) { //调用服务获取门诊诊断信息 outparam = ""; if (hIS.getPatDiagnoses(Global.pat, out outparam) != 0) { return -1; } JObject joTmp = JObject.Parse(outparam); try { JArray jaDiagnoses = JArray.Parse(JsonHelper.getDestValue(joTmp, "diseinfo")); //转换下主要诊断 for (int i = 0; i < jaDiagnoses.Count; i++) { string diag_type = JsonHelper.getDestValue((JObject)jaDiagnoses[i], "diag_type"); switch (diag_type) { case "1": { jaDiagnoses[i]["diag_type_name"] = new JObject(); jaDiagnoses[i]["diag_type_name"] = "西医主要诊断"; break; } case "2": { jaDiagnoses[i]["diag_type_name"] = new JObject(); jaDiagnoses[i]["diag_type_name"] = "西医其他诊断"; break; } case "3": { jaDiagnoses[i]["diag_type_name"] = new JObject(); jaDiagnoses[i]["diag_type_name"] = "中医主病诊断"; break; } case "4": { jaDiagnoses[i]["diag_type_name"] = new JObject(); jaDiagnoses[i]["diag_type_name"] = "中医主证诊断"; break; } } } //展示到界面 DtDiagnose = (DataTable)jaDiagnoses.ToObject(typeof(DataTable)); //组织门诊结算诊断入参 JArray jaRow = new JArray(); for (int i = 0; i < jaDiagnoses.Count; i++) { jaDiagnoses[i]["vali_flag"] = new JObject(); jaDiagnoses[i]["vali_flag"] = "1"; if (jaDiagnoses[i]["maindiag_flag"].ToString() == "1") { Global.pat.discDiagName = jaDiagnoses[i]["diag_name"].ToString(); } jaRow.Add(jaDiagnoses[i]); } JObject joDiagRow = new JObject(); joDiagRow.Add("row", jaRow); outparam = joDiagRow.ToString(); return 0; } catch (Exception ex) { outparam = "登记界面显示异常:" + ex.Message; Global.writeLog("GetAndShowDiagnoses", joTmp.ToString(), outparam); return -1; } } #endregion #region 获取费用信息 private int GetFee(out string outparam) { string hisFee; JObject jo = new JObject(); try { //获取HIS费用 if (hIS.getHisFee(Global.pat, out hisFee) != 0) { outparam = hisFee; return -1; } joFee = JObject.Parse(hisFee); //处理 //调用医保平台转换HIS费用(转换医保编码等) JObject joHisFee = JObject.Parse(hisFee); if (mIS.convertHisFeeWithInsuCode(joHisFee, out outparam) != 0) { return -1; } JObject joRow = new JObject(); JArray jaRow = new JArray(); JArray jaFeeDetail = JArray.Parse(JsonHelper.getDestValue(JObject.Parse(outparam), "data")); decimal sumFee = 0; //转换 for (int i = 0; i < jaFeeDetail.Count; i++) { decimal cnt = decimal.Parse(jaFeeDetail[i]["cnt"].ToString()); decimal pric = decimal.Parse(jaFeeDetail[i]["pric"].ToString()); decimal sumamt = decimal.Parse(jaFeeDetail[i]["det_item_fee_sumamt"].ToString()); sumFee = sumFee + sumamt; JObject joTmp = new JObject(); joTmp.Add("yka105", jaFeeDetail[i]["feedetl_sn"]);//记账流水号 joTmp.Add("ykd125", jaFeeDetail[i]["medins_list_codg"]); //医院项目流水号 joTmp.Add("ykd126", jaFeeDetail[i]["medins_list_codg"]); //医院项目名称 joTmp.Add("yka002", jaFeeDetail[i]["med_list_codg"]);//医保通用项目编码 joTmp.Add("yka003", jaFeeDetail[i]["med_list_codg"]);//医保通用项目名称 joTmp.Add("akc226", cnt.ToString("#0.0000"));//数量 joTmp.Add("akc225", pric.ToString("#0.000000"));//实际价格 joTmp.Add("yka315", jaFeeDetail[i]["det_item_fee_sumamt"]);//明细项目费用总额 joTmp.Add("yka097", jaFeeDetail[i]["bilg_dept_codg"]);//开单科室编码 joTmp.Add("yka098", jaFeeDetail[i]["bilg_dept_name"]);//开单科室名称 joTmp.Add("ykd102", jaFeeDetail[i]["bilg_dr_ID"]);//开单医生公民身份号码 joTmp.Add("ykd103", jaFeeDetail[i]["bilg_dr_codg"]);//国家医保医生编码 joTmp.Add("yka099", jaFeeDetail[i]["bilg_dr_name"]);//开单医生姓名 joTmp.Add("yka100", jaFeeDetail[i]["acord_dept_codg"]);//受单科室编码 joTmp.Add("yka101", jaFeeDetail[i]["acord_dept_name"]);//受单科室名称 joTmp.Add("ykd106", jaFeeDetail[i]["orders_dr_ID"]);//受单医生公民身份号码 joTmp.Add("yka102", jaFeeDetail[i]["orders_dr_name"]);//受单医生姓名 joTmp.Add("yke123", jaFeeDetail[i]["fee_ocur_time"]);//明细发生时间 joTmp.Add("ykc141", Global.user.name);//经办人姓名 joTmp.Add("aae036", jaFeeDetail[i]["fee_ocur_time"]);//经办时间 joTmp.Add("aae013", "");//备注 joTmp.Add("akc229", "");//慢性病药品用药天数 joTmp.Add("yke201", "");//中药使用方式 joTmp.Add("yka295", "");//最小计价单位 joTmp.Add("aka074", "");//规格 joTmp.Add("aka070", "");//剂型 joTmp.Add("yae374", "");//剂型名称 joTmp.Add("yke009", "");//是否医院制剂 joTmp.Add("yke186", "1");//医院审批标志 joTmp.Add("yka821", jaFeeDetail[i]["hosp_appr_flag"]);//项目报销标志 joTmp.Add("yka830", jaFeeDetail[i]["med_list_codg"]);//国家目录编码 joTmp.Add("yka831", jaFeeDetail[i]["med_list_codg"]);//国家目录名称 jaRow.Add(joTmp); } joRow.Add("row", jaRow); jo.Add("dataset", joRow); jo.Add("prm_hisfyze", sumFee.ToString("#0.00")); outparam = jo.ToString(); return 0; } catch (Exception ex) { outparam = "获取费用异常:" + ex.Message; Global.writeLog("GetFee", jo.ToString(), "获取费用异常:" + ex.Message); return -1; } } #endregion #region 组织入参 private int Set41Inpar(out string outparam) { outparam = ""; JObject joInpar = new JObject(); string errMsg = ""; try { //获取诊断 if(GetAndShowDiagnoses(out errMsg) != 0) { outparam = errMsg; return -1; } joInpar.Add("diselist", JObject.Parse(errMsg)); //获取费用 if (GetFee(out errMsg) != 0) { outparam = errMsg; return -1; } JObject joFee = JObject.Parse(errMsg); joInpar.Add("dataset", JObject.Parse(JsonHelper.getDestValue(joFee, "dataset"))); joInpar.Add("prm_hisfyze", JsonHelper.getDestValue(joFee, "prm_hisfyze")); //费用总额 //获取其他入参 joInpar.Add("prm_akc190", "");//就诊编号 joInpar.Add("prm_aac001", Global.pat.psn_no);//个人编号 joInpar.Add("prm_ykc173", Global.pat.discDiagName);//门诊诊断信息 joInpar.Add("prm_aka130", Global.pat.medType);//支付类别 joInpar.Add("prm_yka110", "");//发票号 joInpar.Add("prm_aae013", "");//备注 joInpar.Add("prm_aae011", Global.user.ID);//经办人编码 joInpar.Add("prm_ykc141", Global.user.name);//经办人姓名 joInpar.Add("prm_ykb065", Global.pat.insuType);//执行社会保险办法 joInpar.Add("ELEC_BILLNO_CODE", "");//电子票据号码 joInpar.Add("ELEC_BILL_CODE", "");//电子票据代码 joInpar.Add("ELEC_BILL_CHKCODE", "");//电子票据校验码 joInpar.Add("prm_yabtch", Global.pat.patExtend.prm_yabtch); outparam = joInpar.ToString(); return 0; } catch (Exception ex) { outparam = "设置41入参异常:" + ex.Message; Global.writeLog("", joInpar.ToString(), "设置41入参异常:" + ex.Message); return -1; } } private void Set48fInpar(out string outparam) { JObject joParam = new JObject(); joParam.Add("prm_yae921", Global.pat.qrCodeID);//二维码ID joParam.Add("prm_aac001", Global.pat.psn_no);//个人编码 joParam.Add("prm_count", 1);//HIS 本次就诊结算次数 joParam.Add("prm_hisfyze", Global.settl.sumamt);//本次就诊总费用 joParam.Add("prm_misecond", 10000);//等待患者确认响应时间 joParam.Add("prm_yabtch", Global.pat.patExtend.prm_yabtch); outparam = joParam.ToString(); } #endregion #region 存入MI private int saveToMi(out string errMsg) { errMsg = ""; try { //存储参保信息 JObject joBaseInfo = JObject.Parse(JsonHelper.getDestValue(joPatInfo, "output")); if (mIS.insertPatCurInsuInfo(joBaseInfo, out errMsg) != 0) { return -1; } //存储登记信息 if (mIS.saveOutpatRegisterInfo(JObject.Parse(inpar_48), joSettlRtn, out errMsg) != 0) { return -1 ; } //存储费用信息 if (mIS.insertFee(JArray.Parse(JsonHelper.getDestValue(joFee, "result")), out errMsg) != 0) { return -1 ; } return 0; } catch (Exception ex) { errMsg = "saveToMi:" + ex.Message; return -1; } } #endregion public delegate int MyInvoke(out string outParam); public delegate void test(object o); #region Button事件 private void btReadCard_Click(object sender, EventArgs e) { string errMsg; try { //object[] o = new object[2]; //mainThreadSynContext = new WindowsFormsSynchronizationContext();//当前主线程没有UI //mainThreadSynContext = SynchronizationContext.Current;//当前的主线程有UI //mainThreadSynContext.Post(new SendOrPostCallback(tt), o);//抛到主线程之中 //errMsg = (string)o[1]; //object[] o = new object[1]; //int a = (int)this.Invoke(mi, o); //if (a != 0) //{ // MessageBox.Show(this, (string)o[0]); // return; //} //string patInfo = (string)o[0]; if (readCard(out errMsg) != 0) { MessageBox.Show(errMsg); return; } string patInfo = xmler.ToJSON(errMsg); //展示患者信息 if (ShowPatInsuInfo(patInfo, out errMsg) != 0) { rtnMsg = "读卡提示:" + errMsg; MessageBox.Show(errMsg); return; }; //设置全局变量 joPatInfo = JObject.Parse(patInfo); if (hBus.setGlobalPatAfaterShowPatInfo(patInfo, out errMsg) != 0) MessageBox.Show("设置全局变量提示:" + errMsg); } catch (Exception ex) { MessageBox.Show("读卡异常:" + ex.Message); } } private void btSettlement_Click(object sender, EventArgs e) { try { //查询MIS是否有RecordID记录,如果有,则提示,并记录 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}' "; JObject joSqlstr = new JObject(); joSqlstr.Add("sqlStr", sqlStr); JObject joRecordRows = mIS.DynamicQuery(joSqlstr,"查询当前RecorID是否已存在数据!"); if (JsonHelper.getDestValue(joRecordRows, "result.total") != "0") { MessageBox.Show("检测到存在重复结算,注意是否存在网络卡顿,延迟等情况,并即时向管理员反馈!"); return; } if ((string.IsNullOrEmpty(Global.pat.psn_no)) || (string.IsNullOrEmpty(Global.pat.psn_no)) || (string.IsNullOrEmpty(Global.pat.psn_no))) { MessageBox.Show("未获取到有效的参保信息,请先点击读卡按钮!"); return; } if (cbMutualAid.Checked && (string.IsNullOrEmpty(Global.pat.patExtend.prm_auther_certno) || string.IsNullOrEmpty(Global.pat.patExtend.prm_auther_no))) { MessageBox.Show("未检测到该患者有共济授权人,请取消勾选共济结算!!"); return; } Global.pat.medType = cbAKA130.Text.Substring(0, cbAKA130.Text.IndexOf(".")); Global.pat.payByQrCode = cbxQrCodePay.Checked; if (DtPsnType != null) { Global.pat.patExtend.ykc296 = DtPsnType.Rows[dgvPersonType.CurrentRow.Index]["ykc296"].ToString(); } string errMsg = ""; if (Global.pat.patExtend.prm_yabtch != "GS01") { ////事前分析 if ((Global.curEvt.ext.isOpenAnalysis) && (Global.operationType == OperationType.SettlementOP)) { if (hBus.PreAnalysis("1","", out errMsg) != 0) { MessageBox.Show(errMsg); return; } } } //组织入参 if (Set41Inpar(out errMsg) != 0) { rtnMsg = errMsg; MessageBox.Show("Set41Inpar" + errMsg); return; } inpar_48 = errMsg; if (Global.pat.payByQrCode) { string inpar_48f; Set48fInpar(out inpar_48f); if (yhHelper.invokeYHCom("48f", JObject.Parse(inpar_48f), out errMsg) != 0) { MessageBox.Show(errMsg); rtnMsg = errMsg; return; } } //string inpar = xmler.ToXML(errMsg); //调用结算 if (yhHelper.invokeYHCom("48", JObject.Parse(inpar_48), out errMsg) != 0) { MessageBox.Show(errMsg); rtnMsg = errMsg; return; } //将主结算的jylsh,jyyzm保存 string mainJylsh = Global.curEvt.msgid; string mainJyyzm = Global.curEvt.jyyzm; //存储结算信息 Global.pat.admType = 1; //门诊标志 joSettlRtn = JObject.Parse(xmler.ToJSON(errMsg)); Global.pat.mdtrtID = JsonHelper.getDestValue(joSettlRtn, "output.prm_akc190"); //返回给云医保平台结算信息 if (mIS.saveSettlement(joSettlRtn, out errMsg) != 0) { rtnMsg = "结算成功,但云医保平台保存失败" + errMsg; yhHelper.cancleYHCom(out errMsg); MessageBox.Show(rtnMsg); return; } JObject joSettlement = JObject.Parse(errMsg); //相关信息存到医保平台 saveToMi(out errMsg); //如果有共济支付,进行共济支付结算 if (cbMutualAid.Checked) { decimal psnCashPay = decimal.Parse(JsonHelper.getDestValue(joSettlRtn, "output.psn_cash_pay")); if (psnCashPay == 0) { MessageBox.Show("该患者自付金额为0,不需要进行共济支付!"); } else { //开启自付界面,因涉及到多次自付 JObject joMa = new JObject(); joMa.Add("setl_id", JsonHelper.getDestValue(joSettlRtn, "output.prm_yka103")); joMa.Add("psnCashPay", psnCashPay); joMa.Add("MainSettlInfo", joSettlRtn); MutualAid frmMA = new MutualAid(joMa); if (frmMA.dtSumumt.Rows.Count != 0) { frmMA.WindowState = FormWindowState.Maximized; if (frmMA.ShowDialog() == DialogResult.OK) { joSettlement = JObject.Parse(frmMA.finalSettlementInfo); joSettlRtn = frmMA.joMainSettlInfo; } else { rtnMsg = "开启共济支付失败,原因为收款员取消共济支付!"; MessageBox.Show(rtnMsg); return; } } else { rtnMsg = "开启共济支付失败,原因为未检测到有效的被共济人的医保结算数据!"; MessageBox.Show(rtnMsg); return; } } } //返回给HIS if (hIS.returnOutpatSettlementInfo(joSettlement, joSettlRtn, out errMsg) != 0) { rtnMsg = "返回结算信息给HIS" + errMsg; yhHelper.cancleYHCom(out errMsg); MessageBox.Show(rtnMsg); return; } string rtnHis = errMsg; //确认中心结算 Global.curEvt.jyyzm = mainJyyzm; Global.curEvt.msgid = mainJylsh; if (yhHelper.confirmYHCom(out errMsg) != 0) { rtnMsg = "中心确认失败" + errMsg; yhHelper.cancleYHCom(out errMsg); MessageBox.Show(rtnMsg); return; } else { JObject joHisServieRtn = JObject.Parse(rtnHis); hBus.returnToFrontEndAfterSettlement(joSettlement, joHisServieRtn, out rtnHis); rtnMsg = JsonHelper.setIrisReturnValue(0, "结算成功", JObject.Parse(rtnHis)).ToString(); rtnFlag = 0; Close(); return; } } catch (Exception ex) { Global.writeLog(ex.Message); throw; } } private void btExit_Click(object sender, EventArgs e) { Close(); } #endregion #region 转换 private string convertDictionaryValue(string type, string code) { try { JObject joRtn = mIS.getSpecDictionary(Global.inf.interfaceDr.ToString(), type, code); string errMsg = ""; JArray ja = JArray.Parse(JsonHelper.getDestValue(joRtn, "result.data")); if (ja.Count == 1) { return ja[0]["name"].ToString(); } else { return code; } } catch (Exception ex) { Global.writeLog("convertDictionaryValue",ex.Message,""); return code; } } #endregion private void rbGongShang_CheckedChanged(object sender, EventArgs e) { if (rbGongShang.Checked) { cbAKA130.SelectedIndex = 10; } else { cbAKA130.SelectedIndex = 0; } } } public static class RichTextBoxColorExtensions { public static void AppendText(this Sunny.UI.UIRichTextBox rtb, string text, Color color, Font font, bool isNewLine = false) { rtb.SuspendLayout(); rtb.SelectionStart = rtb.TextLength; rtb.SelectionLength = 0; rtb.SelectionColor = color; rtb.SelectionFont = font; rtb.AppendText(isNewLine ? $"{text}{ Environment.NewLine}" : text); rtb.SelectionColor = rtb.ForeColor; rtb.ScrollToCaret(); rtb.ResumeLayout(); } } }