diff --git a/src/Shentun.Peis.Application/BeiJingMZAKExportDatas/BeiJingMZAKExportDataAppService.cs b/src/Shentun.Peis.Application/BeiJingMZAKExportDatas/BeiJingMZAKExportDataAppService.cs index 26a349a..af4871e 100644 --- a/src/Shentun.Peis.Application/BeiJingMZAKExportDatas/BeiJingMZAKExportDataAppService.cs +++ b/src/Shentun.Peis.Application/BeiJingMZAKExportDatas/BeiJingMZAKExportDataAppService.cs @@ -1,10 +1,27 @@ using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Logging; +using Shentun.Peis.CustomerOrgs; +using Shentun.Peis.DataMigrations; +using Shentun.Peis.Enums; +using Shentun.Peis.ItemTypes; +using Shentun.Peis.Models; +using Shentun.Peis.MyUser; +using Shentun.Peis.PatientRegisters; +using Shentun.Peis.RegisterCheckItems; +using Shentun.Utilities; +using SqlSugar; using System; using System.Collections.Generic; +using System.Data; using System.Linq; using System.Text; using System.Threading.Tasks; +using Volo.Abp; using Volo.Abp.Application.Services; +using Volo.Abp.Domain.Repositories; +using Volo.Abp.Identity; +using Volo.Abp.Uow; namespace Shentun.Peis.BeiJingMZAKExportDatas { @@ -14,8 +31,2330 @@ namespace Shentun.Peis.BeiJingMZAKExportDatas [Authorize] public class BeiJingMZAKExportDataAppService : ApplicationService { - public BeiJingMZAKExportDataAppService() + //默认指引类别ID + private readonly char defaultGuidTypeId = '0'; + //默认体检报告类别ID + private readonly char defaultMedicalReportTypeId = '0'; + //默认体检结论类别 + private readonly string defaultMedicalConclusionType = "01"; + //默认体检中心 + private readonly Guid defaultMedicalCenterId = Guid.Parse("0de5b78a-731d-4f80-b262-655ebbf04581"); + //默认容器ID + private readonly Guid defaultSampleContainerId = Guid.Parse("3a133e15-55c5-5834-a5f5-218b42403124"); + //默认单位性质ID + private readonly Guid defaultOrgTypeId = Guid.Parse("3a133e16-56ad-d1c5-9507-e2d7f44a6792"); + + private readonly SqlSugarClient oldDb = new SqlSugarClient(new ConnectionConfig() + { + ConnectionString = "server=.;uid=sa;pwd=Bq.123;database=oldPeis;Encrypt=false;", + DbType = SqlSugar.DbType.SqlServer, + IsAutoCloseConnection = true + }); + + + private readonly UnitOfWorkManager _unitOfWorkManager; + private readonly IRepository _deviceTypeRepository; + private readonly IRepository _itemTypeRepository; + private readonly ItemTypeManager _itemTypeManager; + private readonly IRepository _unitRepository; + private readonly IRepository _medicalTypeRepository; + private readonly IRepository _personnelTypeRepository; + private readonly IRepository _invoiceItemTypeRepository; + private readonly IRepository _fieldComparisonRepository; + private readonly IRepository _sampleTypeRepository; + private readonly IRepository _itemRepository; + private readonly IRepository _referenceRangeRepository; + private readonly IRepository _asbitemRepository; + private readonly IRepository _asbitemDetailRepository; + private readonly IRepository _medicalPackageRepository; + private readonly IRepository _medicalPackageDetailRepository; + private readonly IRepository _diagnosisRepository; + private readonly IRepository _suggestionRepository; + private readonly IRepository _itemResultTemplateRepository; + private readonly IRepository _ItemResultMatchRepository; + private readonly IRepository _menuInfoRepository; + private readonly IRepository _customerOrgRepository; + private readonly CustomerOrgManager _customerOrgManager; + private readonly IRepository _customerOrgRegisterRepository; + private readonly IRepository _customerOrgGroupRepository; + private readonly IRepository _customerOrgGroupDetailRepository; + private readonly IRepository _nationRepository; + private readonly ILogger _logger; + private readonly IRepository _identityUserRepository; + private readonly IRepository _medicalConclusionRepository; + private readonly IRepository _sampleGroupRepository; + private readonly IRepository _sampleGroupDetailRepository; + private readonly IRepository _sysParmTypeRepository; + private readonly IRepository _sysParmRepository; + private readonly IRepository _sysParmValueRepository; + private readonly IRepository _collectItemTypeRepository; + private readonly IRepository _asbitemGuideRepository; + + + + public BeiJingMZAKExportDataAppService( + UnitOfWorkManager unitOfWorkManager, + IRepository deviceTypeRepository, + IRepository itemTypeRepository, + ItemTypeManager itemTypeManager, + IRepository unitRepository, + IRepository medicalTypeRepository, + IRepository personnelTypeRepository, + IRepository invoiceItemTypeRepository, + IRepository fieldComparisonRepository, + IRepository sampleTypeRepository, + IRepository itemRepository, + IRepository referenceRangeRepository, + IRepository asbitemRepository, + IRepository asbitemDetailRepository, + IRepository medicalPackageRepository, + IRepository medicalPackageDetailRepository, + IRepository diagnosisRepository, + IRepository suggestionRepository, + IRepository itemResultTemplateRepository, + IRepository itemResultMatchRepository, + IRepository menuInfoRepository, + IRepository customerOrgRepository, + CustomerOrgManager customerOrgManager, + IRepository customerOrgRegisterRepository, + IRepository customerOrgGroupRepository, + IRepository customerOrgGroupDetailRepository, + IRepository nationRepository, + ILogger logger, + IRepository identityUserRepository, + IRepository medicalConclusionRepository, + IRepository sampleGroupRepository, + IRepository sampleGroupDetailRepository, + IRepository sysParmTypeRepository, + IRepository sysParmRepository, + IRepository sysParmValueRepository, + IRepository collectItemTypeRepository, + IRepository asbitemGuideRepository) + { + _unitOfWorkManager = unitOfWorkManager; + _deviceTypeRepository = deviceTypeRepository; + _itemTypeRepository = itemTypeRepository; + _itemTypeManager = itemTypeManager; + _unitRepository = unitRepository; + _medicalTypeRepository = medicalTypeRepository; + _personnelTypeRepository = personnelTypeRepository; + _invoiceItemTypeRepository = invoiceItemTypeRepository; + _fieldComparisonRepository = fieldComparisonRepository; + _sampleTypeRepository = sampleTypeRepository; + _itemRepository = itemRepository; + _referenceRangeRepository = referenceRangeRepository; + _asbitemRepository = asbitemRepository; + _asbitemDetailRepository = asbitemDetailRepository; + _medicalPackageRepository = medicalPackageRepository; + _medicalPackageDetailRepository = medicalPackageDetailRepository; + _diagnosisRepository = diagnosisRepository; + _suggestionRepository = suggestionRepository; + _itemResultTemplateRepository = itemResultTemplateRepository; + _ItemResultMatchRepository = itemResultMatchRepository; + _menuInfoRepository = menuInfoRepository; + _customerOrgRepository = customerOrgRepository; + _customerOrgManager = customerOrgManager; + _customerOrgRegisterRepository = customerOrgRegisterRepository; + _customerOrgGroupRepository = customerOrgGroupRepository; + _customerOrgGroupDetailRepository = customerOrgGroupDetailRepository; + _nationRepository = nationRepository; + _logger = logger; + _identityUserRepository = identityUserRepository; + _medicalConclusionRepository = medicalConclusionRepository; + _sampleGroupRepository = sampleGroupRepository; + _sampleGroupDetailRepository = sampleGroupDetailRepository; + _sysParmTypeRepository = sysParmTypeRepository; + _sysParmRepository = sysParmRepository; + _sysParmValueRepository = sysParmValueRepository; + _collectItemTypeRepository = collectItemTypeRepository; + _asbitemGuideRepository = asbitemGuideRepository; + } + + + /// + /// 处理基础数据 + /// + /// + [HttpPost("api/app/BeiJingMZAKExportData/HandBaseData")] + public async Task HandBaseData() + { + await TransferDeviceTypeData(); + await TransferUnitData(); + await TransferMedicalTypeData(); + await TransferPersonnelTypeData(); + await TransferInvoiceItemTypeData(); + await TransferCollectItemTypeData(); + await TransferItemTypeData(); + await TransferSampleTypeData(); + await TransferNationData(); + await TransferMedicalConclusionData(); + } + + + /// + /// 处理基础项目相关数据 + /// + /// + [HttpPost("api/app/BeiJingMZAKExportData/HandBaseItemData")] + public async Task HandBaseItemData() + { + await TransferItemData(); + await TransferAsbitemData(); + await TransferAsbitemDetailData(); + await TransferMedicalPackageData(); + await TransferMedicalPackageDetailData(); + await TransferDiagnosisData(); + await TransferSuggestionData(); + await TransferItemResultTemplateData(); + await TransferItemResultMatchData(); + await TransferReferenceRangeData(); + await TransferSampleGroupData(); + await TransferSampleGroupDetailData(); + await TransferTopCustomerOrgData(); + await TransferTwoCustomerOrgData(); + await TransferThreeCustomerOrgData(); + await TransferFourCustomerOrgData(); + await TransferCustomerOrgRegisterData(); + await TransferCustomerOrgGroupData(); + await TransferCustomerOrgGroupDetailData(); + } + + + + #region 基础数据 + + /// + /// 迁移仪器类别数据 + /// + /// + [RemoteService(false)] + public async Task TransferDeviceTypeData() + { + var count = await _deviceTypeRepository.GetCountAsync(); + if (count == 0) + { + var oldDeviceTypeList = await oldDb.Ado.GetDataTableAsync("select device_type_id,device_type_name from device_type order by display_order asc"); + if (oldDeviceTypeList.Rows.Count > 0) + { + foreach (DataRow row in oldDeviceTypeList.Rows) + { + using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true)) + { + Guid deviceTypeId = GuidGenerator.Create(); + + var data = new DeviceType(deviceTypeId) + { + CheckTypeFlag = '0', + DisplayName = row["device_type_name"].ToString(), + DisplayOrder = oldDeviceTypeList.Rows.IndexOf(row) + 1, + SimpleCode = LanguageConverter.GetPYSimpleCode(row["device_type_name"].ToString()) + }; + + await _deviceTypeRepository.InsertAsync(data); + + var fieldComparison = new FieldComparison + { + TableName = "device_type", + FieldName = "id", + NewKeyValue = deviceTypeId.ToString(), + OldKeyValue = row["device_type_id"].ToString() + }; + + await _fieldComparisonRepository.InsertAsync(fieldComparison); + + await uow.CompleteAsync(); + } + } + } + + _logger.LogInformation($"仪器类别数据处理完毕,处理数量{oldDeviceTypeList.Rows.Count}"); + } + else + { + _logger.LogInformation("仪器类别数据已存在,未处理"); + } + } + + + /// + /// 迁移数值单位数据 + /// + /// + [RemoteService(false)] + public async Task TransferUnitData() + { + var count = await _unitRepository.GetCountAsync(); + if (count == 0) + { + var oldUnitList = await oldDb.Ado.GetDataTableAsync("select unit_id,unit_name from unit order by display_order asc"); + if (oldUnitList.Rows.Count > 0) + { + foreach (DataRow row in oldUnitList.Rows) + { + using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true)) + { + Guid unitId = GuidGenerator.Create(); + var data = new Unit(unitId) + { + DisplayName = row["unit_name"].ToString(), + DisplayOrder = oldUnitList.Rows.IndexOf(row) + 1, + SimpleCode = LanguageConverter.GetPYSimpleCode(row["unit_name"].ToString()) + }; + + await _unitRepository.InsertAsync(data); + + var fieldComparison = new FieldComparison + { + TableName = "unit", + FieldName = "id", + NewKeyValue = unitId.ToString(), + OldKeyValue = row["unit_id"].ToString() + }; + + await _fieldComparisonRepository.InsertAsync(fieldComparison); + + await uow.CompleteAsync(); + } + + } + + _logger.LogInformation($"数值单位数据处理完毕,处理数量{oldUnitList.Rows.Count}"); + + } + else + { + _logger.LogInformation($"数值单位数据已存在,未处理"); + } + } + } + + /// + /// 迁移体检类别数据 + /// + /// + [RemoteService(false)] + public async Task TransferMedicalTypeData() + { + var count = await _medicalTypeRepository.GetCountAsync(); + if (count == 0) + { + + var oldMedicalTypeList = await oldDb.Ado.GetDataTableAsync("select medical_type_id,medical_type_name from medical_type order by display_order asc"); + if (oldMedicalTypeList.Rows.Count > 0) + { + foreach (DataRow row in oldMedicalTypeList.Rows) + { + using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true)) + { + Guid medicalTypeId = GuidGenerator.Create(); + var data = new MedicalType(medicalTypeId) + { + DisplayName = row["medical_type_name"].ToString(), + DisplayOrder = oldMedicalTypeList.Rows.IndexOf(row) + 1, + SimpleCode = LanguageConverter.GetPYSimpleCode(row["medical_type_name"].ToString()) + }; + + await _medicalTypeRepository.InsertAsync(data); + + var fieldComparison = new FieldComparison + { + TableName = "medical_type", + FieldName = "id", + NewKeyValue = medicalTypeId.ToString(), + OldKeyValue = row["medical_type_id"].ToString() + }; + + await _fieldComparisonRepository.InsertAsync(fieldComparison); + + await uow.CompleteAsync(); + } + + } + + _logger.LogInformation($"体检类别数据处理完毕,处理数量{oldMedicalTypeList.Rows.Count}"); + + } + else + { + _logger.LogInformation($"体检类别数据已存在,未处理"); + } + } + } + + + /// + /// 迁移人员类别数据 + /// + /// + [RemoteService(false)] + public async Task TransferPersonnelTypeData() + { + var count = await _personnelTypeRepository.GetCountAsync(); + if (count == 0) + { + + var oldPersonnelTypeList = await oldDb.Ado.GetDataTableAsync("select personnel_type_id,personnel_type_name from personnel_type order by display_order asc"); + if (oldPersonnelTypeList.Rows.Count > 0) + { + + + foreach (DataRow row in oldPersonnelTypeList.Rows) + { + using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true)) + { + Guid personnelTypeId = GuidGenerator.Create(); + + var data = new PersonnelType(personnelTypeId) + { + DisplayName = row["personnel_type_name"].ToString(), + DisplayOrder = oldPersonnelTypeList.Rows.IndexOf(row) + 1, + SimpleCode = LanguageConverter.GetPYSimpleCode(row["personnel_type_name"].ToString()) + }; + + await _personnelTypeRepository.InsertAsync(data); + + var fieldComparison = new FieldComparison + { + TableName = "personnel_type", + FieldName = "id", + NewKeyValue = personnelTypeId.ToString(), + OldKeyValue = row["personnel_type_id"].ToString() + }; + + await _fieldComparisonRepository.InsertAsync(fieldComparison); + + await uow.CompleteAsync(); + } + + + } + + + } + _logger.LogInformation($"人员类别数据处理完毕,处理数量{oldPersonnelTypeList.Rows.Count}"); + } + else + { + _logger.LogInformation($"人员类别数据已存在,未处理"); + } + } + + + + /// + /// 迁移发票项目类别数据 + /// + /// + [RemoteService(false)] + public async Task TransferInvoiceItemTypeData() + { + var count = await _invoiceItemTypeRepository.GetCountAsync(); + if (count == 0) + { + var oldInvoiceItemTypeList = await oldDb.Ado.GetDataTableAsync("select invoice_item_type_id,invoice_item_type_name from invoice_item_type order by display_order asc"); + if (oldInvoiceItemTypeList.Rows.Count > 0) + { + foreach (DataRow row in oldInvoiceItemTypeList.Rows) + { + using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true)) + { + Guid invoiceItemTypeId = GuidGenerator.Create(); + + var data = new InvoiceItemType(invoiceItemTypeId) + { + DisplayName = row["invoice_item_type_name"].ToString(), + DisplayOrder = oldInvoiceItemTypeList.Rows.IndexOf(row) + 1, + SimpleCode = LanguageConverter.GetPYSimpleCode(row["invoice_item_type_name"].ToString()) + }; + + await _invoiceItemTypeRepository.InsertAsync(data); + + var fieldComparison = new FieldComparison + { + TableName = "invoice_item_type", + FieldName = "id", + NewKeyValue = invoiceItemTypeId.ToString(), + OldKeyValue = row["invoice_item_type_id"].ToString() + }; + + await _fieldComparisonRepository.InsertAsync(fieldComparison); + + await uow.CompleteAsync(); + } + } + + + } + _logger.LogInformation($"发票项目类别数据处理完毕,处理数量{oldInvoiceItemTypeList.Rows.Count}"); + } + else + { + _logger.LogInformation($"发票项目类别数据已存在,未处理"); + } + } + + + + /// + /// 迁移汇总项目类别数据 + /// + /// + [RemoteService(false)] + public async Task TransferCollectItemTypeData() + { + var count = await _collectItemTypeRepository.GetCountAsync(); + if (count == 0) + { + var oldCollectItemTypeList = await oldDb.Ado.GetDataTableAsync("select collect_item_type_id,collect_item_type_name,invoice_item_type_id from collect_item_type order by display_order asc"); + if (oldCollectItemTypeList.Rows.Count > 0) + { + foreach (DataRow row in oldCollectItemTypeList.Rows) + { + using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true)) + { + Guid collectItemTypeId = GuidGenerator.Create(); + + + Guid invoiceItemTypeId = Guid.Parse((await _fieldComparisonRepository.GetQueryableAsync()).Where(m => m.TableName == "invoice_item_type" && m.OldKeyValue == row["invoice_item_type_id"].ToString()).FirstOrDefault().NewKeyValue); + + var data = new CollectItemType(collectItemTypeId) + { + DisplayName = row["collect_item_type_name"].ToString(), + DisplayOrder = oldCollectItemTypeList.Rows.IndexOf(row) + 1, + SimpleCode = LanguageConverter.GetPYSimpleCode(row["collect_item_type_name"].ToString()), + InvoiceItemTypeId = invoiceItemTypeId + }; + + await _collectItemTypeRepository.InsertAsync(data); + + var fieldComparison = new FieldComparison + { + TableName = "collect_item_type", + FieldName = "id", + NewKeyValue = collectItemTypeId.ToString(), + OldKeyValue = row["collect_item_type_id"].ToString() + }; + + await _fieldComparisonRepository.InsertAsync(fieldComparison); + + await uow.CompleteAsync(); + } + } + + _logger.LogInformation($"汇总项目类别数据处理完毕,处理数量{oldCollectItemTypeList.Rows.Count}"); + } + else + { + _logger.LogInformation($"汇总项目类别数据已存在,未处理"); + } + } + } + + + /// + /// 迁移项目类别-科室数据 + /// + /// + [RemoteService(false)] + public async Task TransferItemTypeData() + { + var count = await _itemTypeRepository.GetCountAsync(); + if (count == 0) + { + + var oldItemTypeList = await oldDb.Ado.GetDataTableAsync("select department_id,department_type,department_name,merge_asbitem_flag,print_pacs_barcode_flag from department order by display_order asc"); + if (oldItemTypeList.Rows.Count > 0) + { + foreach (DataRow row in oldItemTypeList.Rows) + { + using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true)) + { + Guid itemTypeId = GuidGenerator.Create(); + + var data = new ItemType(itemTypeId) + { + DisplayName = row["department_name"].ToString(), + DisplayOrder = oldItemTypeList.Rows.IndexOf(row) + 1, + SimpleCode = LanguageConverter.GetPYSimpleCode(row["department_name"].ToString()), + CheckTypeFlag = Convert.ToChar(row["department_type"]), + GuidTypeId = defaultGuidTypeId, + IsMergeAsbitem = Convert.ToChar(row["merge_asbitem_flag"]), + IsWrap = 'N', + MedicalReportTypeId = defaultMedicalReportTypeId, + ParentId = null, + PathCode = _itemTypeManager.CreatePathCode(null).Result, + IsCheckRequest = Convert.ToChar(row["print_pacs_barcode_flag"]) + }; + + await _itemTypeRepository.InsertAsync(data); + + var fieldComparison = new FieldComparison + { + TableName = "item_type", + FieldName = "id", + NewKeyValue = itemTypeId.ToString(), + OldKeyValue = row["department_id"].ToString() + }; + await _fieldComparisonRepository.InsertAsync(fieldComparison); + + await uow.CompleteAsync(); + } + } + + + } + _logger.LogInformation($"项目类别数据处理完毕,处理数量{oldItemTypeList.Rows.Count}"); + } + else + { + _logger.LogInformation($"项目类别数据已存在,未处理"); + } + } + + + /// + /// 迁移标本类型数据 + /// + /// + [RemoteService(false)] + public async Task TransferSampleTypeData() + { + var count = await _sampleTypeRepository.GetCountAsync(); + if (count == 0) + { + var oldSampleTypeList = await oldDb.Ado.GetDataTableAsync("select specimen_type_id,specimen_type_name from specimen_type order by display_order asc"); + if (oldSampleTypeList.Rows.Count > 0) + { + + foreach (DataRow row in oldSampleTypeList.Rows) + { + using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true)) + { + Guid sampleTypeId = GuidGenerator.Create(); + + var data = new SampleType(sampleTypeId) + { + DisplayName = row["specimen_type_name"].ToString(), + DisplayOrder = oldSampleTypeList.Rows.IndexOf(row) + 1, + SimpleCode = LanguageConverter.GetPYSimpleCode(row["specimen_type_name"].ToString()) + }; + + await _sampleTypeRepository.InsertAsync(data); + + var fieldComparison = new FieldComparison + { + TableName = "sample_type", + FieldName = "id", + NewKeyValue = sampleTypeId.ToString(), + OldKeyValue = row["specimen_type_id"].ToString() + }; + + await _fieldComparisonRepository.InsertAsync(fieldComparison); + + await uow.CompleteAsync(); + } + } + + } + _logger.LogInformation($"标本类型数据处理完毕,处理数量{oldSampleTypeList.Rows.Count}"); + } + else + { + _logger.LogInformation($"标本类型数据已存在,未处理"); + } + } + + + /// + /// 民族数据对照 + /// + /// + [RemoteService(false)] + public async Task TransferNationData() + { + var newNationList = await _nationRepository.GetListAsync(); + var oldNationList = await oldDb.Ado.GetDataTableAsync("select * from nation"); + + if (oldNationList.Rows.Count > 0) + { + + foreach (DataRow row in oldNationList.Rows) + { + string oldName = row["nation_name"].ToString(); //老系统名称 + var newNationEnt = newNationList.Where(m => m.DisplayName.Contains(oldName)).FirstOrDefault(); + if (newNationEnt != null) + { + var fieldComparison = new FieldComparison + { + FieldName = "id", + NewKeyValue = newNationEnt.Id.ToString(), + OldKeyValue = row["nation_id"].ToString(), + TableName = "nation" + }; + + await _fieldComparisonRepository.InsertAsync(fieldComparison); + } + + } + + _logger.LogInformation($"民族数据处理完毕,处理数量{oldNationList.Rows.Count}"); + } + else + { + _logger.LogInformation($"民族数据无需处理"); + } + } + + /// + /// 迁移体检结论数据 + /// + /// + [RemoteService(false)] + public async Task TransferMedicalConclusionData() + { + var count = await _medicalConclusionRepository.GetCountAsync(); + if (count == 0) + { + var oldMedicalConclusionList = await oldDb.Ado.GetDataTableAsync("select medical_conclusion_id,medical_conclusion_name from medical_conclusion order by display_order asc"); + if (oldMedicalConclusionList.Rows.Count > 0) + { + foreach (DataRow row in oldMedicalConclusionList.Rows) + { + using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true)) + { + Guid medicalConclusionId = GuidGenerator.Create(); + + var data = new MedicalConclusion(medicalConclusionId) + { + DisplayName = row["medical_conclusion_name"].ToString(), + DisplayOrder = oldMedicalConclusionList.Rows.IndexOf(row) + 1, + SimpleCode = LanguageConverter.GetPYSimpleCode(row["medical_conclusion_name"].ToString()), + MedicalConclusionTypeId = defaultMedicalConclusionType + }; + + await _medicalConclusionRepository.InsertAsync(data); + + var fieldComparison = new FieldComparison + { + TableName = "medical_conclusion", + FieldName = "id", + NewKeyValue = medicalConclusionId.ToString(), + OldKeyValue = row["medical_conclusion_id"].ToString() + }; + + await _fieldComparisonRepository.InsertAsync(fieldComparison); + + await uow.CompleteAsync(); + } + } + } + _logger.LogInformation($"体检结论数据处理完毕,处理数量{oldMedicalConclusionList.Rows.Count}"); + } + else + { + _logger.LogInformation("体检结论数据已存在,未处理"); + } + } + + #endregion + + + + #region 基础项目相关数据 + + /// + /// 迁移项目数据 + /// + /// + [RemoteService(false)] + public async Task TransferItemData() + { + var count = await _itemRepository.GetCountAsync(); + if (count == 0) + { + + var oldItemList = await oldDb.Ado.GetDataTableAsync("select a.* from item as a left join department as b on a.department_id=b.department_id order by b.display_order,a.display_order"); + if (oldItemList.Rows.Count > 0) + { + + foreach (DataRow row in oldItemList.Rows) + { + + using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true)) + { + + #region 根据仪器类别生成二级科室 + + var itemTypeId = Guid.Parse((await _fieldComparisonRepository.GetQueryableAsync()).Where(m => m.TableName == "item_type" && m.OldKeyValue == row["department_id"].ToString()).FirstOrDefault().NewKeyValue); + + Guid? deviceTypeId = null; + + if (!string.IsNullOrWhiteSpace(row["device_type_id"].ToString())) + { + deviceTypeId = Guid.Parse((await _fieldComparisonRepository.GetQueryableAsync()).Where(m => m.TableName == "device_type" && m.OldKeyValue == row["device_type_id"].ToString()).FirstOrDefault().NewKeyValue); + + var itemTypeEnt = await _itemTypeRepository.GetAsync(itemTypeId); + var deviceTypeEnt = await _deviceTypeRepository.GetAsync(deviceTypeId.Value); + + + var itemTypeChildEnt = await _itemTypeRepository.FirstOrDefaultAsync(m => m.ParentId == itemTypeEnt.Id && m.DisplayName == deviceTypeEnt.DisplayName); + if (itemTypeChildEnt == null) + { + Guid autoItemTypeId = GuidGenerator.Create(); + + #region 排序值 + + int displayOrder = (await _itemTypeRepository.CountAsync(m => m.ParentId == itemTypeEnt.Id)) + 1; + + #endregion + + var item_type_data = new ItemType(autoItemTypeId) + { + DisplayName = deviceTypeEnt.DisplayName, + DisplayOrder = displayOrder, + SimpleCode = LanguageConverter.GetPYSimpleCode(deviceTypeEnt.DisplayName), + CheckTypeFlag = itemTypeEnt.CheckTypeFlag, + GuidTypeId = itemTypeEnt.GuidTypeId, + IsMergeAsbitem = itemTypeEnt.IsMergeAsbitem, + IsWrap = itemTypeEnt.IsWrap, + MedicalReportTypeId = itemTypeEnt.MedicalReportTypeId, + ParentId = itemTypeEnt.Id, + PathCode = _itemTypeManager.CreatePathCode(itemTypeEnt.Id).Result, + IsCheckRequest = itemTypeEnt.IsCheckRequest + }; + + await _itemTypeRepository.InsertAsync(item_type_data); + itemTypeId = autoItemTypeId; + } + else + { + itemTypeId = itemTypeChildEnt.Id; + } + + } + + #endregion + + + + Guid? unitId = null; + if (!string.IsNullOrWhiteSpace(row["unit_id"].ToString())) + unitId = Guid.Parse((await _fieldComparisonRepository.GetQueryableAsync()).Where(m => m.TableName == "unit" && m.OldKeyValue == row["unit_id"].ToString()).FirstOrDefault().NewKeyValue); + + Guid itemId = GuidGenerator.Create(); + + var data = new Item(itemId) + { + DisplayName = row["item_name"].ToString(), + DisplayOrder = oldItemList.Rows.IndexOf(row) + 1, + SimpleCode = LanguageConverter.GetPYSimpleCode(row["item_name"].ToString()), + CalculationFunction = "", + DefaultResult = row["default_result"].ToString(), + DiagnosisFunction = "", + EnglishShortName = row["english_abbreviation"].ToString(), + InputCheck = row["input_check"].ToString(), + IsActive = Convert.ToChar(row["valid_flag"].ToString()), + IsCalculationItem = 'N', + IsContinueProcess = 'N', + IsDiagnosisFunction = 'N', + IsNameIntoSummary = Convert.ToChar(row["name_into_summary_flag"]), + IsProduceSummary = Convert.ToChar(row["produce_summary_flag"]), + ItemTypeId = itemTypeId, + LineModeFlag = '0', + Price = Convert.ToDecimal(row["price"]), + PriceItemId = null, + ReferenceRangeTypeFlag = Convert.ToChar(row["reference_range_type"]), + ResultTemplateTypeFlag = '0', + UnitId = unitId, + DeviceTypeId = deviceTypeId + }; + + await _itemRepository.InsertAsync(data); + + if (row["reference_range_type"].ToString() == "2" && !string.IsNullOrWhiteSpace(row["reference_range_value"].ToString())) + { + //增加字符型参考范围到参考范围表 + + Guid referenceRangeId = GuidGenerator.Create(); + + var referenceRange = new ReferenceRange(referenceRangeId) + { + AgeLowerLimit = 0, + AgeUpperLimit = 200, + CriticalRangeValue = "", + ItemId = itemId, + ForSexId = ForSexFlag.All, + LowerDiagnosisId = null, + ReferenceRangeTypeFlag = ItemReferenceRangeTypeFlag.Character, + UpperDiagnosisId = null, + ReferenceRangeValue = row["reference_range_value"].ToString() + }; + + //referenceRanges.Add(referenceRange); + await _referenceRangeRepository.InsertAsync(referenceRange); + } + + + var fieldComparison = new FieldComparison + { + TableName = "item", + FieldName = "id", + NewKeyValue = itemId.ToString(), + OldKeyValue = row["item_id"].ToString() + }; + + await _fieldComparisonRepository.InsertAsync(fieldComparison); + + await uow.CompleteAsync(); + } + } + + + + + } + _logger.LogInformation($"项目数据处理完毕,处理数量{oldItemList.Rows.Count}"); + } + else + { + _logger.LogInformation("项目数据已存在,未处理"); + } + } + + /// + /// 迁移组合项目数据 + /// + /// + [RemoteService(false)] + public async Task TransferAsbitemData() + { + var count = await _asbitemRepository.GetCountAsync(); + + if (count == 0) + { + var oldAsbitemList = await oldDb.Ado.GetDataTableAsync("select a.* from asbitem as a left join department as b on a.department_id=b.department_id order by b.display_order,a.display_order "); + if (oldAsbitemList.Rows.Count > 0) + { + foreach (DataRow row in oldAsbitemList.Rows) + { + using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true)) + { + + #region 根据仪器类别生成二级科室 + + var itemTypeId = Guid.Parse((await _fieldComparisonRepository.GetQueryableAsync()).Where(m => m.TableName == "item_type" && m.OldKeyValue == row["department_id"].ToString()).FirstOrDefault().NewKeyValue); + + Guid? deviceTypeId = null; + + if (!string.IsNullOrWhiteSpace(row["device_type_id"].ToString())) + { + deviceTypeId = Guid.Parse((await _fieldComparisonRepository.GetQueryableAsync()).Where(m => m.TableName == "device_type" && m.OldKeyValue == row["device_type_id"].ToString()).FirstOrDefault().NewKeyValue); + + var itemTypeEnt = await _itemTypeRepository.GetAsync(itemTypeId); + var deviceTypeEnt = await _deviceTypeRepository.GetAsync(deviceTypeId.Value); + + + var itemTypeChildEnt = await _itemTypeRepository.FirstOrDefaultAsync(m => m.ParentId == itemTypeEnt.Id && m.DisplayName == deviceTypeEnt.DisplayName); + if (itemTypeChildEnt == null) + { + Guid autoItemTypeId = GuidGenerator.Create(); + + #region 排序值 + + int displayOrder = (await _itemTypeRepository.CountAsync(m => m.ParentId == itemTypeEnt.Id)) + 1; + + #endregion + + var item_type_data = new ItemType(autoItemTypeId) + { + DisplayName = deviceTypeEnt.DisplayName, + DisplayOrder = displayOrder, + SimpleCode = LanguageConverter.GetPYSimpleCode(deviceTypeEnt.DisplayName), + CheckTypeFlag = itemTypeEnt.CheckTypeFlag, + GuidTypeId = itemTypeEnt.GuidTypeId, + IsMergeAsbitem = itemTypeEnt.IsMergeAsbitem, + IsWrap = itemTypeEnt.IsWrap, + MedicalReportTypeId = itemTypeEnt.MedicalReportTypeId, + ParentId = itemTypeEnt.Id, + PathCode = _itemTypeManager.CreatePathCode(itemTypeEnt.Id).Result, + IsCheckRequest = itemTypeEnt.IsCheckRequest + }; + + await _itemTypeRepository.InsertAsync(item_type_data); + itemTypeId = autoItemTypeId; + } + else + { + itemTypeId = itemTypeChildEnt.Id; + } + + } + + #endregion + + Guid collectItemTypeId = Guid.Parse((await _fieldComparisonRepository.GetQueryableAsync()).Where(m => m.TableName == "collect_item_type" && m.OldKeyValue == row["collect_item_type_id"].ToString()).FirstOrDefault().NewKeyValue); + + Guid asbitemId = GuidGenerator.Create(); + + + var data = new Asbitem(asbitemId) + { + DisplayName = row["asbitem_name"].ToString(), + DisplayOrder = oldAsbitemList.Rows.IndexOf(row) + 1, + SimpleCode = LanguageConverter.GetPYSimpleCode(row["asbitem_name"].ToString()), + DefaultResult = row["default_result"].ToString(), + DiagnosisFunction = "", + IsActive = Convert.ToChar(row["valid_flag"].ToString()), + IsContinueProcess = 'N', + IsDiagnosisFunction = 'N', + ItemTypeId = itemTypeId, + Price = Convert.ToDecimal(row["price"]), + DeviceTypeId = deviceTypeId, + ClinicalMeaning = row["clinical_meaning"].ToString(), + ForSexId = ConvertForSex(row["for_sex_id"].ToString()), + CollectItemTypeId = collectItemTypeId, + //InvoiceItemTypeId = InvoiceItemTypeId, + IsBeforeEat = Convert.ToChar(row["before_eat_flag"].ToString()), + IsCheck = Convert.ToChar(row["check_flag"].ToString()), + IsItemResultMerger = Convert.ToChar(row["item_result_merger_flag"].ToString()), + IsPictureRotate = Convert.ToChar(row["picture_rotate_flag"].ToString()), + QueueTime = string.IsNullOrEmpty(row["queue_time"].ToString()) ? 0 : Convert.ToDecimal(row["queue_time"].ToString()), + ShortName = row["short_name"].ToString(), + BarcodeMode = '0', + DiseaseScreeningTypeId = null, + ForPregnantFlag = 'A', + IsWebAppoint = 'N', + MaritalStatusId = 'A', + Warn = "" + }; + + await _asbitemRepository.InsertAsync(data); + + + #region 指引信息 + + if (!string.IsNullOrWhiteSpace(row["prompt"].ToString())) + { + var asbitemGuideData = new AsbitemGuide + { + AsbitemId = asbitemId, + ForSexId = ForSexFlag.All, + Guide = row["prompt"].ToString(), + MedicalCenterId = defaultMedicalCenterId + }; + + await _asbitemGuideRepository.InsertAsync(asbitemGuideData); + } + + #endregion + + var fieldComparison = new FieldComparison + { + TableName = "asbitem", + FieldName = "id", + NewKeyValue = asbitemId.ToString(), + OldKeyValue = row["asbitem_id"].ToString() + }; + + await _fieldComparisonRepository.InsertAsync(fieldComparison); + + await uow.CompleteAsync(); + } + } + + + + + } + _logger.LogInformation($"组合项目数据处理完毕,处理数量{oldAsbitemList.Rows.Count}"); + } + else + { + _logger.LogInformation("组合项目数据已存在,未处理"); + } + + + } + + + /// + /// 迁移组合项目明细数据 无字典 + /// + /// + [RemoteService(false)] + public async Task TransferAsbitemDetailData() + { + var count = await _asbitemDetailRepository.GetCountAsync(); + + if (count == 0) + { + var oldAsbitemDetailList = await oldDb.Ado.GetDataTableAsync("select * from asbitem_detail "); + if (oldAsbitemDetailList.Rows.Count > 0) + { + foreach (DataRow row in oldAsbitemDetailList.Rows) + { + using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true)) + { + Guid asbitemId = Guid.Parse((await _fieldComparisonRepository.GetQueryableAsync()).Where(m => m.TableName == "asbitem" && m.OldKeyValue == row["asbitem_id"].ToString()).FirstOrDefault().NewKeyValue); + Guid itemId = Guid.Parse((await _fieldComparisonRepository.GetQueryableAsync()).Where(m => m.TableName == "item" && m.OldKeyValue == row["item_id"].ToString()).FirstOrDefault().NewKeyValue); + var data = new AsbitemDetail + { + AsbitemId = asbitemId, + ItemId = itemId + }; + + await _asbitemDetailRepository.InsertAsync(data); + + await uow.CompleteAsync(); + } + } + } + _logger.LogInformation($"组合项目明细数据处理完毕,处理数量{oldAsbitemDetailList.Rows.Count}"); + } + else + { + _logger.LogInformation("组合项目明细数据已存在,未处理"); + } + + + } + + + /// + /// 迁移体检套餐数据 + /// + /// + [RemoteService(false)] + public async Task TransferMedicalPackageData() + { + var count = await _medicalPackageRepository.GetCountAsync(); + + if (count == 0) + { + var oldMedicalPackageList = await oldDb.Ado.GetDataTableAsync("select * from medical_package order by display_order"); + if (oldMedicalPackageList.Rows.Count > 0) + { + foreach (DataRow row in oldMedicalPackageList.Rows) + { + using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true)) + { + Guid medicalPackageId = GuidGenerator.Create(); + + var data = new MedicalPackage(medicalPackageId) + { + DisplayName = row["medical_package_name"].ToString(), + DisplayOrder = oldMedicalPackageList.Rows.IndexOf(row) + 1, + SimpleCode = LanguageConverter.GetPYSimpleCode(row["medical_package_name"].ToString()), + ForSexId = ConvertForSex(row["for_sex_id"].ToString()), + IsActive = Convert.ToChar(row["valid_flag"].ToString()), + Price = Convert.ToDecimal(row["price"].ToString()), + Remark = row["remark"].ToString(), + AgeLowerLimit = 0, + AgeUpperLimit = 200, + IsBasicRecommend = 'N', + IsWebAppoint = 'N', + MaritalStatusId = 'A' + }; + + await _medicalPackageRepository.InsertAsync(data); + + + var fieldComparison = new FieldComparison + { + TableName = "medical_package", + FieldName = "id", + NewKeyValue = medicalPackageId.ToString(), + OldKeyValue = row["medical_package_id"].ToString() + }; + + await _fieldComparisonRepository.InsertAsync(fieldComparison); + + await uow.CompleteAsync(); + } + } + } + _logger.LogInformation($"体检套餐数据处理完毕,处理数量{oldMedicalPackageList.Rows.Count}"); + } + else + { + _logger.LogInformation("体检套餐数据已存在,未处理"); + } + + + } + + + /// + /// 迁移体检套餐明细数据 无字典 + /// + /// + [RemoteService(false)] + public async Task TransferMedicalPackageDetailData() + { + var count = await _medicalPackageDetailRepository.GetCountAsync(); + + if (count == 0) + { + var oldMedicalPackageDetailList = await oldDb.Ado.GetDataTableAsync("select * from medical_package_detail "); + if (oldMedicalPackageDetailList.Rows.Count > 0) + { + foreach (DataRow row in oldMedicalPackageDetailList.Rows) + { + using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true)) + { + Guid asbitemId = Guid.Parse((await _fieldComparisonRepository.GetQueryableAsync()).Where(m => m.TableName == "asbitem" && m.OldKeyValue == row["asbitem_id"].ToString()).FirstOrDefault().NewKeyValue); + Guid MedicalPackageId = Guid.Parse((await _fieldComparisonRepository.GetQueryableAsync()).Where(m => m.TableName == "medical_package" && m.OldKeyValue == row["medical_package_id"].ToString()).FirstOrDefault().NewKeyValue); + + var asbitemEnt = await _asbitemRepository.GetAsync(asbitemId); + + var data = new MedicalPackageDetail + { + AsbitemId = asbitemId, + Amount = 1, + MedicalPackageId = MedicalPackageId, + Price = asbitemEnt.Price + }; + + await _medicalPackageDetailRepository.InsertAsync(data); + + await uow.CompleteAsync(); + } + } + } + _logger.LogInformation($"体检套餐明细数据处理完毕,处理数量{oldMedicalPackageDetailList.Rows.Count}"); + } + else + { + _logger.LogInformation("体检套餐明细数据已存在,未处理"); + } + + } + + /// + /// 迁移诊断设置数据 + /// + /// + [RemoteService(false)] + public async Task TransferDiagnosisData() + { + var count = await _diagnosisRepository.GetCountAsync(); + if (count == 0) + { + + var oldDiagnosisList = await oldDb.Ado.GetDataTableAsync("select a.* from diagnosis as a left join department as b on a.department_id=b.department_id order by b.display_order,a.display_order "); + if (oldDiagnosisList.Rows.Count > 0) + { + foreach (DataRow row in oldDiagnosisList.Rows) + { + using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true)) + { + #region 根据仪器类别生成二级科室 + + var itemTypeId = Guid.Parse((await _fieldComparisonRepository.GetQueryableAsync()).Where(m => m.TableName == "item_type" && m.OldKeyValue == row["department_id"].ToString()).FirstOrDefault().NewKeyValue); + + Guid? deviceTypeId = null; + + if (!string.IsNullOrWhiteSpace(row["device_type_id"].ToString())) + { + var fieldComparisonEnt = (await _fieldComparisonRepository.GetQueryableAsync()).Where(m => m.TableName == "device_type" && m.OldKeyValue == row["device_type_id"].ToString()).FirstOrDefault(); + if (fieldComparisonEnt != null) + { + deviceTypeId = Guid.Parse(fieldComparisonEnt.NewKeyValue); + var itemTypeEnt = await _itemTypeRepository.GetAsync(itemTypeId); + var deviceTypeEnt = await _deviceTypeRepository.GetAsync(deviceTypeId.Value); + + + var itemTypeChildEnt = await _itemTypeRepository.FirstOrDefaultAsync(m => m.ParentId == itemTypeEnt.Id && m.DisplayName == deviceTypeEnt.DisplayName); + if (itemTypeChildEnt == null) + { + Guid autoItemTypeId = GuidGenerator.Create(); + + #region 排序值 + + int displayOrder = (await _itemTypeRepository.CountAsync(m => m.ParentId == itemTypeEnt.Id)) + 1; + + #endregion + + var item_type_data = new ItemType(autoItemTypeId) + { + DisplayName = deviceTypeEnt.DisplayName, + DisplayOrder = displayOrder, + SimpleCode = LanguageConverter.GetPYSimpleCode(deviceTypeEnt.DisplayName), + CheckTypeFlag = itemTypeEnt.CheckTypeFlag, + GuidTypeId = itemTypeEnt.GuidTypeId, + IsMergeAsbitem = itemTypeEnt.IsMergeAsbitem, + IsWrap = itemTypeEnt.IsWrap, + MedicalReportTypeId = itemTypeEnt.MedicalReportTypeId, + ParentId = itemTypeEnt.Id, + PathCode = _itemTypeManager.CreatePathCode(itemTypeEnt.Id).Result, + IsCheckRequest = itemTypeEnt.IsCheckRequest + }; + + await _itemTypeRepository.InsertAsync(item_type_data); + itemTypeId = autoItemTypeId; + } + else + { + itemTypeId = itemTypeChildEnt.Id; + } + } + + } + + #endregion + + + Guid diagnosisId = GuidGenerator.Create(); + + var data = new Diagnosis(diagnosisId) + { + DisplayName = row["diagnosis_name"].ToString(), + DisplayOrder = oldDiagnosisList.Rows.IndexOf(row) + 1, + SimpleCode = LanguageConverter.GetPYSimpleCode(row["diagnosis_name"].ToString()), + ItemTypeId = itemTypeId, + DiagnosisLevelId = 1, + ForSexId = 'A', + IsIll = Convert.ToChar(row["ill_flag"].ToString()), + IsSummaryTemplate = Convert.ToChar(row["template_flag"].ToString()), + SuggestionName = row["suggestion_name"].ToString() + }; + + await _diagnosisRepository.InsertAsync(data); + + + var fieldComparison = new FieldComparison + { + TableName = "diagnosis", + FieldName = "id", + NewKeyValue = diagnosisId.ToString(), + OldKeyValue = row["diagnosis_id"].ToString() + }; + + await _fieldComparisonRepository.InsertAsync(fieldComparison); + + await uow.CompleteAsync(); + } + } + + + + + } + _logger.LogInformation($"诊断设置数据处理完毕,处理数量{oldDiagnosisList.Rows.Count}"); + } + else + { + _logger.LogInformation("诊断设置数据已存在,未处理"); + } + } + + /// + /// 迁移诊断建议数据 + /// + /// + [RemoteService(false)] + public async Task TransferSuggestionData() + { + var count = await _suggestionRepository.GetCountAsync(); + if (count == 0) + { + + var oldSuggestionList = await oldDb.Ado.GetDataTableAsync("select * from suggestion order by display_order,suggestion_id "); + if (oldSuggestionList.Rows.Count > 0) + { + + foreach (DataRow row in oldSuggestionList.Rows) + { + using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true)) + { + + Guid DiagnosisId = Guid.Parse((await _fieldComparisonRepository.GetQueryableAsync()).Where(m => m.TableName == "diagnosis" && m.OldKeyValue == row["diagnosis_id"].ToString()).FirstOrDefault().NewKeyValue); + + Guid suggestionId = GuidGenerator.Create(); + + if (await _suggestionRepository.FirstOrDefaultAsync(f => f.DiagnosisId == DiagnosisId && f.SuggestionContent == row["suggestion_content"].ToString()) == null) + { + var data = new Suggestion(suggestionId) + { + DisplayOrder = oldSuggestionList.Rows.IndexOf(row) + 1, + DiagnosisId = DiagnosisId, + SuggestionType = SuggestionTypeFlag.HealthGuidance, + SuggestionContent = row["suggestion_content"].ToString() + }; + + await _suggestionRepository.InsertAsync(data); + + + var fieldComparison = new FieldComparison + { + TableName = "suggestion", + FieldName = "id", + NewKeyValue = suggestionId.ToString(), + OldKeyValue = row["suggestion_id"].ToString() + }; + + await _fieldComparisonRepository.InsertAsync(fieldComparison); + } + await uow.CompleteAsync(); + } + } + } + _logger.LogInformation($"诊断建议数据处理完毕,处理数量{oldSuggestionList.Rows.Count}"); + } + else + { + _logger.LogInformation("诊断建议数据已存在,未处理"); + } + } + + /// + /// 迁移项目结果模板数据 + /// + /// + [RemoteService(false)] + public async Task TransferItemResultTemplateData() + { + var count = await _itemResultTemplateRepository.GetCountAsync(); + if (count == 0) + { + var oldItemResultTemplateList = await oldDb.Ado.GetDataTableAsync("select * from item_result_template order by display_order,item_result_template_id "); + if (oldItemResultTemplateList.Rows.Count > 0) + { + foreach (DataRow row in oldItemResultTemplateList.Rows) + { + using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true)) + { + Guid? DiagnosisId = null; + if (!string.IsNullOrWhiteSpace(row["diagnosis_id"].ToString())) + { + var fieldComparisonDiagnosisEnt = (await _fieldComparisonRepository.GetQueryableAsync()).Where(m => m.TableName == "diagnosis" && m.OldKeyValue == row["diagnosis_id"].ToString()).FirstOrDefault(); + if (fieldComparisonDiagnosisEnt != null) + { + DiagnosisId = Guid.Parse(fieldComparisonDiagnosisEnt.NewKeyValue); + } + } + + Guid ItemId = Guid.Parse((await _fieldComparisonRepository.GetQueryableAsync()).Where(m => m.TableName == "item" && m.OldKeyValue == row["item_id"].ToString()).FirstOrDefault().NewKeyValue); + + Guid itemResultTemplateId = GuidGenerator.Create(); + + if (await _itemResultTemplateRepository.FirstOrDefaultAsync(f => f.ItemId == ItemId && f.Result == row["result"].ToString()) == null) + { + + var data = new ItemResultTemplate(itemResultTemplateId) + { + DisplayOrder = oldItemResultTemplateList.Rows.IndexOf(row) + 1, + DiagnosisId = DiagnosisId, + IsNameIntoSummary = Convert.ToChar(row["name_into_summary_flag"].ToString()), + IsResultIntoSummary = Convert.ToChar(row["result_into_summary_flag"].ToString()), + ItemId = ItemId, + Result = row["result"].ToString(), + SimpleCode = LanguageConverter.GetPYSimpleCode(row["result"].ToString()), + ResultStatusId = row["result_status_id"].ToString() + }; + + await _itemResultTemplateRepository.InsertAsync(data); + + + var fieldComparison = new FieldComparison + { + TableName = "item_result_template", + FieldName = "id", + NewKeyValue = itemResultTemplateId.ToString(), + OldKeyValue = row["item_result_template_id"].ToString() + }; + + await _fieldComparisonRepository.InsertAsync(fieldComparison); + } + await uow.CompleteAsync(); + + } + } + } + _logger.LogInformation($"项目结果模板数据处理完毕,处理数量{oldItemResultTemplateList.Rows.Count}"); + } + else + { + _logger.LogInformation("项目结果模板数据已存在,未处理"); + } + } + + /// + /// 迁移项目结果匹配数据 + /// + /// + [RemoteService(false)] + public async Task TransferItemResultMatchData() + { + var count = await _ItemResultMatchRepository.GetCountAsync(); + if (count == 0) + { + var oldItemResultMatchList = await oldDb.Ado.GetDataTableAsync("select * from item_result_match order by display_order,item_result_match_id "); + if (oldItemResultMatchList.Rows.Count > 0) + { + foreach (DataRow row in oldItemResultMatchList.Rows) + { + using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true)) + { + + var fieldComparisonDiagnosisEnt = (await _fieldComparisonRepository.GetQueryableAsync()).Where(m => m.TableName == "diagnosis" && m.OldKeyValue == row["diagnosis_id"].ToString()).FirstOrDefault(); + if (fieldComparisonDiagnosisEnt != null) + { + Guid DiagnosisId = Guid.Parse(fieldComparisonDiagnosisEnt.NewKeyValue); + Guid ItemId = Guid.Parse((await _fieldComparisonRepository.GetQueryableAsync()).Where(m => m.TableName == "item" && m.OldKeyValue == row["item_id"].ToString()).FirstOrDefault().NewKeyValue); + + Guid itemResultMatchId = GuidGenerator.Create(); + + var data = new ItemResultMatch(itemResultMatchId) + { + DisplayOrder = oldItemResultMatchList.Rows.IndexOf(row) + 1, + DiagnosisId = DiagnosisId, + ItemId = ItemId, + Result = row["result"].ToString() + }; + + var ent = await _ItemResultMatchRepository.InsertAsync(data, true); + + + var fieldComparison = new FieldComparison + { + TableName = "item_result_match", + FieldName = "id", + NewKeyValue = ent.Id.ToString(), + OldKeyValue = row["item_result_match_id"].ToString() + }; + + await _fieldComparisonRepository.InsertAsync(fieldComparison); + } + + await uow.CompleteAsync(); + } + + } + + + + + } + _logger.LogInformation($"项目结果匹配数据处理完毕,处理数量{oldItemResultMatchList.Rows.Count}"); + } + else + { + _logger.LogInformation("项目结果匹配数据已存在,未处理"); + } + } + + + + /// + /// 迁移项目参考范围数据 无字典 + /// + /// + [RemoteService(false)] + public async Task TransferReferenceRangeData() + { + var count = (await _referenceRangeRepository.GetQueryableAsync()).Where(m => m.ReferenceRangeTypeFlag != ItemReferenceRangeTypeFlag.Character).Count(); + if (count == 0) + { + + var oldReferenceRangeList = await oldDb.Ado.GetDataTableAsync("select * from reference_range order by reference_range_id "); + if (oldReferenceRangeList.Rows.Count > 0) + { + foreach (DataRow row in oldReferenceRangeList.Rows) + { + using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true)) + { + Guid? LowerDiagnosisId = null; + Guid? UpperDiagnosisId = null; + + var fieldComparisonLowerDiagnosisEnt = (await _fieldComparisonRepository.GetQueryableAsync()).Where(m => m.TableName == "diagnosis" && m.OldKeyValue == row["lower_diagnosis_id"].ToString()).FirstOrDefault(); + var fieldComparisonUpperDiagnosisEnt = (await _fieldComparisonRepository.GetQueryableAsync()).Where(m => m.TableName == "diagnosis" && m.OldKeyValue == row["upper_diagnosis_id"].ToString()).FirstOrDefault(); + if (fieldComparisonLowerDiagnosisEnt != null) + { + LowerDiagnosisId = Guid.Parse(fieldComparisonLowerDiagnosisEnt.NewKeyValue); + } + if (fieldComparisonUpperDiagnosisEnt != null) + { + UpperDiagnosisId = Guid.Parse(fieldComparisonUpperDiagnosisEnt.NewKeyValue); + } + + Guid ItemId = Guid.Parse((await _fieldComparisonRepository.GetQueryableAsync()).Where(m => m.TableName == "item" && m.OldKeyValue == row["item_id"].ToString()).FirstOrDefault().NewKeyValue); + + Guid referenceRangeId = GuidGenerator.Create(); + + var data = new ReferenceRange(referenceRangeId) + { + ItemId = ItemId, + AgeLowerLimit = (short)Convert.ToInt32(row["age_lower_limit"].ToString()), + AgeUpperLimit = (short)Convert.ToInt32(row["age_upper_limit"].ToString()), + CriticalRangeValue = string.Empty, + ForSexId = ConvertForSex(row["for_sex_id"].ToString()), + LowerDiagnosisId = LowerDiagnosisId, + ReferenceRangeTypeFlag = ItemReferenceRangeTypeFlag.Number, + ReferenceRangeValue = Convert.ToDecimal(row["lower_limit"].ToString()).ToString("#0.####") + "-" + Convert.ToDecimal(row["upper_limit"].ToString()).ToString("#0.####"), + UpperDiagnosisId = UpperDiagnosisId + }; + + await _referenceRangeRepository.InsertAsync(data); + + await uow.CompleteAsync(); + } + } + + + } + _logger.LogInformation($"项目参考范围数据处理完毕,处理数量{oldReferenceRangeList.Rows.Count}"); + } + else + { + _logger.LogInformation("项目参考范围数据已存在,未处理"); + } + } + + + /// + /// 迁移条码分组数据 + /// + /// + [RemoteService(false)] + public async Task TransferSampleGroupData() + { + var count = await _sampleGroupRepository.GetCountAsync(); + if (count == 0) + { + //获取一条条码类型的数据 + Guid defaultSampleTypeId = Guid.Empty; + var sampleTypeEnt = await _sampleTypeRepository.FirstOrDefaultAsync(); + if (sampleTypeEnt != null) + { + defaultSampleTypeId = sampleTypeEnt.Id; + } + if (defaultSampleTypeId != Guid.Empty) + { + var oldSampleGroupList = await oldDb.Ado.GetDataTableAsync("select * from vessels_type order by display_order"); + if (oldSampleGroupList.Rows.Count > 0) + { + foreach (DataRow row in oldSampleGroupList.Rows) + { + using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true)) + { + #region 转成成新的标本类型ID + + Guid newSampleTypeId = defaultSampleTypeId; //默认取其他 ID + + if (!string.IsNullOrWhiteSpace(row["specimen_type_id"].ToString())) + { + var oldSampleType = (await _fieldComparisonRepository.GetQueryableAsync()) + .Where(m => m.TableName == "sample_type" && m.OldKeyValue == row["specimen_type_id"].ToString()).FirstOrDefault(); + if (oldSampleType != null) + { + newSampleTypeId = Guid.Parse(oldSampleType.NewKeyValue); + } + } + #endregion + + Guid sampleGroupId = GuidGenerator.Create(); + + var data = new SampleGroup(sampleGroupId) + { + DisplayName = row["vessels_type_name"].ToString(), + DisplayOrder = oldSampleGroupList.Rows.IndexOf(row) + 1, + SimpleCode = LanguageConverter.GetPYSimpleCode(row["vessels_type_name"].ToString()), + SampleContainerId = defaultSampleContainerId, + SampleTypeId = newSampleTypeId + }; + + await _sampleGroupRepository.InsertAsync(data); + + var fieldComparison = new FieldComparison + { + TableName = "sample_group", + FieldName = "id", + NewKeyValue = sampleGroupId.ToString(), + OldKeyValue = row["vessels_type_id"].ToString() + }; + + await _fieldComparisonRepository.InsertAsync(fieldComparison); + + await uow.CompleteAsync(); + } + } + + + } + + _logger.LogInformation($"条码分组数据处理完毕,处理数量{oldSampleGroupList.Rows.Count}"); + } + else + { + _logger.LogInformation($"条码类型未获取到默认数据,跳过条码分组数据处理"); + } + } + else + { + _logger.LogInformation("条码分组数据已存在,未处理"); + } + } + + + /// + /// 迁移条码分组明细数据 + /// + /// + [RemoteService(false)] + public async Task TransferSampleGroupDetailData() { + var count = await _sampleGroupDetailRepository.GetCountAsync(); + if (count == 0) + { + var oldSampleGroupDetailList = await oldDb.Ado.GetDataTableAsync("select * from vessels_type_detail "); + if (oldSampleGroupDetailList.Rows.Count > 0) + { + + foreach (DataRow row in oldSampleGroupDetailList.Rows) + { + using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true)) + { + Guid newSampleGroupId = Guid.Parse((await _fieldComparisonRepository.GetQueryableAsync()) + .Where(m => m.TableName == "sample_group" && m.OldKeyValue == row["vessels_type_id"].ToString()).FirstOrDefault().NewKeyValue); + + Guid newAsbitemId = Guid.Parse((await _fieldComparisonRepository.GetQueryableAsync()) + .Where(m => m.TableName == "asbitem" && m.OldKeyValue == row["asbitem_id"].ToString()).FirstOrDefault().NewKeyValue); + + var data = new SampleGroupDetail + { + AsbitemId = newAsbitemId, + SampleGroupId = newSampleGroupId + }; + + await _sampleGroupDetailRepository.InsertAsync(data); + + await uow.CompleteAsync(); + + } + } + + + } + _logger.LogInformation($"条码分组明细数据处理完毕,处理数量{oldSampleGroupDetailList.Rows.Count}"); + } + else + { + _logger.LogInformation("条码分组明细数据已存在,未处理"); + } } + + /// + /// 迁移体检单位数据 一级 + /// + /// + [RemoteService(false)] + public async Task TransferTopCustomerOrgData() + { + var count = await _customerOrgRepository.GetCountAsync(); + if (count == 0) + { + var oldCustomerOrgList = await oldDb.Ado.GetDataTableAsync("select * from org where len(org_id)=5 order by display_order asc"); + if (oldCustomerOrgList.Rows.Count > 0) + { + foreach (DataRow row in oldCustomerOrgList.Rows) + { + using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true)) + { + Guid customerOrgId = GuidGenerator.Create(); + + #region 备注 导入联系人姓名、电话 + string remark = ""; + if (!string.IsNullOrWhiteSpace(row["linkman"].ToString())) + { + remark = row["linkman"].ToString(); + } + if (!string.IsNullOrWhiteSpace(row["telephone"].ToString())) + { + if (!string.IsNullOrWhiteSpace(remark)) + { + remark += "|" + row["telephone"].ToString(); + } + else + { + remark = row["telephone"].ToString(); + } + } + #endregion + + var data = new CustomerOrg(customerOrgId) + { + Accounts = row["accounts"].ToString(), + Address = row["address"].ToString(), + Bank = row["bank"].ToString(), + DisplayName = row["org_name"].ToString(), + DisplayOrder = oldCustomerOrgList.Rows.IndexOf(row) + 1, + Fax = row["fax"].ToString(), + InvoiceName = row["org_name"].ToString(), + IsActive = 'Y', + IsLock = Convert.ToChar(row["lock_flag"].ToString()), + MedicalCenterId = defaultMedicalCenterId, + OrgTypeId = defaultOrgTypeId, //默认为私营 + ParentId = null, + PathCode = (oldCustomerOrgList.Rows.IndexOf(row) + 1).ToString().PadLeft(5, '0'), + PostalCode = row["postalcode"].ToString(), + Remark = remark, + ShortName = row["short_name"].ToString(), + SimpleCode = LanguageConverter.GetPYSimpleCode(row["org_name"].ToString()), + Telephone = row["telephone"].ToString(), + CountryOrgCode = row["org_id"].ToString(), + SalesPerson = "", + SalesPersonPhone = "" + }; + + await _customerOrgRepository.InsertAsync(data); + + var fieldComparison = new FieldComparison + { + FieldName = "id", + NewKeyValue = customerOrgId.ToString(), + OldKeyValue = row["org_id"].ToString(), + TableName = "customer_org" + }; + + await _fieldComparisonRepository.InsertAsync(fieldComparison); + + await uow.CompleteAsync(); + + } + + } + } + _logger.LogInformation($"体检单位一级数据处理完毕,处理数量{oldCustomerOrgList.Rows.Count}"); + } + else + { + _logger.LogInformation("体检单位一级数据已存在,未处理"); + } + } + + + /// + /// 迁移体检单位数据 二级 + /// + /// + [RemoteService(false)] + public async Task TransferTwoCustomerOrgData() + { + var count = (await _customerOrgRepository.GetQueryableAsync()).Where(m => m.PathCode.Length > 5).Count(); + if (count == 0) + { + + var oldCustomerOrgList = await oldDb.Ado.GetDataTableAsync("select * from [dbo].[org] where len(org_id)=8 order by org_id asc"); + if (oldCustomerOrgList.Rows.Count > 0) + { + List customerOrgList = await _customerOrgRepository.GetListAsync(m => m.ParentId == null); + List fieldComparisonList = await _fieldComparisonRepository.GetListAsync(m => m.TableName == "customer_org"); + + foreach (DataRow row in oldCustomerOrgList.Rows) + { + using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true)) + { + #region 查找上级ID + string oldId = row["org_id"].ToString(); + string oldParentId = oldId.Substring(0, 5); + Guid parentId = Guid.Parse(fieldComparisonList.Where(m => m.OldKeyValue == oldParentId).FirstOrDefault().NewKeyValue); + #endregion + + + Guid customerOrgId = GuidGenerator.Create(); + + #region 备注 导入联系人姓名、电话 + string remark = ""; + if (!string.IsNullOrWhiteSpace(row["linkman"].ToString())) + { + remark = row["linkman"].ToString(); + } + if (!string.IsNullOrWhiteSpace(row["telephone"].ToString())) + { + if (!string.IsNullOrWhiteSpace(remark)) + { + remark += "|" + row["telephone"].ToString(); + } + else + { + remark = row["telephone"].ToString(); + } + } + #endregion + + var data = new CustomerOrg(customerOrgId) + { + Accounts = row["accounts"].ToString(), + Address = row["address"].ToString(), + Bank = row["bank"].ToString(), + DisplayName = row["org_name"].ToString(), + DisplayOrder = oldCustomerOrgList.Rows.IndexOf(row) + 1, + Fax = row["fax"].ToString(), + InvoiceName = row["org_name"].ToString(), + IsActive = 'Y', + IsLock = Convert.ToChar(row["lock_flag"].ToString()), + MedicalCenterId = defaultMedicalCenterId, + OrgTypeId = defaultOrgTypeId, //默认为私营 + ParentId = parentId, + PathCode = _customerOrgManager.CreatePathCode(parentId).Result, + PostalCode = row["postalcode"].ToString(), + Remark = remark, + ShortName = row["short_name"].ToString(), + SimpleCode = LanguageConverter.GetPYSimpleCode(row["org_name"].ToString()), + Telephone = row["telephone"].ToString(), + CountryOrgCode = row["org_id"].ToString(), + SalesPerson = "", + SalesPersonPhone = "" + }; + + await _customerOrgRepository.InsertAsync(data); + + var fieldComparison = new FieldComparison + { + FieldName = "id", + NewKeyValue = customerOrgId.ToString(), + OldKeyValue = row["org_id"].ToString(), + TableName = "customer_org" + }; + + await _fieldComparisonRepository.InsertAsync(fieldComparison); + + await uow.CompleteAsync(); + } + + } + + } + _logger.LogInformation($"体检单位二级数据处理完毕,处理数量{oldCustomerOrgList.Rows.Count}"); + } + else + { + _logger.LogInformation("体检单位二级数据已存在,未处理"); + } + } + + /// + /// 迁移体检单位数据 三级 + /// + /// + [RemoteService(false)] + public async Task TransferThreeCustomerOrgData() + { + var count = (await _customerOrgRepository.GetQueryableAsync()).Where(m => m.PathCode.Length > 11).Count(); + if (count == 0) + { + var oldCustomerOrgList = await oldDb.Ado.GetDataTableAsync("select * from [dbo].[org] where len(org_id)=11 order by org_id asc"); + if (oldCustomerOrgList.Rows.Count > 0) + { + List customerOrgList = await _customerOrgRepository.GetListAsync(m => m.ParentId == null); + List fieldComparisonList = await _fieldComparisonRepository.GetListAsync(m => m.TableName == "customer_org"); + + foreach (DataRow row in oldCustomerOrgList.Rows) + { + using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true)) + { + + #region 查找上级ID + string oldId = row["org_id"].ToString(); + string oldParentId = oldId.Substring(0, 8); + Guid parentId = Guid.Parse(fieldComparisonList.Where(m => m.OldKeyValue == oldParentId).FirstOrDefault().NewKeyValue); + #endregion + + + Guid customerOrgId = GuidGenerator.Create(); + + #region 备注 导入联系人姓名、电话 + string remark = ""; + if (!string.IsNullOrWhiteSpace(row["linkman"].ToString())) + { + remark = row["linkman"].ToString(); + } + if (!string.IsNullOrWhiteSpace(row["telephone"].ToString())) + { + if (!string.IsNullOrWhiteSpace(remark)) + { + remark += "|" + row["telephone"].ToString(); + } + else + { + remark = row["telephone"].ToString(); + } + } + #endregion + + var data = new CustomerOrg(customerOrgId) + { + Accounts = row["accounts"].ToString(), + Address = row["address"].ToString(), + Bank = row["bank"].ToString(), + DisplayName = row["org_name"].ToString(), + DisplayOrder = oldCustomerOrgList.Rows.IndexOf(row) + 1, + Fax = row["fax"].ToString(), + InvoiceName = row["org_name"].ToString(), + IsActive = 'Y', + IsLock = Convert.ToChar(row["lock_flag"].ToString()), + MedicalCenterId = defaultMedicalCenterId, + OrgTypeId = defaultOrgTypeId, //默认为私营 + ParentId = parentId, + PathCode = _customerOrgManager.CreatePathCode(parentId).Result, + PostalCode = row["postalcode"].ToString(), + Remark = remark, + ShortName = row["short_name"].ToString(), + SimpleCode = LanguageConverter.GetPYSimpleCode(row["org_name"].ToString()), + Telephone = row["telephone"].ToString(), + CountryOrgCode = row["org_id"].ToString(), + SalesPerson = "", + SalesPersonPhone = "" + }; + + await _customerOrgRepository.InsertAsync(data); + + var fieldComparison = new FieldComparison + { + FieldName = "id", + NewKeyValue = customerOrgId.ToString(), + OldKeyValue = row["org_id"].ToString(), + TableName = "customer_org" + }; + + await _fieldComparisonRepository.InsertAsync(fieldComparison); + + await uow.CompleteAsync(); + } + } + } + _logger.LogInformation($"体检单位三级数据处理完毕,处理数量{oldCustomerOrgList.Rows.Count}"); + } + else + { + _logger.LogInformation("体检单位三级数据已存在,未处理"); + } + } + + + /// + /// 迁移体检单位数据 四级 + /// + /// + [RemoteService(false)] + public async Task TransferFourCustomerOrgData() + { + var count = (await _customerOrgRepository.GetQueryableAsync()).Where(m => m.PathCode.Length > 17).Count(); + if (count == 0) + { + var oldCustomerOrgList = await oldDb.Ado.GetDataTableAsync("select * from [dbo].[org] where len(org_id)=14 order by org_id asc"); + if (oldCustomerOrgList.Rows.Count > 0) + { + List customerOrgList = await _customerOrgRepository.GetListAsync(m => m.ParentId == null); + List fieldComparisonList = await _fieldComparisonRepository.GetListAsync(m => m.TableName == "customer_org"); + + foreach (DataRow row in oldCustomerOrgList.Rows) + { + using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true)) + { + + #region 查找上级ID + string oldId = row["org_id"].ToString(); + string oldParentId = oldId.Substring(0, 11); + Guid parentId = Guid.Parse(fieldComparisonList.Where(m => m.OldKeyValue == oldParentId).FirstOrDefault().NewKeyValue); + #endregion + + + Guid customerOrgId = GuidGenerator.Create(); + + #region 备注 导入联系人姓名、电话 + string remark = ""; + if (!string.IsNullOrWhiteSpace(row["linkman"].ToString())) + { + remark = row["linkman"].ToString(); + } + if (!string.IsNullOrWhiteSpace(row["telephone"].ToString())) + { + if (!string.IsNullOrWhiteSpace(remark)) + { + remark += "|" + row["telephone"].ToString(); + } + else + { + remark = row["telephone"].ToString(); + } + } + #endregion + + var data = new CustomerOrg(customerOrgId) + { + Accounts = row["accounts"].ToString(), + Address = row["address"].ToString(), + Bank = row["bank"].ToString(), + DisplayName = row["org_name"].ToString(), + DisplayOrder = oldCustomerOrgList.Rows.IndexOf(row) + 1, + Fax = row["fax"].ToString(), + InvoiceName = row["org_name"].ToString(), + IsActive = 'Y', + IsLock = Convert.ToChar(row["lock_flag"].ToString()), + MedicalCenterId = defaultMedicalCenterId, + OrgTypeId = defaultOrgTypeId, //默认为私营 + ParentId = parentId, + PathCode = _customerOrgManager.CreatePathCode(parentId).Result, + PostalCode = row["postalcode"].ToString(), + Remark = remark, + ShortName = row["short_name"].ToString(), + SimpleCode = LanguageConverter.GetPYSimpleCode(row["org_name"].ToString()), + Telephone = row["telephone"].ToString(), + CountryOrgCode = row["org_id"].ToString(), + SalesPerson = "", + SalesPersonPhone = "" + }; + + await _customerOrgRepository.InsertAsync(data); + + var fieldComparison = new FieldComparison + { + FieldName = "id", + NewKeyValue = customerOrgId.ToString(), + OldKeyValue = row["org_id"].ToString(), + TableName = "customer_org" + }; + + await _fieldComparisonRepository.InsertAsync(fieldComparison); + + await uow.CompleteAsync(); + } + } + } + _logger.LogInformation($"体检单位四级数据处理完毕,处理数量{oldCustomerOrgList.Rows.Count}"); + } + else + { + _logger.LogInformation("体检单位四级数据已存在,未处理"); + } + } + + /// + /// 迁移单位体检次数数据 无字典 + /// + /// + [RemoteService(false)] + public async Task TransferCustomerOrgRegisterData() + { + var count = await _customerOrgRegisterRepository.GetCountAsync(); + if (count == 0) + { + var oldCustomerOrgRegisterList = await oldDb.Ado.GetDataTableAsync("select * from org_medical_register order by org_medical_times"); + if (oldCustomerOrgRegisterList.Rows.Count > 0) + { + List fieldComparisonList = await _fieldComparisonRepository.GetListAsync(m => m.TableName == "customer_org"); + + foreach (DataRow row in oldCustomerOrgRegisterList.Rows) + { + using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true)) + { + Guid customerOrgId = Guid.Parse(fieldComparisonList.Where(m => m.OldKeyValue == row["org_id"].ToString()).FirstOrDefault().NewKeyValue); + Guid customerOrgRegisterId = GuidGenerator.Create(); + + if (customerOrgId == GuidFlag.PersonCustomerOrgId) + customerOrgRegisterId = GuidFlag.PersonCustomerOrgRegisterId; + var data = new CustomerOrgRegister(customerOrgRegisterId) + { + BeginTime = Convert.ToDateTime(row["start_time"].ToString()), + CustomerOrgId = customerOrgId, + EndTime = !string.IsNullOrWhiteSpace(row["end_time"].ToString()) ? Convert.ToDateTime(row["end_time"].ToString()) : null, + IsComplete = Convert.ToChar(row["complete_flag"].ToString()), + MedicalTimes = (short)Convert.ToInt32(row["org_medical_times"].ToString()), + RegisterName = "", + RegisterNo = "" + }; + + await _customerOrgRegisterRepository.InsertAsync(data); + + await uow.CompleteAsync(); + } + } + } + _logger.LogInformation($"单位体检次数数据处理完毕,处理数量{oldCustomerOrgRegisterList.Rows.Count}"); + } + else + { + _logger.LogInformation("单位体检次数数据已存在,未处理"); + } + } + + /// + /// 迁移单位分组 + /// + /// + [RemoteService(false)] + public async Task TransferCustomerOrgGroupData() + { + var count = await _customerOrgGroupRepository.GetCountAsync(); + if (count == 0) + { + + var oldCustomerOrgGroupList = await oldDb.Ado.GetDataTableAsync("select * from org_group order by display_order asc"); + if (oldCustomerOrgGroupList.Rows.Count > 0) + { + List fieldComparisonList = await _fieldComparisonRepository.GetListAsync(m => m.TableName == "customer_org"); + List customerOrgRegisterList = await _customerOrgRegisterRepository.GetListAsync(); + + foreach (DataRow row in oldCustomerOrgGroupList.Rows) + { + using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true)) + { + //新系统单位ID + Guid customerOrgId = Guid.Parse(fieldComparisonList.Where(m => m.OldKeyValue == row["org_id"].ToString()).FirstOrDefault().NewKeyValue); + Guid customerOrgRegisterId = customerOrgRegisterList.Where(m => m.CustomerOrgId == customerOrgId + && m.MedicalTimes == (short)Convert.ToInt32(row["org_medical_times"].ToString())).FirstOrDefault().Id; + Guid customerOrgGroupId = GuidGenerator.Create(); + + var data = new CustomerOrgGroup(customerOrgGroupId) + { + AgeLowerLimit = (short)Convert.ToInt32(row["age_lower_limit"].ToString()), + AgeUpperLimit = (short)Convert.ToInt32(row["age_upper_limit"].ToString()), + CustomerOrgRegisterId = customerOrgRegisterId, + DisplayName = row["org_group_name"].ToString(), + DisplayOrder = oldCustomerOrgGroupList.Rows.IndexOf(row) + 1, + ForSexId = ConvertForSex(row["for_sex_id"].ToString()), + JobPost = row["job_post"].ToString(), + JobTitle = row["job_title"].ToString(), + MaritalStatusId = Convert.ToChar(row["marital_status_id"].ToString()), + Price = Convert.ToDecimal(row["price"].ToString()), + Remark = row["remark"].ToString(), + CanAddMoney = 0 + }; + + await _customerOrgGroupRepository.InsertAsync(data); + + var fieldComparison = new FieldComparison + { + FieldName = "id", + NewKeyValue = customerOrgGroupId.ToString(), + OldKeyValue = row["org_group_id"].ToString(), + TableName = "customer_org_group" + }; + + await _fieldComparisonRepository.InsertAsync(fieldComparison); + + await uow.CompleteAsync(); + } + + } + + + } + _logger.LogInformation($"单位分组数据处理完毕,处理数量{oldCustomerOrgGroupList.Rows.Count}"); + } + else + { + _logger.LogInformation("单位分组数据已存在,未处理"); + } + } + + + /// + /// 迁移单位分组明细数据 + /// + /// + [RemoteService(false)] + public async Task TransferCustomerOrgGroupDetailData() + { + var count = await _customerOrgGroupDetailRepository.GetCountAsync(); + if (count == 0) + { + + var oldCustomerOrgGroupList = await oldDb.Ado.GetDataTableAsync("select * from org_group_detail "); + if (oldCustomerOrgGroupList.Rows.Count > 0) + { + + foreach (DataRow row in oldCustomerOrgGroupList.Rows) + { + using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true)) + { + //新系统单位分组ID + Guid customerOrgGroupId = Guid.Parse((await _fieldComparisonRepository.GetQueryableAsync()) + .Where(m => m.TableName == "customer_org_group" && m.OldKeyValue == row["org_group_id"].ToString()).FirstOrDefault().NewKeyValue); + Guid asbitemId = Guid.Parse((await _fieldComparisonRepository.GetQueryableAsync()) + .Where(m => m.TableName == "asbitem" && m.OldKeyValue == row["asbitem_id"].ToString()).FirstOrDefault().NewKeyValue); + + var data = new CustomerOrgGroupDetail + { + AsbitemId = asbitemId, + CustomerOrgGroupId = customerOrgGroupId, + Price = Convert.ToDecimal(row["price"].ToString()), + Amount = 1 + }; + + await _customerOrgGroupDetailRepository.InsertAsync(data); + + await uow.CompleteAsync(); + } + + } + + + } + _logger.LogInformation($"单位分组明细数据处理完毕,处理数量{oldCustomerOrgGroupList.Rows.Count}"); + } + else + { + _logger.LogInformation("单位分组明细数据已存在,未处理"); + } + } + + #endregion + + + + + + + + + + #region 私有方法 + + /// + /// 转换老系统适用性别 + /// + /// + /// + private char ConvertForSex(string forSexId) + { + if (forSexId == "0") + { + return 'M'; + } + else if (forSexId == "1") + { + return 'F'; + } + else + { + return 'A'; + } + } + + /// + /// 转换老系统性别 + /// + /// + /// + private char ConvertSex(string SexId) + { + if (SexId == "0") + { + return 'M'; + } + else if (SexId == "1") + { + return 'F'; + } + else + { + return 'U'; + } + } + + #endregion } } diff --git a/src/Shentun.Peis.Domain/CustomerOrgs/CustomerOrgManager.cs b/src/Shentun.Peis.Domain/CustomerOrgs/CustomerOrgManager.cs index c2cc3d1..0f3ba48 100644 --- a/src/Shentun.Peis.Domain/CustomerOrgs/CustomerOrgManager.cs +++ b/src/Shentun.Peis.Domain/CustomerOrgs/CustomerOrgManager.cs @@ -315,7 +315,7 @@ namespace Shentun.Peis.CustomerOrgs .OrderByDescending(o => { var sortCode = o.PathCode.Replace(".", ""); - return Convert.ToInt32(sortCode); + return sortCode; }).Select(s => s.PathCode).FirstOrDefault(); if (!string.IsNullOrEmpty(LastPathCode))