DirectoryDownloadLocalExtService.cs 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442
  1. using Newtonsoft.Json.Linq;
  2. using PTMedicalInsurance.Business;
  3. using PTMedicalInsurance.Helper;
  4. using PTMedicalInsurance.Variables;
  5. using Sunny.UI;
  6. using System;
  7. using System.Collections.Generic;
  8. using System.Linq;
  9. using System.Runtime.ConstrainedExecution;
  10. using System.Text;
  11. using System.Threading.Tasks;
  12. using System.Windows.Forms;
  13. namespace PTMedicalInsurance.Forms.BasicDatas.services
  14. {
  15. public class DirectoryDownloadLocalExtService
  16. {
  17. CenterBusiness cBus = new CenterBusiness();
  18. HisMainBusiness hBus = new HisMainBusiness();
  19. HisIrisServices hIS = new HisIrisServices();
  20. MIIrisServices mIS = new MIIrisServices();
  21. InvokeHelper invoker = new InvokeHelper();
  22. private ProgressWrapper _dataLoader;
  23. public delegate JObject GetImportInput(JObject joInput);
  24. public delegate JObject ApplyToIris(string code, JArray jaParam);
  25. private Dictionary<DownloadType, string> downlaodTypeMap = new Dictionary<DownloadType, string>
  26. {
  27. { DownloadType.None,""},
  28. { DownloadType.Directory,"7043"},
  29. { DownloadType.LimitPrice,"7044"},
  30. { DownloadType.SelfRatio,"7045"}
  31. };
  32. #region 目录下载
  33. /// <summary>
  34. /// 单次下载具体实现
  35. /// </summary>
  36. /// <param name="context"></param>
  37. /// <param name="err"></param>
  38. /// <returns></returns>
  39. public int SignleDownload(DataLoaderContext context, out string err)
  40. {
  41. err = "下载完成";
  42. object[] args = context.args;
  43. DataDownloadContext dataDownloadContext = (DataDownloadContext)args[0];
  44. //设置最大值
  45. if (context.setProgressMaximum != null)
  46. {
  47. context.setProgressMaximum(dataDownloadContext.pageSize);
  48. }
  49. JObject joData = new JObject();
  50. joData.Add("id", dataDownloadContext.ver);
  51. joData.Add("fixmedinsCode",Global.inf.hospitalNO);
  52. string trade = downlaodTypeMap.GetValue(dataDownloadContext.downloadType);
  53. JObject joRtn = invoker.invokeCenterService(trade, new JObject { ["data"] = joData });
  54. if (JsonHelper.parseCenterRtnValue(joRtn, out err) != 0)
  55. {
  56. return -1;
  57. }
  58. dataDownloadContext.totalCount = int.Parse(joRtn["output"]["data"]["recordCounts"].ToString());
  59. dataDownloadContext.pageNum = int.Parse(joRtn["output"]["data"]["pageNum"].ToString());
  60. dataDownloadContext.totalPages = int.Parse(joRtn["output"]["data"]["pages"].ToString());
  61. string header = $"本次下载总条数【{dataDownloadContext.totalCount}】,总页数【{dataDownloadContext.totalPages}】,当前下载页数【{dataDownloadContext.pageNum}】";
  62. if (context.setProgressHeaderText != null)
  63. {
  64. context.setProgressHeaderText(dataDownloadContext.progressBarStyle, header, dataDownloadContext.speed);
  65. }
  66. //数组传递,导入IRIS
  67. JArray ja = JArray.FromObject(joRtn["output"]["data"]["data"]);
  68. return ImportToIris(context, ja, out err);
  69. }
  70. /// <summary>
  71. /// 单次下载封装
  72. /// </summary>
  73. /// <param name="ver"></param>
  74. /// <param name="frm"></param>
  75. public void SignleDownload(string ver, DownloadType downloadType,Form frm)
  76. {
  77. _dataLoader = new ProgressWrapper(SignleDownload, frm);
  78. _dataLoader.SetProgressBar(ProgressBarStyle.Continuous, "正在更新...", 50);
  79. DataDownloadContext dataDownloadContext = new DataDownloadContext();
  80. dataDownloadContext.ver = ver;
  81. dataDownloadContext.downloadType = downloadType;
  82. _dataLoader.Start(new object[] { dataDownloadContext }, (result, errMsg) =>
  83. {
  84. // 在这里处理结果和错误信息
  85. if (result == 0)
  86. {
  87. MessageBox.Show(errMsg);
  88. }
  89. else
  90. {
  91. MessageBox.Show(errMsg);
  92. }
  93. });
  94. }
  95. /// <summary>
  96. /// 循环下载
  97. /// </summary>
  98. /// <param name="startVer"></param>
  99. /// <param name="err"></param>
  100. /// <returns></returns>
  101. public int LoopDownload(DataLoaderContext context, out string err)
  102. {
  103. err = "";
  104. bool bStop = true;
  105. object[] args = context.args;
  106. DataDownloadContext dataDownloadContext = (DataDownloadContext)args[0];
  107. while (bStop)
  108. {
  109. if (SignleDownload(context, out err) != 0)
  110. {
  111. Global.writeLog("err:" + err);
  112. bStop = false;
  113. return -1;
  114. }
  115. }
  116. return 0;
  117. }
  118. public void LoopDownload(string ver,DownloadType downloadType, Form frm)
  119. {
  120. _dataLoader = new ProgressWrapper(LoopDownload, frm);
  121. _dataLoader.SetProgressBar(ProgressBarStyle.Continuous, "正在下载...", 50);
  122. DataDownloadContext dataDownloadContext = new DataDownloadContext();
  123. dataDownloadContext.ver = ver;
  124. dataDownloadContext.downloadType = downloadType;
  125. dataDownloadContext.progressBarStyle = ProgressBarStyle.Continuous;
  126. dataDownloadContext.header = "正在下载";
  127. dataDownloadContext.speed = 50;
  128. _dataLoader.Start(new object[] { dataDownloadContext }, (result, errMsg) =>
  129. {
  130. // 在这里处理结果和错误信息
  131. if (result == 0)
  132. {
  133. MessageBox.Show(errMsg);
  134. }
  135. else
  136. {
  137. MessageBox.Show(errMsg);
  138. }
  139. });
  140. }
  141. #endregion
  142. #region 导入iris数据库
  143. /// <summary>
  144. /// 导入IRIS
  145. /// </summary>
  146. /// <param name="context"></param>
  147. /// <param name="ja"></param>
  148. /// <param name="err"></param>
  149. /// <returns></returns>
  150. private int ImportToIris(DataLoaderContext context, JArray ja, out string err)
  151. {
  152. JArray jaIrisInput = new JArray();
  153. int num = 0;
  154. int errorCount = 0;
  155. DataDownloadContext dataDownloadContext = (DataDownloadContext)context.args[0];
  156. GetImportInput getImportInput = null;
  157. ApplyToIris applyToIris = null;
  158. string code = "";
  159. if (dataDownloadContext.downloadType == DownloadType.Directory)
  160. {
  161. getImportInput = GetImportInputFrom7043;
  162. applyToIris = applyDataToIris;
  163. code = "09010035";
  164. }
  165. if (dataDownloadContext.downloadType == DownloadType.LimitPrice)
  166. {
  167. getImportInput = GetImportInputFrom7044;
  168. applyToIris = applyDataToIris;
  169. code = "09010035";
  170. }
  171. if (dataDownloadContext.downloadType == DownloadType.SelfRatio)
  172. {
  173. getImportInput = GetImportInputFrom7045;
  174. applyToIris = applyDataToSelfProper;
  175. code = "090100xx";
  176. }
  177. err = "";
  178. foreach (JObject jo in ja)
  179. {
  180. jaIrisInput.Add(getImportInput(jo));
  181. dataDownloadContext.ver = JsonHelper.getDestValue(jo, "id");
  182. num++;
  183. if ((num % 50) == 0 || (num == ja.Count))
  184. {
  185. JObject joRtn = applyToIris(code, jaIrisInput);
  186. if (joRtn["errorCode"].ToString() != "0")
  187. {
  188. errorCount = errorCount + 1;
  189. err = "\r\n" + err + joRtn["errorMessage"].ToString();
  190. }
  191. jaIrisInput = new JArray();
  192. }
  193. // 检查是否应取消操作
  194. if (context.Worker.CancellationPending)
  195. {
  196. err = "操作取消!";
  197. return -1; // 或者其他表示取消的返回值
  198. }
  199. if (context.reportProgress != null)
  200. {
  201. context.reportProgress(num);
  202. }
  203. //下载完成就停止
  204. if (dataDownloadContext.totalCount == 0)
  205. {
  206. err = "下载完成!";
  207. return -1; // 或者其他表示取消的返回值
  208. }
  209. }
  210. return 0;
  211. }
  212. private JObject applyDataToIris(string code, JArray jaParam)
  213. {
  214. JObject joIn = new JObject();
  215. JObject joRtn = new JObject();
  216. string outParam = "";
  217. try
  218. {
  219. joIn.Add(new JProperty("params", jaParam));
  220. joIn.Add("code", code);
  221. joIn.Add("updateUserID", Global.user.ID);
  222. InvokeHelper invoker = new InvokeHelper();
  223. string sInput = joIn.ToString();
  224. joRtn = invoker.invokeInsuService(sInput, "applyDataToIris");
  225. outParam = joRtn.ToString();
  226. return joRtn;
  227. }
  228. catch (Exception ex)
  229. {
  230. joRtn = JsonHelper.setExceptionJson(-1, "applyDataToIris", ex.Message);
  231. outParam = joRtn.ToString();
  232. return joRtn;
  233. }
  234. }
  235. //插入自付自付比例奥
  236. private JObject applyDataToSelfProper(string code, JArray jaParam)
  237. {
  238. JObject joIn = new JObject();
  239. JObject joRtn = new JObject();
  240. string outParam = "";
  241. try
  242. {
  243. //joIn.Add(new JProperty("params", jaParam));
  244. //joIn.Add("code", code);
  245. //joIn.Add("updateUserID", Global.user.ID);
  246. //InvokeHelper invoker = new InvokeHelper();
  247. //string sInput = joIn.ToString();
  248. //joRtn = invoker.invokeInsuService(sInput, "applyDataToIris");
  249. //outParam = joRtn.ToString();
  250. joRtn.Add("errorCode","-1");
  251. joRtn.Add("errorMessage", "未找到插入自付比例表方法");
  252. return joRtn;
  253. }
  254. catch (Exception ex)
  255. {
  256. joRtn = JsonHelper.setExceptionJson(-1, "applyDataToSelfProper", ex.Message);
  257. outParam = joRtn.ToString();
  258. return joRtn;
  259. }
  260. }
  261. #endregion
  262. #region 获取入参
  263. /// <summary>
  264. /// 从国家目录类别转换为医保平台自己规定的类型
  265. /// </summary>
  266. /// <param name="listType"></param>
  267. /// <param name="hisType"></param>
  268. /// <param name="hisName"></param>
  269. private void GetHisTypeFromListType(string listType, out string hisType, out string hisName)
  270. {
  271. hisType = hisName = "";
  272. string firstLetter = listType.Substring(0, 1);
  273. switch (firstLetter)
  274. {
  275. case "1":
  276. hisType = "1";
  277. hisName = "药品";
  278. break;
  279. case "2":
  280. hisType = "2";
  281. hisName = "诊疗";
  282. break;
  283. case "3":
  284. hisType = "3";
  285. hisName = "材料";
  286. break;
  287. default:
  288. hisType = "2";
  289. hisName = "诊疗";
  290. break;
  291. }
  292. }
  293. /// <summary>
  294. /// 获取入参
  295. /// </summary>
  296. /// <param name="joInput"></param>
  297. /// <returns></returns>
  298. ///
  299. private JObject GetImportInputFrom7043(JObject joInput)
  300. {
  301. dynamic jsonTemp = new JObject();
  302. jsonTemp.ID = "";
  303. jsonTemp.updateUserID = Global.user.ID;
  304. jsonTemp.HospitalDr = Global.inf.hospitalDr;
  305. jsonTemp.InterfaceDr = Global.inf.interfaceDr;
  306. jsonTemp.Code = JsonHelper.getDestValue(joInput, "hilistCode");
  307. jsonTemp.Name = JsonHelper.getDestValue(joInput, "hilistName");
  308. string hisType, hisName;
  309. GetHisTypeFromListType(JsonHelper.getDestValue(joInput, "listType"), out hisType, out hisName);
  310. jsonTemp.HisType = hisType;
  311. jsonTemp.HisTypeName = hisName;
  312. jsonTemp.LocateCode = "";
  313. jsonTemp.LocateName = "";
  314. jsonTemp.DosageFormCode = JsonHelper.getDestValue(joInput, "drugDosform");
  315. jsonTemp.DosageFormName = JsonHelper.getDestValue(joInput, "dosformName");
  316. jsonTemp.CategoryCode = JsonHelper.getDestValue(joInput, "medChrgitmType");
  317. jsonTemp.CategoryName = "";
  318. jsonTemp.Specification = JsonHelper.getDestValue(joInput, "regSpec");
  319. jsonTemp.SpecificationCode = "";
  320. jsonTemp.UnitOfPackag = "";
  321. jsonTemp.UnitOfValuation = "";
  322. jsonTemp.StartDate = JsonHelper.getDestValue(joInput, "begnDate");
  323. jsonTemp.EndDate = JsonHelper.getDestValue(joInput, "endDate");
  324. jsonTemp.PinyinSearchCode = JsonHelper.getDestValue(joInput, "pinyin");
  325. jsonTemp.Instructions = JsonHelper.getDestValue(joInput, "lmtUsescp");
  326. jsonTemp.ExceptContent = JsonHelper.getDestValue(joInput, "trtExctCont");
  327. jsonTemp.Connotation = JsonHelper.getDestValue(joInput, "trtItemCont");
  328. jsonTemp.ValidFlag = 1;
  329. jsonTemp.Note = JsonHelper.getDestValue(joInput, "memo");
  330. jsonTemp.VersionNO = JsonHelper.getDestValue(joInput, "id");
  331. jsonTemp.VersionName = "";
  332. jsonTemp.UseFlag = 1;
  333. jsonTemp.DrugSafetyStandardCode = "";
  334. jsonTemp.ApprovalNO = JsonHelper.getDestValue(joInput, "aprvno");
  335. jsonTemp.SpecialFlag = "";
  336. jsonTemp.LimitFlag = "";
  337. jsonTemp.LimitRange = "";
  338. jsonTemp.UniqueRecordNO = "";
  339. jsonTemp.Manufacturers = JsonHelper.getDestValue(joInput, "prodentpName");
  340. jsonTemp.Company = "";
  341. jsonTemp.MinPackagingQuantity = JsonHelper.getDestValue(joInput, "minPacCnt");
  342. jsonTemp.MinPackagingUnit = JsonHelper.getDestValue(joInput, "minPacunt");
  343. jsonTemp.ChargeItemLevel = JsonHelper.getDestValue(joInput, "chrgitmLv");
  344. jsonTemp.ChargeItemType = JsonHelper.getDestValue(joInput, "medChrgitmType");
  345. jsonTemp.ListType = JsonHelper.getDestValue(joInput, "listType");
  346. return jsonTemp;
  347. }
  348. private JObject GetImportInputFrom7044(JObject joInput)
  349. {
  350. dynamic jsonTemp = new JObject();
  351. jsonTemp.ID = "";
  352. jsonTemp.updateUserID = Global.user.ID;
  353. jsonTemp.HospitalDr = Global.inf.hospitalDr;
  354. jsonTemp.InterfaceDr = Global.inf.interfaceDr;
  355. jsonTemp.Code = JsonHelper.getDestValue(joInput, "hilistCode");
  356. jsonTemp.CeilingPrice = JsonHelper.getDestValue(joInput, "hilistPricUplmtAmt");
  357. return jsonTemp;
  358. }
  359. private JObject GetImportInputFrom7045(JObject joInput)
  360. {
  361. dynamic jsonTemp = new JObject();
  362. jsonTemp.ID = "";
  363. jsonTemp.updateUserID = Global.user.ID;
  364. jsonTemp.HospitalDr = Global.inf.hospitalDr;
  365. jsonTemp.InterfaceDr = Global.inf.interfaceDr;
  366. jsonTemp.Code = JsonHelper.getDestValue(joInput, "hilistCode");
  367. jsonTemp.SelfPercent = JsonHelper.getDestValue(joInput, "selfpayProp");
  368. return jsonTemp;
  369. }
  370. #endregion
  371. }
  372. public class DataDownloadContext
  373. {
  374. public int totalCount = 0;
  375. public int pageNum = 1;
  376. public int pageSize = 1000;
  377. public int totalPages = 0;
  378. public string ver = "";
  379. public ProgressBarStyle progressBarStyle = ProgressBarStyle.Continuous;
  380. public string header = "";
  381. public int speed =50;
  382. public DownloadType downloadType = DownloadType.None;
  383. }
  384. public enum DownloadType
  385. {
  386. None = 0,
  387. Directory =1,
  388. LimitPrice =2,
  389. SelfRatio =3
  390. }
  391. }