using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.IO.Compression;
using System.Linq;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Newtonsoft.Json.Linq;
using PTMedicalInsurance.Business;
using PTMedicalInsurance.Common;
using PTMedicalInsurance.Entity.BaseLine.ElectronicSettlementCertificate;
using PTMedicalInsurance.Forms.Setters.ElectronicSettlementCertificates;
using PTMedicalInsurance.Helper;
using PTMedicalInsurance.Variables;
namespace PTMedicalInsurance.Forms.ElectronicSettlementCertificates
{
public partial class EcSettlCertUpload : Form
{
private ElectronicSettlementCertificate ecSettlCert = new ElectronicSettlementCertificate();
private DataTable dtEcSettlCertList;
private EcSettlCertMainForm mainForm;
private string err;
public EcSettlCertUpload()
{
InitializeComponent();
}
public EcSettlCertUpload(Form frm)
{
InitializeComponent();
InitForm(frm);
}
private void InitForm(Form frm)
{
mainForm = (EcSettlCertMainForm)frm;
CheckForIllegalCrossThreadCalls = false;
// 禁用关闭按钮
this.FormBorderStyle = FormBorderStyle.None;
// 隐藏标题栏
this.ControlBox = false;
// 其他可能需要的配置
this.TopLevel = false;
this.Dock = DockStyle.Fill; // 根据需要设置 Dock 属性
//
SetHeaderOfDgv();
//
dpST.Value = DateTime.Now;
dpED.Value = DateTime.Now;
}
private void SetHeaderOfDgv()
{
GridViewSetter gvs = new GridViewSetter();
gvs.setDgvEcSettlCertList(dgvEcSettlCertList);
}
#region 函数封装
///
/// 更新成功后,刷新界面
///
private void freshForm()
{
}
///
/// 单条上传
///
///
///
private int SingleUpload(out String errMsg)
{
int i = dgvEcSettlCertList.CurrentRow.Index;
UploadEcSettlCertIn inpar = new UploadEcSettlCertIn();
JObject joIn = new JObject();
joIn.Add("InvNo", dtEcSettlCertList.Rows[i]["InvNo"].ToString());
joIn.Add("PrintPaymentInvDr", dtEcSettlCertList.Rows[i]["PrintPaymentInvDr"].ToString());
joIn.Add("HospDr", dtEcSettlCertList.Rows[i]["HospDr"].ToString());
//获取HIS 原始入参
JObject joOrignalInput = ecSettlCert.Get4901Input(joIn);
if (JsonHelper.parseIrisRtnValue(joOrignalInput, out err) != 0)
{
errMsg = ("获取4901入参失败:" + err);
return -1;
}
//通过原始入参,转换为接口需要的入参,PDF,XML,编码转换等等
ecSettlCert.SavePath = Global.curEvt.path;
JObject joNeedConvertData = JObject.Parse(JsonHelper.getDestValue(joOrignalInput,"data"));
//joNeedConvertData.Add("fixmedinsCode", Global.inf.hospitalNO);
//joNeedConvertData.Add("fixmedinsName", Global.inf.hospitalName);
joNeedConvertData["fixmedinsCode"] = Global.inf.hospitalNO;
joNeedConvertData["fixmedinsName"] = Global.inf.hospitalName;
//joNeedConvertData["upldBchno"] = DateTime.Now.ToString("yyyyMMdd" + "00001");//上传日期年月日加5位顺序号
joNeedConvertData["filename"] = "";//压缩包文件名称
JArray jaUpldDetlList = JArray.Parse(JsonHelper.getDestValue(joNeedConvertData, "upldDetlList"));
foreach (JObject jo in jaUpldDetlList)
{
jo["mdtrtareaAdmdvs"] = Global.inf.areaCode;
}
JArray jaXML = JArray.Parse(JsonHelper.getDestValue(joNeedConvertData, "xml"));
foreach (JObject jo in jaXML)
{
jo["tktextinfo"]["mdtrtInfo"]["fixmedinsCode"] = Global.inf.hospitalNO;
jo["tktextinfo"]["mdtrtInfo"]["fixmedinsName"] = Global.inf.hospitalName;
}
joNeedConvertData["upldDetlList"] = jaUpldDetlList;
joNeedConvertData["xml"] = jaXML;
JObject joConvertedInput = ecSettlCert.Convert4901Input(joNeedConvertData);
JObject joRtn = ecSettlCert.Upload(joConvertedInput);
if (JsonHelper.parseCenterRtnValue(joRtn, out err) != 0)
{
errMsg =("上传失败:" + err);
return -1;
}
else
{
JObject joUpdateIn = new JObject();
joUpdateIn.Add("businessCode","EcSettlCertUpload");
joUpdateIn.Add("businessID", ecSettlCert.ecSettlCertNo);//单条传,如果批量传,这么处理就有问题
joUpdateIn.Add("memo", ecSettlCert.upldBchno);//单条传,如果批量传,这么处理就有问题
joUpdateIn.Add("input", joConvertedInput);
joRtn["errorCode"] = new JObject();
joRtn["errorCode"] = 0;
joUpdateIn.Add("output", joRtn);
JObject joUpdateRtn = ecSettlCert.Update(joUpdateIn);
if (JsonHelper.parseIrisRtnValue(joUpdateRtn, out err) != 0)
{
errMsg = ("上传成功但更新后台失败:" + err);
return -1;
}
else
{
errMsg = ("上传成功!");
freshForm();
return 0;
}
}
}
private int QueryStatus(out String errMsg)
{
int i = dgvEcSettlCertList.CurrentRow.Index;
JObject joIn = new JObject();
joIn.Add("fixmedinsCode", Global.inf.hospitalNO);
joIn.Add("fixmedinsName", Global.inf.hospitalName);
joIn.Add("elecSetlCertCode", "");
joIn.Add("elecSetlCertNo", dtEcSettlCertList.Rows[i]["InvNo"].ToString());
joIn.Add("elecSetlCertChkcode","");
joIn.Add("elecSetlCertType", 3);
JObject joRtn = ecSettlCert.QueryUploadStatus(joIn);
string err;
if (JsonHelper.parseCenterRtnValue(joRtn, out err) != 0)
{
errMsg = ("查询状态失败:" + err);
return -1;
}
else
{
errMsg = ("查询状态成功!");
freshForm();
return 0;
}
}
private int QueryUploadResult(out String errMsg)
{
int i = dgvEcSettlCertList.CurrentRow.Index;
string upldBchno = dtEcSettlCertList.Rows[i]["UpldBchno"].ToString();
if (string.IsNullOrEmpty(upldBchno))
{
errMsg =("该记录未上传或上传成功!");
return -1;
}
string printDateStr = dtEcSettlCertList.Rows[i]["PrintDate"].ToString();
JObject joData = new JObject();
joData.Add("fixmedinsCode", Global.inf.hospitalNO);
joData.Add("fixmedinsName", Global.inf.hospitalName);
joData.Add("bizStsb",$"{printDateStr.Replace("-", "")}-{printDateStr.Replace("-", "")}");
joData.Add("upldBchno", dtEcSettlCertList.Rows[i]["UpldBchno"].ToString());
JObject joRtn = ecSettlCert.QueryUploadResult(joData);
string err;
if (JsonHelper.parseCenterRtnValue(joRtn, out err) != 0)
{
errMsg = ("查询上传结果失败:" + err);
return -1;
}
else
{
errMsg = ("查询上传成功!");
freshForm();
return 0;
}
}
private int ReUpload(out String errMsg)
{
int i = dgvEcSettlCertList.CurrentRow.Index;
UploadEcSettlCertIn inpar = new UploadEcSettlCertIn();
JObject joIn = new JObject();
joIn.Add("InvNo", dtEcSettlCertList.Rows[i]["InvNo"].ToString());
joIn.Add("PrintPaymentInvDr", dtEcSettlCertList.Rows[i]["PrintPaymentInvDr"].ToString());
joIn.Add("HospDr", dtEcSettlCertList.Rows[i]["HospDr"].ToString());
//获取HIS 原始入参
JObject joOrignalInput = ecSettlCert.Get4901Input(joIn);
string err;
if (JsonHelper.parseIrisRtnValue(joOrignalInput, out err) != 0)
{
errMsg = ("获取4901入参失败:" + err);
return -1;
}
//通过原始入参,转换为接口需要的入参,PDF,XML,编码转换等等
ecSettlCert.SavePath = Global.curEvt.path;
JObject joNeedConvertData = JObject.Parse(JsonHelper.getDestValue(joOrignalInput, "data"));
//joNeedConvertData.Add("fixmedinsCode", Global.inf.hospitalNO);
//joNeedConvertData.Add("fixmedinsName", Global.inf.hospitalName);
joNeedConvertData["fixmedinsCode"] = Global.inf.hospitalNO;
joNeedConvertData["fixmedinsName"] = Global.inf.hospitalName;
joNeedConvertData["upldBchno"] = DateTime.Now.ToString("yyyyMMdd" + "00001");//上传日期年月日加5位顺序号
joNeedConvertData["filename"] = "";//压缩包文件名称
JArray jaXML = JArray.Parse(JsonHelper.getDestValue(joNeedConvertData, "xml"));
foreach (JObject jo in jaXML)
{
jo["fixmedinsCode"] = Global.inf.hospitalNO;
jo["fixmedinsName"] = Global.inf.hospitalName;
}
JObject joConvertedInput = ecSettlCert.Convert4901Input(joNeedConvertData);
JArray jaRetrmDetlList = JArray.Parse(JsonHelper.getDestValue(joConvertedInput, "upldDetlList"));
foreach (JObject jo in jaRetrmDetlList)
{
jo.Add("initElecSetlCertCode", "");
jo.Add("initElecSetlCertNo", jo["elecSetlCertNo"].ToString());
jo.Add("initUpldWay", "1");//原上传方式 1使用4901医疗机构上传电子结算凭证2使用4903医疗机构上传电子结算凭证基本信息
jo.Add("certCodeNoErrFlag", "0"); //凭证代码号码错误标志 0否(原凭证代码号码与重传凭证代码号码一致)1是(原凭证代码号码与重传凭证代码号码不一致)
jo.Add("rea", "测试"); //理由
}
joConvertedInput.Remove("upldDetlList");
joConvertedInput.Add("reUploadDetlDTOList", jaRetrmDetlList);
JObject joRtn = ecSettlCert.ReUpload(joConvertedInput);
if (JsonHelper.parseCenterRtnValue(joRtn, out err) != 0)
{
errMsg = "重传失败:" + err;
return -1;
}
else
{
JObject joUpdateIn = new JObject();
joUpdateIn.Add("businessCode", "EcSettlCertUpload");
joUpdateIn.Add("businessID", ecSettlCert.ecSettlCertNo);//单条传,如果批量传,这么处理就有问题
joUpdateIn.Add("memo", ecSettlCert.upldBchno);//单条传,如果批量传,这么处理就有问题
joUpdateIn.Add("input", joConvertedInput);
joRtn["errorCode"] = new JObject();
joRtn["errorCode"] = 0;
joUpdateIn.Add("output", joRtn);
JObject joUpdateRtn = ecSettlCert.Update(joUpdateIn);
if (JsonHelper.parseIrisRtnValue(joUpdateRtn, out err) != 0)
{
errMsg = "重成功但更新后台失败:" + err;
return -1;
}
else
{
errMsg = "重传成功!";
freshForm();
return 0;
}
}
}
#endregion
private void btnQuery_Click(object sender, EventArgs e)
{
JObject joIn = new JObject();
joIn.Add("BeginDate", dpST.Value.ToString("yyyy-MM-dd HH:mm:ss"));
joIn.Add("EndDate", dpED.Value.ToString("yyyy-MM-dd HH:mm:ss"));
joIn.Add("HospDr", Global.inf.hospitalDr);
joIn.Add("PatName",tbName.Text);
joIn.Add("InvNo", tbInvNO.Text);
joIn.Add("InterfaceID", Global.inf.interfaceDr);
JObject joRtn = ecSettlCert.QueryEcSettlCertList(joIn);
if (JsonHelper.parseIrisRtnValue(joRtn, out err) != 0)
{
MessageBox.Show(err);
return;
}
dtEcSettlCertList = (DataTable)joRtn["data"].ToObject(typeof(DataTable));
dgvEcSettlCertList.DataSource = dtEcSettlCertList;
}
private void tsmUploadSingle_Click(object sender, EventArgs e)
{
SingleUpload(out err);
MessageBox.Show(err);
}
private void tsmQueryStatus_Click(object sender, EventArgs e)
{
QueryStatus(out err);
MessageBox.Show(err);
}
private void tsReUpload_Click(object sender, EventArgs e)
{
ReUpload(out err);
MessageBox.Show(err);
}
private void btnClose_3_Click(object sender, EventArgs e)
{
mainForm.Close();
}
private void tsmQueryUploadResult_Click(object sender, EventArgs e)
{
QueryUploadResult(out err);
MessageBox.Show(err);
}
//// 定义进度回调委托
//public delegate void ProgressCallback(int progress);
private int BachUpload(out string errMsg, DataLoader.ProgressCallback callback)
{
int errCount = 0;
List errList = new List();
for (int i = 0; i < dgvEcSettlCertList.Rows.Count; i++)
{
dgvEcSettlCertList.CurrentCell = dgvEcSettlCertList.Rows[i].Cells[0];
if (SingleUpload(out err) != 0)
{
errCount++;
errList.Add(err);
}
if (callback != null)
{
callback(i + 1);
}
}
if (errCount != 0)
{
errMsg = $"批量上传有错误!上传总条数为:{dgvEcSettlCertList.Rows.Count};错误条数为:{errCount}";
}
else
{
errMsg = $"批量上传成功!上传总条数为:{dgvEcSettlCertList.Rows.Count}";
}
return -errCount;
}
private void btnBatchUpload_Click(object sender, EventArgs e)
{
// 创建 DataLoader 并传递 queryExportData 方法
DataLoader _dataLoader;
_dataLoader = new DataLoader((out string errMsg, DataLoader.ProgressCallback callback) =>BachUpload(out errMsg, callback), this);
_dataLoader.StartQueryExportData(dgvEcSettlCertList.Rows.Count, (result, errMsg) =>
{
// 在这里处理结果和错误信息
if (result == 0)
{
MessageBox.Show(errMsg);
}
else
{
MessageBox.Show(errMsg);
}
});
}
}
}