DirectoryDownloadLocalExtService.cs 16 KB

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