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);
}
}
}
}
}