You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1851 lines
82 KiB

2 months ago
  1. using Microsoft.AspNetCore.Mvc;
  2. using Microsoft.Extensions.Logging;
  3. using Shentun.Peis.CustomerOrgs;
  4. using Shentun.Peis.DataMigrations;
  5. using Shentun.Peis.Enums;
  6. using Shentun.Peis.ItemTypes;
  7. using Shentun.Peis.Models;
  8. using Shentun.Peis.MyUser;
  9. using Shentun.Utilities;
  10. using SqlSugar;
  11. using System;
  12. using System.Collections.Generic;
  13. using System.Data;
  14. using System.Linq;
  15. using System.Text;
  16. using System.Threading.Tasks;
  17. using Volo.Abp;
  18. using Volo.Abp.Application.Services;
  19. using Volo.Abp.Domain.Repositories;
  20. using Volo.Abp.Identity;
  21. using Volo.Abp.Uow;
  22. namespace Shentun.Peis.CQDJExportDatas
  23. {
  24. /// <summary>
  25. /// 重庆垫江数据导入
  26. /// </summary>
  27. public class CQDJExportDataAppService : ApplicationService
  28. {
  29. //默认指引类别ID
  30. private readonly char defaultGuidTypeId = '0';
  31. //默认体检报告类别ID
  32. private readonly char defaultMedicalReportTypeId = '0';
  33. //默认检查类别
  34. private readonly char defaultCheckTypeFlag = '0';
  35. //默认发票项目类别id
  36. private Guid defaultInvoiceItemTypeId = Guid.Empty;
  37. //默认汇总项目类别id
  38. private Guid defaultCollectItemTypeId = Guid.Empty;
  39. //默认企业性质
  40. private Guid defaultOrgTypeId = Guid.Empty;
  41. //默认容器ID
  42. private Guid defaultSampleContainerId = Guid.Empty;
  43. //默认体检中心
  44. private readonly Guid defaultMedicalCenterId = Guid.Parse("7b754abf-9882-4f23-affd-d50103febfee");
  45. //老系统数据库配置
  46. private readonly SqlSugarClient oldDb = new SqlSugarClient(new ConnectionConfig()
  47. {
  48. ConnectionString = "server=192.168.1.119;uid=sa;pwd=st@123;database=Peis;Encrypt=false;",
  49. DbType = SqlSugar.DbType.SqlServer,
  50. IsAutoCloseConnection = true
  51. });
  52. private readonly ILogger<CQDJExportDataAppService> _logger;
  53. private readonly UnitOfWorkManager _unitOfWorkManager;
  54. private readonly IRepository<IdentityUser, Guid> _identityUserRepository;
  55. private readonly MyUserAppService _myUserAppService;
  56. private readonly IRepository<ItemType, Guid> _itemTypeRepository;
  57. private readonly ItemTypeManager _itemTypeManager;
  58. private readonly IRepository<FieldComparison, Guid> _fieldComparisonRepository;
  59. private readonly IRepository<Item, Guid> _itemRepository;
  60. private readonly IRepository<Asbitem, Guid> _asbitemRepository;
  61. private readonly IRepository<AsbitemDetail> _asbitemDetailRepository;
  62. private readonly IRepository<MedicalPackage, Guid> _medicalPackageRepository;
  63. private readonly IRepository<MedicalPackageDetail> _medicalPackageDetailRepository;
  64. private readonly IRepository<DeviceType, Guid> _deviceTypeRepository;
  65. private readonly IRepository<Unit, Guid> _unitRepository;
  66. private readonly IRepository<CollectItemType, Guid> _collectItemTypeRepository;
  67. private readonly IRepository<InvoiceItemType, Guid> _invoiceItemTypeRepository;
  68. private readonly IRepository<AsbitemGuide> _asbitemGuideRepository;
  69. private readonly IRepository<CustomerOrg, Guid> _customerOrgRepository;
  70. private readonly CustomerOrgManager _customerOrgManager;
  71. private readonly IRepository<CustomerOrgRegister, Guid> _customerOrgRegisterRepository;
  72. private readonly IRepository<CustomerOrgGroup, Guid> _customerOrgGroupRepository;
  73. private readonly IRepository<CustomerOrgGroupDetail> _customerOrgGroupDetailRepository;
  74. private readonly IRepository<CustomerOrgType, Guid> _customerOrgTypeRepository;
  75. private readonly IRepository<SampleContainer, Guid> _sampleContainerRepository;
  76. public CQDJExportDataAppService(
  77. IRepository<IdentityUser, Guid> identityUserRepository,
  78. UnitOfWorkManager unitOfWorkManager,
  79. ILogger<CQDJExportDataAppService> logger,
  80. MyUserAppService myUserAppService,
  81. IRepository<ItemType, Guid> itemTypeRepository,
  82. ItemTypeManager itemTypeManager,
  83. IRepository<FieldComparison, Guid> fieldComparisonRepository,
  84. IRepository<Item, Guid> itemRepository,
  85. IRepository<Asbitem, Guid> asbitemRepository,
  86. IRepository<AsbitemDetail> asbitemDetailRepository,
  87. IRepository<MedicalPackage, Guid> medicalPackageRepository,
  88. IRepository<MedicalPackageDetail> medicalPackageDetailRepository,
  89. IRepository<DeviceType, Guid> deviceTypeRepository,
  90. IRepository<Unit, Guid> unitRepository,
  91. IRepository<CollectItemType, Guid> collectItemTypeRepository,
  92. IRepository<InvoiceItemType, Guid> invoiceItemTypeRepository,
  93. IRepository<AsbitemGuide> asbitemGuideRepository,
  94. IRepository<CustomerOrg, Guid> customerOrgRepository,
  95. CustomerOrgManager customerOrgManager,
  96. IRepository<CustomerOrgRegister, Guid> customerOrgRegisterRepository,
  97. IRepository<CustomerOrgGroup, Guid> customerOrgGroupRepository,
  98. IRepository<CustomerOrgGroupDetail> customerOrgGroupDetailRepository,
  99. IRepository<CustomerOrgType, Guid> customerOrgTypeRepository,
  100. IRepository<SampleContainer, Guid> sampleContainerRepository)
  101. {
  102. _identityUserRepository = identityUserRepository;
  103. _unitOfWorkManager = unitOfWorkManager;
  104. _logger = logger;
  105. _myUserAppService = myUserAppService;
  106. _itemTypeRepository = itemTypeRepository;
  107. _itemTypeManager = itemTypeManager;
  108. _fieldComparisonRepository = fieldComparisonRepository;
  109. _itemRepository = itemRepository;
  110. _asbitemRepository = asbitemRepository;
  111. _asbitemDetailRepository = asbitemDetailRepository;
  112. _medicalPackageRepository = medicalPackageRepository;
  113. _medicalPackageDetailRepository = medicalPackageDetailRepository;
  114. _deviceTypeRepository = deviceTypeRepository;
  115. _unitRepository = unitRepository;
  116. _collectItemTypeRepository = collectItemTypeRepository;
  117. _invoiceItemTypeRepository = invoiceItemTypeRepository;
  118. _asbitemGuideRepository = asbitemGuideRepository;
  119. _customerOrgRepository = customerOrgRepository;
  120. _customerOrgManager = customerOrgManager;
  121. _customerOrgRegisterRepository = customerOrgRegisterRepository;
  122. _customerOrgGroupRepository = customerOrgGroupRepository;
  123. _customerOrgGroupDetailRepository = customerOrgGroupDetailRepository;
  124. _customerOrgTypeRepository = customerOrgTypeRepository;
  125. _sampleContainerRepository = sampleContainerRepository;
  126. }
  127. /// <summary>
  128. /// 迁移后台用户数据
  129. /// </summary>
  130. /// <returns></returns>
  131. [HttpPost("api/app/CQDJExportData/TransferUserData")]
  132. public async Task TransferUserData()
  133. {
  134. var oldUserList = await oldDb.Ado.GetDataTableAsync("select GKHM,GKMM,XM from [futian_user].[GZRY]");
  135. if (oldUserList.Rows.Count > 0)
  136. {
  137. if (await _identityUserRepository.CountAsync() == 1)
  138. {
  139. foreach (DataRow row in oldUserList.Rows)
  140. {
  141. using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true))
  142. {
  143. string newUserName = LanguageConverter.GetPYSimpleCode(row["GKHM"].ToString().Trim());
  144. var isUserName = await _identityUserRepository.FirstOrDefaultAsync(m => m.UserName == newUserName);
  145. if (isUserName != null)
  146. {
  147. newUserName += "2";
  148. }
  149. var userEnt = new IdentityUserCreateNoEmailDto
  150. {
  151. Email = "",
  152. IsActive = true,
  153. LockoutEnabled = false,
  154. Name = "",
  155. Password = string.IsNullOrWhiteSpace(row["GKMM"].ToString()) ? "888888" : row["GKMM"].ToString(),
  156. PhoneNumber = "",
  157. RoleNames = new string[] { "admin" },
  158. Surname = row["XM"].ToString().Trim(),
  159. UserName = newUserName,
  160. UserPhoto = "",
  161. UserSign = ""
  162. };
  163. await _myUserAppService.CreateAsync(userEnt);
  164. await uow.CompleteAsync();
  165. }
  166. }
  167. }
  168. else
  169. {
  170. _logger.LogInformation("用户数据已存在,未处理");
  171. }
  172. }
  173. }
  174. /// <summary>
  175. /// 导入项目类别 仪器类别
  176. /// </summary>
  177. /// <returns></returns>
  178. [HttpPost("api/app/CQDJExportData/TransferBasicData")]
  179. public async Task TransferBasicData()
  180. {
  181. await InitData(); //初始数据
  182. await TransferItemTypeData();
  183. await TransferDeviceTypeData();
  184. }
  185. /// <summary>
  186. /// 导入项目相关
  187. /// </summary>
  188. /// <returns></returns>
  189. [HttpPost("api/app/CQDJExportData/TransferItemWithDetailData")]
  190. public async Task TransferItemWithDetailData()
  191. {
  192. await InitData(); //初始数据
  193. await TransferItemData();
  194. await TransferAsbitemData();
  195. await TransferAsbitemDetailData();
  196. await TransferMedicalPackageData();
  197. await TransferMedicalPackageDetailData();
  198. }
  199. /// <summary>
  200. /// 导入单位相关
  201. /// </summary>
  202. /// <returns></returns>
  203. [HttpPost("api/app/CQDJExportData/TransferCustomerWithDetailData")]
  204. public async Task TransferCustomerWithDetailData()
  205. {
  206. await InitData(); //初始数据
  207. await TransferTopCustomerOrgData();
  208. await TransferTwoCustomerOrgData();
  209. await TransferThreeCustomerOrgData();
  210. await TransferCustomerOrgRegisterData();
  211. await TransferCustomerOrgGroupData();
  212. await TransferCustomerOrgGroupDetailData();
  213. await TransferPHCustomerOrgGroupDetailData();
  214. }
  215. #region 基础
  216. /// <summary>
  217. /// 迁移项目类别-科室数据
  218. /// </summary>
  219. /// <returns></returns>
  220. private async Task TransferItemTypeData()
  221. {
  222. var count = await _itemTypeRepository.GetCountAsync();
  223. if (count == 0)
  224. {
  225. var oldItemTypeList = await oldDb.Ado.GetDataTableAsync("SELECT [LXBH],[MC],[XSLX],[JCJYLX] FROM [futian_user].[TJ_TJLXB] order by DISP_ORDER asc");
  226. if (oldItemTypeList.Rows.Count > 0)
  227. {
  228. foreach (DataRow row in oldItemTypeList.Rows)
  229. {
  230. using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true))
  231. {
  232. Guid itemTypeId = StringConvertGuidHelper.GenerateURLUUID(row["LXBH"].ToString().Trim());
  233. var data = new ItemType(itemTypeId)
  234. {
  235. DisplayName = row["MC"].ToString(),
  236. DisplayOrder = oldItemTypeList.Rows.IndexOf(row) + 1,
  237. SimpleCode = LanguageConverter.GetPYSimpleCode(row["MC"].ToString()),
  238. CheckTypeFlag = defaultCheckTypeFlag,
  239. GuidTypeId = defaultGuidTypeId,
  240. IsMergeAsbitem = 'N',
  241. IsWrap = 'N',
  242. MedicalReportTypeId = defaultMedicalReportTypeId,
  243. ParentId = null,
  244. PathCode = _itemTypeManager.CreatePathCode(null).Result,
  245. IsCheckRequest = 'N'
  246. };
  247. await _itemTypeRepository.InsertAsync(data);
  248. var fieldComparison = new FieldComparison
  249. {
  250. TableName = "item_type",
  251. FieldName = "id",
  252. NewKeyValue = itemTypeId.ToString(),
  253. OldKeyValue = row["LXBH"].ToString().Trim()
  254. };
  255. await _fieldComparisonRepository.InsertAsync(fieldComparison);
  256. await uow.CompleteAsync();
  257. }
  258. }
  259. }
  260. _logger.LogInformation($"项目类别数据处理完毕,处理数量{oldItemTypeList.Rows.Count}");
  261. }
  262. else
  263. {
  264. _logger.LogInformation($"项目类别数据已存在,未处理");
  265. }
  266. }
  267. /// <summary>
  268. /// 迁移仪器类别数据
  269. /// </summary>
  270. /// <returns></returns>
  271. private async Task TransferDeviceTypeData()
  272. {
  273. var count = await _deviceTypeRepository.GetCountAsync();
  274. if (count == 0)
  275. {
  276. //处理临床类型
  277. var oldDeviceTypeList = await oldDb.Ado.GetDataTableAsync(" select LCLX,MC from [futian_user].TJ_LCLXB order by DISP_ORDER asc");
  278. if (oldDeviceTypeList.Rows.Count > 0)
  279. {
  280. foreach (DataRow row in oldDeviceTypeList.Rows)
  281. {
  282. using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true))
  283. {
  284. Guid deviceTypeId = StringConvertGuidHelper.GenerateURLUUID(row["LCLX"].ToString());
  285. var data = new DeviceType(deviceTypeId)
  286. {
  287. CheckTypeFlag = '0',
  288. DisplayName = row["MC"].ToString(),
  289. DisplayOrder = oldDeviceTypeList.Rows.IndexOf(row) + 1,
  290. SimpleCode = LanguageConverter.GetPYSimpleCode(row["MC"].ToString())
  291. };
  292. await _deviceTypeRepository.InsertAsync(data);
  293. var fieldComparison = new FieldComparison
  294. {
  295. TableName = "device_type",
  296. FieldName = "id",
  297. NewKeyValue = deviceTypeId.ToString(),
  298. OldKeyValue = row["LCLX"].ToString()
  299. };
  300. await _fieldComparisonRepository.InsertAsync(fieldComparison);
  301. await uow.CompleteAsync();
  302. }
  303. }
  304. }
  305. //处理功能类型
  306. var oldGNLXList = await oldDb.Ado.GetDataTableAsync(" select GNLX from futian_user.TJ_ZHXM_HD where GNLX != '' group by GNLX");
  307. if (oldGNLXList.Rows.Count > 0)
  308. {
  309. foreach (DataRow row in oldGNLXList.Rows)
  310. {
  311. using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true))
  312. {
  313. Guid deviceTypeId = GuidGenerator.Create();
  314. var data = new DeviceType(deviceTypeId)
  315. {
  316. CheckTypeFlag = '1',
  317. DisplayName = row["GNLX"].ToString(),
  318. DisplayOrder = oldDeviceTypeList.Rows.IndexOf(row) + 1 + oldDeviceTypeList.Rows.Count,
  319. SimpleCode = LanguageConverter.GetPYSimpleCode(row["GNLX"].ToString())
  320. };
  321. await _deviceTypeRepository.InsertAsync(data);
  322. await uow.CompleteAsync();
  323. }
  324. }
  325. }
  326. _logger.LogInformation($"仪器类别数据处理完毕,处理数量{oldDeviceTypeList.Rows.Count}");
  327. }
  328. else
  329. {
  330. _logger.LogInformation("仪器类别数据已存在,未处理");
  331. }
  332. }
  333. #endregion
  334. #region 项目相关
  335. /// <summary>
  336. /// 迁移项目数据
  337. /// </summary>
  338. /// <returns></returns>
  339. private async Task TransferItemData()
  340. {
  341. var count = await _itemRepository.GetCountAsync();
  342. if (count == 0)
  343. {
  344. var oldItemList = await oldDb.Ado.GetDataTableAsync("select * from [futian_user].[TJ_TJXMB] order by DISP_ORDER asc ");
  345. if (oldItemList.Rows.Count > 0)
  346. {
  347. List<Item> tempItemList = new List<Item>();
  348. var unitList = await _unitRepository.GetListAsync();
  349. foreach (DataRow row in oldItemList.Rows)
  350. {
  351. var itemTypeId = Guid.Parse((await _fieldComparisonRepository.GetQueryableAsync()).Where(m => m.TableName == "item_type" && m.OldKeyValue == row["LXBH"].ToString().Trim()).FirstOrDefault().NewKeyValue);
  352. string mc = row["MC"].ToString();
  353. #region 重复项目跳过
  354. if (tempItemList.Count(f => f.DisplayName == row["MC"].ToString() && f.ItemTypeId == itemTypeId) > 0)
  355. {
  356. //项目类别下重名了
  357. _logger.LogInformation($"项目【{row["MC"].ToString()}】,Id【{row["TJXM"].ToString()}】已存在,跳过导入");
  358. continue;
  359. //mc = mc + "_重";
  360. //_logger.LogInformation($"项目【{row["MC"].ToString()}】,Id【{row["TJXM"].ToString()}】已存在,更改名称");
  361. }
  362. #endregion
  363. using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true))
  364. {
  365. #region 根据临床类型生成二级科室
  366. Guid? deviceTypeId = null;
  367. if (!string.IsNullOrWhiteSpace(row["LCLX"].ToString()))
  368. {
  369. deviceTypeId = Guid.Parse((await _fieldComparisonRepository.GetQueryableAsync()).Where(m => m.TableName == "device_type" && m.OldKeyValue == row["LCLX"].ToString()).FirstOrDefault().NewKeyValue);
  370. var itemTypeEnt = await _itemTypeRepository.GetAsync(itemTypeId);
  371. var deviceTypeEnt = await _deviceTypeRepository.GetAsync(deviceTypeId.Value);
  372. var itemTypeChildEnt = await _itemTypeRepository.FirstOrDefaultAsync(m => m.ParentId == itemTypeEnt.Id && m.DisplayName == deviceTypeEnt.DisplayName);
  373. if (itemTypeChildEnt == null)
  374. {
  375. Guid autoItemTypeId = GuidGenerator.Create();
  376. #region 排序值
  377. int displayOrder = (await _itemTypeRepository.CountAsync(m => m.ParentId == itemTypeEnt.Id)) + 1;
  378. #endregion
  379. var item_type_data = new ItemType(autoItemTypeId)
  380. {
  381. DisplayName = deviceTypeEnt.DisplayName,
  382. DisplayOrder = displayOrder,
  383. SimpleCode = LanguageConverter.GetPYSimpleCode(deviceTypeEnt.DisplayName),
  384. CheckTypeFlag = itemTypeEnt.CheckTypeFlag,
  385. GuidTypeId = itemTypeEnt.GuidTypeId,
  386. IsMergeAsbitem = itemTypeEnt.IsMergeAsbitem,
  387. IsWrap = itemTypeEnt.IsWrap,
  388. MedicalReportTypeId = itemTypeEnt.MedicalReportTypeId,
  389. ParentId = itemTypeEnt.Id,
  390. PathCode = _itemTypeManager.CreatePathCode(itemTypeEnt.Id).Result,
  391. IsCheckRequest = itemTypeEnt.IsCheckRequest
  392. };
  393. await _itemTypeRepository.InsertAsync(item_type_data);
  394. itemTypeId = autoItemTypeId;
  395. }
  396. else
  397. {
  398. itemTypeId = itemTypeChildEnt.Id;
  399. }
  400. }
  401. #endregion
  402. Guid? unitId = null;
  403. if (!string.IsNullOrWhiteSpace(row["DW"].ToString()))
  404. {
  405. var tempUnit = unitList.FirstOrDefault(f => f.DisplayName == row["DW"].ToString().Trim());
  406. if (tempUnit == null)
  407. {
  408. //创建单位
  409. Guid newUnitId = GuidGenerator.Create();
  410. var unitEntity = new Unit(newUnitId)
  411. {
  412. DisplayName = row["DW"].ToString().Trim(),
  413. DisplayOrder = unitList.Count + oldItemList.Rows.IndexOf(row) + 1,
  414. SimpleCode = LanguageConverter.GetPYSimpleCode(row["DW"].ToString().Trim())
  415. };
  416. await _unitRepository.InsertAsync(unitEntity);
  417. unitId = newUnitId;
  418. }
  419. else
  420. {
  421. unitId = tempUnit.Id;
  422. }
  423. }
  424. Guid itemId = StringConvertGuidHelper.GenerateURLUUID(row["TJXM"].ToString());
  425. var data = new Item(itemId)
  426. {
  427. DisplayName = mc,
  428. DisplayOrder = oldItemList.Rows.IndexOf(row) + 1,
  429. SimpleCode = LanguageConverter.GetPYSimpleCode(row["MC"].ToString()),
  430. CalculationFunction = "",
  431. DefaultResult = row["ZCTS"].ToString(),
  432. DiagnosisFunction = "",
  433. EnglishShortName = "",
  434. InputCheck = "",
  435. IsActive = row["QYBZ"].ToString() == "1" ? 'Y' : 'N',
  436. IsCalculationItem = 'N',
  437. IsContinueProcess = 'N',
  438. IsDiagnosisFunction = 'N',
  439. IsNameIntoSummary = Convert.ToChar(row["MCJRXJ"]),
  440. IsProduceSummary = Convert.ToChar(row["SFXJ"]),
  441. ItemTypeId = itemTypeId,
  442. LineModeFlag = '0',
  443. Price = 0,
  444. PriceItemId = null,
  445. ReferenceRangeTypeFlag = row["JGLX"].ToString().Trim() == "1" ? '1' : '2',
  446. ResultTemplateTypeFlag = '0',
  447. UnitId = unitId,
  448. DeviceTypeId = deviceTypeId
  449. };
  450. await _itemRepository.InsertAsync(data);
  451. tempItemList.Add(data);
  452. //if (row["reference_range_type"].ToString() == "2" && !string.IsNullOrWhiteSpace(row["reference_range_value"].ToString()))
  453. //{
  454. // //增加字符型参考范围到参考范围表
  455. // Guid referenceRangeId = GuidGenerator.Create();
  456. // var referenceRange = new ReferenceRange(referenceRangeId)
  457. // {
  458. // AgeLowerLimit = 0,
  459. // AgeUpperLimit = 200,
  460. // CriticalRangeValue = "",
  461. // ItemId = itemId,
  462. // ForSexId = ForSexFlag.All,
  463. // LowerDiagnosisId = null,
  464. // ReferenceRangeTypeFlag = ItemReferenceRangeTypeFlag.Character,
  465. // UpperDiagnosisId = null,
  466. // ReferenceRangeValue = row["reference_range_value"].ToString()
  467. // };
  468. // //referenceRanges.Add(referenceRange);
  469. // await _referenceRangeRepository.InsertAsync(referenceRange);
  470. //}
  471. var fieldComparison = new FieldComparison
  472. {
  473. TableName = "item",
  474. FieldName = "id",
  475. NewKeyValue = itemId.ToString(),
  476. OldKeyValue = row["TJXM"].ToString()
  477. };
  478. await _fieldComparisonRepository.InsertAsync(fieldComparison);
  479. await uow.CompleteAsync();
  480. }
  481. }
  482. }
  483. _logger.LogInformation($"项目数据处理完毕,处理数量{oldItemList.Rows.Count}");
  484. }
  485. else
  486. {
  487. _logger.LogInformation("项目数据已存在,未处理");
  488. }
  489. }
  490. /// <summary>
  491. /// 迁移组合项目数据
  492. /// </summary>
  493. /// <returns></returns>
  494. private async Task TransferAsbitemData()
  495. {
  496. var count = await _asbitemRepository.GetCountAsync();
  497. if (count == 0)
  498. {
  499. var oldAsbitemList = await oldDb.Ado.GetDataTableAsync(" select * from futian_user.TJ_ZHXM_HD order by DISP_ORDER asc ");
  500. if (oldAsbitemList.Rows.Count > 0)
  501. {
  502. List<Asbitem> tempAsbitemList = new List<Asbitem>();
  503. foreach (DataRow row in oldAsbitemList.Rows)
  504. {
  505. string mc = row["MC"].ToString();
  506. #region 重复组合项目跳过
  507. if (tempAsbitemList.Count(f => f.DisplayName == row["MC"].ToString()) > 0)
  508. {
  509. //重名了
  510. //mc = mc + "_重";
  511. _logger.LogInformation($"组合项目【{row["MC"].ToString()}】,Id【{row["BH"].ToString()}】已存在,跳过导入");
  512. continue;
  513. }
  514. #endregion
  515. using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true))
  516. {
  517. #region 根据仪器类别生成二级科室
  518. var itemTypeId = Guid.Parse((await _fieldComparisonRepository.GetQueryableAsync()).Where(m => m.TableName == "item_type" && m.OldKeyValue == row["TJLX"].ToString().Trim()).FirstOrDefault().NewKeyValue);
  519. Guid? deviceTypeId = null;
  520. if (!string.IsNullOrWhiteSpace(row["LCLX"].ToString()) || !string.IsNullOrWhiteSpace(row["GNLX"].ToString()))
  521. {
  522. var deviceTypeEnt = new DeviceType();
  523. if (!string.IsNullOrWhiteSpace(row["LCLX"].ToString()))
  524. {
  525. deviceTypeId = Guid.Parse((await _fieldComparisonRepository.GetQueryableAsync()).Where(m => m.TableName == "device_type" && m.OldKeyValue == row["LCLX"].ToString().Trim()).FirstOrDefault().NewKeyValue);
  526. deviceTypeEnt = await _deviceTypeRepository.GetAsync(deviceTypeId.Value);
  527. }
  528. else
  529. {
  530. deviceTypeEnt = await _deviceTypeRepository.FirstOrDefaultAsync(f => f.DisplayName == row["GNLX"].ToString());
  531. }
  532. var itemTypeEnt = await _itemTypeRepository.GetAsync(itemTypeId);
  533. var itemTypeChildEnt = await _itemTypeRepository.FirstOrDefaultAsync(m => m.ParentId == itemTypeEnt.Id && m.DisplayName == deviceTypeEnt.DisplayName);
  534. if (itemTypeChildEnt == null)
  535. {
  536. Guid autoItemTypeId = GuidGenerator.Create();
  537. #region 排序值
  538. int displayOrder = (await _itemTypeRepository.CountAsync(m => m.ParentId == itemTypeEnt.Id)) + 1;
  539. #endregion
  540. var item_type_data = new ItemType(autoItemTypeId)
  541. {
  542. DisplayName = deviceTypeEnt.DisplayName,
  543. DisplayOrder = displayOrder,
  544. SimpleCode = LanguageConverter.GetPYSimpleCode(deviceTypeEnt.DisplayName),
  545. CheckTypeFlag = itemTypeEnt.CheckTypeFlag,
  546. GuidTypeId = itemTypeEnt.GuidTypeId,
  547. IsMergeAsbitem = itemTypeEnt.IsMergeAsbitem,
  548. IsWrap = itemTypeEnt.IsWrap,
  549. MedicalReportTypeId = itemTypeEnt.MedicalReportTypeId,
  550. ParentId = itemTypeEnt.Id,
  551. PathCode = _itemTypeManager.CreatePathCode(itemTypeEnt.Id).Result,
  552. IsCheckRequest = itemTypeEnt.IsCheckRequest
  553. };
  554. await _itemTypeRepository.InsertAsync(item_type_data);
  555. itemTypeId = autoItemTypeId;
  556. }
  557. else
  558. {
  559. itemTypeId = itemTypeChildEnt.Id;
  560. }
  561. }
  562. #endregion
  563. Guid asbitemId = StringConvertGuidHelper.GenerateURLUUID(row["BH"].ToString().Trim());
  564. var data = new Asbitem(asbitemId)
  565. {
  566. DisplayName = mc,
  567. DisplayOrder = oldAsbitemList.Rows.IndexOf(row) + 1,
  568. SimpleCode = LanguageConverter.GetPYSimpleCode(row["MC"].ToString()),
  569. DefaultResult = row["ZCXJ"].ToString(),
  570. DiagnosisFunction = "",
  571. IsActive = row["YXBZ"].ToString() == "1" ? 'Y' : 'N',
  572. IsContinueProcess = 'N',
  573. IsDiagnosisFunction = 'N',
  574. ItemTypeId = itemTypeId,
  575. Price = Convert.ToDecimal(row["DJ"]),
  576. DeviceTypeId = deviceTypeId,
  577. ClinicalMeaning = row["LCYY"].ToString(),
  578. ForSexId = ConvertForSex(row["XB"].ToString()),
  579. CollectItemTypeId = defaultCollectItemTypeId,
  580. IsBeforeEat = row["SFCQ"].ToString() == "0" ? 'Y' : 'N',
  581. IsCheck = 'Y',
  582. IsItemResultMerger = 'N',
  583. IsPictureRotate = 'N',
  584. QueueTime = 0,
  585. ShortName = row["MC"].ToString().Length > 20 ? "" : row["MC"].ToString(),
  586. BarcodeMode = '0',
  587. DiseaseScreeningTypeId = null,
  588. ForPregnantFlag = 'A',
  589. IsWebAppoint = 'N',
  590. MaritalStatusId = 'A',
  591. Warn = "",
  592. IsOutsend = 'N',
  593. MedicalCenterId = defaultMedicalCenterId
  594. };
  595. await _asbitemRepository.InsertAsync(data);
  596. tempAsbitemList.Add(data);
  597. #region 指引信息
  598. if (!string.IsNullOrWhiteSpace(row["TSXX"].ToString()))
  599. {
  600. var asbitemGuideData = new AsbitemGuide
  601. {
  602. AsbitemId = asbitemId,
  603. ForSexId = ForSexFlag.All,
  604. Guide = row["TSXX"].ToString(),
  605. MedicalCenterId = defaultMedicalCenterId
  606. };
  607. await _asbitemGuideRepository.InsertAsync(asbitemGuideData);
  608. }
  609. #endregion
  610. var fieldComparison = new FieldComparison
  611. {
  612. TableName = "asbitem",
  613. FieldName = "id",
  614. NewKeyValue = asbitemId.ToString(),
  615. OldKeyValue = row["BH"].ToString().Trim()
  616. };
  617. await _fieldComparisonRepository.InsertAsync(fieldComparison);
  618. await uow.CompleteAsync();
  619. }
  620. }
  621. }
  622. _logger.LogInformation($"组合项目数据处理完毕,处理数量{oldAsbitemList.Rows.Count}");
  623. }
  624. else
  625. {
  626. _logger.LogInformation("组合项目数据已存在,未处理");
  627. }
  628. }
  629. /// <summary>
  630. /// 迁移组合项目明细数据 无字典
  631. /// </summary>
  632. /// <returns></returns>
  633. private async Task TransferAsbitemDetailData()
  634. {
  635. var count = await _asbitemDetailRepository.GetCountAsync();
  636. if (count == 0)
  637. {
  638. var oldAsbitemDetailList = await oldDb.Ado.GetDataTableAsync("select * from [futian_user].[TJ_ZHXM_DT] ");
  639. if (oldAsbitemDetailList.Rows.Count > 0)
  640. {
  641. foreach (DataRow row in oldAsbitemDetailList.Rows)
  642. {
  643. using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true))
  644. {
  645. var asbitem_dz = (await _fieldComparisonRepository.GetQueryableAsync()).Where(m => m.TableName == "asbitem" && m.OldKeyValue == row["BH"].ToString().Trim()).FirstOrDefault();
  646. var item_dz = (await _fieldComparisonRepository.GetQueryableAsync()).Where(m => m.TableName == "item" && m.OldKeyValue == row["TJXM"].ToString().Trim()).FirstOrDefault();
  647. if (asbitem_dz != null && item_dz != null)
  648. {
  649. Guid asbitemId = Guid.Parse(asbitem_dz.NewKeyValue);
  650. Guid itemId = Guid.Parse(item_dz.NewKeyValue);
  651. var data = new AsbitemDetail
  652. {
  653. AsbitemId = asbitemId,
  654. ItemId = itemId
  655. };
  656. await _asbitemDetailRepository.InsertAsync(data);
  657. await uow.CompleteAsync();
  658. }
  659. else
  660. {
  661. _logger.LogInformation($"组合项目明细未找到,asbitem_id=>【{row["BH"].ToString().Trim()}】,item_id=>【{row["TJXM"].ToString().Trim()}】");
  662. }
  663. }
  664. }
  665. }
  666. _logger.LogInformation($"组合项目明细数据处理完毕,处理数量{oldAsbitemDetailList.Rows.Count}");
  667. }
  668. else
  669. {
  670. _logger.LogInformation("组合项目明细数据已存在,未处理");
  671. }
  672. }
  673. /// <summary>
  674. /// 迁移体检套餐数据
  675. /// </summary>
  676. /// <returns></returns>
  677. private async Task TransferMedicalPackageData()
  678. {
  679. var count = await _medicalPackageRepository.GetCountAsync();
  680. if (count == 0)
  681. {
  682. var oldMedicalPackageList = await oldDb.Ado.GetDataTableAsync("select * from [futian_user].TJ_TC_HD order by DISP_ORDER asc");
  683. if (oldMedicalPackageList.Rows.Count > 0)
  684. {
  685. foreach (DataRow row in oldMedicalPackageList.Rows)
  686. {
  687. using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true))
  688. {
  689. Guid medicalPackageId = StringConvertGuidHelper.GenerateURLUUID(row["BH"].ToString().Trim());
  690. var data = new MedicalPackage(medicalPackageId)
  691. {
  692. DisplayName = row["MC"].ToString(),
  693. DisplayOrder = oldMedicalPackageList.Rows.IndexOf(row) + 1,
  694. SimpleCode = LanguageConverter.GetPYSimpleCode(row["MC"].ToString()),
  695. ForSexId = ConvertForSex(row["XB"].ToString()),
  696. IsActive = row["SFQY"].ToString() == "1" ? 'Y' : 'N',
  697. Price = Convert.ToDecimal(row["JG"].ToString()),
  698. Remark = row["BZ"].ToString(),
  699. AgeLowerLimit = 0,
  700. AgeUpperLimit = 200,
  701. IsBasicRecommend = 'N',
  702. IsWebAppoint = 'N',
  703. MaritalStatusId = 'A'
  704. };
  705. await _medicalPackageRepository.InsertAsync(data);
  706. var fieldComparison = new FieldComparison
  707. {
  708. TableName = "medical_package",
  709. FieldName = "id",
  710. NewKeyValue = medicalPackageId.ToString(),
  711. OldKeyValue = row["BH"].ToString().Trim()
  712. };
  713. await _fieldComparisonRepository.InsertAsync(fieldComparison);
  714. await uow.CompleteAsync();
  715. }
  716. }
  717. }
  718. _logger.LogInformation($"体检套餐数据处理完毕,处理数量{oldMedicalPackageList.Rows.Count}");
  719. }
  720. else
  721. {
  722. _logger.LogInformation("体检套餐数据已存在,未处理");
  723. }
  724. }
  725. /// <summary>
  726. /// 迁移体检套餐明细数据 无字典
  727. /// </summary>
  728. /// <returns></returns>
  729. private async Task TransferMedicalPackageDetailData()
  730. {
  731. var count = await _medicalPackageDetailRepository.GetCountAsync();
  732. if (count == 0)
  733. {
  734. var oldMedicalPackageDetailList = await oldDb.Ado.GetDataTableAsync("select * from [futian_user].[TJ_TC_DT] ");
  735. if (oldMedicalPackageDetailList.Rows.Count > 0)
  736. {
  737. foreach (DataRow row in oldMedicalPackageDetailList.Rows)
  738. {
  739. using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true))
  740. {
  741. var asbitem_dz = (await _fieldComparisonRepository.GetQueryableAsync()).Where(m => m.TableName == "asbitem" && m.OldKeyValue == row["ZHXM"].ToString().Trim()).FirstOrDefault();
  742. var medical_package_dz = (await _fieldComparisonRepository.GetQueryableAsync()).Where(m => m.TableName == "medical_package" && m.OldKeyValue == row["TCBH"].ToString().Trim()).FirstOrDefault();
  743. if (asbitem_dz != null && medical_package_dz != null)
  744. {
  745. Guid asbitemId = Guid.Parse(asbitem_dz.NewKeyValue);
  746. Guid MedicalPackageId = Guid.Parse(medical_package_dz.NewKeyValue);
  747. var asbitemEnt = await _asbitemRepository.GetAsync(asbitemId);
  748. var data = new MedicalPackageDetail
  749. {
  750. AsbitemId = asbitemId,
  751. Amount = 1,
  752. MedicalPackageId = MedicalPackageId,
  753. Price = asbitemEnt.Price
  754. };
  755. await _medicalPackageDetailRepository.InsertAsync(data);
  756. await uow.CompleteAsync();
  757. }
  758. else
  759. {
  760. _logger.LogInformation($"套餐明细未找到,asbitem_id=>【{row["ZHXM"].ToString().Trim()}】,medical_package_id=>【{row["TCBH"].ToString().Trim()}】");
  761. }
  762. }
  763. }
  764. }
  765. _logger.LogInformation($"体检套餐明细数据处理完毕,处理数量{oldMedicalPackageDetailList.Rows.Count}");
  766. }
  767. else
  768. {
  769. _logger.LogInformation("体检套餐明细数据已存在,未处理");
  770. }
  771. }
  772. #endregion
  773. #region 单位相关
  774. /// <summary>
  775. /// 迁移体检单位数据 一级
  776. /// </summary>
  777. /// <returns></returns>
  778. private async Task TransferTopCustomerOrgData()
  779. {
  780. var count = await _customerOrgRepository.GetCountAsync();
  781. if (count == 0)
  782. {
  783. var oldCustomerOrgList = await oldDb.Ado.GetDataTableAsync(" select * from [futian_user].HYDWDMB where len(BH)=4 order by BH asc");
  784. if (oldCustomerOrgList.Rows.Count > 0)
  785. {
  786. foreach (DataRow row in oldCustomerOrgList.Rows)
  787. {
  788. using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true))
  789. {
  790. Guid customerOrgId = StringConvertGuidHelper.GenerateURLUUID(row["BH"].ToString());
  791. if (row["BH"].ToString() == "0000")
  792. {
  793. customerOrgId = Guid.Parse("00000000-0000-0000-0000-000000000001");
  794. }
  795. #region 备注 导入联系人姓名、电话
  796. string remark = "";
  797. if (!string.IsNullOrWhiteSpace(row["DWFZR"].ToString()))
  798. {
  799. remark = row["DWFZR"].ToString();
  800. }
  801. if (!string.IsNullOrWhiteSpace(row["LXDH"].ToString()))
  802. {
  803. if (!string.IsNullOrWhiteSpace(remark))
  804. {
  805. remark += "|" + row["LXDH"].ToString();
  806. }
  807. else
  808. {
  809. remark = row["LXDH"].ToString();
  810. }
  811. }
  812. #endregion
  813. var data = new CustomerOrg(customerOrgId)
  814. {
  815. Accounts = "",
  816. Address = row["LXDZ"].ToString(),
  817. Bank = "",
  818. DisplayName = row["MC"].ToString(),
  819. DisplayOrder = oldCustomerOrgList.Rows.IndexOf(row) + 1,
  820. Fax = "",
  821. InvoiceName = row["MC"].ToString(),
  822. IsActive = 'Y',
  823. IsLock = 'N',
  824. MedicalCenterId = defaultMedicalCenterId,
  825. OrgTypeId = defaultOrgTypeId, //默认为私营
  826. ParentId = null,
  827. PathCode = _customerOrgManager.CreatePathCode(null).GetAwaiter().GetResult(),
  828. PostalCode = row["YZBM"].ToString(),
  829. Remark = remark,
  830. ShortName = row["MC"].ToString(),
  831. SimpleCode = LanguageConverter.GetPYSimpleCode(row["MC"].ToString()),
  832. Telephone = row["LXDH"].ToString(),
  833. CountryOrgCode = row["BH"].ToString(),
  834. SalesPerson = "",
  835. SalesPersonPhone = "",
  836. MedicalTypeId = null
  837. };
  838. await _customerOrgRepository.InsertAsync(data);
  839. var fieldComparison = new FieldComparison
  840. {
  841. FieldName = "id",
  842. NewKeyValue = customerOrgId.ToString(),
  843. OldKeyValue = row["BH"].ToString(),
  844. TableName = "customer_org"
  845. };
  846. await _fieldComparisonRepository.InsertAsync(fieldComparison);
  847. await uow.CompleteAsync();
  848. }
  849. }
  850. }
  851. _logger.LogInformation($"体检单位一级数据处理完毕,处理数量{oldCustomerOrgList.Rows.Count}");
  852. }
  853. else
  854. {
  855. _logger.LogInformation("体检单位一级数据已存在,未处理");
  856. }
  857. }
  858. /// <summary>
  859. /// 迁移体检单位数据 二级
  860. /// </summary>
  861. /// <returns></returns>
  862. private async Task TransferTwoCustomerOrgData()
  863. {
  864. var count = (await _customerOrgRepository.GetQueryableAsync()).Where(m => m.PathCode.Length > 5).Count();
  865. if (count == 0)
  866. {
  867. var oldCustomerOrgList = await oldDb.Ado.GetDataTableAsync("select * from [futian_user].HYDWDMB where len(BH)=7 order by BH asc");
  868. if (oldCustomerOrgList.Rows.Count > 0)
  869. {
  870. List<FieldComparison> fieldComparisonList = await _fieldComparisonRepository.GetListAsync(m => m.TableName == "customer_org");
  871. foreach (DataRow row in oldCustomerOrgList.Rows)
  872. {
  873. using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true))
  874. {
  875. #region 查找上级ID
  876. string oldId = row["BH"].ToString();
  877. string oldParentId = oldId.Substring(0, 4);
  878. Guid parentId = Guid.Parse(fieldComparisonList.Where(m => m.OldKeyValue == oldParentId).FirstOrDefault().NewKeyValue);
  879. #endregion
  880. Guid customerOrgId = StringConvertGuidHelper.GenerateURLUUID(row["BH"].ToString());
  881. #region 备注 导入联系人姓名、电话
  882. string remark = "";
  883. if (!string.IsNullOrWhiteSpace(row["DWFZR"].ToString()))
  884. {
  885. remark = row["DWFZR"].ToString();
  886. }
  887. if (!string.IsNullOrWhiteSpace(row["LXDH"].ToString()))
  888. {
  889. if (!string.IsNullOrWhiteSpace(remark))
  890. {
  891. remark += "|" + row["LXDH"].ToString();
  892. }
  893. else
  894. {
  895. remark = row["LXDH"].ToString();
  896. }
  897. }
  898. #endregion
  899. var data = new CustomerOrg(customerOrgId)
  900. {
  901. Accounts = "",
  902. Address = row["LXDZ"].ToString(),
  903. Bank = "",
  904. DisplayName = row["MC"].ToString(),
  905. DisplayOrder = oldCustomerOrgList.Rows.IndexOf(row) + 1,
  906. Fax = "",
  907. InvoiceName = row["MC"].ToString(),
  908. IsActive = 'Y',
  909. IsLock = 'N',
  910. MedicalCenterId = defaultMedicalCenterId,
  911. OrgTypeId = defaultOrgTypeId, //默认为私营
  912. ParentId = parentId,
  913. PathCode = _customerOrgManager.CreatePathCode(parentId).GetAwaiter().GetResult(),
  914. PostalCode = row["YZBM"].ToString(),
  915. Remark = remark,
  916. ShortName = row["MC"].ToString(),
  917. SimpleCode = LanguageConverter.GetPYSimpleCode(row["MC"].ToString()),
  918. Telephone = row["LXDH"].ToString(),
  919. CountryOrgCode = row["BH"].ToString(),
  920. SalesPerson = "",
  921. SalesPersonPhone = "",
  922. MedicalTypeId = null
  923. };
  924. await _customerOrgRepository.InsertAsync(data);
  925. var fieldComparison = new FieldComparison
  926. {
  927. FieldName = "id",
  928. NewKeyValue = customerOrgId.ToString(),
  929. OldKeyValue = row["BH"].ToString(),
  930. TableName = "customer_org"
  931. };
  932. await _fieldComparisonRepository.InsertAsync(fieldComparison);
  933. await uow.CompleteAsync();
  934. }
  935. }
  936. }
  937. _logger.LogInformation($"体检单位二级数据处理完毕,处理数量{oldCustomerOrgList.Rows.Count}");
  938. }
  939. else
  940. {
  941. _logger.LogInformation("体检单位二级数据已存在,未处理");
  942. }
  943. }
  944. /// <summary>
  945. /// 迁移体检单位数据 三级
  946. /// </summary>
  947. /// <returns></returns>
  948. private async Task TransferThreeCustomerOrgData()
  949. {
  950. var count = (await _customerOrgRepository.GetQueryableAsync()).Where(m => m.PathCode.Length > 11).Count();
  951. if (count == 0)
  952. {
  953. var oldCustomerOrgList = await oldDb.Ado.GetDataTableAsync("select * from [futian_user].HYDWDMB where len(BH)=10 order by BH asc");
  954. if (oldCustomerOrgList.Rows.Count > 0)
  955. {
  956. List<FieldComparison> fieldComparisonList = await _fieldComparisonRepository.GetListAsync(m => m.TableName == "customer_org");
  957. foreach (DataRow row in oldCustomerOrgList.Rows)
  958. {
  959. string oldId = row["BH"].ToString();
  960. string oldParentId = oldId.Substring(0, 7);
  961. var parentFirst = fieldComparisonList.Where(m => m.OldKeyValue == oldParentId).FirstOrDefault();
  962. if (parentFirst != null)
  963. {
  964. using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true))
  965. {
  966. #region 查找上级ID
  967. Guid parentId = Guid.Parse(parentFirst.NewKeyValue);
  968. #endregion
  969. // Guid customerOrgId = GuidGenerator.Create();
  970. Guid customerOrgId = StringConvertGuidHelper.GenerateURLUUID(row["BH"].ToString());
  971. #region 备注 导入联系人姓名、电话
  972. string remark = "";
  973. if (!string.IsNullOrWhiteSpace(row["DWFZR"].ToString()))
  974. {
  975. remark = row["DWFZR"].ToString();
  976. }
  977. if (!string.IsNullOrWhiteSpace(row["LXDH"].ToString()))
  978. {
  979. if (!string.IsNullOrWhiteSpace(remark))
  980. {
  981. remark += "|" + row["LXDH"].ToString();
  982. }
  983. else
  984. {
  985. remark = row["LXDH"].ToString();
  986. }
  987. }
  988. #endregion
  989. var data = new CustomerOrg(customerOrgId)
  990. {
  991. Accounts = "",
  992. Address = row["LXDZ"].ToString(),
  993. Bank = "",
  994. DisplayName = row["MC"].ToString(),
  995. DisplayOrder = oldCustomerOrgList.Rows.IndexOf(row) + 1,
  996. Fax = "",
  997. InvoiceName = row["MC"].ToString(),
  998. IsActive = 'Y',
  999. IsLock = 'N',
  1000. MedicalCenterId = defaultMedicalCenterId,
  1001. OrgTypeId = defaultOrgTypeId, //默认为私营
  1002. ParentId = parentId,
  1003. PathCode = _customerOrgManager.CreatePathCode(parentId).GetAwaiter().GetResult(),
  1004. PostalCode = row["YZBM"].ToString(),
  1005. Remark = remark,
  1006. ShortName = row["MC"].ToString(),
  1007. SimpleCode = LanguageConverter.GetPYSimpleCode(row["MC"].ToString()),
  1008. Telephone = row["LXDH"].ToString(),
  1009. CountryOrgCode = row["BH"].ToString(),
  1010. SalesPerson = "",
  1011. SalesPersonPhone = "",
  1012. MedicalTypeId = null
  1013. };
  1014. await _customerOrgRepository.InsertAsync(data);
  1015. var fieldComparison = new FieldComparison
  1016. {
  1017. FieldName = "id",
  1018. NewKeyValue = customerOrgId.ToString(),
  1019. OldKeyValue = row["BH"].ToString(),
  1020. TableName = "customer_org"
  1021. };
  1022. await _fieldComparisonRepository.InsertAsync(fieldComparison);
  1023. await uow.CompleteAsync();
  1024. }
  1025. }
  1026. }
  1027. }
  1028. _logger.LogInformation($"体检单位三级数据处理完毕,处理数量{oldCustomerOrgList.Rows.Count}");
  1029. }
  1030. else
  1031. {
  1032. _logger.LogInformation("体检单位三级数据已存在,未处理");
  1033. }
  1034. }
  1035. /// <summary>
  1036. /// 迁移单位体检次数数据 无字典
  1037. /// </summary>
  1038. /// <returns></returns>
  1039. private async Task TransferCustomerOrgRegisterData()
  1040. {
  1041. var count = await _customerOrgRegisterRepository.GetCountAsync();
  1042. if (count == 0)
  1043. {
  1044. var oldCustomerOrgRegisterList = await oldDb.Ado.GetDataTableAsync("select * from [futian_user].TJ_DWTJJLB order by DWTJCS asc");
  1045. if (oldCustomerOrgRegisterList.Rows.Count > 0)
  1046. {
  1047. List<FieldComparison> fieldComparisonList = await _fieldComparisonRepository.GetListAsync(m => m.TableName == "customer_org");
  1048. foreach (DataRow row in oldCustomerOrgRegisterList.Rows)
  1049. {
  1050. using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true))
  1051. {
  1052. Guid customerOrgId = Guid.Parse(fieldComparisonList.Where(m => m.OldKeyValue == row["DWBH"].ToString()).FirstOrDefault().NewKeyValue);
  1053. Guid customerOrgRegisterId = GuidGenerator.Create();
  1054. if (customerOrgId == GuidFlag.PersonCustomerOrgId)
  1055. customerOrgRegisterId = GuidFlag.PersonCustomerOrgRegisterId;
  1056. var data = new CustomerOrgRegister(customerOrgRegisterId)
  1057. {
  1058. BeginTime = Convert.ToDateTime(row["KSRQ"].ToString()),
  1059. CustomerOrgId = customerOrgId,
  1060. EndTime = !string.IsNullOrWhiteSpace(row["JSRQ"].ToString()) ? Convert.ToDateTime(row["JSRQ"].ToString()) : null,
  1061. IsComplete = row["WCBZ"].ToString() == "1" ? 'Y' : 'N',
  1062. MedicalTimes = (short)Convert.ToInt32(row["DWTJCS"].ToString()),
  1063. RegisterName = "",
  1064. RegisterNo = ""
  1065. };
  1066. await _customerOrgRegisterRepository.InsertAsync(data);
  1067. await uow.CompleteAsync();
  1068. }
  1069. }
  1070. }
  1071. _logger.LogInformation($"单位体检次数数据处理完毕,处理数量{oldCustomerOrgRegisterList.Rows.Count}");
  1072. }
  1073. else
  1074. {
  1075. _logger.LogInformation("单位体检次数数据已存在,未处理");
  1076. }
  1077. }
  1078. /// <summary>
  1079. /// 迁移单位分组
  1080. /// </summary>
  1081. /// <returns></returns>
  1082. private async Task TransferCustomerOrgGroupData()
  1083. {
  1084. var count = await _customerOrgGroupRepository.GetCountAsync();
  1085. if (count == 0)
  1086. {
  1087. var oldCustomerOrgGroupList = await oldDb.Ado.GetDataTableAsync("select * from [futian_user].TJ_DWFZ_HD ");
  1088. if (oldCustomerOrgGroupList.Rows.Count > 0)
  1089. {
  1090. List<FieldComparison> fieldComparisonList = await _fieldComparisonRepository.GetListAsync(m => m.TableName == "customer_org");
  1091. List<CustomerOrgRegister> customerOrgRegisterList = await _customerOrgRegisterRepository.GetListAsync();
  1092. foreach (DataRow row in oldCustomerOrgGroupList.Rows)
  1093. {
  1094. using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true))
  1095. {
  1096. //新系统单位ID
  1097. Guid customerOrgId = Guid.Parse(fieldComparisonList.Where(m => m.OldKeyValue == row["DWBH"].ToString().Trim()).FirstOrDefault().NewKeyValue);
  1098. Guid customerOrgRegisterId = customerOrgRegisterList.Where(m => m.CustomerOrgId == customerOrgId
  1099. && m.MedicalTimes == (short)Convert.ToInt32(row["DWTJCS"].ToString())).FirstOrDefault().Id;
  1100. Guid customerOrgGroupId = StringConvertGuidHelper.GenerateURLUUID(row["BH"].ToString().Trim());
  1101. var data = new CustomerOrgGroup(customerOrgGroupId)
  1102. {
  1103. AgeLowerLimit = 0,
  1104. AgeUpperLimit = 200,
  1105. CustomerOrgRegisterId = customerOrgRegisterId,
  1106. DisplayName = row["FZMC"].ToString(),
  1107. DisplayOrder = oldCustomerOrgGroupList.Rows.IndexOf(row) + 1,
  1108. ForSexId = ConvertForSex(row["XB"].ToString()),
  1109. JobPost = "",
  1110. JobTitle = "",
  1111. MaritalStatusId = row["HYZK"].ToString() == "9" ? 'A' : Convert.ToChar(row["HYZK"].ToString()),
  1112. Price = string.IsNullOrWhiteSpace(row["JG"].ToString()) ? 0 : Convert.ToDecimal(row["JG"].ToString()),
  1113. Remark = "",
  1114. CanAddMoney = 0
  1115. };
  1116. await _customerOrgGroupRepository.InsertAsync(data);
  1117. var fieldComparison = new FieldComparison
  1118. {
  1119. FieldName = "id",
  1120. NewKeyValue = customerOrgGroupId.ToString(),
  1121. OldKeyValue = row["BH"].ToString().Trim(),
  1122. TableName = "customer_org_group"
  1123. };
  1124. await _fieldComparisonRepository.InsertAsync(fieldComparison);
  1125. await uow.CompleteAsync();
  1126. }
  1127. }
  1128. }
  1129. _logger.LogInformation($"单位分组数据处理完毕,处理数量{oldCustomerOrgGroupList.Rows.Count}");
  1130. }
  1131. else
  1132. {
  1133. _logger.LogInformation("单位分组数据已存在,未处理");
  1134. }
  1135. }
  1136. /// <summary>
  1137. /// 迁移单位分组明细数据
  1138. /// </summary>
  1139. /// <returns></returns>
  1140. private async Task TransferCustomerOrgGroupDetailData()
  1141. {
  1142. var count = await _customerOrgGroupDetailRepository.GetCountAsync();
  1143. if (count == 0)
  1144. {
  1145. int pclcount = 200;
  1146. var oldCustomerOrgGroupList = await oldDb.Ado.GetDataTableAsync("select * from [futian_user].[TJ_DWFZ_DT] ");
  1147. if (oldCustomerOrgGroupList.Rows.Count > 0)
  1148. {
  1149. List<CustomerOrgGroupDetail> tempList = new List<CustomerOrgGroupDetail>();
  1150. foreach (DataRow row in oldCustomerOrgGroupList.Rows)
  1151. {
  1152. using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true))
  1153. {
  1154. var customer_org_group_dz = (await _fieldComparisonRepository.GetQueryableAsync()).Where(m => m.TableName == "customer_org_group" && m.OldKeyValue == row["FZBH"].ToString().Trim()).FirstOrDefault();
  1155. var asbitem_dz = (await _fieldComparisonRepository.GetQueryableAsync()).Where(m => m.TableName == "asbitem" && m.OldKeyValue == row["TJXM"].ToString().Trim()).FirstOrDefault();
  1156. if (asbitem_dz != null && customer_org_group_dz != null)
  1157. {
  1158. //新系统单位分组ID
  1159. Guid customerOrgGroupId = Guid.Parse(customer_org_group_dz.NewKeyValue);
  1160. Guid asbitemId = Guid.Parse(asbitem_dz.NewKeyValue);
  1161. //decimal price = 0;
  1162. //if (!decimal.TryParse(row["price"].ToString(), out price))
  1163. //{
  1164. // price = 0;
  1165. //}
  1166. var data = new CustomerOrgGroupDetail
  1167. {
  1168. AsbitemId = asbitemId,
  1169. CustomerOrgGroupId = customerOrgGroupId,
  1170. Price = 0,
  1171. Amount = 1
  1172. };
  1173. tempList.Add(data);
  1174. if (tempList.Count >= pclcount)
  1175. {
  1176. await _customerOrgGroupDetailRepository.InsertManyAsync(tempList);
  1177. tempList = new List<CustomerOrgGroupDetail>();
  1178. }
  1179. else
  1180. {
  1181. if (oldCustomerOrgGroupList.Rows.IndexOf(row) == oldCustomerOrgGroupList.Rows.Count - 1)
  1182. {
  1183. await _customerOrgGroupDetailRepository.InsertManyAsync(tempList);
  1184. }
  1185. }
  1186. }
  1187. await uow.CompleteAsync();
  1188. }
  1189. }
  1190. }
  1191. _logger.LogInformation($"单位分组明细数据处理完毕,处理数量{oldCustomerOrgGroupList.Rows.Count}");
  1192. }
  1193. else
  1194. {
  1195. _logger.LogInformation("单位分组明细数据已存在,未处理");
  1196. }
  1197. }
  1198. /// <summary>
  1199. /// 平衡分组明细
  1200. /// </summary>
  1201. /// <returns></returns>
  1202. private async Task TransferPHCustomerOrgGroupDetailData()
  1203. {
  1204. var customerOrgGroupList = await _customerOrgGroupRepository.GetListAsync();
  1205. if (customerOrgGroupList.Count > 0)
  1206. {
  1207. var customerOrgGroupDetailList = (from customerOrgGroupDetail in await _customerOrgGroupDetailRepository.GetQueryableAsync()
  1208. join asbitem in await _asbitemRepository.GetQueryableAsync() on customerOrgGroupDetail.AsbitemId equals asbitem.Id
  1209. select new
  1210. {
  1211. customerOrgGroupDetail,
  1212. asbitem.Price
  1213. }).ToList();
  1214. foreach (var item in customerOrgGroupList)
  1215. {
  1216. //当前分组的明细
  1217. var tempCustomerOrgGroupDetailList = customerOrgGroupDetailList.Where(m => m.customerOrgGroupDetail.CustomerOrgGroupId == item.Id).ToList();
  1218. if (tempCustomerOrgGroupDetailList.Count > 0)
  1219. {
  1220. var fzPrice = item.Price; //分组价格
  1221. var detailSumPrice = tempCustomerOrgGroupDetailList.Sum(s => s.Price); //明细汇总价格
  1222. decimal bl = Math.Round(fzPrice / detailSumPrice, 2); //折算比例
  1223. decimal tempSumZkP = 0M;
  1224. foreach (var detailItem in tempCustomerOrgGroupDetailList)
  1225. {
  1226. var zkP = Math.Round(detailItem.Price * bl, 2);
  1227. if (tempCustomerOrgGroupDetailList.IndexOf(detailItem) == tempCustomerOrgGroupDetailList.Count - 1)
  1228. {
  1229. //最后一个
  1230. decimal tempMM = tempSumZkP + zkP;
  1231. if (tempMM > fzPrice)
  1232. {
  1233. //大于分组价格
  1234. var cj = tempMM - fzPrice;
  1235. zkP = zkP - cj;
  1236. }
  1237. else if (tempMM < fzPrice)
  1238. {
  1239. //大于分组价格
  1240. var cj = fzPrice - tempMM;
  1241. zkP = zkP + cj;
  1242. }
  1243. }
  1244. detailItem.customerOrgGroupDetail.Price = zkP;
  1245. tempSumZkP += zkP;
  1246. }
  1247. await _customerOrgGroupDetailRepository.UpdateManyAsync(tempCustomerOrgGroupDetailList.Select(s => s.customerOrgGroupDetail));
  1248. }
  1249. }
  1250. _logger.LogInformation($"平衡分组明细,处理数量{customerOrgGroupList.Count}");
  1251. }
  1252. else
  1253. {
  1254. _logger.LogInformation("平衡分组明细,未处理");
  1255. }
  1256. }
  1257. #endregion
  1258. #region 条码分组相关
  1259. ///// <summary>
  1260. ///// 迁移标本类型数据
  1261. ///// </summary>
  1262. ///// <returns></returns>
  1263. //private async Task TransferSampleTypeData()
  1264. //{
  1265. // var count = await _sampleTypeRepository.GetCountAsync();
  1266. // if (count == 0)
  1267. // {
  1268. // var oldSampleTypeList = await oldDb.Ado.GetDataTableAsync("select specimen_type_id,specimen_type_name from specimen_type order by display_order asc");
  1269. // if (oldSampleTypeList.Rows.Count > 0)
  1270. // {
  1271. // foreach (DataRow row in oldSampleTypeList.Rows)
  1272. // {
  1273. // using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true))
  1274. // {
  1275. // //Guid sampleTypeId = GuidGenerator.Create();
  1276. // Guid sampleTypeId = StringConvertGuidHelper.GenerateURLUUID(row["specimen_type_id"].ToString());
  1277. // var data = new SampleType(sampleTypeId)
  1278. // {
  1279. // DisplayName = row["specimen_type_name"].ToString(),
  1280. // DisplayOrder = oldSampleTypeList.Rows.IndexOf(row) + 1,
  1281. // SimpleCode = LanguageConverter.GetPYSimpleCode(row["specimen_type_name"].ToString())
  1282. // };
  1283. // await _sampleTypeRepository.InsertAsync(data);
  1284. // var fieldComparison = new FieldComparison
  1285. // {
  1286. // TableName = "sample_type",
  1287. // FieldName = "id",
  1288. // NewKeyValue = sampleTypeId.ToString(),
  1289. // OldKeyValue = row["specimen_type_id"].ToString()
  1290. // };
  1291. // await _fieldComparisonRepository.InsertAsync(fieldComparison);
  1292. // await uow.CompleteAsync();
  1293. // }
  1294. // }
  1295. // }
  1296. // _logger.LogInformation($"标本类型数据处理完毕,处理数量{oldSampleTypeList.Rows.Count}");
  1297. // }
  1298. // else
  1299. // {
  1300. // _logger.LogInformation($"标本类型数据已存在,未处理");
  1301. // }
  1302. //}
  1303. ///// <summary>
  1304. ///// 迁移条码分组数据
  1305. ///// </summary>
  1306. ///// <returns></returns>
  1307. //[RemoteService(false)]
  1308. //public async Task TransferSampleGroupData()
  1309. //{
  1310. // var count = await _sampleGroupRepository.GetCountAsync();
  1311. // if (count == 0)
  1312. // {
  1313. // //获取一条条码类型的数据
  1314. // Guid defaultSampleTypeId = Guid.Empty;
  1315. // var sampleTypeEnt = await _sampleTypeRepository.FirstOrDefaultAsync();
  1316. // if (sampleTypeEnt != null)
  1317. // {
  1318. // defaultSampleTypeId = sampleTypeEnt.Id;
  1319. // }
  1320. // if (defaultSampleTypeId != Guid.Empty)
  1321. // {
  1322. // var oldSampleGroupList = await oldDb.Ado.GetDataTableAsync("select * from vessels_type order by display_order");
  1323. // if (oldSampleGroupList.Rows.Count > 0)
  1324. // {
  1325. // foreach (DataRow row in oldSampleGroupList.Rows)
  1326. // {
  1327. // using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true))
  1328. // {
  1329. // #region 转成成新的标本类型ID
  1330. // Guid newSampleTypeId = defaultSampleTypeId; //默认取其他 ID
  1331. // if (!string.IsNullOrWhiteSpace(row["specimen_type_id"].ToString()))
  1332. // {
  1333. // var oldSampleType = (await _fieldComparisonRepository.GetQueryableAsync())
  1334. // .Where(m => m.TableName == "sample_type" && m.OldKeyValue == row["specimen_type_id"].ToString()).FirstOrDefault();
  1335. // if (oldSampleType != null)
  1336. // {
  1337. // newSampleTypeId = Guid.Parse(oldSampleType.NewKeyValue);
  1338. // }
  1339. // }
  1340. // #endregion
  1341. // // Guid sampleGroupId = GuidGenerator.Create();
  1342. // Guid sampleGroupId = StringConvertGuidHelper.GenerateURLUUID(row["vessels_type_id"].ToString());
  1343. // var data = new SampleGroup(sampleGroupId)
  1344. // {
  1345. // DisplayName = row["vessels_type_name"].ToString(),
  1346. // DisplayOrder = oldSampleGroupList.Rows.IndexOf(row) + 1,
  1347. // SimpleCode = LanguageConverter.GetPYSimpleCode(row["vessels_type_name"].ToString()),
  1348. // SampleContainerId = defaultSampleContainerId,
  1349. // SamplePrintCount = string.IsNullOrWhiteSpace(row["label_num"].ToString()) ? 0 : Convert.ToInt32(row["label_num"].ToString()),
  1350. // SampleTypeId = newSampleTypeId
  1351. // };
  1352. // await _sampleGroupRepository.InsertAsync(data);
  1353. // var fieldComparison = new FieldComparison
  1354. // {
  1355. // TableName = "sample_group",
  1356. // FieldName = "id",
  1357. // NewKeyValue = sampleGroupId.ToString(),
  1358. // OldKeyValue = row["vessels_type_id"].ToString()
  1359. // };
  1360. // await _fieldComparisonRepository.InsertAsync(fieldComparison);
  1361. // await uow.CompleteAsync();
  1362. // }
  1363. // }
  1364. // }
  1365. // _logger.LogInformation($"条码分组数据处理完毕,处理数量{oldSampleGroupList.Rows.Count}");
  1366. // }
  1367. // else
  1368. // {
  1369. // _logger.LogInformation($"条码类型未获取到默认数据,跳过条码分组数据处理");
  1370. // }
  1371. // }
  1372. // else
  1373. // {
  1374. // _logger.LogInformation("条码分组数据已存在,未处理");
  1375. // }
  1376. //}
  1377. ///// <summary>
  1378. ///// 迁移条码分组明细数据
  1379. ///// </summary>
  1380. ///// <returns></returns>
  1381. //[RemoteService(false)]
  1382. //public async Task TransferSampleGroupDetailData()
  1383. //{
  1384. // var count = await _sampleGroupDetailRepository.GetCountAsync();
  1385. // if (count == 0)
  1386. // {
  1387. // var oldSampleGroupDetailList = await oldDb.Ado.GetDataTableAsync("select * from vessels_type_detail ");
  1388. // if (oldSampleGroupDetailList.Rows.Count > 0)
  1389. // {
  1390. // foreach (DataRow row in oldSampleGroupDetailList.Rows)
  1391. // {
  1392. // using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true))
  1393. // {
  1394. // Guid newSampleGroupId = Guid.Parse((await _fieldComparisonRepository.GetQueryableAsync())
  1395. // .Where(m => m.TableName == "sample_group" && m.OldKeyValue == row["vessels_type_id"].ToString()).FirstOrDefault().NewKeyValue);
  1396. // Guid newAsbitemId = Guid.Parse((await _fieldComparisonRepository.GetQueryableAsync())
  1397. // .Where(m => m.TableName == "asbitem" && m.OldKeyValue == row["asbitem_id"].ToString()).FirstOrDefault().NewKeyValue);
  1398. // var data = new SampleGroupDetail
  1399. // {
  1400. // AsbitemId = newAsbitemId,
  1401. // SampleGroupId = newSampleGroupId
  1402. // };
  1403. // await _sampleGroupDetailRepository.InsertAsync(data);
  1404. // await uow.CompleteAsync();
  1405. // }
  1406. // }
  1407. // }
  1408. // _logger.LogInformation($"条码分组明细数据处理完毕,处理数量{oldSampleGroupDetailList.Rows.Count}");
  1409. // }
  1410. // else
  1411. // {
  1412. // _logger.LogInformation("条码分组明细数据已存在,未处理");
  1413. // }
  1414. //}
  1415. #endregion
  1416. #region 私有
  1417. /// <summary>
  1418. /// 初始化
  1419. /// </summary>
  1420. /// <returns></returns>
  1421. private async Task InitData()
  1422. {
  1423. #region 发票项目类别
  1424. defaultInvoiceItemTypeId = GuidGenerator.Create();
  1425. var invoiceItemTypeFirst = await _invoiceItemTypeRepository.FirstOrDefaultAsync();
  1426. if (invoiceItemTypeFirst == null)
  1427. {
  1428. var tempEntity = new InvoiceItemType(defaultInvoiceItemTypeId)
  1429. {
  1430. DisplayName = "检查费",
  1431. DisplayOrder = 1,
  1432. SimpleCode = "JCF"
  1433. };
  1434. await _invoiceItemTypeRepository.InsertAsync(tempEntity, true);
  1435. }
  1436. else
  1437. {
  1438. defaultInvoiceItemTypeId = invoiceItemTypeFirst.Id;
  1439. }
  1440. #endregion
  1441. #region 汇总项目类别
  1442. defaultCollectItemTypeId = GuidGenerator.Create();
  1443. var collectItemTypeFirst = await _collectItemTypeRepository.FirstOrDefaultAsync();
  1444. if (collectItemTypeFirst == null)
  1445. {
  1446. var tempEntity = new CollectItemType(defaultCollectItemTypeId)
  1447. {
  1448. DisplayName = "检查费",
  1449. DisplayOrder = 1,
  1450. SimpleCode = "JCF",
  1451. InvoiceItemTypeId = defaultInvoiceItemTypeId
  1452. };
  1453. await _collectItemTypeRepository.InsertAsync(tempEntity, true);
  1454. }
  1455. else
  1456. {
  1457. defaultCollectItemTypeId = collectItemTypeFirst.Id;
  1458. }
  1459. #endregion
  1460. #region 企业性质
  1461. defaultOrgTypeId = GuidGenerator.Create();
  1462. var customerOrgTypeFirst = await _customerOrgTypeRepository.FirstOrDefaultAsync();
  1463. if (customerOrgTypeFirst == null)
  1464. {
  1465. var tempEntity = new CustomerOrgType(defaultOrgTypeId)
  1466. {
  1467. DisplayName = "其他",
  1468. DisplayOrder = 1,
  1469. SimpleCode = "QT"
  1470. };
  1471. await _customerOrgTypeRepository.InsertAsync(tempEntity, true);
  1472. }
  1473. else
  1474. {
  1475. defaultOrgTypeId = customerOrgTypeFirst.Id;
  1476. }
  1477. #endregion
  1478. #region 默认标本容器
  1479. defaultSampleContainerId = GuidGenerator.Create();
  1480. var sampleContainerFirst = await _sampleContainerRepository.FirstOrDefaultAsync();
  1481. if (sampleContainerFirst == null)
  1482. {
  1483. var tempEntity = new SampleContainer(defaultSampleContainerId)
  1484. {
  1485. DisplayName = "其他",
  1486. DisplayOrder = 1,
  1487. SimpleCode = "QT"
  1488. };
  1489. await _sampleContainerRepository.InsertAsync(tempEntity, true);
  1490. }
  1491. else
  1492. {
  1493. defaultSampleContainerId = sampleContainerFirst.Id;
  1494. }
  1495. #endregion
  1496. }
  1497. /// <summary>
  1498. /// 转换老系统适用性别
  1499. /// </summary>
  1500. /// <param name="forSexId"></param>
  1501. /// <returns></returns>
  1502. private char ConvertForSex(string forSexId)
  1503. {
  1504. if (forSexId == "1")
  1505. {
  1506. return 'M';
  1507. }
  1508. else if (forSexId == "0")
  1509. {
  1510. return 'F';
  1511. }
  1512. else
  1513. {
  1514. return 'A';
  1515. }
  1516. }
  1517. #endregion
  1518. }
  1519. }