DataImoport.cs 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515
  1. /******************************************************************************
  2. * 文件名称: DataImoport.cs
  3. * 文件说明: 医保目录数据导入
  4. * 当前版本: V1.0
  5. * 创建日期: 2022-04-12
  6. *
  7. * 2020-04-12: 增加GetDrugsJsonByTxt方法
  8. * 2020-04-12: 增加GetMedicalServiceJsonByTxt方法
  9. * 2020-04-12: 增加 GetMaterialJsonByTxt 方法
  10. * 2020-04-14: 增加 GetDiagnoseJsonByTxt 方法
  11. * 2020-04-14: 增加 GetOperationJsonByTxt 方法
  12. * 2020-04-14: 增加 applyDataToIris 方法
  13. * 2020-04-14: 增加 importDataToIrisByTxt 方法
  14. * 2020-04-14: 增加 GetOperationJsonByTxt 方法
  15. * 2020-04-14: 增加 GetOperationJsonByTxt 方法
  16. * 2020-04-14: 增加 GetOperationJsonByTxt 方法
  17. * 2020-04-14: 增加 GetOperationJsonByTxt 方法
  18. ******************************************************************************/
  19. using Newtonsoft.Json.Linq;
  20. using System;
  21. using System.Collections.Generic;
  22. using System.Linq;
  23. using System.Text;
  24. using System.Threading.Tasks;
  25. using System.Windows.Forms;
  26. using ChengDuMedInsu2;
  27. using MedicalInsurance.Helper;
  28. using MedicalInsurance.Common;
  29. namespace MedicalInsurance.Business
  30. {
  31. class DataImoport
  32. {
  33. /// <summary>
  34. /// 读取TXT后,Array中的空值会返回NULL,将其转换为"".应有其他方式处理,后面再优化
  35. /// 明天试试Convert.ToString(a)
  36. /// </summary>
  37. /// <param name="arrayValue"></param>
  38. /// <returns></returns>
  39. private string convertArrayNull(string arrayValue)
  40. {
  41. string returnValue = string.Empty;
  42. if (arrayValue == "null")
  43. {
  44. returnValue = "";
  45. }
  46. else
  47. {
  48. returnValue = arrayValue;
  49. }
  50. return returnValue;
  51. }
  52. /// <summary>
  53. /// 从TXT文件中获取药品数据,并组装成JSON
  54. /// </summary>
  55. /// <param name="arr"></param>
  56. /// <returns></returns>
  57. private JObject GetDrugsJsonByTxt(string[] arr)
  58. {
  59. dynamic jsonTemp = new JObject();
  60. jsonTemp.ID = "";
  61. jsonTemp.HospitalDr = GlobalVariables.hospitalDr;
  62. jsonTemp.InterfaceDr = GlobalVariables.interfaceDr;
  63. jsonTemp.Code = arr[0];
  64. jsonTemp.Name = arr[7];
  65. jsonTemp.HisType = "1";
  66. jsonTemp.HisTypeName = "药品";
  67. jsonTemp.LocateCode = "";
  68. jsonTemp.LocateName = "";
  69. jsonTemp.DosageFormCode = arr[9];
  70. jsonTemp.DosageFormName = arr[10];
  71. jsonTemp.CategoryCode = arr[11];
  72. jsonTemp.CategoryName = arr[12];
  73. jsonTemp.Specification = arr[13];
  74. jsonTemp.SpecificationCode = arr[14];
  75. jsonTemp.UnitOfPackag = arr[43];
  76. jsonTemp.UnitOfValuation = arr[40];
  77. jsonTemp.StartDate = convertArrayNull(arr[37]);
  78. jsonTemp.EndDate = convertArrayNull(arr[38]);
  79. jsonTemp.PinyinSearchCode = arr[51];
  80. jsonTemp.Instructions = arr[36];
  81. jsonTemp.ExceptContent = "";
  82. jsonTemp.Connotation = "";
  83. jsonTemp.ValidFlag = convertArrayNull(arr[79]);
  84. jsonTemp.Note = arr[78];
  85. jsonTemp.VersionNO = arr[83];
  86. jsonTemp.VersionName = arr[84];
  87. jsonTemp.UseFlag = 1;
  88. jsonTemp.DrugSafetyStandardCode = arr[9];
  89. jsonTemp.ApprovalNO = arr[56];
  90. jsonTemp.SpecialFlag = convertArrayNull(arr[62]);
  91. jsonTemp.LimitFlag = convertArrayNull(arr[58]);
  92. jsonTemp.LimitRange = arr[57];
  93. jsonTemp.UniqueRecordNO = arr[79];
  94. jsonTemp.Manufacturers = arr[53];
  95. return jsonTemp;
  96. }
  97. /// <summary>
  98. /// 从TXT文件中获取诊疗数据,并组装成JSON
  99. /// </summary>
  100. /// <param name="arr"></param>
  101. /// <returns></returns>
  102. private JObject GetMedicalServiceJsonByTxt(string[] arr)
  103. {
  104. dynamic jsonTemp = new JObject();
  105. jsonTemp.ID = "";
  106. jsonTemp.HospitalDr = GlobalVariables.hospitalDr;
  107. jsonTemp.InterfaceDr = GlobalVariables.interfaceDr;
  108. jsonTemp.Code = arr[0];
  109. jsonTemp.Name = arr[9];
  110. jsonTemp.HisType = "2";
  111. jsonTemp.HisTypeName = "诊疗";
  112. jsonTemp.LocateCode = "";
  113. jsonTemp.LocateName = "";
  114. jsonTemp.DosageFormCode = arr[9];
  115. jsonTemp.DosageFormName = arr[10];
  116. jsonTemp.CategoryCode = arr[8];
  117. jsonTemp.CategoryName = arr[12];
  118. jsonTemp.Specification = "";
  119. jsonTemp.SpecificationCode = "";
  120. jsonTemp.UnitOfPackag = "";
  121. jsonTemp.UnitOfValuation = convertArrayNull(arr[3]);
  122. jsonTemp.StartDate = convertArrayNull(arr[11]);
  123. jsonTemp.EndDate = convertArrayNull(arr[12]);
  124. ////jsonTemp.PinyinSearchCode = SpellCodeHelper.GetFirstPYLetter(arr[9]);
  125. jsonTemp.Instructions = arr[3];
  126. jsonTemp.ExceptContent = arr[4];
  127. jsonTemp.Connotation = arr[5];
  128. jsonTemp.ValidFlag = arr[6];
  129. jsonTemp.Note = arr[7];
  130. jsonTemp.VersionNO = arr[14];
  131. jsonTemp.VersionName = arr[15];
  132. jsonTemp.UseFlag = 1;
  133. jsonTemp.DrugSafetyStandardCode = "";
  134. jsonTemp.ApprovalNO = "";
  135. jsonTemp.SpecialFlag = "";
  136. jsonTemp.LimitFlag = "";
  137. jsonTemp.LimitRange = "";
  138. jsonTemp.UniqueRecordNO = arr[13];
  139. return jsonTemp;
  140. }
  141. /// <summary>
  142. /// 从TXT文件中获取材料数据,并组装成JSON
  143. /// </summary>
  144. /// <param name="arr"></param>
  145. /// <returns></returns>
  146. private JObject GetMaterialJsonByTxt(string[] arr)
  147. {
  148. dynamic jsonTemp = new JObject();
  149. jsonTemp.ID = "";
  150. jsonTemp.HospitalDr = GlobalVariables.hospitalDr;
  151. jsonTemp.InterfaceDr = GlobalVariables.interfaceDr;
  152. jsonTemp.Code = arr[0];
  153. jsonTemp.Name = arr[5];
  154. jsonTemp.HisType = "3";
  155. jsonTemp.HisTypeName = "材料";
  156. jsonTemp.LocateCode = "";
  157. jsonTemp.LocateName = "";
  158. jsonTemp.DosageFormCode = "";
  159. jsonTemp.DosageFormName = "";
  160. jsonTemp.CategoryCode = "";
  161. jsonTemp.CategoryName = "";
  162. jsonTemp.Specification = arr[7];
  163. jsonTemp.SpecificationCode = arr[6];
  164. jsonTemp.UnitOfPackag = arr[15];
  165. jsonTemp.UnitOfValuation = convertArrayNull(arr[35]);
  166. jsonTemp.StartDate = convertArrayNull(arr[46]);
  167. jsonTemp.EndDate = convertArrayNull(arr[47]);
  168. //jsonTemp.PinyinSearchCode = SpellCodeHelper.GetFirstPYLetter(arr[5]);
  169. jsonTemp.Instructions = arr[27];
  170. jsonTemp.ExceptContent = "";
  171. jsonTemp.Connotation = "";
  172. jsonTemp.ValidFlag = arr[67];
  173. jsonTemp.Note = arr[7];
  174. jsonTemp.VersionNO = arr[69];
  175. jsonTemp.VersionName = arr[70];
  176. jsonTemp.UseFlag = 1;
  177. jsonTemp.DrugSafetyStandardCode = "";
  178. jsonTemp.ApprovalNO = "";
  179. jsonTemp.SpecialFlag = "";
  180. jsonTemp.LimitFlag = convertArrayNull(arr[33]);
  181. jsonTemp.LimitRange = arr[34];
  182. jsonTemp.UniqueRecordNO = arr[68];
  183. jsonTemp.Manufacturers = arr[59];
  184. return jsonTemp;
  185. }
  186. /// <summary>
  187. /// 从TXT文件中获取诊断数据,并组装成JSON
  188. /// </summary>
  189. /// <param name="arr"></param>
  190. /// <returns></returns>
  191. private JObject GetDiagnoseJsonByTxt(string[] arr)
  192. {
  193. dynamic jsonTemp = new JObject();
  194. jsonTemp.ID = "";
  195. jsonTemp.HospitalDr = GlobalVariables.hospitalDr;
  196. jsonTemp.InterfaceDr = GlobalVariables.interfaceDr;
  197. jsonTemp.Code = arr[10];
  198. jsonTemp.Name = arr[11];
  199. jsonTemp.HisType = "4";
  200. jsonTemp.HisTypeName = "诊断";
  201. jsonTemp.LocateCode = "";
  202. jsonTemp.LocateName = "";
  203. jsonTemp.DosageFormCode = "";
  204. jsonTemp.DosageFormName = "";
  205. jsonTemp.CategoryCode = "";
  206. jsonTemp.CategoryName = "";
  207. jsonTemp.Specification = "";
  208. jsonTemp.SpecificationCode = "";
  209. jsonTemp.UnitOfPackag = "";
  210. jsonTemp.UnitOfValuation = "";
  211. jsonTemp.StartDate = "";
  212. jsonTemp.EndDate = "";
  213. //jsonTemp.PinyinSearchCode = SpellCodeHelper.GetFirstPYLetter(arr[11]);
  214. jsonTemp.Instructions = "";
  215. jsonTemp.ExceptContent = "";
  216. jsonTemp.Connotation = "";
  217. jsonTemp.ValidFlag = arr[18];
  218. jsonTemp.Note = arr[17];
  219. jsonTemp.VersionNO = arr[22];
  220. jsonTemp.VersionName = arr[23];
  221. jsonTemp.UseFlag = 1;
  222. jsonTemp.DrugSafetyStandardCode = "";
  223. jsonTemp.ApprovalNO = "";
  224. jsonTemp.SpecialFlag = "";
  225. jsonTemp.LimitFlag = "";
  226. jsonTemp.LimitRange = "";
  227. jsonTemp.UniqueRecordNO = arr[19];
  228. jsonTemp.Manufacturers = "";
  229. return jsonTemp;
  230. }
  231. /// <summary>
  232. /// 慢性病
  233. /// </summary>
  234. /// <param name="arr"></param>
  235. /// <returns></returns>
  236. private JObject GetChronicDiseaseJsonByTxt(string[] arr)
  237. {
  238. dynamic jsonTemp = new JObject();
  239. jsonTemp.ID = "";
  240. jsonTemp.HospitalDr = GlobalVariables.hospitalDr;
  241. jsonTemp.InterfaceDr = GlobalVariables.interfaceDr;
  242. jsonTemp.Code = arr[0];
  243. jsonTemp.Name = arr[1];
  244. jsonTemp.HisType = "6";
  245. jsonTemp.HisTypeName = "慢性病";
  246. jsonTemp.LocateCode = "";
  247. jsonTemp.LocateName = "";
  248. jsonTemp.DosageFormCode = "";
  249. jsonTemp.DosageFormName = "";
  250. jsonTemp.CategoryCode = arr[14];
  251. jsonTemp.CategoryName = arr[15];
  252. jsonTemp.Specification = "";
  253. jsonTemp.SpecificationCode = "";
  254. jsonTemp.UnitOfPackag = "";
  255. jsonTemp.UnitOfValuation = "";
  256. jsonTemp.StartDate = "";
  257. jsonTemp.EndDate = "";
  258. //jsonTemp.PinyinSearchCode = SpellCodeHelper.GetFirstPYLetter(arr[2]);
  259. jsonTemp.Instructions = "";
  260. jsonTemp.ExceptContent = "";
  261. jsonTemp.Connotation = arr[10];
  262. jsonTemp.ValidFlag = arr[5];
  263. jsonTemp.Note = arr[4];
  264. jsonTemp.VersionNO = arr[9];
  265. jsonTemp.VersionName = arr[11];
  266. jsonTemp.UseFlag = 1;
  267. jsonTemp.DrugSafetyStandardCode = "";
  268. jsonTemp.ApprovalNO = "";
  269. jsonTemp.SpecialFlag = "";
  270. jsonTemp.LimitFlag = "";
  271. jsonTemp.LimitRange = "";
  272. jsonTemp.UniqueRecordNO = arr[6];
  273. jsonTemp.Manufacturers = "";
  274. return jsonTemp;
  275. }
  276. /// <summary>
  277. /// 从TXT文件中获取手术数据,并组装成JSON
  278. /// </summary>
  279. /// <param name="arr"></param>
  280. /// <returns></returns>
  281. private JObject GetOperationJsonByTxt(string[] arr)
  282. {
  283. dynamic jsonTemp = new JObject();
  284. jsonTemp.ID = "";
  285. jsonTemp.HospitalDr = GlobalVariables.hospitalDr;
  286. jsonTemp.InterfaceDr = GlobalVariables.interfaceDr;
  287. jsonTemp.Code = arr[10];
  288. jsonTemp.Name = arr[11];
  289. jsonTemp.HisType = "5";
  290. jsonTemp.HisTypeName = "手术";
  291. //jsonTemp.PinyinSearchCode = SpellCodeHelper.GetFirstPYLetter(arr[11]);
  292. jsonTemp.ValidFlag = arr[18];
  293. jsonTemp.Note = arr[17];
  294. jsonTemp.VersionNO = arr[22];
  295. jsonTemp.VersionName = arr[23];
  296. jsonTemp.UseFlag = 1;
  297. jsonTemp.UniqueRecordNO = arr[19];
  298. return jsonTemp;
  299. }
  300. /// <summary>
  301. /// DRGs
  302. /// </summary>
  303. /// <param name="arr"></param>
  304. /// <returns></returns>
  305. private JObject GetDRGsJsonByTxt(string[] arr)
  306. {
  307. dynamic jsonTemp = new JObject();
  308. jsonTemp.ID = "";
  309. jsonTemp.HospitalDr = GlobalVariables.hospitalDr;
  310. jsonTemp.InterfaceDr = GlobalVariables.interfaceDr;
  311. jsonTemp.Code = arr[1];
  312. jsonTemp.Name = arr[2];
  313. jsonTemp.HisType = "7";
  314. jsonTemp.HisTypeName = "DRGs";
  315. jsonTemp.Connotation = arr[10];
  316. //jsonTemp.PinyinSearchCode = SpellCodeHelper.GetFirstPYLetter(arr[11]);
  317. jsonTemp.ValidFlag = arr[5];
  318. jsonTemp.Note = arr[11];
  319. jsonTemp.VersionNO = arr[9];
  320. jsonTemp.VersionName = arr[12];
  321. jsonTemp.UseFlag = 1;
  322. jsonTemp.UniqueRecordNO = arr[6];
  323. return jsonTemp;
  324. }
  325. private JObject GetDaySurgeryJsonByTxt(string[] arr)
  326. {
  327. dynamic jsonTemp = new JObject();
  328. jsonTemp.ID = "";
  329. jsonTemp.HospitalDr = GlobalVariables.hospitalDr;
  330. jsonTemp.InterfaceDr = GlobalVariables.interfaceDr;
  331. jsonTemp.Code = arr[1];
  332. jsonTemp.Name = arr[2];
  333. jsonTemp.HisType = "8";
  334. jsonTemp.HisTypeName = "日间手术";
  335. jsonTemp.Connotation = arr[8];
  336. //jsonTemp.PinyinSearchCode = SpellCodeHelper.GetFirstPYLetter(arr[11]);
  337. jsonTemp.ValidFlag = arr[3];
  338. jsonTemp.Note = arr[9];
  339. jsonTemp.VersionNO = arr[7];
  340. jsonTemp.VersionName = arr[10];
  341. jsonTemp.UseFlag = 1;
  342. jsonTemp.UniqueRecordNO = arr[4];
  343. return jsonTemp;
  344. }
  345. /// <summary>
  346. /// 提交数据给IRIS
  347. /// </summary>
  348. /// <param name="code"></param>
  349. /// <param name="jaParam"></param>
  350. /// <returns></returns>
  351. private JObject applyDataToIris(string code, JArray jaParam)
  352. {
  353. try
  354. {
  355. JObject joIn = new JObject();
  356. joIn.Add(new JProperty("params", jaParam));
  357. joIn.Add("code", code);
  358. joIn.Add("updateUserID", GlobalVariables.operatorNO);
  359. InvokeHelper iris = new InvokeHelper();
  360. string sInput = joIn.ToString();
  361. return iris.invokeInsuService(sInput, "applyDataToIris");
  362. }
  363. catch (Exception ex)
  364. {
  365. return JsonHelper.getIrisExceptionJson(-1, "applyDataToIris",ex.Message);
  366. }
  367. }
  368. /// <summary>
  369. /// 从TXT里导数据到IRIS
  370. /// </summary>
  371. /// <param name="txtPath"></param>
  372. /// <param name="singleRows"></param>
  373. /// <param name="direcType"></param>
  374. /// <param name="processBar"></param>
  375. /// <returns></returns>
  376. public JObject importDataToIrisByTxt(string txtPath, int singleRows, int direcType, Sunny.UI.UIProcessBar processBar)
  377. {
  378. int errorCount = 0;
  379. string errorMsg = "";
  380. try
  381. {
  382. /*据说速度更快
  383. * https://www.cnblogs.com/eniac12/p/4398310.html
  384. * using (StreamReader sr = File.OpenText(fileName))
  385. {
  386. string s = String.Empty;
  387. while ((s = sr.ReadLine()) != null)
  388. {
  389. //do what you have to here
  390. }
  391. }
  392. Convert.ToString(a)
  393. */
  394. string[] lines = System.IO.File.ReadAllLines(txtPath);
  395. dynamic jaParams = new JArray();
  396. int rows = lines.Length;
  397. processBar.Maximum = rows;
  398. for (int i = 0; i < rows; i++)
  399. {
  400. processBar.Value = i + 1;
  401. Application.DoEvents();
  402. string lineTmp = lines[i];
  403. string[] arr = lineTmp.Split('\t');
  404. //判断是哪种目录类型
  405. string code = string.Empty;
  406. switch (direcType)
  407. {
  408. //药品
  409. case 1:
  410. {
  411. jaParams.Add(GetDrugsJsonByTxt(arr));
  412. break;
  413. }
  414. //诊疗
  415. case 2:
  416. {
  417. jaParams.Add(GetMedicalServiceJsonByTxt(arr));
  418. break;
  419. }
  420. //材料
  421. case 3:
  422. {
  423. jaParams.Add(GetMaterialJsonByTxt(arr));
  424. break;
  425. }
  426. //诊断
  427. case 4:
  428. {
  429. jaParams.Add(GetDiagnoseJsonByTxt(arr));
  430. break;
  431. }
  432. //手术
  433. case 5:
  434. {
  435. jaParams.Add(GetOperationJsonByTxt(arr));
  436. break;
  437. }
  438. //慢性病
  439. case 6:
  440. {
  441. jaParams.Add(GetChronicDiseaseJsonByTxt(arr));
  442. break;
  443. }
  444. //DRGs
  445. case 7:
  446. {
  447. jaParams.Add(GetDRGsJsonByTxt(arr));
  448. break;
  449. }
  450. //日间手术
  451. case 8:
  452. {
  453. jaParams.Add(GetDaySurgeryJsonByTxt(arr));
  454. break;
  455. }
  456. }
  457. code = "09010035";
  458. //每50行提交一次给后台
  459. int currentRows = i + 1;
  460. if ((currentRows % singleRows == 0) && (i != 0))
  461. {
  462. JObject joRtn = applyDataToIris(code, jaParams);
  463. if (joRtn["errorCode"].ToString() != "0")
  464. {
  465. errorCount = errorCount + 1;
  466. errorMsg = "\r\n" +errorMsg + joRtn["errorMessage"].ToString();
  467. }
  468. jaParams = new JArray();
  469. }
  470. if ((currentRows == rows) && (currentRows % singleRows != 0))
  471. {
  472. JObject joRtn = applyDataToIris(code, jaParams);
  473. if (joRtn["errorCode"].ToString() != "0")
  474. {
  475. errorCount = errorCount + 1;
  476. errorMsg = "\r\n" + errorMsg + joRtn["errorMessage"].ToString();
  477. }
  478. jaParams = new JArray();
  479. }
  480. }
  481. return JsonHelper.getIrisReturnJson(0 - errorCount, errorMsg, new JObject());
  482. }
  483. catch (Exception ex)
  484. {
  485. return JsonHelper.getIrisExceptionJson(-1, "importDataToIrisByTxt", ex.Message);
  486. }
  487. }
  488. }
  489. }