EcSettlCertUpload.cs 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.IO;
  7. using System.IO.Compression;
  8. using System.Linq;
  9. using System.Net.Http;
  10. using System.Text;
  11. using System.Threading.Tasks;
  12. using System.Windows.Forms;
  13. using Newtonsoft.Json.Linq;
  14. using PTMedicalInsurance.Business;
  15. using PTMedicalInsurance.Entity.BaseLine.ElectronicSettlementCertificate;
  16. using PTMedicalInsurance.Forms.Setters.ElectronicSettlementCertificates;
  17. using PTMedicalInsurance.Helper;
  18. using PTMedicalInsurance.Variables;
  19. namespace PTMedicalInsurance.Forms.ElectronicSettlementCertificates
  20. {
  21. public partial class EcSettlCertUpload : Form
  22. {
  23. private ElectronicSettlementCertificate ecSettlCert = new ElectronicSettlementCertificate();
  24. private DataTable dtEcSettlCertList;
  25. private EcSettlCertMainForm mainForm;
  26. private string err;
  27. public EcSettlCertUpload()
  28. {
  29. InitializeComponent();
  30. }
  31. public EcSettlCertUpload(Form frm)
  32. {
  33. InitializeComponent();
  34. InitForm(frm);
  35. }
  36. private void InitForm(Form frm)
  37. {
  38. mainForm = (EcSettlCertMainForm)frm;
  39. CheckForIllegalCrossThreadCalls = false;
  40. // 禁用关闭按钮
  41. this.FormBorderStyle = FormBorderStyle.None;
  42. // 隐藏标题栏
  43. this.ControlBox = false;
  44. // 其他可能需要的配置
  45. this.TopLevel = false;
  46. this.Dock = DockStyle.Fill; // 根据需要设置 Dock 属性
  47. //
  48. SetHeaderOfDgv();
  49. }
  50. private void SetHeaderOfDgv()
  51. {
  52. GridViewSetter gvs = new GridViewSetter();
  53. gvs.setDgvEcSettlCertList(dgvEcSettlCertList);
  54. }
  55. #region 函数封装
  56. /// <summary>
  57. /// 更新成功后,刷新界面
  58. /// </summary>
  59. private void freshForm()
  60. {
  61. }
  62. /// <summary>
  63. /// 单条上传
  64. /// </summary>
  65. /// <param name="errMsg"></param>
  66. /// <returns></returns>
  67. private int SingleUpload(out String errMsg)
  68. {
  69. int i = dgvEcSettlCertList.CurrentRow.Index;
  70. UploadEcSettlCertIn inpar = new UploadEcSettlCertIn();
  71. JObject joIn = new JObject();
  72. joIn.Add("InvNo", dtEcSettlCertList.Rows[i]["InvNo"].ToString());
  73. joIn.Add("PrintPaymentInvDr", dtEcSettlCertList.Rows[i]["PrintPaymentInvDr"].ToString());
  74. joIn.Add("HospDr", dtEcSettlCertList.Rows[i]["HospDr"].ToString());
  75. //获取HIS 原始入参
  76. JObject joOrignalInput = ecSettlCert.Get4901Input(joIn);
  77. if (JsonHelper.parseIrisRtnValue(joOrignalInput, out err) != 0)
  78. {
  79. errMsg = ("获取4901入参失败:" + err);
  80. return -1;
  81. }
  82. //通过原始入参,转换为接口需要的入参,PDF,XML,编码转换等等
  83. ecSettlCert.SavePath = Global.curEvt.path;
  84. JObject joNeedConvertData = JObject.Parse(JsonHelper.getDestValue(joOrignalInput,"data"));
  85. //joNeedConvertData.Add("fixmedinsCode", Global.inf.hospitalNO);
  86. //joNeedConvertData.Add("fixmedinsName", Global.inf.hospitalName);
  87. joNeedConvertData["fixmedinsCode"] = Global.inf.hospitalNO;
  88. joNeedConvertData["fixmedinsName"] = Global.inf.hospitalName;
  89. //joNeedConvertData["upldBchno"] = DateTime.Now.ToString("yyyyMMdd" + "00001");//上传日期年月日加5位顺序号
  90. joNeedConvertData["filename"] = "";//压缩包文件名称
  91. JArray jaXML = JArray.Parse(JsonHelper.getDestValue(joNeedConvertData, "xml"));
  92. foreach (JObject jo in jaXML)
  93. {
  94. jo["tktextinfo"]["mdtrtInfo"]["fixmedinsCode"] = Global.inf.hospitalNO;
  95. jo["tktextinfo"]["mdtrtInfo"]["fixmedinsName"] = Global.inf.hospitalName;
  96. jo["tktextinfo"]["mdtrtInfo"]["fixBlngAdmdvs"] = "360100";
  97. jo["tktextinfo"]["billInfo"]["supninsCode"] = "360100";
  98. }
  99. joNeedConvertData["xml"] = jaXML;
  100. JObject joConvertedInput = ecSettlCert.Convert4901Input(joNeedConvertData, "");
  101. JObject joRtn = ecSettlCert.Upload(joConvertedInput);
  102. if (JsonHelper.parseCenterRtnValue(joRtn, out err) != 0)
  103. {
  104. errMsg =("上传失败:" + err);
  105. return -1;
  106. }
  107. else
  108. {
  109. JObject joUpdateIn = new JObject();
  110. joUpdateIn.Add("businessCode","EcSettlCertUpload");
  111. joUpdateIn.Add("businessID", ecSettlCert.ecSettlCertNo);//单条传,如果批量传,这么处理就有问题
  112. joUpdateIn.Add("memo", ecSettlCert.upldBchno);//单条传,如果批量传,这么处理就有问题
  113. joUpdateIn.Add("input", joConvertedInput);
  114. joRtn["errorCode"] = new JObject();
  115. joRtn["errorCode"] = 0;
  116. joUpdateIn.Add("output", joRtn);
  117. JObject joUpdateRtn = ecSettlCert.Update(joUpdateIn);
  118. if (JsonHelper.parseIrisRtnValue(joUpdateRtn, out err) != 0)
  119. {
  120. errMsg = ("上传成功但更新后台失败:" + err);
  121. return -1;
  122. }
  123. else
  124. {
  125. errMsg = ("上传成功!");
  126. freshForm();
  127. return 0;
  128. }
  129. }
  130. }
  131. private int QueryStatus(out String errMsg)
  132. {
  133. int i = dgvEcSettlCertList.CurrentRow.Index;
  134. JObject joIn = new JObject();
  135. joIn.Add("fixmedinsCode", Global.inf.hospitalNO);
  136. joIn.Add("fixmedinsName", Global.inf.hospitalName);
  137. joIn.Add("elecSetlCertCode", "");
  138. joIn.Add("elecSetlCertNo", dtEcSettlCertList.Rows[i]["InvNo"].ToString());
  139. joIn.Add("elecSetlCertChkcode","");
  140. joIn.Add("elecSetlCertType", 3);
  141. JObject joRtn = ecSettlCert.QueryUploadStatus(joIn);
  142. string err;
  143. if (JsonHelper.parseCenterRtnValue(joRtn, out err) != 0)
  144. {
  145. errMsg = ("查询状态失败:" + err);
  146. return -1;
  147. }
  148. else
  149. {
  150. errMsg = ("查询状态成功!");
  151. freshForm();
  152. return 0;
  153. }
  154. }
  155. private int QueryUploadResult(out String errMsg)
  156. {
  157. int i = dgvEcSettlCertList.CurrentRow.Index;
  158. string upldBchno = dtEcSettlCertList.Rows[i]["UpldBchno"].ToString();
  159. if (string.IsNullOrEmpty(upldBchno))
  160. {
  161. errMsg =("该记录未上传或上传成功!");
  162. return -1;
  163. }
  164. string printDateStr = dtEcSettlCertList.Rows[i]["PrintDate"].ToString();
  165. JObject joData = new JObject();
  166. joData.Add("fixmedinsCode", Global.inf.hospitalNO);
  167. joData.Add("fixmedinsName", Global.inf.hospitalName);
  168. joData.Add("bizStsb",$"{printDateStr.Replace("-", "")}-{printDateStr.Replace("-", "")}");
  169. joData.Add("upldBchno", dtEcSettlCertList.Rows[i]["UpldBchno"].ToString());
  170. JObject joRtn = ecSettlCert.QueryUploadResult(joData);
  171. string err;
  172. if (JsonHelper.parseCenterRtnValue(joRtn, out err) != 0)
  173. {
  174. errMsg = ("查询上传结果失败:" + err);
  175. return -1;
  176. }
  177. else
  178. {
  179. errMsg = ("查询上传成功!");
  180. freshForm();
  181. return 0;
  182. }
  183. }
  184. private int ReUpload(out String errMsg)
  185. {
  186. int i = dgvEcSettlCertList.CurrentRow.Index;
  187. UploadEcSettlCertIn inpar = new UploadEcSettlCertIn();
  188. JObject joIn = new JObject();
  189. joIn.Add("InvNo", dtEcSettlCertList.Rows[i]["InvNo"].ToString());
  190. joIn.Add("PrintPaymentInvDr", dtEcSettlCertList.Rows[i]["PrintPaymentInvDr"].ToString());
  191. joIn.Add("HospDr", dtEcSettlCertList.Rows[i]["HospDr"].ToString());
  192. //获取HIS 原始入参
  193. JObject joOrignalInput = ecSettlCert.Get4901Input(joIn);
  194. string err;
  195. if (JsonHelper.parseIrisRtnValue(joOrignalInput, out err) != 0)
  196. {
  197. errMsg = ("获取4901入参失败:" + err);
  198. return -1;
  199. }
  200. //通过原始入参,转换为接口需要的入参,PDF,XML,编码转换等等
  201. ecSettlCert.SavePath = Global.curEvt.path;
  202. JObject joNeedConvertData = JObject.Parse(JsonHelper.getDestValue(joOrignalInput, "data"));
  203. //joNeedConvertData.Add("fixmedinsCode", Global.inf.hospitalNO);
  204. //joNeedConvertData.Add("fixmedinsName", Global.inf.hospitalName);
  205. joNeedConvertData["fixmedinsCode"] = Global.inf.hospitalNO;
  206. joNeedConvertData["fixmedinsName"] = Global.inf.hospitalName;
  207. joNeedConvertData["upldBchno"] = DateTime.Now.ToString("yyyyMMdd" + "00001");//上传日期年月日加5位顺序号
  208. joNeedConvertData["filename"] = "";//压缩包文件名称
  209. JArray jaXML = JArray.Parse(JsonHelper.getDestValue(joNeedConvertData, "xml"));
  210. foreach (JObject jo in jaXML)
  211. {
  212. jo["fixmedinsCode"] = Global.inf.hospitalNO;
  213. jo["fixmedinsName"] = Global.inf.hospitalName;
  214. }
  215. JObject joConvertedInput = ecSettlCert.Convert4901Input(joNeedConvertData,"");
  216. JArray jaRetrmDetlList = JArray.Parse(JsonHelper.getDestValue(joConvertedInput, "upldDetlList"));
  217. foreach (JObject jo in jaRetrmDetlList)
  218. {
  219. jo.Add("initElecSetlCertCode", "");
  220. jo.Add("initElecSetlCertNo", jo["elecSetlCertNo"].ToString());
  221. jo.Add("initUpldWay", "1");//原上传方式 1使用4901医疗机构上传电子结算凭证2使用4903医疗机构上传电子结算凭证基本信息
  222. jo.Add("certCodeNoErrFlag", "0"); //凭证代码号码错误标志 0否(原凭证代码号码与重传凭证代码号码一致)1是(原凭证代码号码与重传凭证代码号码不一致)
  223. jo.Add("rea", "测试"); //理由
  224. }
  225. joConvertedInput.Remove("upldDetlList");
  226. joConvertedInput.Add("reUploadDetlDTOList", jaRetrmDetlList);
  227. JObject joRtn = ecSettlCert.ReUpload(joConvertedInput);
  228. if (JsonHelper.parseCenterRtnValue(joRtn, out err) != 0)
  229. {
  230. errMsg = "重传失败:" + err;
  231. return -1;
  232. }
  233. else
  234. {
  235. JObject joUpdateIn = new JObject();
  236. joUpdateIn.Add("businessCode", "EcSettlCertUpload");
  237. joUpdateIn.Add("businessID", ecSettlCert.ecSettlCertNo);//单条传,如果批量传,这么处理就有问题
  238. joUpdateIn.Add("memo", ecSettlCert.upldBchno);//单条传,如果批量传,这么处理就有问题
  239. joUpdateIn.Add("input", joConvertedInput);
  240. joRtn["errorCode"] = new JObject();
  241. joRtn["errorCode"] = 0;
  242. joUpdateIn.Add("output", joRtn);
  243. JObject joUpdateRtn = ecSettlCert.Update(joUpdateIn);
  244. if (JsonHelper.parseIrisRtnValue(joUpdateRtn, out err) != 0)
  245. {
  246. errMsg = "重成功但更新后台失败:" + err;
  247. return -1;
  248. }
  249. else
  250. {
  251. errMsg = "重传成功!";
  252. freshForm();
  253. return 0;
  254. }
  255. }
  256. }
  257. #endregion
  258. private void btnQuery_Click(object sender, EventArgs e)
  259. {
  260. JObject joIn = new JObject();
  261. joIn.Add("BeginDate", dpST.Value.ToString("yyyy-MM-dd HH:mm:ss"));
  262. joIn.Add("EndDate", dpED.Value.ToString("yyyy-MM-dd HH:mm:ss"));
  263. joIn.Add("PatName",tbName.Text);
  264. joIn.Add("InvNo", tbInvNO.Text);
  265. joIn.Add("InterfaceID", Global.inf.interfaceDr);
  266. JObject joRtn = ecSettlCert.QueryEcSettlCertList(joIn);
  267. if (JsonHelper.parseIrisRtnValue(joRtn, out err) != 0)
  268. {
  269. MessageBox.Show(err);
  270. return;
  271. }
  272. dtEcSettlCertList = (DataTable)joRtn["data"].ToObject(typeof(DataTable));
  273. dgvEcSettlCertList.DataSource = dtEcSettlCertList;
  274. }
  275. private void tsmUploadSingle_Click(object sender, EventArgs e)
  276. {
  277. SingleUpload(out err);
  278. MessageBox.Show(err);
  279. }
  280. private void tsmQueryStatus_Click(object sender, EventArgs e)
  281. {
  282. QueryStatus(out err);
  283. MessageBox.Show(err);
  284. }
  285. private void tsReUpload_Click(object sender, EventArgs e)
  286. {
  287. ReUpload(out err);
  288. MessageBox.Show(err);
  289. }
  290. private void btnClose_3_Click(object sender, EventArgs e)
  291. {
  292. mainForm.Close();
  293. }
  294. private void tsmQueryUploadResult_Click(object sender, EventArgs e)
  295. {
  296. QueryUploadResult(out err);
  297. MessageBox.Show(err);
  298. }
  299. private void btnBatchUpload_Click(object sender, EventArgs e)
  300. {
  301. string OutMsg = "";
  302. if (dgvEcSettlCertList.RowCount <= 0)
  303. {
  304. MessageBox.Show("请先查询数据!");
  305. return;
  306. }
  307. for (int i = 0; i < dgvEcSettlCertList.Rows.Count; i++)
  308. {
  309. string errMsg;
  310. UploadEcSettlCertIn inpar = new UploadEcSettlCertIn();
  311. JObject joIn = new JObject();
  312. string InvNo = dtEcSettlCertList.Rows[i]["InvNo"].ToString();
  313. joIn.Add("InvNo", InvNo);
  314. joIn.Add("PrintPaymentInvDr", dtEcSettlCertList.Rows[i]["PrintPaymentInvDr"].ToString());
  315. joIn.Add("HospDr", dtEcSettlCertList.Rows[i]["HospDr"].ToString());
  316. //获取HIS 原始入参
  317. JObject joOrignalInput = ecSettlCert.Get4901Input(joIn);
  318. //if (JsonHelper.parseIrisRtnValue(joOrignalInput, out err) != 0)
  319. //{
  320. // errMsg = ("获取4901入参失败:" + err);
  321. // return -1;
  322. //}
  323. //通过原始入参,转换为接口需要的入参,PDF,XML,编码转换等等
  324. ecSettlCert.SavePath = Global.curEvt.path;
  325. JObject joNeedConvertData = JObject.Parse(JsonHelper.getDestValue(joOrignalInput, "data"));
  326. //joNeedConvertData.Add("fixmedinsCode", Global.inf.hospitalNO);
  327. //joNeedConvertData.Add("fixmedinsName", Global.inf.hospitalName);
  328. joNeedConvertData["fixmedinsCode"] = Global.inf.hospitalNO;
  329. joNeedConvertData["fixmedinsName"] = Global.inf.hospitalName;
  330. //joNeedConvertData["upldBchno"] = DateTime.Now.ToString("yyyyMMdd" + "00001");//上传日期年月日加5位顺序号
  331. joNeedConvertData["filename"] = "";//压缩包文件名称
  332. JArray jaXML = JArray.Parse(JsonHelper.getDestValue(joNeedConvertData, "xml"));
  333. foreach (JObject jo in jaXML)
  334. {
  335. jo["tktextinfo"]["mdtrtInfo"]["fixmedinsCode"] = Global.inf.hospitalNO;
  336. jo["tktextinfo"]["mdtrtInfo"]["fixmedinsName"] = Global.inf.hospitalName;
  337. }
  338. joNeedConvertData["xml"] = jaXML;
  339. JObject joConvertedInput = ecSettlCert.Convert4901Input(joNeedConvertData,"");
  340. JObject joRtn = ecSettlCert.Upload(joConvertedInput);
  341. if (JsonHelper.parseCenterRtnValue(joRtn, out err) != 0)
  342. {
  343. errMsg = (InvNo + "上传失败:" + err);
  344. OutMsg = OutMsg + errMsg;
  345. }
  346. else
  347. {
  348. JObject joUpdateIn = new JObject();
  349. joUpdateIn.Add("businessCode", "EcSettlCertUpload");
  350. joUpdateIn.Add("businessID", ecSettlCert.ecSettlCertNo);//单条传,如果批量传,这么处理就有问题
  351. joUpdateIn.Add("memo", ecSettlCert.upldBchno);//单条传,如果批量传,这么处理就有问题
  352. joUpdateIn.Add("input", joConvertedInput);
  353. joRtn["errorCode"] = new JObject();
  354. joRtn["errorCode"] = 0;
  355. joUpdateIn.Add("output", joRtn);
  356. JObject joUpdateRtn = ecSettlCert.Update(joUpdateIn);
  357. if (JsonHelper.parseIrisRtnValue(joUpdateRtn, out err) != 0)
  358. {
  359. errMsg = ("上传成功但更新后台失败:" + err);
  360. OutMsg = OutMsg + errMsg;
  361. }
  362. else
  363. {
  364. errMsg = ("上传成功!");
  365. }
  366. }
  367. }
  368. freshForm();
  369. MessageBox.Show("上传成功");
  370. }
  371. }
  372. }