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 Newtonsoft.Json.Linq; using PTMedicalInsurance.Variables; using PTMedicalInsurance.Helper; using PTMedicalInsurance.FormSetter; using System.Net; using System.IO; namespace PTMedicalInsurance.Forms { public partial class frmEcSettlCertUpload : Form { private DataTable dtEcSettlCertList; private InvokeHelper invoker = new InvokeHelper(); public frmEcSettlCertUpload() { InitializeComponent(); } private void frmEcSettlCertUpload_Load(object sender, EventArgs e) { GridViewSetter gvs = new GridViewSetter(); gvs.setDgvEcSettlCertList(dgvEcSettlCertList); dpST.Text = DateTime.Now.ToString("yyyy-MM-01"); dpED.Value = DateTime.Now.AddDays(1 - DateTime.Now.Day).AddMonths(1).AddDays(-1); } private void btnClose_3_Click(object sender, EventArgs e) { this.Close(); } 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 joHisRtn = invoker.invokeHISService(JsonHelper.setIrisInpar("05110040", joIn).ToString(), "查询某时间段内或某患者电子结算凭证清单"); //测试服为05110038 string errMsg; if (JsonHelper.parseIrisRtnValue(joHisRtn, out errMsg) != 0) { MessageBox.Show("查询某时间段内或某患者电子结算凭证清单失败!" + errMsg); return; } JArray jaData = JArray.Parse(JsonHelper.getDestValue(joHisRtn, "data")); JObject joRtn = invoker.invokeInsuService(JsonHelper.setIrisInpar("09010128", jaData).ToString(), "根据传入的电子凭证记录匹配上传记录表"); if (JsonHelper.parseIrisRtnValue(joRtn, out errMsg) != 0) { MessageBox.Show("根据传入的电子凭证记录匹配上传记录表!" + errMsg); return; } dtEcSettlCertList = (DataTable)joRtn["data"].ToObject(typeof(DataTable)); dgvEcSettlCertList.DataSource = dtEcSettlCertList; } private int ConvertPDFurlToBase64(string invNo, string pdfUrl,out string base64PDF,out string errMsg) { errMsg = ""; base64PDF = ""; string SavePath = Global.curEvt.path + @"\PDF\"+ invNo+".pdf"; try { //创建PDF文件夹 if (!Directory.Exists(Global.curEvt.path + @"\PDF\")) { Directory.CreateDirectory(Global.curEvt.path + @"\PDF\"); } using (WebClient client = new WebClient()) { byte[] fileData = client.DownloadData(pdfUrl); // 下载文件数据到字节数组中 File.WriteAllBytes(SavePath, fileData); // 将字节数组写入文件系统 //Console.WriteLine("文件已保存到: " + SavePath); } base64PDF = ConvertPdfToBase64(SavePath); //Console.WriteLine(base64String); if (base64PDF == "") return -1; else return 0; } catch(Exception ex) { errMsg = ex.ToString(); return -1; } } private string ConvertPdfToBase64(string filePath) { try { // 读取PDF文件为字节数组 byte[] pdfBytes = File.ReadAllBytes(filePath); // 将字节数组转换为Base64字符串 string base64String = Convert.ToBase64String(pdfBytes); return base64String; } catch (Exception ex) { Console.WriteLine("Error: " + ex.Message); return null; } } private void btnBatchUpload_Click(object sender, EventArgs e) { string errMsg; string base64PDF; int i = dgvEcSettlCertList.CurrentRow.Index; string InvNo = dtEcSettlCertList.Rows[i]["InvNo"].ToString(); string InsuTradeNo = dtEcSettlCertList.Rows[i]["InsuTradeNo"].ToString(); string InvoiceFileUrl = dtEcSettlCertList.Rows[i]["InvoiceFileUrl"].ToString(); //发票PDF地址 if (ConvertPDFurlToBase64(InvNo, InvoiceFileUrl, out base64PDF, out errMsg) != 0) { MessageBox.Show("将发票PDF文件转换为base64格式失败!" + errMsg); return; } /* 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 原始入参 //JoIn包含 患者数电号 JObject joRtn = invoker.invokeHISService(JsonHelper.setIrisInpar("05110041", joIn).ToString(), "获取该数电号对应的数电入参"); //测试服05110039 if (JsonHelper.parseIrisRtnValue(joRtn, out errMsg) != 0) { errMsg = ("获取该数电号对应的数电入参失败:" + errMsg); MessageBox.Show(errMsg); return; } string NeedConvertData = JsonHelper.getDestValue(joRtn, "data"); */ JObject joInput = new JObject(); joInput.Add("TRADE_NO", InsuTradeNo); //医保交易流水号 joInput.Add("CURE_TYPE", "0"); //医疗类别 0:门诊类(包含普通门急诊)1:住院类 joInput.Add("ELECT_INVOICE", base64PDF); //将电子发票(PDF格式)的流进行BASE64转码后,所得到的字符串 //上传给中心 JObject joRtn = invoker.invokeCenterService_InvNO("0301", JsonHelper.setCenterInpar_SX("0301", joInput.ToString())); if (joRtn["ret_code"].ToString() != "0") { MessageBox.Show(joRtn["ret_msg"].ToString()); return; } else { string DATA = joRtn["out_data"].ToString(); string SETTLEMENT_CODE = joRtn["out_data"]["SETTLEMENT_CODE"].ToString(); //结算票据代码 1:门诊费用结算清单2:住院费用清单3:住院费用结算单4:特殊病定额管理费用结算明细表 string SETTLEMENT_NAME = joRtn["out_data"]["SETTLEMENT_NAME"].ToString(); //结算票据代码所对应的名称 string SETTLEMENT_DATA = joRtn["out_data"]["SETTLEMENT_DATA"].ToString(); //结算票据信息 将结算票据信息(PDF格式)的流进行BASE64转码后,所得到的字符串 } } } }