using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using PTMedicalInsurance.Common; using PTMedicalInsurance.Helper; using PTMedicalInsurance.FormSetter; using PTMedicalInsurance.Business; using PTMedicalInsurance.Variables; using FastReport; using System.Xml; namespace PTMedicalInsurance.Forms { public partial class HandleException : Form { private int iLog = 0; private int iSettl = 0; private int iReg = 0; //设置业务实例 CenterBusiness cBus = new CenterBusiness(); HisMainBusiness hBus = new HisMainBusiness(); HisIrisServices hIS = new HisIrisServices(); MIIrisServices mIS = new MIIrisServices(); InvokeHelper invoker = new InvokeHelper(); //1.声明自适应类实例 AutoResizeForm asc = new AutoResizeForm(); ReadCardClass rcl = new ReadCardClass(); AnalysisXML AnXML = new AnalysisXML(); public HandleException() { InitializeComponent(); //this.StartPosition = FormStartPosition.CenterParent; asc.controllInitializeSize(this); asc.controlAutoSize(this); } private void HandleException_Load(object sender, EventArgs e) { dpST_Log.Text = DateTime.Now.ToString("yyyy-MM-dd 00:00:00"); dpED_Log.Text = DateTime.Now.ToString("yyyy-MM-dd 23:59:59"); dpST_Settl.Text = DateTime.Now.ToString("yyyy-MM-dd 00:00:00"); dpED_Settl.Text = DateTime.Now.ToString("yyyy-MM-dd 23:59:59"); dgvSettlRecord.AutoGenerateColumns = false; GridViewSetter grdSetter = new GridViewSetter(); grdSetter.SetHeaderTextOfSettlList(dgvSettlRecord); grdSetter.SetHeaderTextOfCenterLog(dgvLog); grdSetter.SetHeaderTextOfSettlList(dgvBalanceData); rbgAdmType.SelectedIndex = 2; rbgBillType.SelectedIndex = 1; rbg_Zone.SelectedIndex = 0; } #region 结算异常 private void btnQuerySettleRec_Click(object sender, EventArgs e) { if (tbName.Text == "") { MessageBox.Show("请输入患者姓名!"); return; } string sqlStr = "SELECT * FROM BS_MedInsuSettlement WHERE Hospital_Dr=" + Global.inf.hospitalDr; sqlStr = sqlStr + " and OccurTime>'" + dpST_Settl.Text + "'"; sqlStr = sqlStr + " and OccurTime<'" + dpED_Settl.Text + "'"; sqlStr = sqlStr + " And ReversalFlag<>'1' "; if (tbName.Text != "") { sqlStr = sqlStr + " and PatientName='" + tbName.Text + "'"; } if (tbPatSettlID.Text != "") { sqlStr = sqlStr + " and SettlementID='" + tbPatSettlID.Text + "'"; } if (tbHisNO.Text != "") { sqlStr = sqlStr + " and Adm_Dr='" + tbHisNO.Text + "'"; } if (rbgAdmType.SelectedIndex == 1) { sqlStr = sqlStr + " and admType=2"; } if (rbgAdmType.SelectedIndex == 2) { sqlStr = sqlStr + " and admType=1"; } if (rbgBillType.SelectedIndex == 1) { sqlStr = sqlStr + " and BillType=1"; } if (rbgBillType.SelectedIndex == 2) { sqlStr = sqlStr + " and BillType=-1"; } JObject joSqlstr = new JObject(); joSqlstr.Add("sqlStr", sqlStr); JArray jaParam = new JArray(); jaParam.Add(joSqlstr); JObject joSettlQuery = new JObject(); joSettlQuery.Add("params", jaParam); joSettlQuery.Add("code", "09010059"); InvokeHelper invoker = new InvokeHelper(); JObject joRtn = invoker.invokeInsuService(joSettlQuery.ToString(), "查询结算信息"); //MessageBox.Show(joRtn.ToString()); //MessageBox.Show(joRtn["result"]["data"].ToString()); if (joRtn["result"]["data"].ToString() == "[]") { MessageBox.Show("查询结果为空!"); return; } DataTable dt = (DataTable)joRtn["result"]["data"].ToObject(typeof(DataTable)); dgvSettlRecord.DataSource = dt; } private void btnReverseBySettl_Click(object sender, EventArgs e) { string outParam = ""; string sData_XML, OutMsg, AppRtnMsg, psn_no, tradeno, feeno, SettlementID, CloseMsg; System.Type InComType = null; dynamic InComInstance = ""; DataTable dt = (DataTable)dgvSettlRecord.DataSource; int a = dgvSettlRecord.CurrentRow.Index; psn_no = dt.Rows[a]["PersonnelNO"].ToString(); feeno = dt.Rows[a]["RecordID"].ToString(); tradeno = dt.Rows[a]["SettlementID"].ToString(); Global.pat.settlID = dt.Rows[a]["SettlementID"].ToString(); try { //创建首信医保Com实例 if (rcl.CreateBusinessObj(out InComType, out InComInstance) != 0) { MessageBox.Show("实例创建CreateBusinessObj失败:" + outParam); return; } //读卡前先Open rcl.Open(InComType, InComInstance, out outParam); //1.打开读卡窗口,操作员选择读卡类型后进行读卡器读卡,再进行1101获取参保信息 if (hBus.readCardCancelSettle(InComType, InComInstance, out outParam) != 0) { rcl.Close(InComType, InComInstance, out CloseMsg); MessageBox.Show("读卡readCard失败:" + outParam); return; } else { //展示患者信息界面 if (hBus.showPatInfoNew(outParam, out outParam) != 0) { rcl.Close(InComType, InComInstance, out CloseMsg); MessageBox.Show("展示参保人员信息showPatInfoNew失败:" + outParam); return; } } //退费-本地 if (Global.pat.iOtherProvLocal == 0) { //1.RefundmentDivideAll退费分解 sData_XML = "" + "" + tradeno + "" // name="交易流水号" + "" + Global.user.ID + "" // name="收费员" + "0" // name="退费方式,0全部退费,1部分退费" + "" + feeno + "" // name="收费单据号" + ""; sData_XML = JsonHelper.GetinPar(sData_XML, 2); rcl.BussniessObj("RefundmentDivideAll", sData_XML, InComType, InComInstance, out AppRtnMsg); //解析返回值 XmlDocument xmlDoc = AnXML.GetXmlDoc(AppRtnMsg); Boolean bPass = AnXML.CheckState(xmlDoc, out OutMsg); XmlNode dataNode = AnXML.GetNodeFromPath(xmlDoc.DocumentElement, "output/fulltrade/tradeinfo"); if (bPass == false) { outParam = "调用RefundmentDivideAll退费分解失败:" + OutMsg; MessageBox.Show(outParam); return; } else { if (OutMsg != "") outParam = "调用RefundmentDivideAll退费分解成功,但中心返回警告信息如下:" + OutMsg; tradeno = AnXML.FormatXMLElement(xmlDoc, dataNode, "tradeno", 0); //退费分解成功返回退费流水号 //2.TradeALL退费确认 rcl.TradeAll(InComType, InComInstance, out AppRtnMsg); //Global.writeLog("TradeALL退费确认出参:", sData_XML, AppRtnMsg); xmlDoc = AnXML.GetXmlDoc(AppRtnMsg); bPass = AnXML.CheckState(xmlDoc, out OutMsg); if (bPass == false) { outParam = "调用RefundmentDivideAll退费分解成功,调用TradeAll退费确认失败," + OutMsg; if (hBus.TradeBack(3, Global.pat.settlID, InComType, InComInstance, out OutMsg) != 0) outParam = outParam + "调用TradeRollBack交易挂起回退失败:请手动执行回退退费交易,本次退费失败!" + OutMsg; else outParam = outParam + "调用TradeRollBack交易挂起回退成功,本次退费失败!"; MessageBox.Show(outParam); Global.writeLog("TradeNo:" + Global.pat.settlID + outParam + OutMsg); return; } else { if (OutMsg != "") { outParam = "调用RefundmentDivideAll退费分解成功,调用TradeALL退费确认成功,返回警告信息:" + OutMsg; MessageBox.Show(outParam); } //3.HISFinishedNotice门诊退费交易完成通知 //sData_XML = "" + Global.pat.settlID + ""; sData_XML = "" + tradeno + ""; sData_XML = JsonHelper.GetinPar(sData_XML, 0); //Global.writeLog("HISFinishedNotice门诊退费交易完成通知入参:" + sData_XML); rcl.BussniessObj("HISFinishedNotice", sData_XML, InComType, InComInstance, out AppRtnMsg); //Global.writeLog("HISFinishedNotice门诊退费交易完成通知出参:", sData_XML, AppRtnMsg); xmlDoc = AnXML.GetXmlDoc(AppRtnMsg); bPass = AnXML.CheckState(xmlDoc, out OutMsg); dataNode = AnXML.GetNodeFromPath(xmlDoc.DocumentElement, "output"); string receivestate = AnXML.FormatXMLElement(xmlDoc, dataNode, "receivestate", 0); //接收状态: 1:成功,0:失败 if ((bPass == false) || (receivestate != "1")) { outParam = "调用RefundmentDivideAll退费分解成功,调用TradeALL退费确认成功,调用HISFinishedNotice退费交易完成通知失败!" + OutMsg; if (hBus.TradeBack(3, Global.pat.settlID, InComType, InComInstance, out OutMsg) != 0) outParam = outParam + "调用TradeRollBack交易挂起回退异常:交易回退失败,请手动执行回退退费交易,本次退费失败!" + OutMsg; else outParam = outParam + "调用TradeRollBack交易挂起回退成功,本次退费失败!"; MessageBox.Show(outParam); Global.writeLog("TradeNo:" + Global.pat.settlID + outParam + OutMsg); return; } else { if (OutMsg != "") { outParam = "调用HISFinishedNotice门诊退费交易完成通知成功,返回警告信息如下:" + OutMsg; MessageBox.Show(outParam); } outParam = "退费成功!" + tradeno; MessageBox.Show(outParam); } } } } else { string histradeno = tradeno + "-1"; //1.RefundmentTradeAllNation异地门诊退费结算 sData_XML = "" + histradeno + "" //本次红冲交易流水号 + "" + feeno + "" //被退交易流水号 + "" + Global.user.ID + "" //退费操作员的姓名或者工号,可为空 + ""; //重收交易对应的收据号,由财政局、税务局和部队统一制定;有重收交易时必填;(2021年1月1日起,由票据代码与票据号码拼接后填写) sData_XML = JsonHelper.GetinPar(sData_XML, 2); rcl.BussniessObj("RefundmentTradeAllNation", sData_XML, InComType, InComInstance, out AppRtnMsg); //解析返回值 XmlDocument xmlDoc = AnXML.GetXmlDoc(AppRtnMsg); Boolean bPass = AnXML.CheckState(xmlDoc, out OutMsg); XmlNode dataNode = AnXML.GetNodeFromPath(xmlDoc.DocumentElement, "output/tradeinfo"); if (bPass == false) { outParam = "调用RefundmentTradeAllNation门诊退费结算失败,中心返回错误信息:" + OutMsg; sData_XML = "" + histradeno + ""; sData_XML = JsonHelper.GetinPar(sData_XML, 0); rcl.BussniessObj("CommitTradeStateNation", sData_XML, InComType, InComInstance, out AppRtnMsg); //解析返回值 xmlDoc = AnXML.GetXmlDoc(AppRtnMsg); bPass = AnXML.CheckState(xmlDoc, out OutMsg); if (bPass == false) outParam = outParam + "!调用挂起回退交易CommitTradeStateNation失败!中心返回错误信息:" + OutMsg + ",本次异地门诊退费失败!"; else outParam = outParam + "!调用挂起回退交易CommitTradeStateNation成功!本次异地门诊退费失败!"; MessageBox.Show(outParam); Global.writeLog("histradeno:" + histradeno + outParam + OutMsg); return; } else { tradeno = dataNode.SelectNodes("tradeno")[0].InnerText; //门诊退费结算成功返回退费流水号 //2.TradeCheckNation异地门诊退费结算实时对账 sData_XML = "" + histradeno + ""; sData_XML = JsonHelper.GetinPar(sData_XML, 2); rcl.BussniessObj("TradeCheckNation", sData_XML, InComType, InComInstance, out AppRtnMsg); //解析返回值 xmlDoc = AnXML.GetXmlDoc(AppRtnMsg); bPass = AnXML.CheckState(xmlDoc, out OutMsg); dataNode = AnXML.GetNodeFromPath(xmlDoc.DocumentElement, "output"); //string checkflag = dataNode.SelectNodes("checkflag")[0].InnerText; //对账标志 1-对账成功;2-无效交易 string checkflag = AnXML.FormatXMLElement(xmlDoc, dataNode, "checkflag", 0); //对账标志 1-对账成功;2-无效交易 if ((bPass == false) || (checkflag != "1")) { outParam = " 调用RefundmentTradeAllNation异地门诊退费结算成功,调用TradeCheckNation异地门诊退费结算实时对账失败,中心返回失败原因:" + OutMsg; sData_XML = "" + histradeno + ""; sData_XML = JsonHelper.GetinPar(sData_XML, 0); rcl.BussniessObj("CommitTradeStateNation", sData_XML, InComType, InComInstance, out AppRtnMsg); //解析返回值 xmlDoc = AnXML.GetXmlDoc(AppRtnMsg); bPass = AnXML.CheckState(xmlDoc, out OutMsg); if (bPass == false) outParam = outParam + "调用CommitTradeStateNation门诊挂起回退失败!中心返回错误信息:" + OutMsg + ",本次异地门诊退费失败!"; else outParam = outParam + "调用CommitTradeStateNation门诊挂起回退成功!本次异地门诊退费失败!"; MessageBox.Show(outParam); Global.writeLog("histradeno:" + histradeno + outParam + OutMsg); return; } } } } catch (Exception ex) { outParam = "门诊退费异常:" + ex.Message; MessageBox.Show(outParam); return; } finally { rcl.Close(InComType, InComInstance, out CloseMsg); } } private void btCancleSettl_Click(object sender, EventArgs e) { } #endregion #region 日志异常 private void btnQueryLog_Click(object sender, EventArgs e) { string errMsg; string sqlStr = "SELECT * FROM BS_MedInsuTransactionLog WHERE Hospital_Dr=" + Global.inf.hospitalDr; sqlStr = sqlStr + " and InfDate>='" + dpST_Log.Value.ToString("yyyy-MM-dd") + "'"; sqlStr = sqlStr + " and InfDate<='" + dpED_Log.Value.ToString("yyyy-MM-dd") + "'"; if (tbPsnNO.Text != "") { sqlStr = sqlStr + " and PSNNO='" + tbPsnNO.Text + "'"; } if (tbTransNO.Text != "") { sqlStr = sqlStr + " and Infno='" + tbTransNO.Text + "'"; } JObject joSqlstr = new JObject(); joSqlstr.Add("sqlStr", sqlStr); JObject joRtn = mIS.QueryTransactionLog(joSqlstr); try { if (joRtn["result"]["data"].ToString() == "[]") { MessageBox.Show("查询结果为空!"); return; } DataTable dt = (DataTable)joRtn["result"]["data"].ToObject(typeof(DataTable)); dgvLog.DataSource = dt; } catch (Exception eX) { MessageBox.Show(eX.Message); } } private void btnReverseByLog_Click(object sender, EventArgs e) { InvokeHelper invoker = new InvokeHelper(); DataTable dt = (DataTable)dgvLog.DataSource; JObject joInparam = new JObject(); JObject joData = new JObject(); int a = dgvLog.CurrentRow.Index; if (tbCBD_Log.Text != "") { Global.pat.insuplc_admdvs = tbCBD_Log.Text; } else Global.pat.insuplc_admdvs = dt.Rows[a]["insuplc_admdvs"].ToString(); joData.Add("omsgid", dt.Rows[a]["msgid"].ToString()); joData.Add("psn_no", dt.Rows[a]["psn_no"].ToString()); joData.Add("oinfno", dt.Rows[a]["infno"].ToString()); //joData.Add("oinfno", "2207"); joInparam.Add("data", joData); JObject joRtn = invoker.invokeCenterService("2601", JsonHelper.setCenterInpar("2601", joInparam.ToString())); string errorMessage = ""; if (JsonHelper.parseCenterRtnValue(joRtn, out errorMessage) != 0) { MessageBox.Show("冲正失败" + errorMessage); } else { MessageBox.Show("冲正成功"); } } #endregion private void btPatInfo_ex_Click(object sender, EventArgs e) { rtbInparam.Text = ""; if (rbg_Zone.SelectedIndex == 0) { gb_Local.Visible = true; gb_Other.Visible = false; string str = "" + " " + tb_TradeNo.Text + "" + " " + Global.user.ID + "" + " 0" + " " + tb_FeeNo.Text + "" + ""; rtbInparam.Text = JsonHelper.GetinPar(str, 2); } else { gb_Local.Visible = false; gb_Other.Visible = true; string str = " "+ tb_HISTradeNo.Text +"" + " "+ tb_OrginalHisTradeNo.Text +"" + " "+ Global.user.ID +"" + " "; rtbInparam.Text = JsonHelper.GetinPar(str, 2); } rtbInparam.Text = XmlHelper.FormatXml(rtbInparam.Text); } private void rbg_Zone_ValueChanged(object sender, int index, string text) { rtbInparam.Text = ""; if (rbg_Zone.SelectedIndex == 0) { gb_Local.Visible = true; gb_Other.Visible = false; string str = "" + " " + tb_TradeNo.Text + "" + " " + Global.user.ID + "" + " 0" + " " + tb_FeeNo.Text + "" + ""; rtbInparam.Text = JsonHelper.GetinPar(str, 2); } else { gb_Local.Visible = false; gb_Other.Visible = true; string str = " " + tb_HISTradeNo.Text + "" + " " + tb_OrginalHisTradeNo.Text + "" + " " + Global.user.ID + "" + " "; rtbInparam.Text = JsonHelper.GetinPar(str, 2); } rtbInparam.Text = XmlHelper.FormatXml(rtbInparam.Text); } private void btnPatInfoShow_Click(object sender, EventArgs e) { string outParam = ""; string sData_XML, OutMsg, AppRtnMsg, tradeno, CloseMsg; System.Type InComType = null; dynamic InComInstance = ""; try { //创建首信医保Com实例 if (rcl.CreateBusinessObj(out InComType, out InComInstance) != 0) { MessageBox.Show("实例创建CreateBusinessObj失败:" + outParam); return; } //读卡前先Open rcl.Open(InComType, InComInstance, out outParam); //1.打开读卡窗口,操作员选择读卡类型后进行读卡器读卡,再进行1101获取参保信息 if (hBus.readCardCancelSettle(InComType, InComInstance, out outParam) != 0) { rcl.Close(InComType, InComInstance, out CloseMsg); rtbOutparam.Text = "读卡readCard失败:" + outParam; return; } else { //展示患者信息界面 if (hBus.showPatInfoNew(outParam, out outParam) != 0) { rcl.Close(InComType, InComInstance, out CloseMsg); rtbOutparam.Text = "展示参保人员信息showPatInfoNew失败:" + outParam; return; } } //退费-本地 if (Global.pat.iOtherProvLocal == 0) { if (tb_TradeNo.Text == "") { rtbOutparam.Text = "医保结算流水号TradeNo不能为空!"; return; } if (tb_FeeNo.Text == "") { MessageBox.Show("收费单据号feeNo不能为空!"); return; } //1.RefundmentDivideAll退费分解 //sData_XML = "" // + "" + tb_TradeNo.Text + "" // name="交易流水号" // + "" + Global.user.ID + "" // name="收费员" // + "0" // name="退费方式,0全部退费,1部分退费" // + "" + tb_FeeNo.Text + "" // name="收费单据号" // + ""; //rtbInparam.Text = sData_XML; //sData_XML = JsonHelper.GetinPar(sData_XML, 2); sData_XML = rtbInparam.Text; rcl.BussniessObj("RefundmentDivideAll", sData_XML, InComType, InComInstance, out AppRtnMsg); //解析返回值 XmlDocument xmlDoc = AnXML.GetXmlDoc(AppRtnMsg); Boolean bPass = AnXML.CheckState(xmlDoc, out OutMsg); XmlNode dataNode = AnXML.GetNodeFromPath(xmlDoc.DocumentElement, "output/fulltrade/tradeinfo"); if (bPass == false) { rtbOutparam.Text = "调用RefundmentDivideAll退费分解失败:" + OutMsg; return; } else { if (OutMsg != "") rtbOutparam.Text = "调用RefundmentDivideAll退费分解成功,但中心返回警告信息如下:" + OutMsg; tradeno = AnXML.FormatXMLElement(xmlDoc, dataNode, "tradeno", 0); //退费分解成功返回退费流水号 //2.TradeALL退费确认 rcl.TradeAll(InComType, InComInstance, out AppRtnMsg); //Global.writeLog("TradeALL退费确认出参:", sData_XML, AppRtnMsg); xmlDoc = AnXML.GetXmlDoc(AppRtnMsg); bPass = AnXML.CheckState(xmlDoc, out OutMsg); if (bPass == false) { outParam = "调用RefundmentDivideAll退费分解成功,调用TradeAll退费确认失败," + OutMsg; if (hBus.TradeBack(3, tb_TradeNo.Text, InComType, InComInstance, out OutMsg) != 0) rtbOutparam.Text = outParam + "调用TradeRollBack交易挂起回退失败:请手动执行回退退费交易,本次退费失败!" + OutMsg; else rtbOutparam.Text = outParam + "调用TradeRollBack交易挂起回退成功,本次退费失败!"; Global.writeLog("TradeNo:" + tb_TradeNo.Text + outParam + OutMsg); return; } else { if (OutMsg != "") rtbOutparam.Text = "调用RefundmentDivideAll退费分解成功,调用TradeALL退费确认成功,返回警告信息:" + OutMsg; //3.HISFinishedNotice门诊退费交易完成通知 //sData_XML = "" + Global.pat.settlID + ""; sData_XML = "" + tradeno + ""; sData_XML = JsonHelper.GetinPar(sData_XML, 0); //Global.writeLog("HISFinishedNotice门诊退费交易完成通知入参:" + sData_XML); rcl.BussniessObj("HISFinishedNotice", sData_XML, InComType, InComInstance, out AppRtnMsg); //Global.writeLog("HISFinishedNotice门诊退费交易完成通知出参:", sData_XML, AppRtnMsg); xmlDoc = AnXML.GetXmlDoc(AppRtnMsg); bPass = AnXML.CheckState(xmlDoc, out OutMsg); dataNode = AnXML.GetNodeFromPath(xmlDoc.DocumentElement, "output"); string receivestate = AnXML.FormatXMLElement(xmlDoc, dataNode, "receivestate", 0); //接收状态: 1:成功,0:失败 if ((bPass == false) || (receivestate != "1")) { outParam = "调用RefundmentDivideAll退费分解成功,调用TradeALL退费确认成功,调用HISFinishedNotice退费交易完成通知失败!" + OutMsg; if (hBus.TradeBack(3, tb_TradeNo.Text, InComType, InComInstance, out OutMsg) != 0) rtbOutparam.Text = outParam + "调用TradeRollBack交易挂起回退异常:交易回退失败,请手动执行回退退费交易,本次退费失败!" + OutMsg; else rtbOutparam.Text = outParam + "调用TradeRollBack交易挂起回退成功,本次退费失败!"; Global.writeLog("TradeNo:" + tb_TradeNo.Text + outParam + OutMsg); return; } else { if (OutMsg != "") rtbOutparam.Text = "调用HISFinishedNotice门诊退费交易完成通知成功,返回警告信息如下:" + OutMsg; rtbOutparam.Text = "退费成功!" + tradeno; } } } } else { if (tb_HISTradeNo.Text == "") { MessageBox.Show("异地退费HISTradeNo不能为空!"); return; } if (tb_OrginalHisTradeNo.Text == "") { MessageBox.Show("收费单据号feeNo不能为空!"); return; } string histradeno = tb_HISTradeNo.Text; //1.RefundmentTradeAllNation异地门诊退费结算 //sData_XML = "" + histradeno + "" //本次红冲交易流水号 // + "" + tb_OrginalHisTradeNo.Text + "" //被退交易流水号 // + "" + Global.user.ID + "" //退费操作员的姓名或者工号,可为空 // + ""; //重收交易对应的收据号,由财政局、税务局和部队统一制定;有重收交易时必填;(2021年1月1日起,由票据代码与票据号码拼接后填写) //rtbInparam.Text = sData_XML; //sData_XML = JsonHelper.GetinPar(sData_XML, 2); sData_XML = rtbInparam.Text; rcl.BussniessObj("RefundmentTradeAllNation", sData_XML, InComType, InComInstance, out AppRtnMsg); //解析返回值 XmlDocument xmlDoc = AnXML.GetXmlDoc(AppRtnMsg); Boolean bPass = AnXML.CheckState(xmlDoc, out OutMsg); XmlNode dataNode = AnXML.GetNodeFromPath(xmlDoc.DocumentElement, "output/tradeinfo"); if (bPass == false) { outParam = "调用RefundmentTradeAllNation门诊退费结算失败,中心返回错误信息:" + OutMsg; sData_XML = "" + histradeno + ""; sData_XML = JsonHelper.GetinPar(sData_XML, 0); rcl.BussniessObj("CommitTradeStateNation", sData_XML, InComType, InComInstance, out AppRtnMsg); //解析返回值 xmlDoc = AnXML.GetXmlDoc(AppRtnMsg); bPass = AnXML.CheckState(xmlDoc, out OutMsg); if (bPass == false) rtbOutparam.Text = outParam + "!调用挂起回退交易CommitTradeStateNation失败!中心返回错误信息:" + OutMsg + ",本次异地门诊退费失败!"; else rtbOutparam.Text = outParam + "!调用挂起回退交易CommitTradeStateNation成功!本次异地门诊退费失败!"; Global.writeLog("histradeno:" + histradeno + outParam + OutMsg); return; } else { tradeno = dataNode.SelectNodes("tradeno")[0].InnerText; //门诊退费结算成功返回退费流水号 //2.TradeCheckNation异地门诊退费结算实时对账 sData_XML = "" + histradeno + ""; sData_XML = JsonHelper.GetinPar(sData_XML, 2); rcl.BussniessObj("TradeCheckNation", sData_XML, InComType, InComInstance, out AppRtnMsg); //解析返回值 xmlDoc = AnXML.GetXmlDoc(AppRtnMsg); bPass = AnXML.CheckState(xmlDoc, out OutMsg); dataNode = AnXML.GetNodeFromPath(xmlDoc.DocumentElement, "output"); //string checkflag = dataNode.SelectNodes("checkflag")[0].InnerText; //对账标志 1-对账成功;2-无效交易 string checkflag = AnXML.FormatXMLElement(xmlDoc, dataNode, "checkflag", 0); //对账标志 1-对账成功;2-无效交易 if ((bPass == false) || (checkflag != "1")) { outParam = " 调用RefundmentTradeAllNation异地门诊退费结算成功,调用TradeCheckNation异地门诊退费结算实时对账失败,中心返回失败原因:" + OutMsg; sData_XML = "" + histradeno + ""; sData_XML = JsonHelper.GetinPar(sData_XML, 0); rcl.BussniessObj("CommitTradeStateNation", sData_XML, InComType, InComInstance, out AppRtnMsg); //解析返回值 xmlDoc = AnXML.GetXmlDoc(AppRtnMsg); bPass = AnXML.CheckState(xmlDoc, out OutMsg); if (bPass == false) rtbOutparam.Text = outParam + "调用CommitTradeStateNation门诊挂起回退失败!中心返回错误信息:" + OutMsg + ",本次异地门诊退费失败!"; else rtbOutparam.Text = outParam + "调用CommitTradeStateNation门诊挂起回退成功!本次异地门诊退费失败!"; Global.writeLog("histradeno:" + histradeno + outParam + OutMsg); return; } } } } catch (Exception ex) { rtbOutparam.Text = "门诊退费异常:" + ex.Message; return; } finally { rcl.Close(InComType, InComInstance, out CloseMsg); } } private void btnExit_Click(object sender, EventArgs e) { Close(); } private void Chk_DealNo_ValueChanged(object sender, bool value) { } private void btnExit_Click_1(object sender, EventArgs e) { this.Close(); } private void uiButton1_Click(object sender, EventArgs e) { if (tb_Name.Text == "") { MessageBox.Show("请输入患者姓名!"); return; } string sqlStr = "SELECT * FROM BS_MedInsuSettlement WHERE Hospital_Dr=" + Global.inf.hospitalDr; sqlStr = sqlStr + " and OccurTime>'" + dtBegin.Text + "'"; sqlStr = sqlStr + " and OccurTime<'" + dtEnd.Text + "'"; if (tb_Name.Text != "") { sqlStr = sqlStr + " and PatientName='" + tb_Name.Text + "'"; } if (tb_PatSettlID.Text != "") { sqlStr = sqlStr + " and SettlementID='" + tb_PatSettlID.Text + "'"; } if (tb_HisNO.Text != "") { sqlStr = sqlStr + " and Adm_Dr='" + tb_HisNO.Text + "'"; } if (rbgAdmType_Handel.SelectedIndex == 1) { sqlStr = sqlStr + " and admType=1"; } if (rbgAdmType_Handel.SelectedIndex == 2) { sqlStr = sqlStr + " and admType=2"; } if (rbgBillType_Handel.SelectedIndex == 1) { sqlStr = sqlStr + " and BillType=1"; } if (rbgBillType_Handel.SelectedIndex == 2) { sqlStr = sqlStr + " and BillType=-1"; } JObject joSqlstr = new JObject(); joSqlstr.Add("sqlStr", sqlStr); JArray jaParam = new JArray(); jaParam.Add(joSqlstr); JObject joSettlQuery = new JObject(); joSettlQuery.Add("params", jaParam); joSettlQuery.Add("code", "09010059"); InvokeHelper invoker = new InvokeHelper(); JObject joRtn = invoker.invokeInsuService(joSettlQuery.ToString(), "查询结算信息"); //MessageBox.Show(joRtn.ToString()); //MessageBox.Show(joRtn["result"]["data"].ToString()); if (joRtn["result"]["data"].ToString() == "[]") { MessageBox.Show("查询结果为空!"); return; } DataTable dt = (DataTable)joRtn["result"]["data"].ToObject(typeof(DataTable)); dgvBalanceData.DataSource = dt; } private void btnDo_Click(object sender, EventArgs e) { string sData_XML = "", S_Temp = "", Appmsg = "", OutMsg_Open = "", OutMsg_Close, AppRtnMsg = "", OutMsg = ""; string FunName = "", Explain = ""; System.Type ComType = null; dynamic ComInstance = null; if ((rbgType.SelectedIndex == 3) && (rbgType.SelectedIndex == 4) && (rbgType.SelectedIndex == 5)) { if (tbTradeNo.Text == "") { MessageBox.Show("调用<挂起回退CommitTradeStateNation交易>,请直接输入需要确认的HIS交易流水号!"); return; } } else { } if ((rbgType.SelectedIndex == 0) || (rbgType.SelectedIndex == 1)) { if (rbgType.SelectedIndex == 0) { sData_XML = " 0" + " " + tbTradeNo.Text + "" //收费交易流水号 + " " + " "; // name="重收交易流水号" } else { sData_XML = " 2" + " " + " " + tbTradeNo.Text + " " //退费交易流水号 + " "; // name="重收交易流水号" } sData_XML = JsonHelper.GetinPar(sData_XML, 0); FunName = "TradeRollBack"; Explain = "交易挂起回退"; } else if (rbgType.SelectedIndex == 2) { sData_XML = "" + tbTradeNo.Text + ""; sData_XML = JsonHelper.GetinPar(sData_XML, 0); FunName = "HISFinishedNotice"; Explain = "门诊交易完成通知"; } else if (rbgType.SelectedIndex == 3) { sData_XML = "" + tbTradeNo.Text + ""; sData_XML = JsonHelper.GetinPar(sData_XML, 0); FunName = "CommitTradeStateNation"; Explain = "门诊挂起回退"; } else if (rbgType.SelectedIndex == 4) { if ((tbTradeNo.Text == "") || (tbFeeNo.Text == "")) { MessageBox.Show("收费交易流水号tradeno或医保收费单据号feeno不能为空!"); return; } MessageBox.Show("收费回退(异地)成功后,请接着调用退费实时对账交易才能完成异地退费!"); sData_XML = " " + tbTradeNo.Text + " " + " " + " " + " "; sData_XML = JsonHelper.GetinPar(sData_XML, 2); FunName = "RefundmentTradeAllNation"; Explain = "收费回退(异地)"; } else if (rbgType.SelectedIndex == 5) { sData_XML = "" + tbTradeNo.Text + ""; sData_XML = JsonHelper.GetinPar(sData_XML, 2); FunName = "TradeCheckNation"; Explain = "异地门诊收费实时对账"; } //创建首信医保Com实例 if (rcl.CreateBusinessObj(out ComType, out ComInstance) != 0) { MessageBox.Show("实例创建失败"); return; } else { Appmsg = sData_XML; rcl.Open(ComType, ComInstance, out OutMsg_Open); //读卡前先Open rcl.ReadCardObj(FunName, Appmsg, ComType, ComInstance, out AppRtnMsg); rcl.Close(ComType, ComInstance, out OutMsg_Close); XmlDocument xmlDoc = new XmlDocument(); xmlDoc = AnXML.GetXmlDoc(AppRtnMsg); if (AnXML.CheckState(xmlDoc, out OutMsg) == false) { MessageBox.Show("调用【" + FunName + "】" + Explain + "失败,中心返回错误信息:" + OutMsg + "\r\n" + "调用【Open】打开读卡设备输出:" + OutMsg_Open + "\r\n" + "调用【Close】关闭读卡设备输出:" + OutMsg_Close); return; } else { xmlDoc = null; MessageBox.Show("调用【" + FunName + "】" + Explain + "成功:中心返回" + AppRtnMsg); } } } } }