FeeUpload.cs 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418
  1. using Newtonsoft.Json.Linq;
  2. using PTMedicalInsurance.Business;
  3. using PTMedicalInsurance.Helper;
  4. using PTMedicalInsurance.Variables;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.ComponentModel;
  8. using System.Data;
  9. using System.Drawing;
  10. using System.Linq;
  11. using System.Text;
  12. using System.Threading;
  13. using System.Threading.Tasks;
  14. using System.Windows.Forms;
  15. namespace PTMedicalInsurance.Forms
  16. {
  17. public partial class FeeUpload : Form
  18. {
  19. private InvokeHelper invoker = new InvokeHelper();
  20. private MIIrisServices mIS = new MIIrisServices();
  21. private ManualResetEvent manualReset = new ManualResetEvent(true);
  22. private HisIrisServices hIS = new HisIrisServices();
  23. private string funNO;
  24. private int singleCount;
  25. private JArray jaFeeDetail;
  26. public string outParam;
  27. public struct userState
  28. {
  29. public int childProgress;
  30. public string description;
  31. public string error;
  32. public string detailHisCode;
  33. public string detailHisName;
  34. public string detailInsuCode;
  35. }
  36. private userState getUserState(int progress,string desc,string err, JToken jt)
  37. {
  38. userState us = new userState();
  39. us.childProgress = progress;
  40. us.description = desc;
  41. us.error = err;
  42. JObject jo = (JObject)jt;
  43. if (jt != null)
  44. {
  45. us.detailHisCode = jo["medins_list_codg"].ToString();
  46. //us.detailHisName = jo["medins_list_desc"].ToString();
  47. us.detailInsuCode = jo["med_list_codg"].ToString();
  48. }
  49. return us;
  50. }
  51. public FeeUpload(string funNO, int singleCount, JArray jaFeeDetail)
  52. {
  53. InitializeComponent();
  54. this.funNO = funNO;
  55. this.singleCount = singleCount;
  56. this.jaFeeDetail = jaFeeDetail;
  57. this.pbFee.Maximum = jaFeeDetail.Count;
  58. }
  59. public FeeUpload(string funNO, int singleCount)
  60. {
  61. InitializeComponent();
  62. this.funNO = funNO;
  63. this.singleCount = singleCount;
  64. }
  65. private void btExit_Click(object sender, EventArgs e)
  66. {
  67. this.DialogResult = DialogResult.Cancel;
  68. Close();
  69. }
  70. public void setPos(int pos)
  71. {
  72. pbFee.Value = pos;
  73. }
  74. public void writeError(string error)
  75. {
  76. rtbRecord.AppendText(error + System.Environment.NewLine);
  77. }
  78. private void ProgressBar_Load(object sender, EventArgs e)
  79. {
  80. bgWorker1.WorkerReportsProgress = true;
  81. bgWorker1.WorkerSupportsCancellation = true;
  82. bgWorker1.RunWorkerAsync();
  83. }
  84. private void bgWorker1_DoWork(object sender, DoWorkEventArgs e)
  85. {
  86. BackgroundWorker bgWorker = sender as BackgroundWorker;
  87. string errMsg;
  88. int errorCount = 0;
  89. userState us = new userState();
  90. try
  91. {
  92. us = getUserState(0, "获取HIS费用", "......", null);
  93. bgWorker.ReportProgress(0, us);
  94. //获取IS费用
  95. if (hIS.getHisFee(Global.pat, out errMsg) != 0)
  96. {
  97. us = getUserState(0, "获取HIS费用", "失败", null);
  98. bgWorker.ReportProgress(0, us);
  99. outParam = errMsg;
  100. return;
  101. }
  102. else
  103. {
  104. us = getUserState(0, "获取HIS费用", "成功", null);
  105. bgWorker.ReportProgress(0, us);
  106. }
  107. //调用医保平台转换HIS费用(转换医保编码等)
  108. JObject joHisFee = JObject.Parse(errMsg);
  109. us = getUserState(0, "转换HIS费用", "......", null);
  110. bgWorker.ReportProgress(0, us);
  111. if (mIS.convertHisFeeWithInsuCode(joHisFee, out errMsg) != 0)
  112. {
  113. us = getUserState(0, "转换HIS费用", "失败", null);
  114. bgWorker.ReportProgress(0, us);
  115. outParam = errMsg;
  116. return;
  117. }
  118. else
  119. {
  120. us = getUserState(0, "转换HIS费用", "成功", null);
  121. bgWorker.ReportProgress(0, us);
  122. }
  123. JArray jaFeeDetail = JArray.Parse(JsonHelper.getDestValue(JObject.Parse(errMsg), "data"));
  124. int feeCount = jaFeeDetail.Count();
  125. this.pbFee.Maximum = jaFeeDetail.Count;
  126. JArray jaTmp = new JArray();
  127. for (int i = 0; i < feeCount; i++)
  128. {
  129. manualReset.WaitOne();
  130. if (bgWorker.CancellationPending)
  131. {
  132. e.Cancel = true;
  133. break;
  134. }
  135. decimal cnt = decimal.Parse(jaFeeDetail[i]["cnt"].ToString());
  136. decimal pric = decimal.Parse(jaFeeDetail[i]["pric"].ToString());
  137. //decimal sumamt = decimal.Parse(jaFeeDetail[i]["det_item_fee_sumamt"].ToString());
  138. jaFeeDetail[i]["cnt"] = cnt.ToString("#0.0000");
  139. jaFeeDetail[i]["pric"] = pric.ToString("#0.000000");
  140. jaFeeDetail[i]["chrg_bchno"] = Global.pat.adm_Dr.ToString();
  141. jaFeeDetail[i]["med_type"] = Global.pat.medType;
  142. if (jaFeeDetail[i]["validFlag"].ToString() == "N")
  143. {
  144. bgWorker.ReportProgress(i, null);
  145. continue;
  146. }
  147. jaTmp.Add(jaFeeDetail[i]);
  148. if (((i + 1) % singleCount == 0) || ((i + 1) == jaFeeDetail.Count))
  149. {
  150. JObject joFeeDetail = new JObject();
  151. joFeeDetail.Add("feedetail", jaTmp);
  152. JObject joRtn = invoker.invokeCenterService(funNO, JsonHelper.setCenterInpar(funNO,joFeeDetail));
  153. if (JsonHelper.parseCenterRtnValue(joRtn, out errMsg) != 0)
  154. {
  155. outParam = outParam + errMsg + System.Environment.NewLine;
  156. us = getUserState(1, "解析中心返回值", "失败。原因:" + errMsg, jaFeeDetail[i]);
  157. bgWorker.ReportProgress(i, us);
  158. errorCount++;
  159. }
  160. else
  161. {
  162. us = getUserState(1, "解析中心返回值", "成功", jaFeeDetail[i]);
  163. bgWorker.ReportProgress(i, us);
  164. //广州需要检查每条MEMO是否为空
  165. JArray jaRtnDetail = new JArray();
  166. jaRtnDetail = JArray.Parse(JsonHelper.getDestValue(joRtn, "output.result"));
  167. //foreach (JToken jt in jaRtnDetail)
  168. //{
  169. // if (jt["memo"].ToString() != "")
  170. // {
  171. // outParam = outParam + errMsg + System.Environment.NewLine;
  172. // us = getUserState(2, "中心返回明细报错", jt["memo"].ToString(), jt);
  173. // errorCount++;
  174. // }
  175. //}
  176. //for (int j = 0; j < jaRtnDetail.Count; j++)
  177. //{
  178. // if (jaRtnDetail[j]["memo"] != null)
  179. // {
  180. // var memo = jaRtnDetail[j]["memo"];
  181. // if (memo.ToString() != "")
  182. // {
  183. // outParam = outParam + memo + System.Environment.NewLine;
  184. // us = getUserState(2, "中心返回明细报错", memo.ToString(), null);
  185. // bgWorker.ReportProgress(i, us);
  186. // errorCount++;
  187. // }
  188. // }
  189. //}
  190. //成功后插入医保平台
  191. if (mIS.insertFee(jaTmp, out errMsg) != 0)
  192. {
  193. outParam = outParam + errMsg + System.Environment.NewLine;
  194. us = getUserState(2, "插入医保平台", "失败。原因:" + errMsg, jaFeeDetail[i]);
  195. errorCount++;
  196. }
  197. else
  198. us = getUserState(2, "插入医保平台", "成功", jaFeeDetail[i]);
  199. bgWorker.ReportProgress(i, us);
  200. //更新2301返回的数据
  201. if (mIS.updateFee(JArray.Parse(JsonHelper.getDestValue(joRtn, "output.result")), out errMsg) != 0)
  202. {
  203. outParam = outParam + errMsg + System.Environment.NewLine;
  204. us = getUserState(3, "根据中心返回数据更新费用明细", "失败。原因:" + errMsg, jaFeeDetail[i]);
  205. errorCount++;
  206. }
  207. else
  208. us = getUserState(3, "根据中心返回数据更新费用明细", "成功", jaFeeDetail[i]);
  209. bgWorker.ReportProgress(i, us);
  210. }
  211. jaTmp = new JArray();
  212. }
  213. bgWorker.ReportProgress(i + 1, null);
  214. }
  215. if ((errorCount == 0) && (e.Cancel == false))
  216. {
  217. Thread.Sleep(1000);
  218. this.DialogResult = DialogResult.OK;
  219. }
  220. else
  221. {
  222. Global.writeLog("outParam:" +outParam);
  223. }
  224. }
  225. catch (Exception ex)
  226. {
  227. outParam = "费用上传异常:" + ex.Message;
  228. }
  229. }
  230. //private void bgWorker1_DoWork(object sender, DoWorkEventArgs e)
  231. //{
  232. // //BackgroundWorker bgWorker = sender as BackgroundWorker;
  233. // MessageBox.Show("a1");
  234. // string errMsg;
  235. // int feeCount = jaFeeDetail.Count;
  236. // int errorCount = 0;
  237. // try
  238. // {
  239. // JArray jaTmp = new JArray();
  240. // userState us = new userState();
  241. // for (int i = 0; i < feeCount; i++)
  242. // {
  243. // manualReset.WaitOne();
  244. // if (bgWorker1.CancellationPending)
  245. // {
  246. // e.Cancel = true;
  247. // errorCount++;
  248. // break;
  249. // }
  250. // jaFeeDetail[i]["chrg_bchno"] = Global.pat.adm_Dr.ToString();
  251. // jaFeeDetail[i]["med_type"] = Global.pat.medType;
  252. // if (jaFeeDetail[i]["validFlag"].ToString() == "N")
  253. // {
  254. // bgWorker1.ReportProgress(i, null);
  255. // continue;
  256. // }
  257. // jaTmp.Add(jaFeeDetail[i]);
  258. // if (((i + 1) % singleCount == 0) || ((i + 1) == jaFeeDetail.Count))
  259. // {
  260. // JObject joFeeDetail = new JObject();
  261. // joFeeDetail.Add("feedetail", jaTmp);
  262. // JObject joRtn = invoker.invokeCenterService(funNO, JsonHelper.setCenterInpar(funNO, joFeeDetail.ToString()));
  263. // if (JsonHelper.parseCenterRtnValue(joRtn, out errMsg) != 0)
  264. // {
  265. // outParam = outParam + errMsg + System.Environment.NewLine;
  266. // us = getUserState(1, "解析中心返回值", "失败。原因:" + errMsg, jaFeeDetail[i]);
  267. // errorCount++;
  268. // }
  269. // else
  270. // {
  271. // us = getUserState(1, "解析中心返回值", "成功", jaFeeDetail[i]);
  272. // bgWorker1.ReportProgress(i, us);
  273. // //成功后插入医保平台
  274. // if (mIS.insertFee(jaTmp, out errMsg) != 0)
  275. // {
  276. // outParam = outParam + errMsg + System.Environment.NewLine;
  277. // us = getUserState(2, "插入医保平台", "失败。原因:" + errMsg, jaFeeDetail[i]);
  278. // errorCount++;
  279. // }
  280. // else
  281. // us = getUserState(2, "插入医保平台", "成功", jaFeeDetail[i]);
  282. // bgWorker1.ReportProgress(i, us);
  283. // //更新2301返回的数据
  284. // if (mIS.updateFee(JArray.Parse(JsonHelper.getDestValue(joRtn, "output.result")), out errMsg) != 0)
  285. // {
  286. // outParam = outParam + errMsg + System.Environment.NewLine;
  287. // us = getUserState(3, "根据中心返回数据更新费用明细", "失败。原因:" + errMsg, jaFeeDetail[i]);
  288. // errorCount++;
  289. // }
  290. // else
  291. // us = getUserState(3, "根据中心返回数据更新费用明细", "成功", jaFeeDetail[i]);
  292. // bgWorker1.ReportProgress(i, us);
  293. // }
  294. // jaTmp = new JArray();
  295. // }
  296. // bgWorker1.ReportProgress(i + 1, null);
  297. // }
  298. // if (errorCount == 0)
  299. // {
  300. // Thread.Sleep(1000);
  301. // this.DialogResult = DialogResult.OK;
  302. // }
  303. // else
  304. // {
  305. // }
  306. // }
  307. // catch (Exception ex)
  308. // {
  309. // MessageBox.Show(ex.Message);
  310. // }
  311. //}
  312. private void bgWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
  313. {
  314. if (e.ProgressPercentage < 0)
  315. {
  316. setPos(0);
  317. }
  318. else
  319. {
  320. setPos(e.ProgressPercentage);
  321. }
  322. if (e.UserState != null)
  323. {
  324. userState us = (userState)e.UserState;
  325. string upDetailRecord = "";
  326. upDetailRecord = "【His名称:" + us.detailHisName + ";";
  327. upDetailRecord = upDetailRecord + "His编码:" + us.detailInsuCode + "; ";
  328. upDetailRecord = upDetailRecord + "医保编码:" + us.detailInsuCode + ";";
  329. upDetailRecord = upDetailRecord + "当前节点:" + us.description + "】";
  330. upDetailRecord = upDetailRecord + us.error + System.Environment.NewLine;
  331. this.rtbRecord.AppendText(upDetailRecord);
  332. pbDetail.Value = us.childProgress;
  333. }
  334. }
  335. private void rtbRecord_TextChanged(object sender, EventArgs e)
  336. {
  337. rtbRecord.SelectionStart = rtbRecord.Text.Length;
  338. rtbRecord.ScrollToCaret();
  339. }
  340. private void btUpload_Click(object sender, EventArgs e)
  341. {
  342. if (!bgWorker1.IsBusy)
  343. {
  344. rtbRecord.Clear();
  345. bgWorker1.RunWorkerAsync();
  346. }
  347. else
  348. {
  349. MessageBox.Show("请点击停止按钮!");
  350. }
  351. }
  352. private void btPause_Click(object sender, EventArgs e)
  353. {
  354. if (btPause.Text == "暂停")
  355. {
  356. manualReset.Reset();//暂停当前线程的工作,发信号给waitOne方法,阻塞
  357. btPause.Text = "继续";
  358. }
  359. else
  360. {
  361. manualReset.Set();//继续某个线程的工作
  362. btPause.Text = "暂停";
  363. }
  364. }
  365. private void btStop_Click(object sender, EventArgs e)
  366. {
  367. if (bgWorker1.IsBusy) bgWorker1.CancelAsync();
  368. }
  369. private void bgWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
  370. {
  371. if (e.Cancelled)
  372. { }
  373. if (e.Error != null)
  374. {
  375. outParam = e.Error.ToString();
  376. }
  377. //e.Result
  378. }
  379. }
  380. }