frmEcSettlCertUpload.cs 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using System.Windows.Forms;
  10. using Newtonsoft.Json.Linq;
  11. using PTMedicalInsurance.Variables;
  12. using PTMedicalInsurance.Helper;
  13. using PTMedicalInsurance.FormSetter;
  14. using System.Net;
  15. using System.IO;
  16. namespace PTMedicalInsurance.Forms
  17. {
  18. public partial class frmEcSettlCertUpload : Form
  19. {
  20. private DataTable dtEcSettlCertList;
  21. private InvokeHelper invoker = new InvokeHelper();
  22. public frmEcSettlCertUpload()
  23. {
  24. InitializeComponent();
  25. }
  26. private void frmEcSettlCertUpload_Load(object sender, EventArgs e)
  27. {
  28. GridViewSetter gvs = new GridViewSetter();
  29. gvs.setDgvEcSettlCertList(dgvEcSettlCertList);
  30. dpST.Text = DateTime.Now.ToString("yyyy-MM-01");
  31. dpED.Value = DateTime.Now.AddDays(1 - DateTime.Now.Day).AddMonths(1).AddDays(-1);
  32. }
  33. private void btnClose_3_Click(object sender, EventArgs e)
  34. {
  35. this.Close();
  36. }
  37. private void btnQuery_Click(object sender, EventArgs e)
  38. {
  39. JObject joIn = new JObject();
  40. joIn.Add("BeginDate", dpST.Value.ToString("yyyy-MM-dd HH:mm:ss"));
  41. joIn.Add("EndDate", dpED.Value.ToString("yyyy-MM-dd HH:mm:ss"));
  42. joIn.Add("HospDr", Global.inf.hospitalDr);
  43. joIn.Add("PatName", tbName.Text);
  44. joIn.Add("InvNo", tbInvNO.Text);
  45. joIn.Add("InterfaceID", Global.inf.interfaceDr);
  46. JObject joHisRtn = invoker.invokeHISService(JsonHelper.setIrisInpar("05110040", joIn).ToString(), "查询某时间段内或某患者电子结算凭证清单"); //测试服为05110038
  47. string errMsg;
  48. if (JsonHelper.parseIrisRtnValue(joHisRtn, out errMsg) != 0)
  49. {
  50. MessageBox.Show("查询某时间段内或某患者电子结算凭证清单失败!" + errMsg);
  51. return;
  52. }
  53. JArray jaData = JArray.Parse(JsonHelper.getDestValue(joHisRtn, "data"));
  54. JObject joRtn = invoker.invokeInsuService(JsonHelper.setIrisInpar("09010128", jaData).ToString(), "根据传入的电子凭证记录匹配上传记录表");
  55. if (JsonHelper.parseIrisRtnValue(joRtn, out errMsg) != 0)
  56. {
  57. MessageBox.Show("根据传入的电子凭证记录匹配上传记录表!" + errMsg);
  58. return;
  59. }
  60. dtEcSettlCertList = (DataTable)joRtn["data"].ToObject(typeof(DataTable));
  61. dgvEcSettlCertList.DataSource = dtEcSettlCertList;
  62. }
  63. private int ConvertPDFurlToBase64(string invNo, string pdfUrl,out string base64PDF,out string errMsg)
  64. {
  65. errMsg = ""; base64PDF = "";
  66. string SavePath = Global.curEvt.path + @"\PDF\"+ invNo+".pdf";
  67. try
  68. {
  69. //创建PDF文件夹
  70. if (!Directory.Exists(Global.curEvt.path + @"\PDF\"))
  71. {
  72. Directory.CreateDirectory(Global.curEvt.path + @"\PDF\");
  73. }
  74. using (WebClient client = new WebClient())
  75. {
  76. byte[] fileData = client.DownloadData(pdfUrl); // 下载文件数据到字节数组中
  77. File.WriteAllBytes(SavePath, fileData); // 将字节数组写入文件系统
  78. //Console.WriteLine("文件已保存到: " + SavePath);
  79. }
  80. base64PDF = ConvertPdfToBase64(SavePath);
  81. //Console.WriteLine(base64String);
  82. if (base64PDF == "")
  83. return -1;
  84. else
  85. return 0;
  86. }
  87. catch(Exception ex)
  88. {
  89. errMsg = ex.ToString();
  90. return -1;
  91. }
  92. }
  93. private string ConvertPdfToBase64(string filePath)
  94. {
  95. try
  96. {
  97. // 读取PDF文件为字节数组
  98. byte[] pdfBytes = File.ReadAllBytes(filePath);
  99. // 将字节数组转换为Base64字符串
  100. string base64String = Convert.ToBase64String(pdfBytes);
  101. return base64String;
  102. }
  103. catch (Exception ex)
  104. {
  105. Console.WriteLine("Error: " + ex.Message);
  106. return null;
  107. }
  108. }
  109. private void btnBatchUpload_Click(object sender, EventArgs e)
  110. {
  111. string errMsg;
  112. string base64PDF;
  113. int i = dgvEcSettlCertList.CurrentRow.Index;
  114. string InvNo = dtEcSettlCertList.Rows[i]["InvNo"].ToString();
  115. string InsuTradeNo = dtEcSettlCertList.Rows[i]["InsuTradeNo"].ToString();
  116. string InvoiceFileUrl = dtEcSettlCertList.Rows[i]["InvoiceFileUrl"].ToString(); //发票PDF地址
  117. string PrintDate= dtEcSettlCertList.Rows[i]["PrintDate"].ToString();
  118. string PrintTime = dtEcSettlCertList.Rows[i]["PrintTime"].ToString();
  119. string CureType= dtEcSettlCertList.Rows[i]["AdmDesc"].ToString();
  120. decimal BliAmt = decimal.Parse(dtEcSettlCertList.Rows[i]["PatAmount"].ToString());
  121. if (CureType == "门诊")
  122. CureType = "0";
  123. else if(CureType == "住院")
  124. CureType = "1";
  125. if (ConvertPDFurlToBase64(InvNo, InvoiceFileUrl, out base64PDF, out errMsg) != 0)
  126. {
  127. MessageBox.Show("将发票PDF文件转换为base64格式失败!" + errMsg);
  128. return;
  129. }
  130. /*
  131. JObject joIn = new JObject();
  132. joIn.Add("InvNo", dtEcSettlCertList.Rows[i]["InvNo"].ToString());
  133. joIn.Add("PrintPaymentInvDr", dtEcSettlCertList.Rows[i]["PrintPaymentInvDr"].ToString());
  134. joIn.Add("HospDr", dtEcSettlCertList.Rows[i]["HospDr"].ToString());
  135. //获取HIS 原始入参
  136. //JoIn包含 患者数电号
  137. JObject joRtn = invoker.invokeHISService(JsonHelper.setIrisInpar("05110041", joIn).ToString(), "获取该数电号对应的数电入参"); //测试服05110039
  138. if (JsonHelper.parseIrisRtnValue(joRtn, out errMsg) != 0)
  139. {
  140. errMsg = ("获取该数电号对应的数电入参失败:" + errMsg);
  141. MessageBox.Show(errMsg);
  142. return;
  143. }
  144. string NeedConvertData = JsonHelper.getDestValue(joRtn, "data");
  145. */
  146. string HisBizNo = "0515500901" + DateTime.Now.ToString("yyyyMMdd") + DateTime.Now.ToString("HHmmss") + "99" + DateTime.Now.ToString("ffff");
  147. JObject joElecSetInfo = new JObject();
  148. joElecSetInfo.Add("ELEC_SETL_CERT_CODE", "3"); //电子结算凭证代码 电子结算凭证类型为1-财政电子票据、2-税务电子发票时必填;电子结算凭证类型为3-税务数电票时非必填
  149. joElecSetInfo.Add("ELEC_SETL_CERT_NO", "1"); //电子结算凭证号码
  150. joElecSetInfo.Add("ELEC_SETL_CERT_CHK_CODE", "2"); //电子结算凭证校验码 电子结算凭证类型为1-财政电子票据、2-税务电子发票时必填;电子结算凭证类型为3 - 税务数电票时非必填
  151. joElecSetInfo.Add("ELEC_SETL_CERT_TYPE", "3"); //电子结算凭证类型 1-财政电子票据2-税务电子发票3-税务数电票
  152. joElecSetInfo.Add("ELEC_SETL_CERT_FLAG", "1"); //电子结算凭证标识 0-正常票1-冲红票3-税务数电票
  153. joElecSetInfo.Add("REL_ELEC_SETL_CERT_CODE", ""); //相关电子结算凭证代码 原电子结算凭证代码 冲红票必填
  154. joElecSetInfo.Add("REL_ELEC_SETL_CERT_NO", ""); //相关电子结算凭证号码 原电子结算凭证号码 冲红票必填
  155. joElecSetInfo.Add("BILLER", ""); //开票人
  156. joElecSetInfo.Add("RECHKER", ""); //复核人
  157. joElecSetInfo.Add("BILL_AMT", BliAmt); //开票金额
  158. joElecSetInfo.Add("BILL_DATE", PrintDate); //开票日期
  159. joElecSetInfo.Add("BILL_TIME", PrintTime); //开票时间
  160. JObject joInput = new JObject();
  161. joInput.Add("TRADE_NO", InsuTradeNo); //医保交易流水号
  162. joInput.Add("HIS_BIZ_NO", HisBizNo); //医院业务流水号 格式:10位院区编码 + yyyyMMdd(8位日期) + HHmmss(6位时分秒) + 6位序号
  163. joInput.Add("CURE_TYPE", CureType); //医疗类别 0:门诊类(包含普通门急诊)1:住院类
  164. joInput.Add("ELECT_MEDIUM_TYPE", "1"); //1-PDF2-OFD3-XML
  165. joInput.Add("ELECT_XML_TYPE", "0"); //0-带XML信息1-不带XML信息电子票据介质类型为OFD或XML时,此字段固定传1(不带XML信息),PDF类型根据实际情况传入
  166. joInput.Add("ELECT_SETL_INFO", joElecSetInfo); //电子结算凭证信息
  167. joInput.Add("ELECT_INVOICE", base64PDF); //将电子发票(PDF格式)的流进行BASE64转码后,所得到的字符串
  168. //上传给中心
  169. string sInput = JsonHelper.setCenterInpar_SX("0301", joInput.ToString());
  170. JObject joRtn = invoker.invokeCenterService_InvNO("0301", sInput);
  171. //JObject joRtn = invoker.invokeCenterService_InvNO("0301", joInput.ToString());
  172. if (joRtn["ret_code"].ToString() != "0")
  173. {
  174. MessageBox.Show(joRtn["ret_msg"].ToString());
  175. return;
  176. }
  177. else
  178. {
  179. string DATA = joRtn["out_data"].ToString();
  180. string SETTLEMENT_CODE = joRtn["out_data"]["SETTLEMENT_CODE"].ToString(); //结算票据代码 1:门诊费用结算清单2:住院费用清单3:住院费用结算单4:特殊病定额管理费用结算明细表
  181. string SETTLEMENT_NAME = joRtn["out_data"]["SETTLEMENT_NAME"].ToString(); //结算票据代码所对应的名称
  182. string SETTLEMENT_DATA = joRtn["out_data"]["SETTLEMENT_DATA"].ToString(); //结算票据信息 将结算票据信息(PDF格式)的流进行BASE64转码后,所得到的字符串
  183. }
  184. }
  185. }
  186. }