FeeUpload.cs 13 KB

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