From d94e12dabb449ff4bd6b6583efa526c5363a99e6 Mon Sep 17 00:00:00 2001 From: wxd <123@qq.com> Date: Tue, 3 Mar 2026 16:30:28 +0800 Subject: [PATCH] =?UTF-8?q?=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CQDJExportDataAppService.cs | 1851 +++++++++++++++++ 1 file changed, 1851 insertions(+) create mode 100644 src/Shentun.Peis.Application/CQDJExportDatas/CQDJExportDataAppService.cs diff --git a/src/Shentun.Peis.Application/CQDJExportDatas/CQDJExportDataAppService.cs b/src/Shentun.Peis.Application/CQDJExportDatas/CQDJExportDataAppService.cs new file mode 100644 index 00000000..f90eff47 --- /dev/null +++ b/src/Shentun.Peis.Application/CQDJExportDatas/CQDJExportDataAppService.cs @@ -0,0 +1,1851 @@ +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.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.CQDJExportDatas +{ + /// + /// 重庆垫江数据导入 + /// + public class CQDJExportDataAppService : ApplicationService + { + + //默认指引类别ID + private readonly char defaultGuidTypeId = '0'; + //默认体检报告类别ID + private readonly char defaultMedicalReportTypeId = '0'; + //默认检查类别 + private readonly char defaultCheckTypeFlag = '0'; + + //默认发票项目类别id + private Guid defaultInvoiceItemTypeId = Guid.Empty; + + //默认汇总项目类别id + private Guid defaultCollectItemTypeId = Guid.Empty; + + //默认企业性质 + private Guid defaultOrgTypeId = Guid.Empty; + + //默认容器ID + private Guid defaultSampleContainerId = Guid.Empty; + + //默认体检中心 + private readonly Guid defaultMedicalCenterId = Guid.Parse("7b754abf-9882-4f23-affd-d50103febfee"); + + //老系统数据库配置 + private readonly SqlSugarClient oldDb = new SqlSugarClient(new ConnectionConfig() + { + + ConnectionString = "server=192.168.1.119;uid=sa;pwd=st@123;database=Peis;Encrypt=false;", + DbType = SqlSugar.DbType.SqlServer, + IsAutoCloseConnection = true + }); + + private readonly ILogger _logger; + private readonly UnitOfWorkManager _unitOfWorkManager; + private readonly IRepository _identityUserRepository; + private readonly MyUserAppService _myUserAppService; + private readonly IRepository _itemTypeRepository; + private readonly ItemTypeManager _itemTypeManager; + private readonly IRepository _fieldComparisonRepository; + private readonly IRepository _itemRepository; + private readonly IRepository _asbitemRepository; + private readonly IRepository _asbitemDetailRepository; + private readonly IRepository _medicalPackageRepository; + private readonly IRepository _medicalPackageDetailRepository; + private readonly IRepository _deviceTypeRepository; + private readonly IRepository _unitRepository; + private readonly IRepository _collectItemTypeRepository; + private readonly IRepository _invoiceItemTypeRepository; + private readonly IRepository _asbitemGuideRepository; + private readonly IRepository _customerOrgRepository; + private readonly CustomerOrgManager _customerOrgManager; + private readonly IRepository _customerOrgRegisterRepository; + private readonly IRepository _customerOrgGroupRepository; + private readonly IRepository _customerOrgGroupDetailRepository; + private readonly IRepository _customerOrgTypeRepository; + private readonly IRepository _sampleContainerRepository; + + public CQDJExportDataAppService( + IRepository identityUserRepository, + UnitOfWorkManager unitOfWorkManager, + ILogger logger, + MyUserAppService myUserAppService, + IRepository itemTypeRepository, + ItemTypeManager itemTypeManager, + IRepository fieldComparisonRepository, + IRepository itemRepository, + IRepository asbitemRepository, + IRepository asbitemDetailRepository, + IRepository medicalPackageRepository, + IRepository medicalPackageDetailRepository, + IRepository deviceTypeRepository, + IRepository unitRepository, + IRepository collectItemTypeRepository, + IRepository invoiceItemTypeRepository, + IRepository asbitemGuideRepository, + IRepository customerOrgRepository, + CustomerOrgManager customerOrgManager, + IRepository customerOrgRegisterRepository, + IRepository customerOrgGroupRepository, + IRepository customerOrgGroupDetailRepository, + IRepository customerOrgTypeRepository, + IRepository sampleContainerRepository) + { + _identityUserRepository = identityUserRepository; + _unitOfWorkManager = unitOfWorkManager; + _logger = logger; + _myUserAppService = myUserAppService; + _itemTypeRepository = itemTypeRepository; + _itemTypeManager = itemTypeManager; + _fieldComparisonRepository = fieldComparisonRepository; + _itemRepository = itemRepository; + _asbitemRepository = asbitemRepository; + _asbitemDetailRepository = asbitemDetailRepository; + _medicalPackageRepository = medicalPackageRepository; + _medicalPackageDetailRepository = medicalPackageDetailRepository; + _deviceTypeRepository = deviceTypeRepository; + _unitRepository = unitRepository; + _collectItemTypeRepository = collectItemTypeRepository; + _invoiceItemTypeRepository = invoiceItemTypeRepository; + _asbitemGuideRepository = asbitemGuideRepository; + _customerOrgRepository = customerOrgRepository; + _customerOrgManager = customerOrgManager; + _customerOrgRegisterRepository = customerOrgRegisterRepository; + _customerOrgGroupRepository = customerOrgGroupRepository; + _customerOrgGroupDetailRepository = customerOrgGroupDetailRepository; + _customerOrgTypeRepository = customerOrgTypeRepository; + _sampleContainerRepository = sampleContainerRepository; + } + + + + + /// + /// 迁移后台用户数据 + /// + /// + [HttpPost("api/app/CQDJExportData/TransferUserData")] + public async Task TransferUserData() + { + + var oldUserList = await oldDb.Ado.GetDataTableAsync("select GKHM,GKMM,XM from [futian_user].[GZRY]"); + if (oldUserList.Rows.Count > 0) + { + if (await _identityUserRepository.CountAsync() == 1) + { + foreach (DataRow row in oldUserList.Rows) + { + using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true)) + { + + string newUserName = LanguageConverter.GetPYSimpleCode(row["GKHM"].ToString().Trim()); + + var isUserName = await _identityUserRepository.FirstOrDefaultAsync(m => m.UserName == newUserName); + if (isUserName != null) + { + newUserName += "2"; + } + var userEnt = new IdentityUserCreateNoEmailDto + { + Email = "", + IsActive = true, + LockoutEnabled = false, + Name = "", + Password = string.IsNullOrWhiteSpace(row["GKMM"].ToString()) ? "888888" : row["GKMM"].ToString(), + PhoneNumber = "", + RoleNames = new string[] { "admin" }, + Surname = row["XM"].ToString().Trim(), + UserName = newUserName, + UserPhoto = "", + UserSign = "" + }; + + await _myUserAppService.CreateAsync(userEnt); + + await uow.CompleteAsync(); + + } + } + + + } + else + { + _logger.LogInformation("用户数据已存在,未处理"); + } + + } + + + } + + + /// + /// 导入项目类别 仪器类别 + /// + /// + [HttpPost("api/app/CQDJExportData/TransferBasicData")] + public async Task TransferBasicData() + { + await InitData(); //初始数据 + await TransferItemTypeData(); + await TransferDeviceTypeData(); + } + + + + /// + /// 导入项目相关 + /// + /// + [HttpPost("api/app/CQDJExportData/TransferItemWithDetailData")] + public async Task TransferItemWithDetailData() + { + await InitData(); //初始数据 + await TransferItemData(); + await TransferAsbitemData(); + await TransferAsbitemDetailData(); + await TransferMedicalPackageData(); + await TransferMedicalPackageDetailData(); + } + + + /// + /// 导入单位相关 + /// + /// + [HttpPost("api/app/CQDJExportData/TransferCustomerWithDetailData")] + public async Task TransferCustomerWithDetailData() + { + await InitData(); //初始数据 + await TransferTopCustomerOrgData(); + await TransferTwoCustomerOrgData(); + await TransferThreeCustomerOrgData(); + await TransferCustomerOrgRegisterData(); + await TransferCustomerOrgGroupData(); + await TransferCustomerOrgGroupDetailData(); + await TransferPHCustomerOrgGroupDetailData(); + } + + #region 基础 + /// + /// 迁移项目类别-科室数据 + /// + /// + private async Task TransferItemTypeData() + { + var count = await _itemTypeRepository.GetCountAsync(); + if (count == 0) + { + + var oldItemTypeList = await oldDb.Ado.GetDataTableAsync("SELECT [LXBH],[MC],[XSLX],[JCJYLX] FROM [futian_user].[TJ_TJLXB] order by DISP_ORDER asc"); + if (oldItemTypeList.Rows.Count > 0) + { + foreach (DataRow row in oldItemTypeList.Rows) + { + using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true)) + { + Guid itemTypeId = StringConvertGuidHelper.GenerateURLUUID(row["LXBH"].ToString().Trim()); + + var data = new ItemType(itemTypeId) + { + DisplayName = row["MC"].ToString(), + DisplayOrder = oldItemTypeList.Rows.IndexOf(row) + 1, + SimpleCode = LanguageConverter.GetPYSimpleCode(row["MC"].ToString()), + CheckTypeFlag = defaultCheckTypeFlag, + GuidTypeId = defaultGuidTypeId, + IsMergeAsbitem = 'N', + IsWrap = 'N', + MedicalReportTypeId = defaultMedicalReportTypeId, + ParentId = null, + PathCode = _itemTypeManager.CreatePathCode(null).Result, + IsCheckRequest = 'N' + }; + + await _itemTypeRepository.InsertAsync(data); + + var fieldComparison = new FieldComparison + { + TableName = "item_type", + FieldName = "id", + NewKeyValue = itemTypeId.ToString(), + OldKeyValue = row["LXBH"].ToString().Trim() + }; + await _fieldComparisonRepository.InsertAsync(fieldComparison); + + await uow.CompleteAsync(); + } + } + + + } + _logger.LogInformation($"项目类别数据处理完毕,处理数量{oldItemTypeList.Rows.Count}"); + } + else + { + _logger.LogInformation($"项目类别数据已存在,未处理"); + } + } + + + /// + /// 迁移仪器类别数据 + /// + /// + private async Task TransferDeviceTypeData() + { + var count = await _deviceTypeRepository.GetCountAsync(); + if (count == 0) + { + //处理临床类型 + var oldDeviceTypeList = await oldDb.Ado.GetDataTableAsync(" select LCLX,MC from [futian_user].TJ_LCLXB order by DISP_ORDER asc"); + if (oldDeviceTypeList.Rows.Count > 0) + { + foreach (DataRow row in oldDeviceTypeList.Rows) + { + using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true)) + { + Guid deviceTypeId = StringConvertGuidHelper.GenerateURLUUID(row["LCLX"].ToString()); + + var data = new DeviceType(deviceTypeId) + { + CheckTypeFlag = '0', + DisplayName = row["MC"].ToString(), + DisplayOrder = oldDeviceTypeList.Rows.IndexOf(row) + 1, + SimpleCode = LanguageConverter.GetPYSimpleCode(row["MC"].ToString()) + }; + + await _deviceTypeRepository.InsertAsync(data); + + var fieldComparison = new FieldComparison + { + TableName = "device_type", + FieldName = "id", + NewKeyValue = deviceTypeId.ToString(), + OldKeyValue = row["LCLX"].ToString() + }; + + await _fieldComparisonRepository.InsertAsync(fieldComparison); + + await uow.CompleteAsync(); + } + } + } + + //处理功能类型 + var oldGNLXList = await oldDb.Ado.GetDataTableAsync(" select GNLX from futian_user.TJ_ZHXM_HD where GNLX != '' group by GNLX"); + if (oldGNLXList.Rows.Count > 0) + { + foreach (DataRow row in oldGNLXList.Rows) + { + using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true)) + { + Guid deviceTypeId = GuidGenerator.Create(); + + var data = new DeviceType(deviceTypeId) + { + CheckTypeFlag = '1', + DisplayName = row["GNLX"].ToString(), + DisplayOrder = oldDeviceTypeList.Rows.IndexOf(row) + 1 + oldDeviceTypeList.Rows.Count, + SimpleCode = LanguageConverter.GetPYSimpleCode(row["GNLX"].ToString()) + }; + + await _deviceTypeRepository.InsertAsync(data); + + + + await uow.CompleteAsync(); + } + } + } + + + _logger.LogInformation($"仪器类别数据处理完毕,处理数量{oldDeviceTypeList.Rows.Count}"); + } + else + { + _logger.LogInformation("仪器类别数据已存在,未处理"); + } + } + #endregion + + #region 项目相关 + /// + /// 迁移项目数据 + /// + /// + private async Task TransferItemData() + { + var count = await _itemRepository.GetCountAsync(); + if (count == 0) + { + + var oldItemList = await oldDb.Ado.GetDataTableAsync("select * from [futian_user].[TJ_TJXMB] order by DISP_ORDER asc "); + if (oldItemList.Rows.Count > 0) + { + + List tempItemList = new List(); + + var unitList = await _unitRepository.GetListAsync(); + + foreach (DataRow row in oldItemList.Rows) + { + var itemTypeId = Guid.Parse((await _fieldComparisonRepository.GetQueryableAsync()).Where(m => m.TableName == "item_type" && m.OldKeyValue == row["LXBH"].ToString().Trim()).FirstOrDefault().NewKeyValue); + + string mc = row["MC"].ToString(); + + #region 重复项目跳过 + + if (tempItemList.Count(f => f.DisplayName == row["MC"].ToString() && f.ItemTypeId == itemTypeId) > 0) + { + //项目类别下重名了 + _logger.LogInformation($"项目【{row["MC"].ToString()}】,Id【{row["TJXM"].ToString()}】已存在,跳过导入"); + continue; + //mc = mc + "_重"; + //_logger.LogInformation($"项目【{row["MC"].ToString()}】,Id【{row["TJXM"].ToString()}】已存在,更改名称"); + + } + + #endregion + + using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true)) + { + + #region 根据临床类型生成二级科室 + + + + Guid? deviceTypeId = null; + + if (!string.IsNullOrWhiteSpace(row["LCLX"].ToString())) + { + deviceTypeId = Guid.Parse((await _fieldComparisonRepository.GetQueryableAsync()).Where(m => m.TableName == "device_type" && m.OldKeyValue == row["LCLX"].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["DW"].ToString())) + { + var tempUnit = unitList.FirstOrDefault(f => f.DisplayName == row["DW"].ToString().Trim()); + if (tempUnit == null) + { + //创建单位 + Guid newUnitId = GuidGenerator.Create(); + var unitEntity = new Unit(newUnitId) + { + DisplayName = row["DW"].ToString().Trim(), + DisplayOrder = unitList.Count + oldItemList.Rows.IndexOf(row) + 1, + SimpleCode = LanguageConverter.GetPYSimpleCode(row["DW"].ToString().Trim()) + }; + + await _unitRepository.InsertAsync(unitEntity); + + unitId = newUnitId; + } + else + { + unitId = tempUnit.Id; + } + } + + + + + Guid itemId = StringConvertGuidHelper.GenerateURLUUID(row["TJXM"].ToString()); + + var data = new Item(itemId) + { + DisplayName = mc, + DisplayOrder = oldItemList.Rows.IndexOf(row) + 1, + SimpleCode = LanguageConverter.GetPYSimpleCode(row["MC"].ToString()), + CalculationFunction = "", + DefaultResult = row["ZCTS"].ToString(), + DiagnosisFunction = "", + EnglishShortName = "", + InputCheck = "", + IsActive = row["QYBZ"].ToString() == "1" ? 'Y' : 'N', + IsCalculationItem = 'N', + IsContinueProcess = 'N', + IsDiagnosisFunction = 'N', + IsNameIntoSummary = Convert.ToChar(row["MCJRXJ"]), + IsProduceSummary = Convert.ToChar(row["SFXJ"]), + ItemTypeId = itemTypeId, + LineModeFlag = '0', + Price = 0, + PriceItemId = null, + ReferenceRangeTypeFlag = row["JGLX"].ToString().Trim() == "1" ? '1' : '2', + ResultTemplateTypeFlag = '0', + UnitId = unitId, + DeviceTypeId = deviceTypeId + }; + + await _itemRepository.InsertAsync(data); + + tempItemList.Add(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["TJXM"].ToString() + }; + + await _fieldComparisonRepository.InsertAsync(fieldComparison); + + await uow.CompleteAsync(); + } + } + + + + + } + _logger.LogInformation($"项目数据处理完毕,处理数量{oldItemList.Rows.Count}"); + } + else + { + _logger.LogInformation("项目数据已存在,未处理"); + } + } + + /// + /// 迁移组合项目数据 + /// + /// + private async Task TransferAsbitemData() + { + var count = await _asbitemRepository.GetCountAsync(); + + if (count == 0) + { + var oldAsbitemList = await oldDb.Ado.GetDataTableAsync(" select * from futian_user.TJ_ZHXM_HD order by DISP_ORDER asc "); + if (oldAsbitemList.Rows.Count > 0) + { + List tempAsbitemList = new List(); + + foreach (DataRow row in oldAsbitemList.Rows) + { + string mc = row["MC"].ToString(); + + + + #region 重复组合项目跳过 + + if (tempAsbitemList.Count(f => f.DisplayName == row["MC"].ToString()) > 0) + { + //重名了 + //mc = mc + "_重"; + _logger.LogInformation($"组合项目【{row["MC"].ToString()}】,Id【{row["BH"].ToString()}】已存在,跳过导入"); + continue; + } + + #endregion + + 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["TJLX"].ToString().Trim()).FirstOrDefault().NewKeyValue); + + Guid? deviceTypeId = null; + + if (!string.IsNullOrWhiteSpace(row["LCLX"].ToString()) || !string.IsNullOrWhiteSpace(row["GNLX"].ToString())) + { + + var deviceTypeEnt = new DeviceType(); + + if (!string.IsNullOrWhiteSpace(row["LCLX"].ToString())) + { + deviceTypeId = Guid.Parse((await _fieldComparisonRepository.GetQueryableAsync()).Where(m => m.TableName == "device_type" && m.OldKeyValue == row["LCLX"].ToString().Trim()).FirstOrDefault().NewKeyValue); + deviceTypeEnt = await _deviceTypeRepository.GetAsync(deviceTypeId.Value); + } + else + { + deviceTypeEnt = await _deviceTypeRepository.FirstOrDefaultAsync(f => f.DisplayName == row["GNLX"].ToString()); + } + + + var itemTypeEnt = await _itemTypeRepository.GetAsync(itemTypeId); + + + + 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 asbitemId = StringConvertGuidHelper.GenerateURLUUID(row["BH"].ToString().Trim()); + + var data = new Asbitem(asbitemId) + { + DisplayName = mc, + DisplayOrder = oldAsbitemList.Rows.IndexOf(row) + 1, + SimpleCode = LanguageConverter.GetPYSimpleCode(row["MC"].ToString()), + DefaultResult = row["ZCXJ"].ToString(), + DiagnosisFunction = "", + IsActive = row["YXBZ"].ToString() == "1" ? 'Y' : 'N', + IsContinueProcess = 'N', + IsDiagnosisFunction = 'N', + ItemTypeId = itemTypeId, + Price = Convert.ToDecimal(row["DJ"]), + DeviceTypeId = deviceTypeId, + ClinicalMeaning = row["LCYY"].ToString(), + ForSexId = ConvertForSex(row["XB"].ToString()), + CollectItemTypeId = defaultCollectItemTypeId, + IsBeforeEat = row["SFCQ"].ToString() == "0" ? 'Y' : 'N', + IsCheck = 'Y', + IsItemResultMerger = 'N', + IsPictureRotate = 'N', + QueueTime = 0, + ShortName = row["MC"].ToString().Length > 20 ? "" : row["MC"].ToString(), + BarcodeMode = '0', + DiseaseScreeningTypeId = null, + ForPregnantFlag = 'A', + IsWebAppoint = 'N', + MaritalStatusId = 'A', + Warn = "", + IsOutsend = 'N', + MedicalCenterId = defaultMedicalCenterId + }; + + await _asbitemRepository.InsertAsync(data); + + tempAsbitemList.Add(data); + + #region 指引信息 + + if (!string.IsNullOrWhiteSpace(row["TSXX"].ToString())) + { + var asbitemGuideData = new AsbitemGuide + { + AsbitemId = asbitemId, + ForSexId = ForSexFlag.All, + Guide = row["TSXX"].ToString(), + MedicalCenterId = defaultMedicalCenterId + }; + + await _asbitemGuideRepository.InsertAsync(asbitemGuideData); + } + + #endregion + + var fieldComparison = new FieldComparison + { + TableName = "asbitem", + FieldName = "id", + NewKeyValue = asbitemId.ToString(), + OldKeyValue = row["BH"].ToString().Trim() + }; + + await _fieldComparisonRepository.InsertAsync(fieldComparison); + + await uow.CompleteAsync(); + } + } + + + + + } + _logger.LogInformation($"组合项目数据处理完毕,处理数量{oldAsbitemList.Rows.Count}"); + } + else + { + _logger.LogInformation("组合项目数据已存在,未处理"); + } + + + } + + + /// + /// 迁移组合项目明细数据 无字典 + /// + /// + private async Task TransferAsbitemDetailData() + { + var count = await _asbitemDetailRepository.GetCountAsync(); + + if (count == 0) + { + var oldAsbitemDetailList = await oldDb.Ado.GetDataTableAsync("select * from [futian_user].[TJ_ZHXM_DT] "); + if (oldAsbitemDetailList.Rows.Count > 0) + { + foreach (DataRow row in oldAsbitemDetailList.Rows) + { + using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true)) + { + var asbitem_dz = (await _fieldComparisonRepository.GetQueryableAsync()).Where(m => m.TableName == "asbitem" && m.OldKeyValue == row["BH"].ToString().Trim()).FirstOrDefault(); + var item_dz = (await _fieldComparisonRepository.GetQueryableAsync()).Where(m => m.TableName == "item" && m.OldKeyValue == row["TJXM"].ToString().Trim()).FirstOrDefault(); + if (asbitem_dz != null && item_dz != null) + { + Guid asbitemId = Guid.Parse(asbitem_dz.NewKeyValue); + Guid itemId = Guid.Parse(item_dz.NewKeyValue); + var data = new AsbitemDetail + { + AsbitemId = asbitemId, + ItemId = itemId + }; + + await _asbitemDetailRepository.InsertAsync(data); + + await uow.CompleteAsync(); + } + else + { + _logger.LogInformation($"组合项目明细未找到,asbitem_id=>【{row["BH"].ToString().Trim()}】,item_id=>【{row["TJXM"].ToString().Trim()}】"); + } + } + } + } + _logger.LogInformation($"组合项目明细数据处理完毕,处理数量{oldAsbitemDetailList.Rows.Count}"); + } + else + { + _logger.LogInformation("组合项目明细数据已存在,未处理"); + } + + + } + + + /// + /// 迁移体检套餐数据 + /// + /// + private async Task TransferMedicalPackageData() + { + var count = await _medicalPackageRepository.GetCountAsync(); + + if (count == 0) + { + var oldMedicalPackageList = await oldDb.Ado.GetDataTableAsync("select * from [futian_user].TJ_TC_HD order by DISP_ORDER asc"); + if (oldMedicalPackageList.Rows.Count > 0) + { + foreach (DataRow row in oldMedicalPackageList.Rows) + { + using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true)) + { + Guid medicalPackageId = StringConvertGuidHelper.GenerateURLUUID(row["BH"].ToString().Trim()); + + var data = new MedicalPackage(medicalPackageId) + { + DisplayName = row["MC"].ToString(), + DisplayOrder = oldMedicalPackageList.Rows.IndexOf(row) + 1, + SimpleCode = LanguageConverter.GetPYSimpleCode(row["MC"].ToString()), + ForSexId = ConvertForSex(row["XB"].ToString()), + IsActive = row["SFQY"].ToString() == "1" ? 'Y' : 'N', + Price = Convert.ToDecimal(row["JG"].ToString()), + Remark = row["BZ"].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["BH"].ToString().Trim() + }; + + await _fieldComparisonRepository.InsertAsync(fieldComparison); + + await uow.CompleteAsync(); + } + } + } + _logger.LogInformation($"体检套餐数据处理完毕,处理数量{oldMedicalPackageList.Rows.Count}"); + } + else + { + _logger.LogInformation("体检套餐数据已存在,未处理"); + } + + + } + + + /// + /// 迁移体检套餐明细数据 无字典 + /// + /// + private async Task TransferMedicalPackageDetailData() + { + var count = await _medicalPackageDetailRepository.GetCountAsync(); + + if (count == 0) + { + var oldMedicalPackageDetailList = await oldDb.Ado.GetDataTableAsync("select * from [futian_user].[TJ_TC_DT] "); + if (oldMedicalPackageDetailList.Rows.Count > 0) + { + foreach (DataRow row in oldMedicalPackageDetailList.Rows) + { + using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true)) + { + + var asbitem_dz = (await _fieldComparisonRepository.GetQueryableAsync()).Where(m => m.TableName == "asbitem" && m.OldKeyValue == row["ZHXM"].ToString().Trim()).FirstOrDefault(); + var medical_package_dz = (await _fieldComparisonRepository.GetQueryableAsync()).Where(m => m.TableName == "medical_package" && m.OldKeyValue == row["TCBH"].ToString().Trim()).FirstOrDefault(); + if (asbitem_dz != null && medical_package_dz != null) + { + Guid asbitemId = Guid.Parse(asbitem_dz.NewKeyValue); + Guid MedicalPackageId = Guid.Parse(medical_package_dz.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(); + } + else + { + _logger.LogInformation($"套餐明细未找到,asbitem_id=>【{row["ZHXM"].ToString().Trim()}】,medical_package_id=>【{row["TCBH"].ToString().Trim()}】"); + } + } + } + } + _logger.LogInformation($"体检套餐明细数据处理完毕,处理数量{oldMedicalPackageDetailList.Rows.Count}"); + } + else + { + _logger.LogInformation("体检套餐明细数据已存在,未处理"); + } + + } + + + #endregion + + #region 单位相关 + + /// + /// 迁移体检单位数据 一级 + /// + /// + private async Task TransferTopCustomerOrgData() + { + var count = await _customerOrgRepository.GetCountAsync(); + if (count == 0) + { + var oldCustomerOrgList = await oldDb.Ado.GetDataTableAsync(" select * from [futian_user].HYDWDMB where len(BH)=4 order by BH asc"); + if (oldCustomerOrgList.Rows.Count > 0) + { + foreach (DataRow row in oldCustomerOrgList.Rows) + { + using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true)) + { + + Guid customerOrgId = StringConvertGuidHelper.GenerateURLUUID(row["BH"].ToString()); + + + if (row["BH"].ToString() == "0000") + { + customerOrgId = Guid.Parse("00000000-0000-0000-0000-000000000001"); + } + + #region 备注 导入联系人姓名、电话 + string remark = ""; + if (!string.IsNullOrWhiteSpace(row["DWFZR"].ToString())) + { + remark = row["DWFZR"].ToString(); + } + if (!string.IsNullOrWhiteSpace(row["LXDH"].ToString())) + { + if (!string.IsNullOrWhiteSpace(remark)) + { + remark += "|" + row["LXDH"].ToString(); + } + else + { + remark = row["LXDH"].ToString(); + } + } + #endregion + + + + var data = new CustomerOrg(customerOrgId) + { + Accounts = "", + Address = row["LXDZ"].ToString(), + Bank = "", + DisplayName = row["MC"].ToString(), + DisplayOrder = oldCustomerOrgList.Rows.IndexOf(row) + 1, + Fax = "", + InvoiceName = row["MC"].ToString(), + IsActive = 'Y', + IsLock = 'N', + MedicalCenterId = defaultMedicalCenterId, + OrgTypeId = defaultOrgTypeId, //默认为私营 + ParentId = null, + PathCode = _customerOrgManager.CreatePathCode(null).GetAwaiter().GetResult(), + PostalCode = row["YZBM"].ToString(), + Remark = remark, + ShortName = row["MC"].ToString(), + SimpleCode = LanguageConverter.GetPYSimpleCode(row["MC"].ToString()), + Telephone = row["LXDH"].ToString(), + CountryOrgCode = row["BH"].ToString(), + SalesPerson = "", + SalesPersonPhone = "", + MedicalTypeId = null + }; + + await _customerOrgRepository.InsertAsync(data); + + var fieldComparison = new FieldComparison + { + FieldName = "id", + NewKeyValue = customerOrgId.ToString(), + OldKeyValue = row["BH"].ToString(), + TableName = "customer_org" + }; + + await _fieldComparisonRepository.InsertAsync(fieldComparison); + + await uow.CompleteAsync(); + + } + + } + } + _logger.LogInformation($"体检单位一级数据处理完毕,处理数量{oldCustomerOrgList.Rows.Count}"); + } + else + { + _logger.LogInformation("体检单位一级数据已存在,未处理"); + } + } + + /// + /// 迁移体检单位数据 二级 + /// + /// + private 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 [futian_user].HYDWDMB where len(BH)=7 order by BH asc"); + if (oldCustomerOrgList.Rows.Count > 0) + { + 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["BH"].ToString(); + string oldParentId = oldId.Substring(0, 4); + Guid parentId = Guid.Parse(fieldComparisonList.Where(m => m.OldKeyValue == oldParentId).FirstOrDefault().NewKeyValue); + #endregion + + + Guid customerOrgId = StringConvertGuidHelper.GenerateURLUUID(row["BH"].ToString()); + + + #region 备注 导入联系人姓名、电话 + string remark = ""; + if (!string.IsNullOrWhiteSpace(row["DWFZR"].ToString())) + { + remark = row["DWFZR"].ToString(); + } + if (!string.IsNullOrWhiteSpace(row["LXDH"].ToString())) + { + if (!string.IsNullOrWhiteSpace(remark)) + { + remark += "|" + row["LXDH"].ToString(); + } + else + { + remark = row["LXDH"].ToString(); + } + } + #endregion + + + var data = new CustomerOrg(customerOrgId) + { + Accounts = "", + Address = row["LXDZ"].ToString(), + Bank = "", + DisplayName = row["MC"].ToString(), + DisplayOrder = oldCustomerOrgList.Rows.IndexOf(row) + 1, + Fax = "", + InvoiceName = row["MC"].ToString(), + IsActive = 'Y', + IsLock = 'N', + MedicalCenterId = defaultMedicalCenterId, + OrgTypeId = defaultOrgTypeId, //默认为私营 + ParentId = parentId, + PathCode = _customerOrgManager.CreatePathCode(parentId).GetAwaiter().GetResult(), + PostalCode = row["YZBM"].ToString(), + Remark = remark, + ShortName = row["MC"].ToString(), + SimpleCode = LanguageConverter.GetPYSimpleCode(row["MC"].ToString()), + Telephone = row["LXDH"].ToString(), + CountryOrgCode = row["BH"].ToString(), + SalesPerson = "", + SalesPersonPhone = "", + MedicalTypeId = null + }; + + await _customerOrgRepository.InsertAsync(data); + + var fieldComparison = new FieldComparison + { + FieldName = "id", + NewKeyValue = customerOrgId.ToString(), + OldKeyValue = row["BH"].ToString(), + TableName = "customer_org" + }; + + await _fieldComparisonRepository.InsertAsync(fieldComparison); + + await uow.CompleteAsync(); + } + + } + + } + _logger.LogInformation($"体检单位二级数据处理完毕,处理数量{oldCustomerOrgList.Rows.Count}"); + } + else + { + _logger.LogInformation("体检单位二级数据已存在,未处理"); + } + } + + /// + /// 迁移体检单位数据 三级 + /// + /// + private 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 [futian_user].HYDWDMB where len(BH)=10 order by BH asc"); + if (oldCustomerOrgList.Rows.Count > 0) + { + + List fieldComparisonList = await _fieldComparisonRepository.GetListAsync(m => m.TableName == "customer_org"); + + foreach (DataRow row in oldCustomerOrgList.Rows) + { + string oldId = row["BH"].ToString(); + string oldParentId = oldId.Substring(0, 7); + var parentFirst = fieldComparisonList.Where(m => m.OldKeyValue == oldParentId).FirstOrDefault(); + + if (parentFirst != null) + { + + using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true)) + { + + #region 查找上级ID + Guid parentId = Guid.Parse(parentFirst.NewKeyValue); + #endregion + + + // Guid customerOrgId = GuidGenerator.Create(); + Guid customerOrgId = StringConvertGuidHelper.GenerateURLUUID(row["BH"].ToString()); + + #region 备注 导入联系人姓名、电话 + string remark = ""; + if (!string.IsNullOrWhiteSpace(row["DWFZR"].ToString())) + { + remark = row["DWFZR"].ToString(); + } + if (!string.IsNullOrWhiteSpace(row["LXDH"].ToString())) + { + if (!string.IsNullOrWhiteSpace(remark)) + { + remark += "|" + row["LXDH"].ToString(); + } + else + { + remark = row["LXDH"].ToString(); + } + } + #endregion + + + var data = new CustomerOrg(customerOrgId) + { + Accounts = "", + Address = row["LXDZ"].ToString(), + Bank = "", + DisplayName = row["MC"].ToString(), + DisplayOrder = oldCustomerOrgList.Rows.IndexOf(row) + 1, + Fax = "", + InvoiceName = row["MC"].ToString(), + IsActive = 'Y', + IsLock = 'N', + MedicalCenterId = defaultMedicalCenterId, + OrgTypeId = defaultOrgTypeId, //默认为私营 + ParentId = parentId, + PathCode = _customerOrgManager.CreatePathCode(parentId).GetAwaiter().GetResult(), + PostalCode = row["YZBM"].ToString(), + Remark = remark, + ShortName = row["MC"].ToString(), + SimpleCode = LanguageConverter.GetPYSimpleCode(row["MC"].ToString()), + Telephone = row["LXDH"].ToString(), + CountryOrgCode = row["BH"].ToString(), + SalesPerson = "", + SalesPersonPhone = "", + MedicalTypeId = null + }; + + + + + await _customerOrgRepository.InsertAsync(data); + + var fieldComparison = new FieldComparison + { + FieldName = "id", + NewKeyValue = customerOrgId.ToString(), + OldKeyValue = row["BH"].ToString(), + TableName = "customer_org" + }; + + await _fieldComparisonRepository.InsertAsync(fieldComparison); + + await uow.CompleteAsync(); + } + } + } + } + _logger.LogInformation($"体检单位三级数据处理完毕,处理数量{oldCustomerOrgList.Rows.Count}"); + } + else + { + _logger.LogInformation("体检单位三级数据已存在,未处理"); + } + } + + + + /// + /// 迁移单位体检次数数据 无字典 + /// + /// + private async Task TransferCustomerOrgRegisterData() + { + var count = await _customerOrgRegisterRepository.GetCountAsync(); + if (count == 0) + { + var oldCustomerOrgRegisterList = await oldDb.Ado.GetDataTableAsync("select * from [futian_user].TJ_DWTJJLB order by DWTJCS asc"); + 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["DWBH"].ToString()).FirstOrDefault().NewKeyValue); + Guid customerOrgRegisterId = GuidGenerator.Create(); + + if (customerOrgId == GuidFlag.PersonCustomerOrgId) + customerOrgRegisterId = GuidFlag.PersonCustomerOrgRegisterId; + var data = new CustomerOrgRegister(customerOrgRegisterId) + { + BeginTime = Convert.ToDateTime(row["KSRQ"].ToString()), + CustomerOrgId = customerOrgId, + EndTime = !string.IsNullOrWhiteSpace(row["JSRQ"].ToString()) ? Convert.ToDateTime(row["JSRQ"].ToString()) : null, + IsComplete = row["WCBZ"].ToString() == "1" ? 'Y' : 'N', + MedicalTimes = (short)Convert.ToInt32(row["DWTJCS"].ToString()), + RegisterName = "", + RegisterNo = "" + }; + + await _customerOrgRegisterRepository.InsertAsync(data); + + await uow.CompleteAsync(); + } + } + } + _logger.LogInformation($"单位体检次数数据处理完毕,处理数量{oldCustomerOrgRegisterList.Rows.Count}"); + } + else + { + _logger.LogInformation("单位体检次数数据已存在,未处理"); + } + } + + /// + /// 迁移单位分组 + /// + /// + private async Task TransferCustomerOrgGroupData() + { + var count = await _customerOrgGroupRepository.GetCountAsync(); + if (count == 0) + { + var oldCustomerOrgGroupList = await oldDb.Ado.GetDataTableAsync("select * from [futian_user].TJ_DWFZ_HD "); + 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["DWBH"].ToString().Trim()).FirstOrDefault().NewKeyValue); + Guid customerOrgRegisterId = customerOrgRegisterList.Where(m => m.CustomerOrgId == customerOrgId + && m.MedicalTimes == (short)Convert.ToInt32(row["DWTJCS"].ToString())).FirstOrDefault().Id; + + + Guid customerOrgGroupId = StringConvertGuidHelper.GenerateURLUUID(row["BH"].ToString().Trim()); + var data = new CustomerOrgGroup(customerOrgGroupId) + { + AgeLowerLimit = 0, + AgeUpperLimit = 200, + CustomerOrgRegisterId = customerOrgRegisterId, + DisplayName = row["FZMC"].ToString(), + DisplayOrder = oldCustomerOrgGroupList.Rows.IndexOf(row) + 1, + ForSexId = ConvertForSex(row["XB"].ToString()), + JobPost = "", + JobTitle = "", + MaritalStatusId = row["HYZK"].ToString() == "9" ? 'A' : Convert.ToChar(row["HYZK"].ToString()), + Price = string.IsNullOrWhiteSpace(row["JG"].ToString()) ? 0 : Convert.ToDecimal(row["JG"].ToString()), + Remark = "", + CanAddMoney = 0 + }; + + await _customerOrgGroupRepository.InsertAsync(data); + + var fieldComparison = new FieldComparison + { + FieldName = "id", + NewKeyValue = customerOrgGroupId.ToString(), + OldKeyValue = row["BH"].ToString().Trim(), + TableName = "customer_org_group" + }; + + await _fieldComparisonRepository.InsertAsync(fieldComparison); + + await uow.CompleteAsync(); + } + + } + + + } + _logger.LogInformation($"单位分组数据处理完毕,处理数量{oldCustomerOrgGroupList.Rows.Count}"); + } + else + { + _logger.LogInformation("单位分组数据已存在,未处理"); + } + } + + + /// + /// 迁移单位分组明细数据 + /// + /// + private async Task TransferCustomerOrgGroupDetailData() + { + var count = await _customerOrgGroupDetailRepository.GetCountAsync(); + if (count == 0) + { + + int pclcount = 200; + + var oldCustomerOrgGroupList = await oldDb.Ado.GetDataTableAsync("select * from [futian_user].[TJ_DWFZ_DT] "); + if (oldCustomerOrgGroupList.Rows.Count > 0) + { + List tempList = new List(); + + foreach (DataRow row in oldCustomerOrgGroupList.Rows) + { + using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true)) + { + var customer_org_group_dz = (await _fieldComparisonRepository.GetQueryableAsync()).Where(m => m.TableName == "customer_org_group" && m.OldKeyValue == row["FZBH"].ToString().Trim()).FirstOrDefault(); + var asbitem_dz = (await _fieldComparisonRepository.GetQueryableAsync()).Where(m => m.TableName == "asbitem" && m.OldKeyValue == row["TJXM"].ToString().Trim()).FirstOrDefault(); + if (asbitem_dz != null && customer_org_group_dz != null) + { + //新系统单位分组ID + Guid customerOrgGroupId = Guid.Parse(customer_org_group_dz.NewKeyValue); + Guid asbitemId = Guid.Parse(asbitem_dz.NewKeyValue); + + //decimal price = 0; + //if (!decimal.TryParse(row["price"].ToString(), out price)) + //{ + // price = 0; + //} + + var data = new CustomerOrgGroupDetail + { + AsbitemId = asbitemId, + CustomerOrgGroupId = customerOrgGroupId, + Price = 0, + Amount = 1 + }; + + tempList.Add(data); + + if (tempList.Count >= pclcount) + { + await _customerOrgGroupDetailRepository.InsertManyAsync(tempList); + + tempList = new List(); + + } + else + { + if (oldCustomerOrgGroupList.Rows.IndexOf(row) == oldCustomerOrgGroupList.Rows.Count - 1) + { + await _customerOrgGroupDetailRepository.InsertManyAsync(tempList); + } + } + } + + await uow.CompleteAsync(); + + } + + } + + + } + _logger.LogInformation($"单位分组明细数据处理完毕,处理数量{oldCustomerOrgGroupList.Rows.Count}"); + } + else + { + _logger.LogInformation("单位分组明细数据已存在,未处理"); + } + } + + + /// + /// 平衡分组明细 + /// + /// + private async Task TransferPHCustomerOrgGroupDetailData() + { + var customerOrgGroupList = await _customerOrgGroupRepository.GetListAsync(); + if (customerOrgGroupList.Count > 0) + { + var customerOrgGroupDetailList = (from customerOrgGroupDetail in await _customerOrgGroupDetailRepository.GetQueryableAsync() + join asbitem in await _asbitemRepository.GetQueryableAsync() on customerOrgGroupDetail.AsbitemId equals asbitem.Id + select new + { + customerOrgGroupDetail, + asbitem.Price + }).ToList(); + + foreach (var item in customerOrgGroupList) + { + //当前分组的明细 + var tempCustomerOrgGroupDetailList = customerOrgGroupDetailList.Where(m => m.customerOrgGroupDetail.CustomerOrgGroupId == item.Id).ToList(); + + if (tempCustomerOrgGroupDetailList.Count > 0) + { + var fzPrice = item.Price; //分组价格 + var detailSumPrice = tempCustomerOrgGroupDetailList.Sum(s => s.Price); //明细汇总价格 + + decimal bl = Math.Round(fzPrice / detailSumPrice, 2); //折算比例 + + decimal tempSumZkP = 0M; + + foreach (var detailItem in tempCustomerOrgGroupDetailList) + { + var zkP = Math.Round(detailItem.Price * bl, 2); + + if (tempCustomerOrgGroupDetailList.IndexOf(detailItem) == tempCustomerOrgGroupDetailList.Count - 1) + { + //最后一个 + decimal tempMM = tempSumZkP + zkP; + if (tempMM > fzPrice) + { + //大于分组价格 + var cj = tempMM - fzPrice; + zkP = zkP - cj; + } + else if (tempMM < fzPrice) + { + //大于分组价格 + var cj = fzPrice - tempMM; + zkP = zkP + cj; + } + } + + detailItem.customerOrgGroupDetail.Price = zkP; + tempSumZkP += zkP; + } + + + await _customerOrgGroupDetailRepository.UpdateManyAsync(tempCustomerOrgGroupDetailList.Select(s => s.customerOrgGroupDetail)); + + } + } + + _logger.LogInformation($"平衡分组明细,处理数量{customerOrgGroupList.Count}"); + } + else + { + _logger.LogInformation("平衡分组明细,未处理"); + } + } + + #endregion + + + #region 条码分组相关 + + ///// + ///// 迁移标本类型数据 + ///// + ///// + //private 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(); + // Guid sampleTypeId = StringConvertGuidHelper.GenerateURLUUID(row["specimen_type_id"].ToString()); + + // 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 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(); + // Guid sampleGroupId = StringConvertGuidHelper.GenerateURLUUID(row["vessels_type_id"].ToString()); + // 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, + // SamplePrintCount = string.IsNullOrWhiteSpace(row["label_num"].ToString()) ? 0 : Convert.ToInt32(row["label_num"].ToString()), + // 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("条码分组明细数据已存在,未处理"); + // } + //} + + #endregion + + + #region 私有 + /// + /// 初始化 + /// + /// + private async Task InitData() + { + + #region 发票项目类别 + defaultInvoiceItemTypeId = GuidGenerator.Create(); + + var invoiceItemTypeFirst = await _invoiceItemTypeRepository.FirstOrDefaultAsync(); + if (invoiceItemTypeFirst == null) + { + var tempEntity = new InvoiceItemType(defaultInvoiceItemTypeId) + { + DisplayName = "检查费", + DisplayOrder = 1, + SimpleCode = "JCF" + }; + + await _invoiceItemTypeRepository.InsertAsync(tempEntity, true); + } + else + { + defaultInvoiceItemTypeId = invoiceItemTypeFirst.Id; + } + #endregion + + + #region 汇总项目类别 + defaultCollectItemTypeId = GuidGenerator.Create(); + + var collectItemTypeFirst = await _collectItemTypeRepository.FirstOrDefaultAsync(); + if (collectItemTypeFirst == null) + { + var tempEntity = new CollectItemType(defaultCollectItemTypeId) + { + DisplayName = "检查费", + DisplayOrder = 1, + SimpleCode = "JCF", + InvoiceItemTypeId = defaultInvoiceItemTypeId + }; + + await _collectItemTypeRepository.InsertAsync(tempEntity, true); + } + else + { + defaultCollectItemTypeId = collectItemTypeFirst.Id; + } + #endregion + + #region 企业性质 + defaultOrgTypeId = GuidGenerator.Create(); + + var customerOrgTypeFirst = await _customerOrgTypeRepository.FirstOrDefaultAsync(); + if (customerOrgTypeFirst == null) + { + var tempEntity = new CustomerOrgType(defaultOrgTypeId) + { + DisplayName = "其他", + DisplayOrder = 1, + SimpleCode = "QT" + + }; + + await _customerOrgTypeRepository.InsertAsync(tempEntity, true); + } + else + { + defaultOrgTypeId = customerOrgTypeFirst.Id; + } + #endregion + + #region 默认标本容器 + + + defaultSampleContainerId = GuidGenerator.Create(); + + var sampleContainerFirst = await _sampleContainerRepository.FirstOrDefaultAsync(); + if (sampleContainerFirst == null) + { + var tempEntity = new SampleContainer(defaultSampleContainerId) + { + DisplayName = "其他", + DisplayOrder = 1, + SimpleCode = "QT" + + }; + + await _sampleContainerRepository.InsertAsync(tempEntity, true); + } + else + { + defaultSampleContainerId = sampleContainerFirst.Id; + } + #endregion + + } + + + /// + /// 转换老系统适用性别 + /// + /// + /// + private char ConvertForSex(string forSexId) + { + if (forSexId == "1") + { + return 'M'; + } + else if (forSexId == "0") + { + return 'F'; + } + else + { + return 'A'; + } + } + #endregion + } +}