DataImoport.cs 20 KB

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