DataImoport.cs 41 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068
  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. using PTMedicalInsurance.Common;
  30. using System.ComponentModel;
  31. namespace PTMedicalInsurance
  32. {
  33. class DataImoport
  34. {
  35. MIIrisServices mis = new MIIrisServices();
  36. /// <summary>
  37. /// 读取TXT后,Array中的空值会返回NULL,将其转换为"".应有其他方式处理,后面再优化
  38. /// 明天试试Convert.ToString(a)
  39. /// </summary>
  40. /// <param name="arrayValue"></param>
  41. /// <returns></returns>
  42. private string convertArrayNull(string arrayValue)
  43. {
  44. string returnValue = string.Empty;
  45. if (arrayValue == "null")
  46. {
  47. returnValue = "";
  48. }
  49. else
  50. {
  51. returnValue = arrayValue;
  52. }
  53. return returnValue;
  54. }
  55. /// <summary>
  56. /// 从TXT文件中获取药品数据,并组装成JSON
  57. /// </summary>
  58. /// <param name="arr"></param>
  59. /// <returns></returns>
  60. private JObject GetDrugsJsonByTxt(string[] arr)
  61. {
  62. dynamic jsonTemp = new JObject();
  63. jsonTemp.ID = "";
  64. jsonTemp.updateUserID = Global.user.ID;
  65. jsonTemp.HospitalDr = Global.inf.hospitalDr;
  66. jsonTemp.InterfaceDr = Global.inf.interfaceDr;
  67. jsonTemp.Code = arr[0];
  68. jsonTemp.Name = arr[7];
  69. jsonTemp.HisType = "1";
  70. jsonTemp.HisTypeName = "药品";
  71. jsonTemp.LocateCode = "";
  72. jsonTemp.LocateName = "";
  73. jsonTemp.DosageFormCode = arr[9];
  74. jsonTemp.DosageFormName = arr[10];
  75. jsonTemp.CategoryCode = arr[11];
  76. jsonTemp.CategoryName = arr[12];
  77. jsonTemp.Specification = arr[13];
  78. jsonTemp.SpecificationCode = arr[14];
  79. jsonTemp.UnitOfPackag = arr[42];
  80. jsonTemp.UnitOfValuation = arr[40];
  81. jsonTemp.StartDate = convertArrayNull(arr[36]);
  82. jsonTemp.EndDate = convertArrayNull(arr[37]);
  83. jsonTemp.PinyinSearchCode = arr[50];
  84. jsonTemp.Instructions = arr[35];
  85. jsonTemp.ExceptContent = "";
  86. jsonTemp.Connotation = "";
  87. jsonTemp.ValidFlag = convertArrayNull(arr[78]);
  88. jsonTemp.Note = arr[77];
  89. jsonTemp.VersionNO = arr[82];
  90. jsonTemp.VersionName = arr[83];
  91. jsonTemp.UseFlag = convertArrayNull(arr[78]);
  92. jsonTemp.DrugSafetyStandardCode = arr[8];
  93. jsonTemp.ApprovalNO = arr[61];
  94. jsonTemp.SpecialFlag = convertArrayNull(arr[55]);
  95. jsonTemp.LimitFlag = convertArrayNull(arr[57]);
  96. jsonTemp.LimitRange = arr[56];
  97. jsonTemp.UniqueRecordNO = arr[79];
  98. jsonTemp.Manufacturers = arr[53];
  99. jsonTemp.Company = arr[85];
  100. jsonTemp.ChargeItemLevelName = arr[91];
  101. if (jsonTemp.ChargeItemLevelName == "甲")
  102. {
  103. jsonTemp.ChargeItemLevel = "01";
  104. jsonTemp.SelfPercent = "0";
  105. }
  106. else if (jsonTemp.ChargeItemLevelName == "乙")
  107. {
  108. jsonTemp.ChargeItemLevel = "02";
  109. jsonTemp.SelfPercent = "0";
  110. }
  111. else if (jsonTemp.ChargeItemLevelName == "丙")
  112. {
  113. jsonTemp.ChargeItemLevel = "03";
  114. jsonTemp.SelfPercent = "100";
  115. }
  116. else
  117. {
  118. jsonTemp.ChargeItemLevel = "04";
  119. jsonTemp.SelfPercent = "100";
  120. jsonTemp.ChargeItemLevelName = "未知";
  121. }
  122. return jsonTemp;
  123. }
  124. /// <summary>
  125. /// 从TXT文件中获取诊疗数据,并组装成JSON
  126. /// </summary>
  127. /// <param name="arr"></param>
  128. /// <returns></returns>
  129. private JObject GetMedicalServiceJsonByTxt(string[] arr)
  130. {
  131. dynamic jsonTemp = new JObject();
  132. jsonTemp.ID = "";
  133. jsonTemp.updateUserID = Global.user.ID;
  134. jsonTemp.HospitalDr = Global.inf.hospitalDr;
  135. jsonTemp.InterfaceDr = Global.inf.interfaceDr;
  136. jsonTemp.Code = arr[0];
  137. jsonTemp.Name = arr[9];
  138. jsonTemp.HisType = "2";
  139. jsonTemp.HisTypeName = "诊疗";
  140. jsonTemp.LocateCode = "";
  141. jsonTemp.LocateName = "";
  142. //jsonTemp.DosageFormCode = arr[9];
  143. //jsonTemp.DosageFormName = arr[10];
  144. jsonTemp.CategoryCode = arr[8];
  145. //jsonTemp.CategoryName = arr[12];
  146. jsonTemp.Specification = "";
  147. jsonTemp.SpecificationCode = "";
  148. //jsonTemp.UnitOfPackag = arr[1];
  149. jsonTemp.UnitOfValuation = arr[1];
  150. jsonTemp.StartDate = convertArrayNull(arr[11]);
  151. jsonTemp.EndDate = convertArrayNull(arr[12]);
  152. //jsonTemp.PinyinSearchCode = SpellCodeHelper.GetFirstPYLetter(arr[9]);
  153. jsonTemp.Instructions = arr[3];
  154. jsonTemp.ExceptContent = arr[4];
  155. jsonTemp.Connotation = arr[5];
  156. jsonTemp.ValidFlag = arr[6];
  157. jsonTemp.Note = arr[7];
  158. jsonTemp.VersionNO = arr[14];
  159. jsonTemp.VersionName = arr[15];
  160. jsonTemp.UseFlag = arr[6];
  161. jsonTemp.DrugSafetyStandardCode = "";
  162. jsonTemp.ApprovalNO = "";
  163. jsonTemp.SpecialFlag = "";
  164. jsonTemp.LimitFlag = "";
  165. jsonTemp.LimitRange = "";
  166. jsonTemp.UniqueRecordNO = arr[13];
  167. jsonTemp.ChargeItemLevel = arr[8];
  168. if (jsonTemp.ChargeItemLevel == "1")
  169. {
  170. jsonTemp.ChargeItemLevelName = "甲";
  171. jsonTemp.SelfPercent = "0";
  172. }
  173. else if (jsonTemp.ChargeItemLevel == "2")
  174. {
  175. jsonTemp.ChargeItemLevelName = "乙";
  176. jsonTemp.SelfPercent = "0";
  177. }
  178. else if (jsonTemp.ChargeItemLevel == "3")
  179. {
  180. jsonTemp.ChargeItemLevelName = "丙";
  181. jsonTemp.SelfPercent = "100";
  182. }
  183. else
  184. {
  185. jsonTemp.ChargeItemLevel = "4";
  186. jsonTemp.SelfPercent = "100";
  187. jsonTemp.ChargeItemLevelName = "未知";
  188. }
  189. return jsonTemp;
  190. }
  191. /// <summary>
  192. /// 从TXT文件中获取材料数据,并组装成JSON
  193. /// </summary>
  194. /// <param name="arr"></param>
  195. /// <returns></returns>
  196. private JObject GetMaterialJsonByTxt(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[0];
  204. jsonTemp.Name = arr[1];
  205. jsonTemp.HisType = "3";
  206. jsonTemp.HisTypeName = "材料";
  207. jsonTemp.LocateCode = "";
  208. jsonTemp.LocateName = "";
  209. jsonTemp.DosageFormCode = "";
  210. jsonTemp.DosageFormName = "";
  211. jsonTemp.CategoryCode = "";
  212. jsonTemp.CategoryName = "";
  213. jsonTemp.Specification = arr[7];
  214. jsonTemp.SpecificationCode = arr[6];
  215. jsonTemp.UnitOfPackag = arr[15];
  216. jsonTemp.UnitOfValuation = convertArrayNull(arr[35]);
  217. //jsonTemp.StartDate = convertArrayNull(arr[46]);
  218. //jsonTemp.EndDate = convertArrayNull(arr[47]);
  219. //jsonTemp.PinyinSearchCode = SpellCodeHelper.GetFirstPYLetter(arr[5]);
  220. jsonTemp.Instructions = arr[27];
  221. jsonTemp.ExceptContent = arr[63]; //生产国
  222. jsonTemp.Connotation = "";
  223. jsonTemp.ValidFlag = arr[67];
  224. jsonTemp.Note = arr[7];
  225. jsonTemp.VersionNO = arr[69];
  226. jsonTemp.VersionName = arr[70];
  227. jsonTemp.UseFlag = arr[67];
  228. jsonTemp.DrugSafetyStandardCode = "";
  229. jsonTemp.ApprovalNO = arr[50]; //注册备案号
  230. jsonTemp.SpecialFlag = "";
  231. jsonTemp.LimitFlag = convertArrayNull(arr[33]);
  232. jsonTemp.LimitRange = arr[34];
  233. jsonTemp.UniqueRecordNO = arr[68];
  234. jsonTemp.Manufacturers = arr[59];
  235. jsonTemp.ChargeItemLevelName = arr[37];
  236. if (jsonTemp.ChargeItemLevelName == "甲")
  237. {
  238. jsonTemp.ChargeItemLevel = "01";
  239. jsonTemp.SelfPercent = "0";
  240. }
  241. else if (jsonTemp.ChargeItemLevelName == "乙")
  242. {
  243. jsonTemp.ChargeItemLevel = "02";
  244. jsonTemp.SelfPercent = "0";
  245. }
  246. else if (jsonTemp.ChargeItemLevelName == "丙")
  247. {
  248. jsonTemp.ChargeItemLevel = "03";
  249. jsonTemp.SelfPercent = "100";
  250. }
  251. else
  252. {
  253. jsonTemp.ChargeItemLevel = "04";
  254. jsonTemp.SelfPercent = "100";
  255. jsonTemp.ChargeItemLevelName = "未知";
  256. }
  257. return jsonTemp;
  258. }
  259. /// <summary>
  260. /// 从TXT文件中获取诊断数据,并组装成JSON
  261. /// </summary>
  262. /// <param name="arr"></param>
  263. /// <returns></returns>
  264. private JObject GetDiagnoseJsonByTxt(string[] arr)
  265. {
  266. dynamic jsonTemp = new JObject();
  267. jsonTemp.ID = "";
  268. jsonTemp.updateUserID = Global.user.ID;
  269. jsonTemp.HospitalDr = Global.inf.hospitalDr;
  270. jsonTemp.InterfaceDr = Global.inf.interfaceDr;
  271. jsonTemp.Code = arr[10];
  272. jsonTemp.Name = arr[11];
  273. jsonTemp.HisType = "4";
  274. jsonTemp.HisTypeName = "诊断";
  275. jsonTemp.LocateCode = "";
  276. jsonTemp.LocateName = "";
  277. jsonTemp.DosageFormCode = "";
  278. jsonTemp.DosageFormName = "";
  279. jsonTemp.CategoryCode = "";
  280. jsonTemp.CategoryName = "";
  281. jsonTemp.Specification = "";
  282. jsonTemp.SpecificationCode = "";
  283. jsonTemp.UnitOfPackag = "";
  284. jsonTemp.UnitOfValuation = "";
  285. jsonTemp.StartDate = "";
  286. jsonTemp.EndDate = "";
  287. //jsonTemp.PinyinSearchCode = SpellCodeHelper.GetFirstPYLetter(arr[11]);
  288. jsonTemp.Instructions = "";
  289. jsonTemp.ExceptContent = "";
  290. jsonTemp.Connotation = "";
  291. jsonTemp.ValidFlag = arr[18];
  292. jsonTemp.Note = arr[17];
  293. jsonTemp.VersionNO = arr[22];
  294. jsonTemp.VersionName = arr[23];
  295. jsonTemp.UseFlag = arr[18];
  296. jsonTemp.DrugSafetyStandardCode = "";
  297. jsonTemp.ApprovalNO = "";
  298. jsonTemp.SpecialFlag = "";
  299. jsonTemp.LimitFlag = "";
  300. jsonTemp.LimitRange = "";
  301. jsonTemp.UniqueRecordNO = arr[19];
  302. jsonTemp.Manufacturers = "";
  303. return jsonTemp;
  304. }
  305. /// <summary>
  306. /// 慢性病
  307. /// </summary>
  308. /// <param name="arr"></param>
  309. /// <returns></returns>
  310. private JObject GetChronicDiseaseJsonByTxt(string[] arr)
  311. {
  312. dynamic jsonTemp = new JObject();
  313. jsonTemp.ID = "";
  314. jsonTemp.updateUserID = Global.user.ID;
  315. jsonTemp.HospitalDr = Global.inf.hospitalDr;
  316. jsonTemp.InterfaceDr = Global.inf.interfaceDr;
  317. jsonTemp.Code = arr[0];
  318. jsonTemp.Name = arr[1];
  319. jsonTemp.HisType = "6";
  320. jsonTemp.HisTypeName = "慢性病";
  321. jsonTemp.LocateCode = "";
  322. jsonTemp.LocateName = "";
  323. jsonTemp.DosageFormCode = "";
  324. jsonTemp.DosageFormName = "";
  325. jsonTemp.CategoryCode = arr[14];
  326. jsonTemp.CategoryName = arr[15];
  327. jsonTemp.Specification = "";
  328. jsonTemp.SpecificationCode = "";
  329. jsonTemp.UnitOfPackag = "";
  330. jsonTemp.UnitOfValuation = "";
  331. jsonTemp.StartDate = "";
  332. jsonTemp.EndDate = "";
  333. //jsonTemp.PinyinSearchCode = SpellCodeHelper.GetFirstPYLetter(arr[2]);
  334. jsonTemp.Instructions = "";
  335. jsonTemp.ExceptContent = "";
  336. jsonTemp.Connotation = arr[10];
  337. jsonTemp.ValidFlag = arr[5];
  338. jsonTemp.Note = arr[4];
  339. jsonTemp.VersionNO = arr[9];
  340. jsonTemp.VersionName = arr[11];
  341. jsonTemp.UseFlag = arr[5];
  342. jsonTemp.DrugSafetyStandardCode = "";
  343. jsonTemp.ApprovalNO = "";
  344. jsonTemp.SpecialFlag = "";
  345. jsonTemp.LimitFlag = "";
  346. jsonTemp.LimitRange = "";
  347. jsonTemp.UniqueRecordNO = arr[6];
  348. jsonTemp.Manufacturers = "";
  349. return jsonTemp;
  350. }
  351. /// <summary>
  352. /// 从TXT文件中获取手术数据,并组装成JSON
  353. /// </summary>
  354. /// <param name="arr"></param>
  355. /// <returns></returns>
  356. private JObject GetOperationJsonByTxt(string[] arr)
  357. {
  358. dynamic jsonTemp = new JObject();
  359. jsonTemp.ID = "";
  360. jsonTemp.updateUserID = Global.user.ID;
  361. jsonTemp.HospitalDr = Global.inf.hospitalDr;
  362. jsonTemp.InterfaceDr = Global.inf.interfaceDr;
  363. jsonTemp.Code = arr[10];
  364. jsonTemp.Name = arr[11];
  365. jsonTemp.HisType = "5";
  366. jsonTemp.HisTypeName = "手术";
  367. //jsonTemp.PinyinSearchCode = SpellCodeHelper.GetFirstPYLetter(arr[11]);
  368. jsonTemp.ValidFlag = arr[18];
  369. jsonTemp.Note = arr[17];
  370. jsonTemp.VersionNO = arr[22];
  371. jsonTemp.VersionName = arr[23];
  372. jsonTemp.UseFlag = arr[18];
  373. jsonTemp.UniqueRecordNO = arr[19];
  374. return jsonTemp;
  375. }
  376. /// <summary>
  377. /// DRGs
  378. /// </summary>
  379. /// <param name="arr"></param>
  380. /// <returns></returns>
  381. private JObject GetDRGsJsonByTxt(string[] arr)
  382. {
  383. dynamic jsonTemp = new JObject();
  384. jsonTemp.ID = "";
  385. jsonTemp.updateUserID = Global.user.ID;
  386. jsonTemp.HospitalDr = Global.inf.hospitalDr;
  387. jsonTemp.InterfaceDr = Global.inf.interfaceDr;
  388. jsonTemp.Code = arr[1];
  389. jsonTemp.Name = arr[2];
  390. jsonTemp.HisType = "7";
  391. jsonTemp.HisTypeName = "DRGs";
  392. jsonTemp.Connotation = arr[10];
  393. jsonTemp.Instructions = arr[3]; //适用手术操作代码
  394. jsonTemp.ExceptContent = arr[4]; //适用手术操作名称
  395. //jsonTemp.PinyinSearchCode = SpellCodeHelper.GetFirstPYLetter(arr[11]);
  396. jsonTemp.ValidFlag = arr[5];
  397. jsonTemp.Note = arr[11];
  398. jsonTemp.VersionNO = arr[9];
  399. jsonTemp.VersionName = arr[12];
  400. jsonTemp.UseFlag = arr[5];
  401. jsonTemp.UniqueRecordNO = arr[6];
  402. return jsonTemp;
  403. }
  404. private JObject GetDaySurgeryJsonByTxt(string[] arr)
  405. {
  406. dynamic jsonTemp = new JObject();
  407. jsonTemp.ID = "";
  408. jsonTemp.updateUserID = Global.user.ID;
  409. jsonTemp.HospitalDr = Global.inf.hospitalDr;
  410. jsonTemp.InterfaceDr = Global.inf.interfaceDr;
  411. jsonTemp.Code = arr[1];
  412. jsonTemp.Name = arr[2];
  413. jsonTemp.HisType = "8";
  414. jsonTemp.HisTypeName = "日间手术";
  415. jsonTemp.Connotation = arr[8];
  416. //jsonTemp.PinyinSearchCode = SpellCodeHelper.GetFirstPYLetter(arr[11]);
  417. jsonTemp.ValidFlag = arr[3];
  418. jsonTemp.Note = arr[9];
  419. jsonTemp.VersionNO = arr[7];
  420. jsonTemp.VersionName = arr[10];
  421. jsonTemp.UseFlag = arr[3];
  422. jsonTemp.UniqueRecordNO = arr[4];
  423. return jsonTemp;
  424. }
  425. /// <summary>
  426. /// 中药饮片
  427. /// </summary>
  428. /// <param name="arr"></param>
  429. /// <returns></returns>
  430. private JObject GetChineseDrugJsonByTxt(string[] arr)
  431. {
  432. dynamic jsonTemp = new JObject();
  433. jsonTemp.ID = "";
  434. jsonTemp.updateUserID = Global.user.ID;
  435. jsonTemp.HospitalDr = Global.inf.hospitalDr;
  436. jsonTemp.InterfaceDr = Global.inf.interfaceDr;
  437. jsonTemp.Code = arr[0];
  438. jsonTemp.Name = arr[1];
  439. jsonTemp.HisType = "10";
  440. jsonTemp.HisTypeName = "中药饮片";
  441. jsonTemp.Connotation = arr[8];
  442. //jsonTemp.PinyinSearchCode = SpellCodeHelper.GetFirstPYLetter(arr[11]);
  443. jsonTemp.ValidFlag = arr[3];
  444. jsonTemp.Note = arr[9];
  445. jsonTemp.VersionNO = arr[7];
  446. jsonTemp.VersionName = arr[10];
  447. jsonTemp.UseFlag = arr[3];
  448. jsonTemp.UniqueRecordNO = arr[4];
  449. return jsonTemp;
  450. }
  451. /// <summary>
  452. /// 医疗机构制剂
  453. /// </summary>
  454. /// <param name="arr"></param>
  455. /// <returns></returns>
  456. private JObject GetHosPreparationJsonByTxt(string[] arr)
  457. {
  458. dynamic jsonTemp = new JObject();
  459. jsonTemp.ID = "";
  460. jsonTemp.updateUserID = Global.user.ID;
  461. jsonTemp.HospitalDr = Global.inf.hospitalDr;
  462. jsonTemp.InterfaceDr = Global.inf.interfaceDr;
  463. jsonTemp.Code = arr[0];
  464. jsonTemp.Name = arr[1];
  465. jsonTemp.HisType = "11";
  466. jsonTemp.HisTypeName = "医疗机构制剂";
  467. jsonTemp.Connotation = arr[8];
  468. //jsonTemp.PinyinSearchCode = SpellCodeHelper.GetFirstPYLetter(arr[11]);
  469. jsonTemp.ValidFlag = arr[64];
  470. jsonTemp.Note = arr[9];
  471. jsonTemp.VersionNO = arr[70];
  472. jsonTemp.VersionName = arr[71];
  473. jsonTemp.UseFlag = arr[64];
  474. jsonTemp.UniqueRecordNO = arr[46]; //药品注册证号
  475. jsonTemp.Instructions = arr[77];
  476. jsonTemp.NationalCode = arr[57]; //国家医保药品目录编码
  477. jsonTemp.NationalName = arr[58]; //国家医保药品目录名称
  478. return jsonTemp;
  479. }
  480. public JObject importMedDataToIris(TradeEnum trade, JObject joRtn, Sunny.UI.UIProcessBar processBar)
  481. {
  482. string errorMsg = "";
  483. JObject dataRtn = Utils.ConvertResponse<JObject>(trade, joRtn, true);
  484. if (JsonHelper.parseCenterRtnValue(joRtn, out errorMsg) != 0)
  485. {
  486. return JsonHelper.setExceptionJson(-1, "下载目录信息失败", errorMsg);
  487. }
  488. JArray array = JArray.Parse(JsonHelper.getDestValue(dataRtn, "result"));
  489. if (array.Count < 2) {
  490. return JsonHelper.setIrisReturnValue(-1, "没有更多的数据了!", null);
  491. }
  492. foreach (var obj in array)
  493. {
  494. obj["updateUserID"]= Global.user.ID;
  495. obj["HospitalDr"] = Global.inf.hospitalDr;
  496. obj["InterfaceDr"] = Global.inf.interfaceDr;
  497. if (string.IsNullOrEmpty(obj["Name"].Text()) && !string.IsNullOrEmpty(obj["LocateName"].Text()))
  498. {
  499. obj["Name"] = obj["LocateName"];
  500. }
  501. if (trade == TradeEnum.ICPC3Treatment)
  502. {
  503. if (string.IsNullOrEmpty(obj["Code"].Text()))
  504. {
  505. obj["Code"] = obj["NationalCode"];
  506. }
  507. else
  508. {
  509. obj["Code"] = obj["NationalCode"] + "-" + obj["Code"];
  510. }
  511. }
  512. }
  513. int rows = array.Count;
  514. int size = 50;
  515. int pages = rows / size;
  516. processBar.Maximum = rows;
  517. for (int i = 0; i < pages; i++)
  518. {
  519. processBar.Value = (i + 1) * size;
  520. Application.DoEvents();
  521. //每50行提交一次给后台
  522. dynamic jaParams = array.ToList().GetRange(i * size, size).ToArray();
  523. applyDataToIris("09010035", JArray.Parse(JsonHelper.toJsonString(jaParams)));
  524. }
  525. processBar.Value = rows;
  526. Application.DoEvents();
  527. if (rows % size != 0)
  528. {
  529. dynamic jaParams = array.ToList().GetRange(pages * size, rows % size).ToArray();
  530. applyDataToIris("09010035", JArray.Parse(JsonHelper.toJsonString(jaParams)));
  531. }
  532. return JsonHelper.setIrisReturnValue(0, "成功", null);
  533. }
  534. /// <summary>
  535. /// 提交数据给IRIS
  536. /// </summary>
  537. /// <param name="code"></param>
  538. /// <param name="jaParam"></param>
  539. /// <returns></returns>
  540. private JObject applyDataToIris(string code, JArray jaParam)
  541. {
  542. JObject joIn = new JObject();
  543. JObject joRtn = new JObject();
  544. string outParam = "";
  545. try
  546. {
  547. joIn.Add(new JProperty("params", jaParam));
  548. joIn.Add("code", code);
  549. joIn.Add("updateUserID", Global.user.ID);
  550. InvokeHelper invoker = new InvokeHelper();
  551. string sInput = joIn.ToString();
  552. joRtn = invoker.invokeInsuService(sInput, "applyDataToIris");
  553. outParam = joRtn.ToString();
  554. return joRtn;
  555. }
  556. catch (Exception ex)
  557. {
  558. joRtn = JsonHelper.setExceptionJson(-1, "applyDataToIris", ex.Message);
  559. outParam = joRtn.ToString();
  560. return joRtn;
  561. }
  562. }
  563. /// <summary>
  564. /// 从TXT里导数据到IRIS
  565. /// </summary>
  566. /// <param name="txtPath"></param>
  567. /// <param name="singleRows"></param>
  568. /// <param name="direcType"></param>
  569. /// <param name="processBar"></param>
  570. /// <returns></returns>
  571. public JObject importDataToIrisByTxt(string txtPath, int size, int direcType, Sunny.UI.UIProcessBar processBar)
  572. {
  573. int errorCount = 0;
  574. string errorMsg = "";
  575. try
  576. {
  577. /*据说速度更快
  578. * https://www.cnblogs.com/eniac12/p/4398310.html
  579. * using (StreamReader sr = File.OpenText(fileName))
  580. {
  581. string s = String.Empty;
  582. while ((s = sr.ReadLine()) != null)
  583. {
  584. //do what you have to here
  585. }
  586. }
  587. Convert.ToString(a)
  588. */
  589. string[] lines = System.IO.File.ReadAllLines(txtPath);
  590. dynamic jaParams = new JArray();
  591. int rows = lines.Length;
  592. processBar.Maximum = rows;
  593. for (int i = 0; i < rows; i++)
  594. {
  595. processBar.Value = i + 1;
  596. Application.DoEvents();
  597. string lineTmp = lines[i];
  598. string[] arr = lineTmp.Split('\t');
  599. //判断是哪种目录类型
  600. string code = string.Empty;
  601. switch (direcType)
  602. {
  603. //药品
  604. case 1:
  605. {
  606. jaParams.Add(GetDrugsJsonByTxt(arr));
  607. break;
  608. }
  609. //诊疗
  610. case 2:
  611. {
  612. jaParams.Add(GetMedicalServiceJsonByTxt(arr));
  613. break;
  614. }
  615. //材料
  616. case 3:
  617. {
  618. jaParams.Add(GetMaterialJsonByTxt(arr));
  619. break;
  620. }
  621. //诊断
  622. case 4:
  623. {
  624. jaParams.Add(GetDiagnoseJsonByTxt(arr));
  625. break;
  626. }
  627. //手术
  628. case 5:
  629. {
  630. jaParams.Add(GetOperationJsonByTxt(arr));
  631. break;
  632. }
  633. //慢性病
  634. case 6:
  635. {
  636. jaParams.Add(GetChronicDiseaseJsonByTxt(arr));
  637. break;
  638. }
  639. //DRGs
  640. case 7:
  641. {
  642. jaParams.Add(GetDRGsJsonByTxt(arr));
  643. break;
  644. }
  645. //日间手术
  646. case 8:
  647. {
  648. jaParams.Add(GetDaySurgeryJsonByTxt(arr));
  649. break;
  650. }
  651. //中药饮片
  652. case 10:
  653. {
  654. jaParams.Add(GetChineseDrugJsonByTxt(arr));
  655. break;
  656. }
  657. //医疗机构制剂
  658. case 11:
  659. {
  660. jaParams.Add(GetHosPreparationJsonByTxt(arr));
  661. break;
  662. }
  663. }
  664. code = "09010035";
  665. //每10行提交一次给后台
  666. int currentRows = i + 1;
  667. if ((currentRows % size == 0) && (i != 0))
  668. {
  669. JObject joRtn = applyDataToIris(code, jaParams);
  670. if (joRtn["errorCode"].ToString() != "0")
  671. {
  672. errorCount = errorCount + 1;
  673. errorMsg = "\r\n" +errorMsg + joRtn["errorMessage"].ToString();
  674. }
  675. jaParams = new JArray();
  676. }
  677. if ((currentRows == rows) && (currentRows % size != 0))
  678. {
  679. JObject joRtn = applyDataToIris(code, jaParams);
  680. if (joRtn["errorCode"].ToString() != "0")
  681. {
  682. errorCount = errorCount + 1;
  683. errorMsg = "\r\n" + errorMsg + joRtn["errorMessage"].ToString();
  684. }
  685. jaParams = new JArray();
  686. }
  687. }
  688. return JsonHelper.setExceptionJson(0 - errorCount, errorMsg, null);
  689. }
  690. catch (Exception ex)
  691. {
  692. return JsonHelper.setExceptionJson(-1, "importDataToIrisByTxt", ex.Message);
  693. }
  694. }
  695. public int importDataToIrisByTxtNew(object[] o, out string errMsg, DataLoader.ProgressCallback callback, DataLoader.ProgressMaxCallback maxCallback, BackgroundWorker worker)
  696. {
  697. errMsg = "";
  698. int errorCount = 0;
  699. string txtPath = (string)o[0];
  700. int size = (int)o[1];
  701. int direcType = (int)o[2];
  702. try
  703. {
  704. string[] lines = System.IO.File.ReadAllLines(txtPath);
  705. dynamic jaParams = new JArray();
  706. int rows = lines.Length;
  707. maxCallback(rows);
  708. for (int i = 0; i < rows; i++)
  709. {
  710. // 检查是否应取消操作
  711. if (worker.CancellationPending)
  712. {
  713. errMsg = "操作取消!";
  714. return -1; // 或者其他表示取消的返回值
  715. }
  716. callback(i);
  717. string lineTmp = lines[i];
  718. string[] arr = lineTmp.Split('\t');
  719. //判断是哪种目录类型
  720. string code = string.Empty;
  721. switch (direcType)
  722. {
  723. //药品
  724. case 1:
  725. {
  726. jaParams.Add(GetDrugsJsonByTxt(arr));
  727. break;
  728. }
  729. //诊疗
  730. case 2:
  731. {
  732. jaParams.Add(GetMedicalServiceJsonByTxt(arr));
  733. break;
  734. }
  735. //材料
  736. case 3:
  737. {
  738. jaParams.Add(GetMaterialJsonByTxt(arr));
  739. break;
  740. }
  741. //诊断
  742. case 4:
  743. {
  744. jaParams.Add(GetDiagnoseJsonByTxt(arr));
  745. break;
  746. }
  747. //手术
  748. case 5:
  749. {
  750. jaParams.Add(GetOperationJsonByTxt(arr));
  751. break;
  752. }
  753. //慢性病
  754. case 6:
  755. {
  756. jaParams.Add(GetChronicDiseaseJsonByTxt(arr));
  757. break;
  758. }
  759. //DRGs
  760. case 7:
  761. {
  762. jaParams.Add(GetDRGsJsonByTxt(arr));
  763. break;
  764. }
  765. //日间手术
  766. case 8:
  767. {
  768. jaParams.Add(GetDaySurgeryJsonByTxt(arr));
  769. break;
  770. }
  771. //中药饮片
  772. case 10:
  773. {
  774. jaParams.Add(GetChineseDrugJsonByTxt(arr));
  775. break;
  776. }
  777. //医疗机构制剂
  778. case 11:
  779. {
  780. jaParams.Add(GetHosPreparationJsonByTxt(arr));
  781. break;
  782. }
  783. }
  784. code = "09010035";
  785. //每10行提交一次给后台
  786. int currentRows = i + 1;
  787. if ((currentRows % size == 0) && (i != 0))
  788. {
  789. JObject joRtn = applyDataToIris(code, jaParams);
  790. if (joRtn["errorCode"].ToString() != "0")
  791. {
  792. errorCount = errorCount + 1;
  793. errMsg = "\r\n" + errMsg + joRtn["errorMessage"].ToString();
  794. }
  795. jaParams = new JArray();
  796. }
  797. if ((currentRows == rows) && (currentRows % size != 0))
  798. {
  799. JObject joRtn = applyDataToIris(code, jaParams);
  800. if (joRtn["errorCode"].ToString() != "0")
  801. {
  802. errorCount = errorCount + 1;
  803. errMsg = "\r\n" + errMsg + joRtn["errorMessage"].ToString();
  804. }
  805. jaParams = new JArray();
  806. }
  807. }
  808. return 0-errorCount;
  809. }
  810. catch (Exception ex)
  811. {
  812. return -1;
  813. }
  814. }
  815. public JObject importDictionary(Sunny.UI.UIProcessBar uiProcessBar,JArray jaList,string type)
  816. {
  817. int errorCount = 0;
  818. string errorMsg = "",outParam = "", HBDictionaryDr ="";
  819. try
  820. {
  821. //插入并获取字典主表的DR
  822. JObject joData = new JObject();
  823. joData.Add("HospitalDr", Global.inf.hospitalDr);
  824. joData.Add("InterfaceDr", Global.inf.interfaceDr);
  825. joData.Add("InsuCode", type);
  826. JObject joRtn = mis.insertDictionary(joData);
  827. if (JsonHelper.parseIrisRtnValue(joRtn, out errorMsg) != 0)
  828. {
  829. return JsonHelper.setExceptionJson(-1, "insertDictionary", errorMsg);
  830. }
  831. else
  832. {
  833. HBDictionaryDr = JsonHelper.getDestValue(joRtn, "data.HBDictionaryDr");
  834. if (HBDictionaryDr == "")
  835. {
  836. return JsonHelper.setExceptionJson(-1, "insertDictionary", "HBDictionaryDr返回值为空");
  837. }
  838. }
  839. }
  840. catch (Exception ex)
  841. {
  842. return JsonHelper.setExceptionJson(-1, "insertDictionary", ex.Message);
  843. }
  844. JObject joReturn = new JObject();
  845. try
  846. {
  847. //插入字典明细表
  848. JArray jaParams = new JArray();
  849. int rows = jaList.Count ;
  850. uiProcessBar.Maximum = rows;
  851. for (int i = 0; i < jaList.Count ; i++)
  852. {
  853. uiProcessBar.Value = i + 1;
  854. dynamic joTmp = new JObject();
  855. joTmp.ID = "";
  856. joTmp.updateUserID = Global.user.ID;
  857. joTmp.HospitalDr = Global.inf.hospitalDr;
  858. joTmp.InterfaceDr = Global.inf.interfaceDr;
  859. joTmp.HBDictionaryDr = HBDictionaryDr;
  860. joTmp.Code = jaList[i]["value"].ToString();
  861. joTmp.Descripts = jaList[i]["label"].ToString();
  862. jaParams.Add(joTmp);
  863. //每50行提交一次给后台
  864. int currentRows = i + 1;
  865. if ((currentRows % 50 == 0) && (i != 0))
  866. {
  867. JObject joRtn = mis.insertDictionaryDataDetail(jaParams);
  868. if (joRtn["errorCode"].ToString() != "0")
  869. {
  870. errorCount = errorCount + 1;
  871. errorMsg = "\r\n" + errorMsg + joRtn["errorMessage"].ToString();
  872. }
  873. jaParams = new JArray();
  874. }
  875. if ((currentRows == rows) && (currentRows % 50 != 0))
  876. {
  877. JObject joRtn = mis.insertDictionaryDataDetail(jaParams);
  878. if (joRtn["errorCode"].ToString() != "0")
  879. {
  880. errorCount = errorCount + 1;
  881. errorMsg = "\r\n" + errorMsg + joRtn["errorMessage"].ToString();
  882. }
  883. jaParams = new JArray();
  884. }
  885. }
  886. joReturn = JsonHelper.setExceptionJson(0 - errorCount, errorMsg, null);
  887. outParam = joReturn.ToString();
  888. return joReturn;
  889. }
  890. catch (Exception ex)
  891. {
  892. joReturn = JsonHelper.setExceptionJson(-1, "importDictinary", ex.Message);
  893. outParam = joReturn.ToString();
  894. return joReturn;
  895. }
  896. }
  897. public JObject importDictionary(Sunny.UI.UIProcessBar uiProcessBar, JArray jaList)
  898. {
  899. int errorCount = 0;
  900. string errorMsg = "", outParam = "";
  901. //插入字典明细表
  902. JArray jaParams = new JArray();
  903. int rows = jaList.Count;
  904. int process = 0;
  905. //distinct 数组中的Type,提取主表需要插入大类
  906. var jaDistinctTypes = jaList
  907. .OfType<JObject>() // 确保元素是 JObject
  908. .Select(obj => (string)obj["type"]) // 获取 type 字段的值
  909. .Where(type => type != null) // 可选:过滤掉 null 值
  910. .Distinct() // 去重
  911. .ToList();
  912. JArray jaData = new JArray();
  913. //进度条值未主表插入条数 + 明细表插入条数
  914. uiProcessBar.Maximum = rows + jaDistinctTypes.Count;
  915. for (int i = 0; i < jaDistinctTypes.Count; i++)
  916. {
  917. process++;
  918. uiProcessBar.Value = process + 1;
  919. //先插入主表
  920. //插入并获取字典主表的DR
  921. JObject joData = new JObject();
  922. joData.Add("HospitalDr", Global.inf.hospitalDr);
  923. joData.Add("InterfaceDr", Global.inf.interfaceDr);
  924. joData.Add("InsuCode", jaDistinctTypes[i].ToString());
  925. jaParams.Add(joData);
  926. //每50行提交一次给后台
  927. int currentRows = i + 1;
  928. if ((currentRows % 50 == 0) || (currentRows == jaDistinctTypes.Count + 1))
  929. {
  930. JObject joRtn = mis.insertDictionary(jaParams);
  931. if (joRtn["errorCode"].ToString() != "0")
  932. {
  933. errorCount = errorCount + 1;
  934. errorMsg = "\r\n" + errorMsg + joRtn["errorMessage"].ToString();
  935. }
  936. else
  937. {
  938. JArray jaDataTmp = JArray.Parse(joRtn["data"].ToString());
  939. jaData.Merge(jaDataTmp);
  940. }
  941. jaParams = new JArray();
  942. }
  943. }
  944. // 转换JArray为字典,键为"InsuCode",值为"HBDictionaryDr"
  945. var dictionaryMap = new Dictionary<string, string>();
  946. foreach (var item in jaData)
  947. {
  948. var insuCode = item["InsuCode"].ToString();
  949. var hbDictionaryDr = item["HBDictionaryDr"].ToString();
  950. if (!dictionaryMap.ContainsKey(insuCode))
  951. {
  952. dictionaryMap[insuCode] = hbDictionaryDr;
  953. }
  954. }
  955. jaParams = new JArray();
  956. //后插入明细表
  957. for (int i = 0; i < jaList.Count; i++)
  958. {
  959. process++;
  960. uiProcessBar.Value = process + 1;
  961. dynamic joTmp = new JObject();
  962. joTmp.ID = "";
  963. joTmp.updateUserID = Global.user.ID;
  964. joTmp.HospitalDr = Global.inf.hospitalDr;
  965. joTmp.InterfaceDr = Global.inf.interfaceDr;
  966. joTmp.HBDictionaryDr = dictionaryMap[jaList[i]["type"].ToString()];
  967. joTmp.Code = jaList[i]["value"].ToString();
  968. joTmp.Descripts = jaList[i]["label"].ToString();
  969. jaParams.Add(joTmp);
  970. //每50行提交一次给后台
  971. int currentRows = i + 1;
  972. if ((currentRows % 50 == 0) || (currentRows == jaList.Count + 1))
  973. {
  974. JObject joRtn = mis.insertDictionaryDataDetail(jaParams);
  975. if (joRtn["errorCode"].ToString() != "0")
  976. {
  977. errorCount = errorCount + 1;
  978. errorMsg = "\r\n" + errorMsg + joRtn["errorMessage"].ToString();
  979. }
  980. jaParams = new JArray();
  981. }
  982. }
  983. JObject joReturn = JsonHelper.setExceptionJson(0 - errorCount, errorMsg, null);
  984. outParam = joReturn.ToString();
  985. return joReturn;
  986. }
  987. }
  988. }