HandleException.cs 44 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953
  1. using Newtonsoft.Json.Linq;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.ComponentModel;
  5. using System.Data;
  6. using System.Drawing;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. using System.Windows.Forms;
  11. using PTMedicalInsurance.Common;
  12. using PTMedicalInsurance.Helper;
  13. using PTMedicalInsurance.FormSetter;
  14. using PTMedicalInsurance.Business;
  15. using PTMedicalInsurance.Variables;
  16. using FastReport;
  17. using System.Xml;
  18. namespace PTMedicalInsurance.Forms
  19. {
  20. public partial class HandleException : Form
  21. {
  22. private int iLog = 0;
  23. private int iSettl = 0;
  24. private int iReg = 0;
  25. //设置业务实例
  26. CenterBusiness cBus = new CenterBusiness();
  27. HisMainBusiness hBus = new HisMainBusiness();
  28. HisIrisServices hIS = new HisIrisServices();
  29. MIIrisServices mIS = new MIIrisServices();
  30. InvokeHelper invoker = new InvokeHelper();
  31. //1.声明自适应类实例
  32. AutoResizeForm asc = new AutoResizeForm();
  33. ReadCardClass rcl = new ReadCardClass();
  34. AnalysisXML AnXML = new AnalysisXML();
  35. public HandleException()
  36. {
  37. InitializeComponent();
  38. //this.StartPosition = FormStartPosition.CenterParent;
  39. asc.controllInitializeSize(this);
  40. asc.controlAutoSize(this);
  41. }
  42. private void HandleException_Load(object sender, EventArgs e)
  43. {
  44. dpST_Log.Text = DateTime.Now.ToString("yyyy-MM-dd 00:00:00");
  45. dpED_Log.Text = DateTime.Now.ToString("yyyy-MM-dd 23:59:59");
  46. dpST_Settl.Text = DateTime.Now.ToString("yyyy-MM-dd 00:00:00");
  47. dpED_Settl.Text = DateTime.Now.ToString("yyyy-MM-dd 23:59:59");
  48. dgvSettlRecord.AutoGenerateColumns = false;
  49. GridViewSetter grdSetter = new GridViewSetter();
  50. grdSetter.SetHeaderTextOfSettlList(dgvSettlRecord);
  51. grdSetter.SetHeaderTextOfCenterLog(dgvLog);
  52. grdSetter.SetHeaderTextOfSettlList(dgvBalanceData);
  53. rbgAdmType.SelectedIndex = 2;
  54. rbgBillType.SelectedIndex = 1;
  55. rbg_Zone.SelectedIndex = 0;
  56. }
  57. #region 结算异常
  58. private void btnQuerySettleRec_Click(object sender, EventArgs e)
  59. {
  60. if (tbName.Text == "")
  61. {
  62. MessageBox.Show("请输入患者姓名!");
  63. return;
  64. }
  65. string sqlStr = "SELECT * FROM BS_MedInsuSettlement WHERE Hospital_Dr=" + Global.inf.hospitalDr;
  66. sqlStr = sqlStr + " and OccurTime>'" + dpST_Settl.Text + "'";
  67. sqlStr = sqlStr + " and OccurTime<'" + dpED_Settl.Text + "'";
  68. sqlStr = sqlStr + " And ReversalFlag<>'1' ";
  69. if (tbName.Text != "")
  70. {
  71. sqlStr = sqlStr + " and PatientName='" + tbName.Text + "'";
  72. }
  73. if (tbPatSettlID.Text != "")
  74. {
  75. sqlStr = sqlStr + " and SettlementID='" + tbPatSettlID.Text + "'";
  76. }
  77. if (tbHisNO.Text != "")
  78. {
  79. sqlStr = sqlStr + " and Adm_Dr='" + tbHisNO.Text + "'";
  80. }
  81. if (rbgAdmType.SelectedIndex == 1)
  82. {
  83. sqlStr = sqlStr + " and admType=2";
  84. }
  85. if (rbgAdmType.SelectedIndex == 2)
  86. {
  87. sqlStr = sqlStr + " and admType=1";
  88. }
  89. if (rbgBillType.SelectedIndex == 1)
  90. {
  91. sqlStr = sqlStr + " and BillType=1";
  92. }
  93. if (rbgBillType.SelectedIndex == 2)
  94. {
  95. sqlStr = sqlStr + " and BillType=-1";
  96. }
  97. JObject joSqlstr = new JObject();
  98. joSqlstr.Add("sqlStr", sqlStr);
  99. JArray jaParam = new JArray();
  100. jaParam.Add(joSqlstr);
  101. JObject joSettlQuery = new JObject();
  102. joSettlQuery.Add("params", jaParam);
  103. joSettlQuery.Add("code", "09010059");
  104. InvokeHelper invoker = new InvokeHelper();
  105. JObject joRtn = invoker.invokeInsuService(joSettlQuery.ToString(), "查询结算信息");
  106. //MessageBox.Show(joRtn.ToString());
  107. //MessageBox.Show(joRtn["result"]["data"].ToString());
  108. if (joRtn["result"]["data"].ToString() == "[]")
  109. {
  110. MessageBox.Show("查询结果为空!");
  111. return;
  112. }
  113. DataTable dt = (DataTable)joRtn["result"]["data"].ToObject(typeof(DataTable));
  114. dgvSettlRecord.DataSource = dt;
  115. }
  116. private void btnReverseBySettl_Click(object sender, EventArgs e)
  117. {
  118. string outParam = "";
  119. string sData_XML, OutMsg, AppRtnMsg, psn_no, tradeno, feeno, SettlementID, CloseMsg;
  120. System.Type InComType = null;
  121. dynamic InComInstance = "";
  122. DataTable dt = (DataTable)dgvSettlRecord.DataSource;
  123. int a = dgvSettlRecord.CurrentRow.Index;
  124. psn_no = dt.Rows[a]["PersonnelNO"].ToString();
  125. feeno = dt.Rows[a]["RecordID"].ToString();
  126. tradeno = dt.Rows[a]["SettlementID"].ToString();
  127. Global.pat.settlID = dt.Rows[a]["SettlementID"].ToString();
  128. try
  129. {
  130. //创建首信医保Com实例
  131. if (rcl.CreateBusinessObj(out InComType, out InComInstance) != 0)
  132. {
  133. MessageBox.Show("实例创建CreateBusinessObj失败:" + outParam);
  134. return;
  135. }
  136. //读卡前先Open
  137. rcl.Open(InComType, InComInstance, out outParam);
  138. //1.打开读卡窗口,操作员选择读卡类型后进行读卡器读卡,再进行1101获取参保信息
  139. if (hBus.readCardCancelSettle(InComType, InComInstance, out outParam) != 0)
  140. {
  141. rcl.Close(InComType, InComInstance, out CloseMsg);
  142. MessageBox.Show("读卡readCard失败:" + outParam);
  143. return;
  144. }
  145. else
  146. {
  147. //展示患者信息界面
  148. if (hBus.showPatInfoNew(outParam, out outParam) != 0)
  149. {
  150. rcl.Close(InComType, InComInstance, out CloseMsg);
  151. MessageBox.Show("展示参保人员信息showPatInfoNew失败:" + outParam);
  152. return;
  153. }
  154. }
  155. //退费-本地
  156. if (Global.pat.iOtherProvLocal == 0)
  157. {
  158. //1.RefundmentDivideAll退费分解
  159. sData_XML = "<tradeinfo>"
  160. + "<tradeno>" + tradeno + "</tradeno>" // name="交易流水号"
  161. + "<operator>" + Global.user.ID + "</operator>" // name="收费员"
  162. + "<refundflag>0</refundflag>" // name="退费方式,0全部退费,1部分退费"
  163. + "<feeno>" + feeno + "</feeno>" // name="收费单据号"
  164. + "</tradeinfo>";
  165. sData_XML = JsonHelper.GetinPar(sData_XML, 2);
  166. rcl.BussniessObj("RefundmentDivideAll", sData_XML, InComType, InComInstance, out AppRtnMsg);
  167. //解析返回值
  168. XmlDocument xmlDoc = AnXML.GetXmlDoc(AppRtnMsg);
  169. Boolean bPass = AnXML.CheckState(xmlDoc, out OutMsg);
  170. XmlNode dataNode = AnXML.GetNodeFromPath(xmlDoc.DocumentElement, "output/fulltrade/tradeinfo");
  171. if (bPass == false)
  172. {
  173. outParam = "调用RefundmentDivideAll退费分解失败:" + OutMsg;
  174. MessageBox.Show(outParam);
  175. return;
  176. }
  177. else
  178. {
  179. if (OutMsg != "")
  180. outParam = "调用RefundmentDivideAll退费分解成功,但中心返回警告信息如下:" + OutMsg;
  181. tradeno = AnXML.FormatXMLElement(xmlDoc, dataNode, "tradeno", 0); //退费分解成功返回退费流水号
  182. //2.TradeALL退费确认
  183. rcl.TradeAll(InComType, InComInstance, out AppRtnMsg);
  184. //Global.writeLog("TradeALL退费确认出参:", sData_XML, AppRtnMsg);
  185. xmlDoc = AnXML.GetXmlDoc(AppRtnMsg);
  186. bPass = AnXML.CheckState(xmlDoc, out OutMsg);
  187. if (bPass == false)
  188. {
  189. outParam = "调用RefundmentDivideAll退费分解成功,调用TradeAll退费确认失败," + OutMsg;
  190. if (hBus.TradeBack(3, Global.pat.settlID, InComType, InComInstance, out OutMsg) != 0)
  191. outParam = outParam + "调用TradeRollBack交易挂起回退失败:请手动执行回退退费交易,本次退费失败!" + OutMsg;
  192. else
  193. outParam = outParam + "调用TradeRollBack交易挂起回退成功,本次退费失败!";
  194. MessageBox.Show(outParam);
  195. Global.writeLog("TradeNo:" + Global.pat.settlID + outParam + OutMsg);
  196. return;
  197. }
  198. else
  199. {
  200. if (OutMsg != "")
  201. {
  202. outParam = "调用RefundmentDivideAll退费分解成功,调用TradeALL退费确认成功,返回警告信息:" + OutMsg;
  203. MessageBox.Show(outParam);
  204. }
  205. //3.HISFinishedNotice门诊退费交易完成通知
  206. //sData_XML = "<tradeno>" + Global.pat.settlID + "</tradeno>";
  207. sData_XML = "<tradeno>" + tradeno + "</tradeno>";
  208. sData_XML = JsonHelper.GetinPar(sData_XML, 0);
  209. //Global.writeLog("HISFinishedNotice门诊退费交易完成通知入参:" + sData_XML);
  210. rcl.BussniessObj("HISFinishedNotice", sData_XML, InComType, InComInstance, out AppRtnMsg);
  211. //Global.writeLog("HISFinishedNotice门诊退费交易完成通知出参:", sData_XML, AppRtnMsg);
  212. xmlDoc = AnXML.GetXmlDoc(AppRtnMsg);
  213. bPass = AnXML.CheckState(xmlDoc, out OutMsg);
  214. dataNode = AnXML.GetNodeFromPath(xmlDoc.DocumentElement, "output");
  215. string receivestate = AnXML.FormatXMLElement(xmlDoc, dataNode, "receivestate", 0); //接收状态: 1:成功,0:失败
  216. if ((bPass == false) || (receivestate != "1"))
  217. {
  218. outParam = "调用RefundmentDivideAll退费分解成功,调用TradeALL退费确认成功,调用HISFinishedNotice退费交易完成通知失败!" + OutMsg;
  219. if (hBus.TradeBack(3, Global.pat.settlID, InComType, InComInstance, out OutMsg) != 0)
  220. outParam = outParam + "调用TradeRollBack交易挂起回退异常:交易回退失败,请手动执行回退退费交易,本次退费失败!" + OutMsg;
  221. else
  222. outParam = outParam + "调用TradeRollBack交易挂起回退成功,本次退费失败!";
  223. MessageBox.Show(outParam);
  224. Global.writeLog("TradeNo:" + Global.pat.settlID + outParam + OutMsg);
  225. return;
  226. }
  227. else
  228. {
  229. if (OutMsg != "")
  230. {
  231. outParam = "调用HISFinishedNotice门诊退费交易完成通知成功,返回警告信息如下:" + OutMsg;
  232. MessageBox.Show(outParam);
  233. }
  234. outParam = "退费成功!" + tradeno;
  235. MessageBox.Show(outParam);
  236. }
  237. }
  238. }
  239. }
  240. else
  241. {
  242. string histradeno = tradeno + "-1";
  243. //1.RefundmentTradeAllNation异地门诊退费结算
  244. sData_XML = "<HisTradeNo>" + histradeno + "</HisTradeNo>" //本次红冲交易流水号
  245. + "<OriginalHisTradeNo>" + feeno + "</OriginalHisTradeNo>" //被退交易流水号
  246. + "<Operator>" + Global.user.ID + "</Operator>" //退费操作员的姓名或者工号,可为空
  247. + "<feeno></feeno>"; //重收交易对应的收据号,由财政局、税务局和部队统一制定;有重收交易时必填;(2021年1月1日起,由票据代码与票据号码拼接后填写)
  248. sData_XML = JsonHelper.GetinPar(sData_XML, 2);
  249. rcl.BussniessObj("RefundmentTradeAllNation", sData_XML, InComType, InComInstance, out AppRtnMsg);
  250. //解析返回值
  251. XmlDocument xmlDoc = AnXML.GetXmlDoc(AppRtnMsg);
  252. Boolean bPass = AnXML.CheckState(xmlDoc, out OutMsg);
  253. XmlNode dataNode = AnXML.GetNodeFromPath(xmlDoc.DocumentElement, "output/tradeinfo");
  254. if (bPass == false)
  255. {
  256. outParam = "调用RefundmentTradeAllNation门诊退费结算失败,中心返回错误信息:" + OutMsg;
  257. sData_XML = "<histradeno>" + histradeno + "</histradeno>";
  258. sData_XML = JsonHelper.GetinPar(sData_XML, 0);
  259. rcl.BussniessObj("CommitTradeStateNation", sData_XML, InComType, InComInstance, out AppRtnMsg);
  260. //解析返回值
  261. xmlDoc = AnXML.GetXmlDoc(AppRtnMsg);
  262. bPass = AnXML.CheckState(xmlDoc, out OutMsg);
  263. if (bPass == false)
  264. outParam = outParam + "!调用挂起回退交易CommitTradeStateNation失败!中心返回错误信息:" + OutMsg + ",本次异地门诊退费失败!";
  265. else
  266. outParam = outParam + "!调用挂起回退交易CommitTradeStateNation成功!本次异地门诊退费失败!";
  267. MessageBox.Show(outParam);
  268. Global.writeLog("histradeno:" + histradeno + outParam + OutMsg);
  269. return;
  270. }
  271. else
  272. {
  273. tradeno = dataNode.SelectNodes("tradeno")[0].InnerText; //门诊退费结算成功返回退费流水号
  274. //2.TradeCheckNation异地门诊退费结算实时对账
  275. sData_XML = "<histradeno>" + histradeno + "</histradeno>";
  276. sData_XML = JsonHelper.GetinPar(sData_XML, 2);
  277. rcl.BussniessObj("TradeCheckNation", sData_XML, InComType, InComInstance, out AppRtnMsg);
  278. //解析返回值
  279. xmlDoc = AnXML.GetXmlDoc(AppRtnMsg);
  280. bPass = AnXML.CheckState(xmlDoc, out OutMsg);
  281. dataNode = AnXML.GetNodeFromPath(xmlDoc.DocumentElement, "output");
  282. //string checkflag = dataNode.SelectNodes("checkflag")[0].InnerText; //对账标志 1-对账成功;2-无效交易
  283. string checkflag = AnXML.FormatXMLElement(xmlDoc, dataNode, "checkflag", 0); //对账标志 1-对账成功;2-无效交易
  284. if ((bPass == false) || (checkflag != "1"))
  285. {
  286. outParam = " 调用RefundmentTradeAllNation异地门诊退费结算成功,调用TradeCheckNation异地门诊退费结算实时对账失败,中心返回失败原因:" + OutMsg;
  287. sData_XML = "<histradeno>" + histradeno + "</histradeno>";
  288. sData_XML = JsonHelper.GetinPar(sData_XML, 0);
  289. rcl.BussniessObj("CommitTradeStateNation", sData_XML, InComType, InComInstance, out AppRtnMsg);
  290. //解析返回值
  291. xmlDoc = AnXML.GetXmlDoc(AppRtnMsg);
  292. bPass = AnXML.CheckState(xmlDoc, out OutMsg);
  293. if (bPass == false)
  294. outParam = outParam + "调用CommitTradeStateNation门诊挂起回退失败!中心返回错误信息:" + OutMsg + ",本次异地门诊退费失败!";
  295. else
  296. outParam = outParam + "调用CommitTradeStateNation门诊挂起回退成功!本次异地门诊退费失败!";
  297. MessageBox.Show(outParam);
  298. Global.writeLog("histradeno:" + histradeno + outParam + OutMsg);
  299. return;
  300. }
  301. }
  302. }
  303. }
  304. catch (Exception ex)
  305. {
  306. outParam = "门诊退费异常:" + ex.Message;
  307. MessageBox.Show(outParam);
  308. return;
  309. }
  310. finally
  311. {
  312. rcl.Close(InComType, InComInstance, out CloseMsg);
  313. }
  314. }
  315. private void btCancleSettl_Click(object sender, EventArgs e)
  316. {
  317. }
  318. #endregion
  319. #region 日志异常
  320. private void btnQueryLog_Click(object sender, EventArgs e)
  321. {
  322. string errMsg;
  323. string sqlStr = "SELECT * FROM BS_MedInsuTransactionLog WHERE Hospital_Dr=" + Global.inf.hospitalDr;
  324. sqlStr = sqlStr + " and InfDate>='" + dpST_Log.Value.ToString("yyyy-MM-dd") + "'";
  325. sqlStr = sqlStr + " and InfDate<='" + dpED_Log.Value.ToString("yyyy-MM-dd") + "'";
  326. if (tbPsnNO.Text != "")
  327. {
  328. sqlStr = sqlStr + " and PSNNO='" + tbPsnNO.Text + "'";
  329. }
  330. if (tbTransNO.Text != "")
  331. {
  332. sqlStr = sqlStr + " and Infno='" + tbTransNO.Text + "'";
  333. }
  334. JObject joSqlstr = new JObject();
  335. joSqlstr.Add("sqlStr", sqlStr);
  336. JObject joRtn = mIS.QueryTransactionLog(joSqlstr);
  337. try
  338. {
  339. if (joRtn["result"]["data"].ToString() == "[]")
  340. {
  341. MessageBox.Show("查询结果为空!");
  342. return;
  343. }
  344. DataTable dt = (DataTable)joRtn["result"]["data"].ToObject(typeof(DataTable));
  345. dgvLog.DataSource = dt;
  346. }
  347. catch (Exception eX)
  348. {
  349. MessageBox.Show(eX.Message);
  350. }
  351. }
  352. private void btnReverseByLog_Click(object sender, EventArgs e)
  353. {
  354. InvokeHelper invoker = new InvokeHelper();
  355. DataTable dt = (DataTable)dgvLog.DataSource;
  356. JObject joInparam = new JObject();
  357. JObject joData = new JObject();
  358. int a = dgvLog.CurrentRow.Index;
  359. if (tbCBD_Log.Text != "")
  360. { Global.pat.insuplc_admdvs = tbCBD_Log.Text; }
  361. else
  362. Global.pat.insuplc_admdvs = dt.Rows[a]["insuplc_admdvs"].ToString();
  363. joData.Add("omsgid", dt.Rows[a]["msgid"].ToString());
  364. joData.Add("psn_no", dt.Rows[a]["psn_no"].ToString());
  365. joData.Add("oinfno", dt.Rows[a]["infno"].ToString());
  366. //joData.Add("oinfno", "2207");
  367. joInparam.Add("data", joData);
  368. JObject joRtn = invoker.invokeCenterService("2601", JsonHelper.setCenterInpar("2601", joInparam.ToString()));
  369. string errorMessage = "";
  370. if (JsonHelper.parseCenterRtnValue(joRtn, out errorMessage) != 0)
  371. {
  372. MessageBox.Show("冲正失败" + errorMessage);
  373. }
  374. else
  375. {
  376. MessageBox.Show("冲正成功");
  377. }
  378. }
  379. #endregion
  380. private void btPatInfo_ex_Click(object sender, EventArgs e)
  381. {
  382. rtbInparam.Text = "";
  383. if (rbg_Zone.SelectedIndex == 0)
  384. {
  385. gb_Local.Visible = true;
  386. gb_Other.Visible = false;
  387. string str = "<tradeinfo>"
  388. + " <tradeno>" + tb_TradeNo.Text + "</tradeno>"
  389. + " <operator>" + Global.user.ID + "</operator>"
  390. + " <refundflag>0</refundflag>"
  391. + " <feeno>" + tb_FeeNo.Text + "</feeno>"
  392. + "</tradeinfo>";
  393. rtbInparam.Text = JsonHelper.GetinPar(str, 2);
  394. }
  395. else
  396. {
  397. gb_Local.Visible = false;
  398. gb_Other.Visible = true;
  399. string str = " <HisTradeNo>"+ tb_HISTradeNo.Text +"</HisTradeNo>"
  400. + " <OriginalHisTradeNo>"+ tb_OrginalHisTradeNo.Text +"</OriginalHisTradeNo>"
  401. + " <Operator>"+ Global.user.ID +"</Operator>"
  402. + " <feeno></feeno>";
  403. rtbInparam.Text = JsonHelper.GetinPar(str, 2);
  404. }
  405. rtbInparam.Text = XmlHelper.FormatXml(rtbInparam.Text);
  406. }
  407. private void rbg_Zone_ValueChanged(object sender, int index, string text)
  408. {
  409. rtbInparam.Text = "";
  410. if (rbg_Zone.SelectedIndex == 0)
  411. {
  412. gb_Local.Visible = true;
  413. gb_Other.Visible = false;
  414. string str = "<tradeinfo>"
  415. + " <tradeno>" + tb_TradeNo.Text + "</tradeno>"
  416. + " <operator>" + Global.user.ID + "</operator>"
  417. + " <refundflag>0</refundflag>"
  418. + " <feeno>" + tb_FeeNo.Text + "</feeno>"
  419. + "</tradeinfo>";
  420. rtbInparam.Text = JsonHelper.GetinPar(str, 2);
  421. }
  422. else
  423. {
  424. gb_Local.Visible = false;
  425. gb_Other.Visible = true;
  426. string str = " <HisTradeNo>" + tb_HISTradeNo.Text + "</HisTradeNo>"
  427. + " <OriginalHisTradeNo>" + tb_OrginalHisTradeNo.Text + "</OriginalHisTradeNo>"
  428. + " <Operator>" + Global.user.ID + "</Operator>"
  429. + " <feeno></feeno>";
  430. rtbInparam.Text = JsonHelper.GetinPar(str, 2);
  431. }
  432. rtbInparam.Text = XmlHelper.FormatXml(rtbInparam.Text);
  433. }
  434. private void btnPatInfoShow_Click(object sender, EventArgs e)
  435. {
  436. string outParam = "";
  437. string sData_XML, OutMsg, AppRtnMsg, tradeno, CloseMsg;
  438. System.Type InComType = null;
  439. dynamic InComInstance = "";
  440. try
  441. {
  442. //创建首信医保Com实例
  443. if (rcl.CreateBusinessObj(out InComType, out InComInstance) != 0)
  444. {
  445. MessageBox.Show("实例创建CreateBusinessObj失败:" + outParam);
  446. return;
  447. }
  448. //读卡前先Open
  449. rcl.Open(InComType, InComInstance, out outParam);
  450. //1.打开读卡窗口,操作员选择读卡类型后进行读卡器读卡,再进行1101获取参保信息
  451. if (hBus.readCardCancelSettle(InComType, InComInstance, out outParam) != 0)
  452. {
  453. rcl.Close(InComType, InComInstance, out CloseMsg);
  454. rtbOutparam.Text = "读卡readCard失败:" + outParam;
  455. return;
  456. }
  457. else
  458. {
  459. //展示患者信息界面
  460. if (hBus.showPatInfoNew(outParam, out outParam) != 0)
  461. {
  462. rcl.Close(InComType, InComInstance, out CloseMsg);
  463. rtbOutparam.Text = "展示参保人员信息showPatInfoNew失败:" + outParam;
  464. return;
  465. }
  466. }
  467. //退费-本地
  468. if (Global.pat.iOtherProvLocal == 0)
  469. {
  470. if (tb_TradeNo.Text == "")
  471. {
  472. rtbOutparam.Text = "医保结算流水号TradeNo不能为空!";
  473. return;
  474. }
  475. if (tb_FeeNo.Text == "")
  476. {
  477. MessageBox.Show("收费单据号feeNo不能为空!");
  478. return;
  479. }
  480. //1.RefundmentDivideAll退费分解
  481. //sData_XML = "<tradeinfo>"
  482. // + "<tradeno>" + tb_TradeNo.Text + "</tradeno>" // name="交易流水号"
  483. // + "<operator>" + Global.user.ID + "</operator>" // name="收费员"
  484. // + "<refundflag>0</refundflag>" // name="退费方式,0全部退费,1部分退费"
  485. // + "<feeno>" + tb_FeeNo.Text + "</feeno>" // name="收费单据号"
  486. // + "</tradeinfo>";
  487. //rtbInparam.Text = sData_XML;
  488. //sData_XML = JsonHelper.GetinPar(sData_XML, 2);
  489. sData_XML = rtbInparam.Text;
  490. rcl.BussniessObj("RefundmentDivideAll", sData_XML, InComType, InComInstance, out AppRtnMsg);
  491. //解析返回值
  492. XmlDocument xmlDoc = AnXML.GetXmlDoc(AppRtnMsg);
  493. Boolean bPass = AnXML.CheckState(xmlDoc, out OutMsg);
  494. XmlNode dataNode = AnXML.GetNodeFromPath(xmlDoc.DocumentElement, "output/fulltrade/tradeinfo");
  495. if (bPass == false)
  496. {
  497. rtbOutparam.Text = "调用RefundmentDivideAll退费分解失败:" + OutMsg;
  498. return;
  499. }
  500. else
  501. {
  502. if (OutMsg != "")
  503. rtbOutparam.Text = "调用RefundmentDivideAll退费分解成功,但中心返回警告信息如下:" + OutMsg;
  504. tradeno = AnXML.FormatXMLElement(xmlDoc, dataNode, "tradeno", 0); //退费分解成功返回退费流水号
  505. //2.TradeALL退费确认
  506. rcl.TradeAll(InComType, InComInstance, out AppRtnMsg);
  507. //Global.writeLog("TradeALL退费确认出参:", sData_XML, AppRtnMsg);
  508. xmlDoc = AnXML.GetXmlDoc(AppRtnMsg);
  509. bPass = AnXML.CheckState(xmlDoc, out OutMsg);
  510. if (bPass == false)
  511. {
  512. outParam = "调用RefundmentDivideAll退费分解成功,调用TradeAll退费确认失败," + OutMsg;
  513. if (hBus.TradeBack(3, tb_TradeNo.Text, InComType, InComInstance, out OutMsg) != 0)
  514. rtbOutparam.Text = outParam + "调用TradeRollBack交易挂起回退失败:请手动执行回退退费交易,本次退费失败!" + OutMsg;
  515. else
  516. rtbOutparam.Text = outParam + "调用TradeRollBack交易挂起回退成功,本次退费失败!";
  517. Global.writeLog("TradeNo:" + tb_TradeNo.Text + outParam + OutMsg);
  518. return;
  519. }
  520. else
  521. {
  522. if (OutMsg != "")
  523. rtbOutparam.Text = "调用RefundmentDivideAll退费分解成功,调用TradeALL退费确认成功,返回警告信息:" + OutMsg;
  524. //3.HISFinishedNotice门诊退费交易完成通知
  525. //sData_XML = "<tradeno>" + Global.pat.settlID + "</tradeno>";
  526. sData_XML = "<tradeno>" + tradeno + "</tradeno>";
  527. sData_XML = JsonHelper.GetinPar(sData_XML, 0);
  528. //Global.writeLog("HISFinishedNotice门诊退费交易完成通知入参:" + sData_XML);
  529. rcl.BussniessObj("HISFinishedNotice", sData_XML, InComType, InComInstance, out AppRtnMsg);
  530. //Global.writeLog("HISFinishedNotice门诊退费交易完成通知出参:", sData_XML, AppRtnMsg);
  531. xmlDoc = AnXML.GetXmlDoc(AppRtnMsg);
  532. bPass = AnXML.CheckState(xmlDoc, out OutMsg);
  533. dataNode = AnXML.GetNodeFromPath(xmlDoc.DocumentElement, "output");
  534. string receivestate = AnXML.FormatXMLElement(xmlDoc, dataNode, "receivestate", 0); //接收状态: 1:成功,0:失败
  535. if ((bPass == false) || (receivestate != "1"))
  536. {
  537. outParam = "调用RefundmentDivideAll退费分解成功,调用TradeALL退费确认成功,调用HISFinishedNotice退费交易完成通知失败!" + OutMsg;
  538. if (hBus.TradeBack(3, tb_TradeNo.Text, InComType, InComInstance, out OutMsg) != 0)
  539. rtbOutparam.Text = outParam + "调用TradeRollBack交易挂起回退异常:交易回退失败,请手动执行回退退费交易,本次退费失败!" + OutMsg;
  540. else
  541. rtbOutparam.Text = outParam + "调用TradeRollBack交易挂起回退成功,本次退费失败!";
  542. Global.writeLog("TradeNo:" + tb_TradeNo.Text + outParam + OutMsg);
  543. return;
  544. }
  545. else
  546. {
  547. if (OutMsg != "")
  548. rtbOutparam.Text = "调用HISFinishedNotice门诊退费交易完成通知成功,返回警告信息如下:" + OutMsg;
  549. rtbOutparam.Text = "退费成功!" + tradeno;
  550. }
  551. }
  552. }
  553. }
  554. else
  555. {
  556. if (tb_HISTradeNo.Text == "")
  557. {
  558. MessageBox.Show("异地退费HISTradeNo不能为空!");
  559. return;
  560. }
  561. if (tb_OrginalHisTradeNo.Text == "")
  562. {
  563. MessageBox.Show("收费单据号feeNo不能为空!");
  564. return;
  565. }
  566. string histradeno = tb_HISTradeNo.Text;
  567. //1.RefundmentTradeAllNation异地门诊退费结算
  568. //sData_XML = "<HisTradeNo>" + histradeno + "</HisTradeNo>" //本次红冲交易流水号
  569. // + "<OriginalHisTradeNo>" + tb_OrginalHisTradeNo.Text + "</OriginalHisTradeNo>" //被退交易流水号
  570. // + "<Operator>" + Global.user.ID + "</Operator>" //退费操作员的姓名或者工号,可为空
  571. // + "<feeno></feeno>"; //重收交易对应的收据号,由财政局、税务局和部队统一制定;有重收交易时必填;(2021年1月1日起,由票据代码与票据号码拼接后填写)
  572. //rtbInparam.Text = sData_XML;
  573. //sData_XML = JsonHelper.GetinPar(sData_XML, 2);
  574. sData_XML = rtbInparam.Text;
  575. rcl.BussniessObj("RefundmentTradeAllNation", sData_XML, InComType, InComInstance, out AppRtnMsg);
  576. //解析返回值
  577. XmlDocument xmlDoc = AnXML.GetXmlDoc(AppRtnMsg);
  578. Boolean bPass = AnXML.CheckState(xmlDoc, out OutMsg);
  579. XmlNode dataNode = AnXML.GetNodeFromPath(xmlDoc.DocumentElement, "output/tradeinfo");
  580. if (bPass == false)
  581. {
  582. outParam = "调用RefundmentTradeAllNation门诊退费结算失败,中心返回错误信息:" + OutMsg;
  583. sData_XML = "<histradeno>" + histradeno + "</histradeno>";
  584. sData_XML = JsonHelper.GetinPar(sData_XML, 0);
  585. rcl.BussniessObj("CommitTradeStateNation", sData_XML, InComType, InComInstance, out AppRtnMsg);
  586. //解析返回值
  587. xmlDoc = AnXML.GetXmlDoc(AppRtnMsg);
  588. bPass = AnXML.CheckState(xmlDoc, out OutMsg);
  589. if (bPass == false)
  590. rtbOutparam.Text = outParam + "!调用挂起回退交易CommitTradeStateNation失败!中心返回错误信息:" + OutMsg + ",本次异地门诊退费失败!";
  591. else
  592. rtbOutparam.Text = outParam + "!调用挂起回退交易CommitTradeStateNation成功!本次异地门诊退费失败!";
  593. Global.writeLog("histradeno:" + histradeno + outParam + OutMsg);
  594. return;
  595. }
  596. else
  597. {
  598. tradeno = dataNode.SelectNodes("tradeno")[0].InnerText; //门诊退费结算成功返回退费流水号
  599. //2.TradeCheckNation异地门诊退费结算实时对账
  600. sData_XML = "<histradeno>" + histradeno + "</histradeno>";
  601. sData_XML = JsonHelper.GetinPar(sData_XML, 2);
  602. rcl.BussniessObj("TradeCheckNation", sData_XML, InComType, InComInstance, out AppRtnMsg);
  603. //解析返回值
  604. xmlDoc = AnXML.GetXmlDoc(AppRtnMsg);
  605. bPass = AnXML.CheckState(xmlDoc, out OutMsg);
  606. dataNode = AnXML.GetNodeFromPath(xmlDoc.DocumentElement, "output");
  607. //string checkflag = dataNode.SelectNodes("checkflag")[0].InnerText; //对账标志 1-对账成功;2-无效交易
  608. string checkflag = AnXML.FormatXMLElement(xmlDoc, dataNode, "checkflag", 0); //对账标志 1-对账成功;2-无效交易
  609. if ((bPass == false) || (checkflag != "1"))
  610. {
  611. outParam = " 调用RefundmentTradeAllNation异地门诊退费结算成功,调用TradeCheckNation异地门诊退费结算实时对账失败,中心返回失败原因:" + OutMsg;
  612. sData_XML = "<histradeno>" + histradeno + "</histradeno>";
  613. sData_XML = JsonHelper.GetinPar(sData_XML, 0);
  614. rcl.BussniessObj("CommitTradeStateNation", sData_XML, InComType, InComInstance, out AppRtnMsg);
  615. //解析返回值
  616. xmlDoc = AnXML.GetXmlDoc(AppRtnMsg);
  617. bPass = AnXML.CheckState(xmlDoc, out OutMsg);
  618. if (bPass == false)
  619. rtbOutparam.Text = outParam + "调用CommitTradeStateNation门诊挂起回退失败!中心返回错误信息:" + OutMsg + ",本次异地门诊退费失败!";
  620. else
  621. rtbOutparam.Text = outParam + "调用CommitTradeStateNation门诊挂起回退成功!本次异地门诊退费失败!";
  622. Global.writeLog("histradeno:" + histradeno + outParam + OutMsg);
  623. return;
  624. }
  625. }
  626. }
  627. }
  628. catch (Exception ex)
  629. {
  630. rtbOutparam.Text = "门诊退费异常:" + ex.Message;
  631. return;
  632. }
  633. finally
  634. {
  635. rcl.Close(InComType, InComInstance, out CloseMsg);
  636. }
  637. }
  638. private void btnExit_Click(object sender, EventArgs e)
  639. {
  640. Close();
  641. }
  642. private void Chk_DealNo_ValueChanged(object sender, bool value)
  643. {
  644. }
  645. private void btnExit_Click_1(object sender, EventArgs e)
  646. {
  647. this.Close();
  648. }
  649. private void uiButton1_Click(object sender, EventArgs e)
  650. {
  651. if (tb_Name.Text == "")
  652. {
  653. MessageBox.Show("请输入患者姓名!");
  654. return;
  655. }
  656. string sqlStr = "SELECT * FROM BS_MedInsuSettlement WHERE Hospital_Dr=" + Global.inf.hospitalDr;
  657. sqlStr = sqlStr + " and OccurTime>'" + dtBegin.Text + "'";
  658. sqlStr = sqlStr + " and OccurTime<'" + dtEnd.Text + "'";
  659. if (tb_Name.Text != "")
  660. {
  661. sqlStr = sqlStr + " and PatientName='" + tb_Name.Text + "'";
  662. }
  663. if (tb_PatSettlID.Text != "")
  664. {
  665. sqlStr = sqlStr + " and SettlementID='" + tb_PatSettlID.Text + "'";
  666. }
  667. if (tb_HisNO.Text != "")
  668. {
  669. sqlStr = sqlStr + " and Adm_Dr='" + tb_HisNO.Text + "'";
  670. }
  671. if (rbgAdmType_Handel.SelectedIndex == 1)
  672. {
  673. sqlStr = sqlStr + " and admType=1";
  674. }
  675. if (rbgAdmType_Handel.SelectedIndex == 2)
  676. {
  677. sqlStr = sqlStr + " and admType=2";
  678. }
  679. if (rbgBillType_Handel.SelectedIndex == 1)
  680. {
  681. sqlStr = sqlStr + " and BillType=1";
  682. }
  683. if (rbgBillType_Handel.SelectedIndex == 2)
  684. {
  685. sqlStr = sqlStr + " and BillType=-1";
  686. }
  687. JObject joSqlstr = new JObject();
  688. joSqlstr.Add("sqlStr", sqlStr);
  689. JArray jaParam = new JArray();
  690. jaParam.Add(joSqlstr);
  691. JObject joSettlQuery = new JObject();
  692. joSettlQuery.Add("params", jaParam);
  693. joSettlQuery.Add("code", "09010059");
  694. InvokeHelper invoker = new InvokeHelper();
  695. JObject joRtn = invoker.invokeInsuService(joSettlQuery.ToString(), "查询结算信息");
  696. //MessageBox.Show(joRtn.ToString());
  697. //MessageBox.Show(joRtn["result"]["data"].ToString());
  698. if (joRtn["result"]["data"].ToString() == "[]")
  699. {
  700. MessageBox.Show("查询结果为空!");
  701. return;
  702. }
  703. DataTable dt = (DataTable)joRtn["result"]["data"].ToObject(typeof(DataTable));
  704. dgvBalanceData.DataSource = dt;
  705. }
  706. private void btnDo_Click(object sender, EventArgs e)
  707. {
  708. string sData_XML = "", S_Temp = "", Appmsg = "", OutMsg_Open = "", OutMsg_Close, AppRtnMsg = "", OutMsg = "";
  709. string FunName = "", Explain = "";
  710. System.Type ComType = null;
  711. dynamic ComInstance = null;
  712. if ((rbgType.SelectedIndex == 3) && (rbgType.SelectedIndex == 4) && (rbgType.SelectedIndex == 5))
  713. {
  714. if (tbTradeNo.Text == "")
  715. {
  716. MessageBox.Show("调用<挂起回退CommitTradeStateNation交易>,请直接输入需要确认的HIS交易流水号!");
  717. return;
  718. }
  719. }
  720. else
  721. {
  722. }
  723. if ((rbgType.SelectedIndex == 0) || (rbgType.SelectedIndex == 1))
  724. {
  725. if (rbgType.SelectedIndex == 0)
  726. {
  727. sData_XML = " <tradetype>0</tradetype>"
  728. + " <tradeno>" + tbTradeNo.Text + "</tradeno>" //收费交易流水号
  729. + " <fulltradeno></fulltradeno> "
  730. + " <partialtradeno></partialtradeno> "; // name="重收交易流水号"
  731. }
  732. else
  733. {
  734. sData_XML = " <tradetype>2</tradetype>"
  735. + " <tradeno></tradeno>"
  736. + " <fulltradeno>" + tbTradeNo.Text + "</fulltradeno> " //退费交易流水号
  737. + " <partialtradeno></partialtradeno> "; // name="重收交易流水号"
  738. }
  739. sData_XML = JsonHelper.GetinPar(sData_XML, 0);
  740. FunName = "TradeRollBack";
  741. Explain = "交易挂起回退";
  742. }
  743. else if (rbgType.SelectedIndex == 2)
  744. {
  745. sData_XML = "<tradeno>" + tbTradeNo.Text + "</tradeno>";
  746. sData_XML = JsonHelper.GetinPar(sData_XML, 0);
  747. FunName = "HISFinishedNotice";
  748. Explain = "门诊交易完成通知";
  749. }
  750. else if (rbgType.SelectedIndex == 3)
  751. {
  752. sData_XML = "<HISTradeNO>" + tbTradeNo.Text + "</HISTradeNO>";
  753. sData_XML = JsonHelper.GetinPar(sData_XML, 0);
  754. FunName = "CommitTradeStateNation";
  755. Explain = "门诊挂起回退";
  756. }
  757. else if (rbgType.SelectedIndex == 4)
  758. {
  759. if ((tbTradeNo.Text == "") || (tbFeeNo.Text == ""))
  760. {
  761. MessageBox.Show("收费交易流水号tradeno或医保收费单据号feeno不能为空!");
  762. return;
  763. }
  764. MessageBox.Show("收费回退(异地)成功后,请接着调用退费实时对账交易才能完成异地退费!");
  765. sData_XML = " <HisTradeNo>" + tbTradeNo.Text + "</HisTradeNo> "
  766. + " <OriginalHisTradeNo></OriginalHisTradeNo> "
  767. + " <Operator></Operator> "
  768. + " <feeno></feeno> ";
  769. sData_XML = JsonHelper.GetinPar(sData_XML, 2);
  770. FunName = "RefundmentTradeAllNation";
  771. Explain = "收费回退(异地)";
  772. }
  773. else if (rbgType.SelectedIndex == 5)
  774. {
  775. sData_XML = "<histradeno>" + tbTradeNo.Text + "</histradeno>";
  776. sData_XML = JsonHelper.GetinPar(sData_XML, 2);
  777. FunName = "TradeCheckNation";
  778. Explain = "异地门诊收费实时对账";
  779. }
  780. //创建首信医保Com实例
  781. if (rcl.CreateBusinessObj(out ComType, out ComInstance) != 0)
  782. {
  783. MessageBox.Show("实例创建失败");
  784. return;
  785. }
  786. else
  787. {
  788. Appmsg = sData_XML;
  789. rcl.Open(ComType, ComInstance, out OutMsg_Open); //读卡前先Open
  790. rcl.ReadCardObj(FunName, Appmsg, ComType, ComInstance, out AppRtnMsg);
  791. rcl.Close(ComType, ComInstance, out OutMsg_Close);
  792. XmlDocument xmlDoc = new XmlDocument();
  793. xmlDoc = AnXML.GetXmlDoc(AppRtnMsg);
  794. if (AnXML.CheckState(xmlDoc, out OutMsg) == false)
  795. {
  796. MessageBox.Show("调用【" + FunName + "】" + Explain + "失败,中心返回错误信息:" + OutMsg + "\r\n"
  797. + "调用【Open】打开读卡设备输出:" + OutMsg_Open + "\r\n"
  798. + "调用【Close】关闭读卡设备输出:" + OutMsg_Close);
  799. return;
  800. }
  801. else
  802. {
  803. xmlDoc = null;
  804. MessageBox.Show("调用【" + FunName + "】" + Explain + "成功:中心返回" + AppRtnMsg);
  805. }
  806. }
  807. }
  808. }
  809. }