ProgressBar.cs 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340
  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 NanChangMI.Forms
  16. {
  17. public partial class ProgressBar : Form
  18. {
  19. private InvokeHelper invoker = new InvokeHelper();
  20. private MIIrisServices mIS = new MIIrisServices();
  21. private ManualResetEvent manualReset = new ManualResetEvent(true);
  22. private string funNO;
  23. private int singleCount;
  24. private JArray jaFeeDetail;
  25. public string outParam;
  26. public struct userState
  27. {
  28. public int childProgress;
  29. public string description;
  30. public string error;
  31. public string detailHisCode;
  32. public string detailHisName;
  33. public string detailInsuCode;
  34. }
  35. private userState getUserState(int progress,string desc,string err, JToken jt)
  36. {
  37. userState us = new userState();
  38. us.childProgress = progress;
  39. us.description = desc;
  40. us.error = err;
  41. JObject jo = (JObject)jt;
  42. us.detailHisCode = jo["medins_list_codg"].ToString();
  43. //us.detailHisName = jo["medins_list_desc"].ToString();
  44. us.detailInsuCode = jo["med_list_codg"].ToString();
  45. return us;
  46. }
  47. public ProgressBar(string funNO, int singleCount, JArray jaFeeDetail)
  48. {
  49. InitializeComponent();
  50. this.funNO = funNO;
  51. this.singleCount = singleCount;
  52. this.jaFeeDetail = jaFeeDetail;
  53. this.pbFee.Maximum = jaFeeDetail.Count;
  54. }
  55. private void btExit_Click(object sender, EventArgs e)
  56. {
  57. this.DialogResult = DialogResult.Cancel;
  58. Close();
  59. }
  60. public void setPos(int pos)
  61. {
  62. pbFee.Value = pos;
  63. }
  64. public void writeError(string error)
  65. {
  66. rtbRecord.AppendText(error + System.Environment.NewLine);
  67. }
  68. private void ProgressBar_Load(object sender, EventArgs e)
  69. {
  70. bgWorker1.WorkerReportsProgress = true;
  71. bgWorker1.WorkerSupportsCancellation = true;
  72. bgWorker1.RunWorkerAsync();
  73. }
  74. private void bgWorker1_DoWork(object sender, DoWorkEventArgs e)
  75. {
  76. BackgroundWorker bgWorker = sender as BackgroundWorker;
  77. string errMsg;
  78. int feeCount = jaFeeDetail.Count;
  79. int errorCount = 0;
  80. try
  81. {
  82. JArray jaTmp = new JArray();
  83. userState us = new userState();
  84. Thread.Sleep(1000);
  85. for (int i = 0; i < feeCount; i++)
  86. {
  87. manualReset.WaitOne();
  88. if (bgWorker.CancellationPending)
  89. {
  90. e.Cancel = true;
  91. break;
  92. }
  93. jaFeeDetail[i]["chrg_bchno"] = Global.pat.adm_Dr.ToString();
  94. jaFeeDetail[i]["med_type"] = Global.pat.medType;
  95. if (jaFeeDetail[i]["validFlag"].ToString() == "N")
  96. {
  97. bgWorker.ReportProgress(i, null);
  98. continue;
  99. }
  100. jaTmp.Add(jaFeeDetail[i]);
  101. if (((i + 1) % singleCount == 0) || ((i + 1) == jaFeeDetail.Count))
  102. {
  103. JObject joFeeDetail = new JObject();
  104. joFeeDetail.Add("feedetail", jaTmp);
  105. JObject joRtn = invoker.invokeCenterService(funNO, JsonHelper.setCenterInpar(funNO, joFeeDetail.ToString()));
  106. if (JsonHelper.parseCenterRtnValue(joRtn, out errMsg) != 0)
  107. {
  108. outParam = outParam + errMsg + System.Environment.NewLine;
  109. us = getUserState(1, "解析中心返回值", "失败。原因:" + errMsg, jaFeeDetail[i]);
  110. bgWorker.ReportProgress(i, us);
  111. errorCount++;
  112. }
  113. else
  114. {
  115. us = getUserState(1, "解析中心返回值", "成功", jaFeeDetail[i]);
  116. bgWorker.ReportProgress(i, us);
  117. //成功后插入医保平台
  118. if (mIS.insertFee(jaTmp, out errMsg) != 0)
  119. {
  120. outParam = outParam + errMsg + System.Environment.NewLine;
  121. us = getUserState(2, "插入医保平台", "失败。原因:" + errMsg, jaFeeDetail[i]);
  122. errorCount++;
  123. }
  124. else
  125. us = getUserState(2, "插入医保平台", "成功", jaFeeDetail[i]);
  126. bgWorker.ReportProgress(i, us);
  127. //更新2301返回的数据
  128. if (mIS.updateFee(JArray.Parse(JsonHelper.getDestValue(joRtn, "output.result")), out errMsg) != 0)
  129. {
  130. outParam = outParam + errMsg + System.Environment.NewLine;
  131. us = getUserState(3, "根据中心返回数据更新费用明细", "失败。原因:" + errMsg, jaFeeDetail[i]);
  132. errorCount++;
  133. }
  134. else
  135. us = getUserState(3, "根据中心返回数据更新费用明细", "成功", jaFeeDetail[i]);
  136. bgWorker.ReportProgress(i, us);
  137. }
  138. jaTmp = new JArray();
  139. }
  140. bgWorker.ReportProgress(i + 1, null);
  141. }
  142. if ((errorCount == 0) && (e.Cancel == false))
  143. {
  144. Thread.Sleep(1000);
  145. this.DialogResult = DialogResult.OK;
  146. }
  147. else
  148. {
  149. }
  150. }
  151. catch (Exception ex)
  152. {
  153. MessageBox.Show(ex.Message);
  154. }
  155. }
  156. //private void bgWorker1_DoWork(object sender, DoWorkEventArgs e)
  157. //{
  158. // //BackgroundWorker bgWorker = sender as BackgroundWorker;
  159. // MessageBox.Show("a1");
  160. // string errMsg;
  161. // int feeCount = jaFeeDetail.Count;
  162. // int errorCount = 0;
  163. // try
  164. // {
  165. // JArray jaTmp = new JArray();
  166. // userState us = new userState();
  167. // for (int i = 0; i < feeCount; i++)
  168. // {
  169. // manualReset.WaitOne();
  170. // if (bgWorker1.CancellationPending)
  171. // {
  172. // e.Cancel = true;
  173. // errorCount++;
  174. // break;
  175. // }
  176. // jaFeeDetail[i]["chrg_bchno"] = Global.pat.adm_Dr.ToString();
  177. // jaFeeDetail[i]["med_type"] = Global.pat.medType;
  178. // if (jaFeeDetail[i]["validFlag"].ToString() == "N")
  179. // {
  180. // bgWorker1.ReportProgress(i, null);
  181. // continue;
  182. // }
  183. // jaTmp.Add(jaFeeDetail[i]);
  184. // if (((i + 1) % singleCount == 0) || ((i + 1) == jaFeeDetail.Count))
  185. // {
  186. // JObject joFeeDetail = new JObject();
  187. // joFeeDetail.Add("feedetail", jaTmp);
  188. // JObject joRtn = invoker.invokeCenterService(funNO, JsonHelper.setCenterInpar(funNO, joFeeDetail.ToString()));
  189. // if (JsonHelper.parseCenterRtnValue(joRtn, out errMsg) != 0)
  190. // {
  191. // outParam = outParam + errMsg + System.Environment.NewLine;
  192. // us = getUserState(1, "解析中心返回值", "失败。原因:" + errMsg, jaFeeDetail[i]);
  193. // errorCount++;
  194. // }
  195. // else
  196. // {
  197. // us = getUserState(1, "解析中心返回值", "成功", jaFeeDetail[i]);
  198. // bgWorker1.ReportProgress(i, us);
  199. // //成功后插入医保平台
  200. // if (mIS.insertFee(jaTmp, out errMsg) != 0)
  201. // {
  202. // outParam = outParam + errMsg + System.Environment.NewLine;
  203. // us = getUserState(2, "插入医保平台", "失败。原因:" + errMsg, jaFeeDetail[i]);
  204. // errorCount++;
  205. // }
  206. // else
  207. // us = getUserState(2, "插入医保平台", "成功", jaFeeDetail[i]);
  208. // bgWorker1.ReportProgress(i, us);
  209. // //更新2301返回的数据
  210. // if (mIS.updateFee(JArray.Parse(JsonHelper.getDestValue(joRtn, "output.result")), out errMsg) != 0)
  211. // {
  212. // outParam = outParam + errMsg + System.Environment.NewLine;
  213. // us = getUserState(3, "根据中心返回数据更新费用明细", "失败。原因:" + errMsg, jaFeeDetail[i]);
  214. // errorCount++;
  215. // }
  216. // else
  217. // us = getUserState(3, "根据中心返回数据更新费用明细", "成功", jaFeeDetail[i]);
  218. // bgWorker1.ReportProgress(i, us);
  219. // }
  220. // jaTmp = new JArray();
  221. // }
  222. // bgWorker1.ReportProgress(i + 1, null);
  223. // }
  224. // if (errorCount == 0)
  225. // {
  226. // Thread.Sleep(1000);
  227. // this.DialogResult = DialogResult.OK;
  228. // }
  229. // else
  230. // {
  231. // }
  232. // }
  233. // catch (Exception ex)
  234. // {
  235. // MessageBox.Show(ex.Message);
  236. // }
  237. //}
  238. private void bgWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
  239. {
  240. if (e.ProgressPercentage < 0)
  241. {
  242. setPos(0);
  243. }
  244. else
  245. {
  246. setPos(e.ProgressPercentage);
  247. }
  248. if (e.UserState != null)
  249. {
  250. userState us = (userState)e.UserState;
  251. string upDetailRecord = "";
  252. upDetailRecord = "【His名称:" + us.detailHisName + ";";
  253. upDetailRecord = upDetailRecord + "His编码:" + us.detailInsuCode + "; ";
  254. upDetailRecord = upDetailRecord + "医保编码:" + us.detailInsuCode + ";";
  255. upDetailRecord = upDetailRecord + "当前节点:" + us.description + "】";
  256. upDetailRecord = upDetailRecord + us.error + System.Environment.NewLine;
  257. this.rtbRecord.AppendText(upDetailRecord);
  258. pbDetail.Value = us.childProgress;
  259. }
  260. }
  261. private void rtbRecord_TextChanged(object sender, EventArgs e)
  262. {
  263. rtbRecord.SelectionStart = rtbRecord.Text.Length;
  264. rtbRecord.ScrollToCaret();
  265. }
  266. private void btUpload_Click(object sender, EventArgs e)
  267. {
  268. if (!bgWorker1.IsBusy)
  269. {
  270. rtbRecord.Clear();
  271. bgWorker1.RunWorkerAsync();
  272. }
  273. else
  274. {
  275. MessageBox.Show("请点击停止按钮!");
  276. }
  277. }
  278. private void btPause_Click(object sender, EventArgs e)
  279. {
  280. if (btPause.Text == "暂停")
  281. {
  282. manualReset.Reset();//暂停当前线程的工作,发信号给waitOne方法,阻塞
  283. btPause.Text = "继续";
  284. }
  285. else
  286. {
  287. manualReset.Set();//继续某个线程的工作
  288. btPause.Text = "暂停";
  289. }
  290. }
  291. private void btStop_Click(object sender, EventArgs e)
  292. {
  293. if (bgWorker1.IsBusy) bgWorker1.CancelAsync();
  294. }
  295. private void bgWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
  296. {
  297. if (e.Cancelled)
  298. { }
  299. if (e.Error != null)
  300. {
  301. outParam = e.Error.ToString();
  302. }
  303. //e.Result
  304. }
  305. }
  306. }