diff --git a/.gitignore b/.gitignore index fb9b8388..68218686 100644 --- a/.gitignore +++ b/.gitignore @@ -264,3 +264,4 @@ src/Shentun.Peis.Blazor.Server.Tiered/Logs/* # Use abp install-libs to restore. **/wwwroot/libs/* /src/Shentun.Peis.HttpApi.Host/wwwroot +/src/Shentun.Peis.HttpApi.Host/photo/2025 diff --git a/src/Shentun.Peis.Application/CCTJExportDatas/CCTJExportDataAppService.cs b/src/Shentun.Peis.Application/CCTJExportDatas/CCTJExportDataAppService.cs index d43ec54d..d0bc8422 100644 --- a/src/Shentun.Peis.Application/CCTJExportDatas/CCTJExportDataAppService.cs +++ b/src/Shentun.Peis.Application/CCTJExportDatas/CCTJExportDataAppService.cs @@ -1,13 +1,18 @@ -using Microsoft.AspNetCore.Authorization; +using EFCore.BulkExtensions; +using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; +using NPOI.POIFS.Properties; using Shentun.Peis.ColumnReferences; using Shentun.Peis.CustomerOrgs; using Shentun.Peis.DataMigrations; +using Shentun.Peis.EntityFrameworkCore; using Shentun.Peis.Enums; using Shentun.Peis.ItemTypes; +using Shentun.Peis.Migrations; using Shentun.Peis.Models; using Shentun.Peis.MyUser; using Shentun.Peis.PatientRegisters; @@ -17,15 +22,20 @@ using SqlSugar; using System; using System.Collections.Generic; using System.Data; +using System.Diagnostics; using System.Linq; using System.Text; using System.Threading.Tasks; using Volo.Abp; using Volo.Abp.Application.Services; +using Volo.Abp.Caching; using Volo.Abp.Domain.Entities; using Volo.Abp.Domain.Repositories; +using Volo.Abp.EntityFrameworkCore; using Volo.Abp.Identity; using Volo.Abp.Uow; +using Volo.Abp.Users; +using static System.Formats.Asn1.AsnWriter; namespace Shentun.Peis.CCTJExportDatas { @@ -63,7 +73,7 @@ namespace Shentun.Peis.CCTJExportDatas DbType = SqlSugar.DbType.PostgreSQL, IsAutoCloseConnection = true }); - + private readonly IDbContextProvider _dbContextProvider; private readonly UnitOfWorkManager _unitOfWorkManager; private readonly IRepository _deviceTypeRepository; private readonly IRepository _itemTypeRepository; @@ -119,6 +129,13 @@ namespace Shentun.Peis.CCTJExportDatas private readonly ColumnReferenceAppService _columnReferenceAppService; private readonly IRepository _cardTypeRepository; private readonly IRepository _cardRegisterRepository; + private readonly IServiceScopeFactory _serviceScopeFactory; + private readonly ICurrentUser _currentUser; + private static List fieldComparisonTempList = new List(); + private static List asbitemFieldComparisonTempList = new List(); + private static List itemFieldComparisonTempList = new List(); + private static List _customerOrgRegisterList = new List(); + private static List _userList = new List(); public CCTJExportDataAppService( UnitOfWorkManager unitOfWorkManager, @@ -174,7 +191,10 @@ namespace Shentun.Peis.CCTJExportDatas MyUserAppService myUserAppService, ColumnReferenceAppService columnReferenceAppService, IRepository cardTypeRepository, - IRepository cardRegisterRepository) + IRepository cardRegisterRepository, + IServiceScopeFactory serviceScopeFactory, + IDbContextProvider dbContextProvider, + ICurrentUser currentUser) { _unitOfWorkManager = unitOfWorkManager; _deviceTypeRepository = deviceTypeRepository; @@ -230,6 +250,9 @@ namespace Shentun.Peis.CCTJExportDatas _columnReferenceAppService = columnReferenceAppService; _cardTypeRepository = cardTypeRepository; _cardRegisterRepository = cardRegisterRepository; + _serviceScopeFactory = serviceScopeFactory; + _dbContextProvider = dbContextProvider; + _currentUser = currentUser; } @@ -2402,6 +2425,16 @@ namespace Shentun.Peis.CCTJExportDatas #region 导入业务数据 + [HttpPost("api/app/CCTJExportData/InitFieldComparisonCache")] + public async Task InitFieldComparisonCache() + { + fieldComparisonTempList = (await _fieldComparisonRepository.GetQueryableAsync()).Where(m => m.TableName != "patient_register").ToList(); + asbitemFieldComparisonTempList = fieldComparisonTempList.Where(o => o.TableName == "asbitem").ToList(); + itemFieldComparisonTempList = fieldComparisonTempList.Where(o => o.TableName == "item").ToList(); + _customerOrgRegisterList = await _customerOrgRegisterRepository.GetListAsync(); + _userList = await _identityUserRepository.GetListAsync(); + _logger.LogInformation($"组合项目数:{asbitemFieldComparisonTempList.Count},项目数:{itemFieldComparisonTempList.Count}"); + } private int hangPatientRegisterCount = 0; @@ -2419,6 +2452,9 @@ namespace Shentun.Peis.CCTJExportDatas [HttpPost("api/app/CCTJExportData/TransferPatientRegisterWithDetailData")] public async Task TransferPatientRegisterWithDetailData(int handCount, string startdate, string enddate, bool isGo = false) { + Stopwatch stopwatch = new Stopwatch(); + stopwatch.Start(); + _logger.LogInformation($"开始导入数据"); //当前导入的ID string nextKeyValue = oldDb.Ado.GetString("select keyvalue from tb_export_key where tablename='patient_register' "); @@ -2437,580 +2473,1380 @@ namespace Shentun.Peis.CCTJExportDatas } DataTable oldPatientRegisterList = await oldDb.Ado.GetDataTableAsync(sqlPatientRegister); - + stopwatch.Stop(); + _logger.LogInformation($"获取要导入的人员总数耗时:{stopwatch.ElapsedMilliseconds}"+ $"共{oldPatientRegisterList.Rows.Count}条"); if (oldPatientRegisterList.Rows.Count > 0) { + Stopwatch stopwatch2 = new Stopwatch(); + stopwatch2.Start(); var userList = await _identityUserRepository.GetListAsync(); List customerOrgRegisterList = await _customerOrgRegisterRepository.GetListAsync(); - + stopwatch2.Stop(); + _logger.LogInformation($"获取所有客户单位耗时:{stopwatch2.ElapsedMilliseconds}"); + Stopwatch stopwatch5 = new Stopwatch(); + stopwatch5.Start(); + //Parallel.ForEach(oldPatientRegisterList.AsEnumerable(), row => + //{ + + //}); foreach (DataRow row in oldPatientRegisterList.Rows) { hangPatientRegisterCount++; - try - { - using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true)) - { - string oldPatientRegisterId = row["patient_register_id"].ToString(); + await ImportSingle(customerOrgRegisterList, userList, row); + } - //检查是否已经导入 - var isDZPatientRegisterTemp = (await _fieldComparisonRepository.GetListAsync(f => f.TableName == "patient_register" - && f.OldKeyValue == oldPatientRegisterId)); + //await Parallel.ForEachAsync(oldPatientRegisterList.AsEnumerable(), async (row, token) => + //{ + // hangPatientRegisterCount++; + // await ImportSingleParallel(customerOrgRegisterList, userList, row); + //}); + stopwatch5.Stop(); + _logger.LogInformation($"处理完全部人员耗时:{stopwatch5.ElapsedMilliseconds}"); + _logger.LogInformation($"人员数据处理{oldPatientRegisterList.Rows.Count}条,当前总数{hangPatientRegisterCount}"); + if (isGo) + await TransferPatientRegisterWithDetailData(handCount, startdate, enddate, isGo); + } + else + { + _logger.LogInformation("人员数据已处理完,没有查询到需要处理的人员"); + } - if (isDZPatientRegisterTemp.Count > 0) - { - continue; - } + } - //档案ID - Guid patientId = Guid.Empty; + [HttpPost("api/app/CCTJExportData/TransferPatientRegisterWithDetailDataById")] + public async Task TransferPatientRegisterWithDetailDataById(long patientRegisterIdFrom,long patientRegisterIdTo) + { + Stopwatch stopwatch = new Stopwatch(); + stopwatch.Start(); + _logger.LogInformation($"开始导入数据"); + //当前导入的ID + string nextKeyValue = oldDb.Ado.GetString("select keyvalue from tb_export_key where tablename='patient_register' "); - #region 处理档案,未找到档案就生成 + string sqlPatientRegister = ""; + if (patientRegisterIdFrom >= patientRegisterIdTo) + { + throw new Exception("开始值必须小于等于结束值"); - var patientEnt = await _patientRepository.FirstOrDefaultAsync(m => m.PatientNo == row["patient_id"].ToString()); - if (patientEnt == null) - { - string nationId = null; - if (!string.IsNullOrWhiteSpace(row["nation_id"].ToString())) - { - var nationEnt = (await _fieldComparisonRepository.GetQueryableAsync()).Where(m => m.TableName == "nation" && m.OldKeyValue == row["nation_id"].ToString()).FirstOrDefault(); - if (nationEnt == null) - { - nationId = row["nation_id"].ToString(); - } - else - { - nationId = nationEnt.NewKeyValue; - } - } + } + var sql = $"select count(*) as cnt from patient_register where patient_register_id>='{patientRegisterIdFrom}'" + + $" and patient_register_id<'{patientRegisterIdTo}' "; - Guid autoPatientId = GuidGenerator.Create(); //档案ID + DataTable oldPatientRegisterCount = await oldDb.Ado.GetDataTableAsync(sql); + if (oldPatientRegisterCount.Rows.Count == 0) + { + return; + } + _logger.LogInformation($"共有{oldPatientRegisterCount.Rows[0]["cnt"].ToString()}条"); - var dataPatient = new Patient(autoPatientId) - { - Address = row["address"].ToString(), - BirthDate = string.IsNullOrEmpty(row["birth_date"].ToString()) ? null : Convert.ToDateTime(row["birth_date"].ToString()), - BirthPlaceId = null, - DisplayName = row["name"].ToString(), - Email = row["email"].ToString(), - IdNo = row["id_card_no"].ToString(), - MaritalStatusId = row["marital_status_id"].ToString() == "2" ? '4' : Convert.ToChar(row["marital_status_id"].ToString()), - MedicalCenterId = defaultMedicalCenterId, - MobileTelephone = row["mobile_telephone"].ToString(), - NationId = nationId, - PatientNo = row["patient_id"].ToString(), - PatientPassword = row["patient_password"].ToString(), - PostalCode = row["postalcode"].ToString(), - SexId = ConvertSex(row["sex_id"].ToString()), - SimpleCode = LanguageConverter.GetPYSimpleCode(row["name"].ToString()), - Telephone = row["telephone"].ToString() - }; + sqlPatientRegister = $"select top 1000 * from patient_register where patient_register_id>='{patientRegisterIdFrom}'" + + $" and patient_register_id<'{patientRegisterIdTo}' order by patient_register_id asc"; + + + + DataTable oldPatientRegisterList = await oldDb.Ado.GetDataTableAsync(sqlPatientRegister); + stopwatch.Stop(); + _logger.LogInformation($"获取要导入的人员列表耗时:{stopwatch.ElapsedMilliseconds}" + $"共{oldPatientRegisterList.Rows.Count}条"); + //Stopwatch stopwatch2 = new Stopwatch(); + //stopwatch2.Start(); + //var userList = await _identityUserRepository.GetListAsync(); + //List customerOrgRegisterList = await _customerOrgRegisterRepository.GetListAsync(); + //stopwatch2.Stop(); + Stopwatch stopwatch5 = new Stopwatch(); + stopwatch5.Start(); + while (oldPatientRegisterList.Rows.Count > 0) + { + foreach (DataRow row in oldPatientRegisterList.Rows) + { + hangPatientRegisterCount++; + await ImportSingle(_customerOrgRegisterList, _userList, row); + } + patientRegisterIdFrom = Convert.ToInt64(oldPatientRegisterList.Rows[oldPatientRegisterList.Rows.Count - 1]["patient_register_id"]); + patientRegisterIdFrom++; + sqlPatientRegister = $"select top 1000 * from patient_register where patient_register_id>='{patientRegisterIdFrom}'" + + $" and patient_register_id<'{patientRegisterIdTo}' order by patient_register_id asc"; + Stopwatch stopwatch6 = new Stopwatch(); + stopwatch6.Start(); + oldPatientRegisterList = await oldDb.Ado.GetDataTableAsync(sqlPatientRegister); + _logger.LogInformation($"获取要导入的人员列表耗时:{stopwatch6.ElapsedMilliseconds}" + $"共{oldPatientRegisterList.Rows.Count}条"); + } + stopwatch5.Stop(); + _logger.LogInformation($"处理完全部人员耗时:{stopwatch5.ElapsedMilliseconds}"); + _logger.LogInformation($"人员数据处理{oldPatientRegisterList.Rows.Count}条,当前总数{hangPatientRegisterCount}"); + + + + } + private async Task ImportSingle(List customerOrgRegisterList,List userList, DataRow row) + { + try + { + Stopwatch stopwatch3 = new Stopwatch(); + stopwatch3.Start(); + using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true)) + { + var dbContext = await _dbContextProvider.GetDbContextAsync(); + //Stopwatch stopwatch31 = new Stopwatch(); + //stopwatch31.Start(); + string oldPatientRegisterId = row["patient_register_id"].ToString(); + string barcodeNo = row["barcode_no"].ToString(); + //检查是否已经导入 + var patRegisterLis = await _patientRegisterRepository.GetListAsync(o => o.PatientRegisterNo == barcodeNo); + if (patRegisterLis.Count > 0) + { + return; + } + //检查是否已经导入 + //var isDZPatientRegisterTemp = (await _fieldComparisonRepository.GetListAsync(f => f.TableName == "patient_register" + // && f.OldKeyValue == oldPatientRegisterId)); + + + //if (isDZPatientRegisterTemp.Count > 0) + //{ + // return; + // //continue;//并行处理不使用该语句 + //} + + + + //档案ID + Guid patientId = Guid.Empty; + + #region 处理档案,未找到档案就生成 - await _patientRepository.InsertAsync(dataPatient, true); - patientId = autoPatientId; + var patientEnt = await _patientRepository.FirstOrDefaultAsync(m => m.PatientNo == row["patient_id"].ToString()); + if (patientEnt == null) + { + string nationId = null; + if (!string.IsNullOrWhiteSpace(row["nation_id"].ToString())) + { + var nationEnt = fieldComparisonTempList.Where(m => m.TableName == "nation" && m.OldKeyValue == row["nation_id"].ToString()).FirstOrDefault(); + if (nationEnt == null) + { + nationId = row["nation_id"].ToString(); } else { - patientId = patientEnt.Id; + nationId = nationEnt.NewKeyValue; } + } + Guid autoPatientId = GuidGenerator.Create(); //档案ID + var dataPatient = new Patient(autoPatientId) + { + Address = row["address"].ToString(), + BirthDate = string.IsNullOrEmpty(row["birth_date"].ToString()) ? null : Convert.ToDateTime(row["birth_date"].ToString()), + BirthPlaceId = null, + DisplayName = row["name"].ToString(), + Email = row["email"].ToString(), + IdNo = row["id_card_no"].ToString(), + MaritalStatusId = row["marital_status_id"].ToString() == "2" ? '4' : Convert.ToChar(row["marital_status_id"].ToString()), + MedicalCenterId = defaultMedicalCenterId, + MobileTelephone = row["mobile_telephone"].ToString(), + NationId = nationId, + PatientNo = row["patient_id"].ToString(), + PatientPassword = row["patient_password"].ToString(), + PostalCode = row["postalcode"].ToString(), + SexId = ConvertSex(row["sex_id"].ToString()), + SimpleCode = LanguageConverter.GetPYSimpleCode(row["name"].ToString()), + Telephone = row["telephone"].ToString() + }; + + await _patientRepository.InsertAsync(dataPatient, true); + patientId = autoPatientId; + } + else + { + patientId = patientEnt.Id; + } - #endregion + #endregion - Guid patientRegisterId = GuidGenerator.Create(); //生成登记ID - #region 转换审核医生ID - Guid? AuditDoctorId = null; - if (!string.IsNullOrWhiteSpace(row["audit_doctor"].ToString())) - { - var userEnt = userList.Where(m => m.Name == row["audit_doctor"].ToString().Trim()).FirstOrDefault(); - if (userEnt != null) - { - AuditDoctorId = userEnt.Id; - } - } - #endregion + Guid patientRegisterId = GuidGenerator.Create(); //生成登记ID - #region 转换单位分组ID - Guid? customerOrgGroupId = null; - if (!string.IsNullOrWhiteSpace(row["org_group_id"].ToString())) - { - var customerOrgGroupEnt = (await _fieldComparisonRepository.GetQueryableAsync()).Where(m => m.TableName == "customer_org_group" && m.OldKeyValue == row["org_group_id"].ToString()).FirstOrDefault(); - if (customerOrgGroupEnt != null) - { - customerOrgGroupId = Guid.Parse(customerOrgGroupEnt.NewKeyValue); - } - } - #endregion + #region 转换审核医生ID + Guid? AuditDoctorId = null; + if (!string.IsNullOrWhiteSpace(row["audit_doctor"].ToString())) + { + var userEnt = userList.Where(m => m.Name == row["audit_doctor"].ToString().Trim()).FirstOrDefault(); + if (userEnt != null) + { + AuditDoctorId = userEnt.Id; + } + } + #endregion - #region 转换单位ID 部门 - Guid customerOrgId = Guid.Parse((await _fieldComparisonRepository.GetQueryableAsync()).Where(m => m.TableName == "customer_org" && m.OldKeyValue == row["org_id"].ToString()).FirstOrDefault().NewKeyValue); - #endregion + #region 转换单位分组ID + Guid? customerOrgGroupId = null; + if (!string.IsNullOrWhiteSpace(row["org_group_id"].ToString())) + { - #region 转换单位体检次数ID 没有增加默认值 - Guid customerOrgRegisterId = GuidFlag.PersonCustomerOrgRegisterId; - if (row["org_id"].ToString() != "00000") - { - Guid topCustomerOrgId = Guid.Parse((await _fieldComparisonRepository.GetQueryableAsync()).Where(m => m.TableName == "customer_org" && m.OldKeyValue == row["org_id"].ToString().Substring(0, 5)).FirstOrDefault().NewKeyValue); - var customerOrgRegisterEnt = customerOrgRegisterList.Where(m => m.CustomerOrgId == topCustomerOrgId - && m.MedicalTimes == (short)Convert.ToInt32(row["org_medical_times"].ToString())).FirstOrDefault(); - if (customerOrgRegisterEnt != null) - { - customerOrgRegisterId = customerOrgRegisterEnt.Id; - } - } + var customerOrgGroupEnt = fieldComparisonTempList.Where(m => m.TableName == "customer_org_group" && m.OldKeyValue == row["org_group_id"].ToString()).FirstOrDefault(); + if (customerOrgGroupEnt != null) + { + customerOrgGroupId = Guid.Parse(customerOrgGroupEnt.NewKeyValue); + } - #endregion + } + #endregion - #region 转换体检结论ID - Guid? medicalConclusionId = null; - if (!string.IsNullOrWhiteSpace(row["medical_conclusion_id"].ToString())) - { - var medicalConclusionEnt = (await _fieldComparisonRepository.GetQueryableAsync()).Where(m => m.TableName == "medical_conclusion" - && m.OldKeyValue == row["medical_conclusion_id"].ToString()).FirstOrDefault(); - if (medicalConclusionEnt != null) - { - medicalConclusionId = Guid.Parse(medicalConclusionEnt.NewKeyValue); - } - } - #endregion + #region 转换单位ID 部门 + Guid customerOrgId = Guid.Parse(fieldComparisonTempList.Where(m => m.TableName == "customer_org" && m.OldKeyValue == row["org_id"].ToString()).FirstOrDefault().NewKeyValue); + #endregion - #region 转换套餐ID - Guid? medicalPackageId = null; - if (!string.IsNullOrWhiteSpace(row["medical_package_id"].ToString())) - { - var medicalPackageEnt = (await _fieldComparisonRepository.GetQueryableAsync()).Where(m => m.TableName == "medical_package" && m.OldKeyValue == row["medical_package_id"].ToString()).FirstOrDefault(); - if (medicalPackageEnt != null) - { - medicalPackageId = Guid.Parse(medicalPackageEnt.NewKeyValue); - } - } - #endregion + #region 转换单位体检次数ID 没有增加默认值 + Guid customerOrgRegisterId = GuidFlag.PersonCustomerOrgRegisterId; + if (row["org_id"].ToString() != "00000") + { + Guid topCustomerOrgId = Guid.Parse(fieldComparisonTempList.Where(m => m.TableName == "customer_org" && m.OldKeyValue == row["org_id"].ToString().Substring(0, 5)).FirstOrDefault().NewKeyValue); + var customerOrgRegisterEnt = customerOrgRegisterList.Where(m => m.CustomerOrgId == topCustomerOrgId + && m.MedicalTimes == (short)Convert.ToInt32(row["org_medical_times"].ToString())).FirstOrDefault(); + if (customerOrgRegisterEnt != null) + { + customerOrgRegisterId = customerOrgRegisterEnt.Id; + } + } - #region 转换体检类别ID - Guid? medicalTypeId = null; - if (!string.IsNullOrWhiteSpace(row["medical_type_id"].ToString())) - { - var medicalTypeEnt = (await _fieldComparisonRepository.GetQueryableAsync()).Where(m => m.TableName == "medical_type" && m.OldKeyValue == row["medical_type_id"].ToString()).FirstOrDefault(); - if (medicalTypeEnt != null) - { - medicalTypeId = Guid.Parse(medicalTypeEnt.NewKeyValue); - } - } - #endregion + #endregion + + #region 转换体检结论ID + Guid? medicalConclusionId = null; + if (!string.IsNullOrWhiteSpace(row["medical_conclusion_id"].ToString())) + { + var medicalConclusionEnt = fieldComparisonTempList.Where(m => m.TableName == "medical_conclusion" + && m.OldKeyValue == row["medical_conclusion_id"].ToString()).FirstOrDefault(); + if (medicalConclusionEnt != null) + { + medicalConclusionId = Guid.Parse(medicalConclusionEnt.NewKeyValue); + } + } + #endregion + + #region 转换套餐ID + Guid? medicalPackageId = null; + if (!string.IsNullOrWhiteSpace(row["medical_package_id"].ToString())) + { + var medicalPackageEnt = fieldComparisonTempList.Where(m => m.TableName == "medical_package" && m.OldKeyValue == row["medical_package_id"].ToString()).FirstOrDefault(); + if (medicalPackageEnt != null) + { + medicalPackageId = Guid.Parse(medicalPackageEnt.NewKeyValue); + } + } + #endregion + + #region 转换体检类别ID + Guid? medicalTypeId = null; + if (!string.IsNullOrWhiteSpace(row["medical_type_id"].ToString())) + { + var medicalTypeEnt = fieldComparisonTempList.Where(m => m.TableName == "medical_type" && m.OldKeyValue == row["medical_type_id"].ToString()).FirstOrDefault(); + if (medicalTypeEnt != null) + { + medicalTypeId = Guid.Parse(medicalTypeEnt.NewKeyValue); + } + } + #endregion + + + + #region 转换人员类别ID + Guid? personnelTypeId = null; + if (!string.IsNullOrWhiteSpace(row["personnel_type_id"].ToString())) + { + var personnelTypeEnt = fieldComparisonTempList.Where(m => m.TableName == "personnel_type" && m.OldKeyValue == row["personnel_type_id"].ToString()).FirstOrDefault(); + if (personnelTypeEnt != null) + { + personnelTypeId = Guid.Parse(personnelTypeEnt.NewKeyValue); + } + } + #endregion + + #region 转换总检医生ID + Guid? summaryDoctorId = null; + if (!string.IsNullOrWhiteSpace(row["summary_doctor"].ToString())) + { + var userEnt = userList.Where(m => m.Name == row["summary_doctor"].ToString().Trim()).FirstOrDefault(); + if (userEnt != null) + { + summaryDoctorId = userEnt.Id; + } + } + #endregion + + + #region 上传图片,获取地址 + + string photo = ""; + if (!string.IsNullOrEmpty(row["photograph"].ToString())) + { + photo = UpLoadImg(patientRegisterId, Convert.ToDateTime(row["register_date"].ToString()), (byte[])row["photograph"]); + } + + #endregion + + var data = new PatientRegister(patientRegisterId) + { + BirthDate = string.IsNullOrEmpty(row["birth_date"].ToString()) ? null : Convert.ToDateTime(row["birth_date"].ToString()), + MaritalStatusId = row["marital_status_id"].ToString() == "2" ? '4' : Convert.ToChar(row["marital_status_id"].ToString()), + MedicalCenterId = defaultMedicalCenterId, + SexId = ConvertSex(row["sex_id"].ToString()), + Age = string.IsNullOrWhiteSpace(row["age"].ToString()) ? null : Convert.ToInt16(row["age"].ToString()), + AuditDate = string.IsNullOrWhiteSpace(row["audit_date"].ToString()) ? null : Convert.ToDateTime(row["audit_date"].ToString()), + AuditDoctorId = AuditDoctorId, + CompleteFlag = Convert.ToChar(row["complete_flag"].ToString()), + CustomerOrgGroupId = customerOrgGroupId, + CustomerOrgId = customerOrgId, + CustomerOrgRegisterId = customerOrgRegisterId, + GuidePrintTimes = string.IsNullOrWhiteSpace(row["instruct_print_times"].ToString()) ? (short)0 : Convert.ToInt16(row["instruct_print_times"].ToString()), + InterposeMeasure = null, + IsAudit = string.IsNullOrWhiteSpace(row["audit_flag"].ToString()) ? 'N' : Convert.ToChar(row["audit_flag"].ToString()), + IsLock = string.IsNullOrWhiteSpace(row["lock_flag"].ToString()) ? 'N' : Convert.ToChar(row["lock_flag"].ToString()), + IsMedicalStart = string.IsNullOrWhiteSpace(row["medical_start_flag"].ToString()) ? 'N' : Convert.ToChar(row["medical_start_flag"].ToString()), + IsNameHide = string.IsNullOrWhiteSpace(row["name_encrypt_flag"].ToString()) ? 'N' : Convert.ToChar(row["name_encrypt_flag"].ToString()), + IsPhoneFollow = 'N', + IsRecoverGuide = string.IsNullOrWhiteSpace(row["recover_form_flag"].ToString()) ? 'N' : Convert.ToChar(row["recover_form_flag"].ToString()), + IsUpload = string.IsNullOrWhiteSpace(row["upload_flag"].ToString()) ? 'N' : Convert.ToChar(row["upload_flag"].ToString()), + IsVip = string.IsNullOrWhiteSpace(row["vip_flag"].ToString()) ? 'N' : Convert.ToChar(row["vip_flag"].ToString()), + JobCardNo = row["job_card_no"].ToString(), + JobPost = row["job_post"].ToString(), + JobTitle = row["job_title"].ToString(), + MedicalCardNo = row["medical_card_no"].ToString(), + MedicalConclusionId = medicalConclusionId, + MedicalPackageId = medicalPackageId, + MedicalStartDate = string.IsNullOrEmpty(row["medical_start_date"].ToString()) ? null : Convert.ToDateTime(row["medical_start_date"].ToString()), + MedicalTimes = Convert.ToInt16(row["medical_times"].ToString()), + MedicalTypeId = medicalTypeId, + PatientId = patientId, + PatientName = row["name"].ToString(), + PatientRegisterNo = row["barcode_no"].ToString(), + PersonnelTypeId = personnelTypeId, + Photo = photo, + Remark = row["remark"].ToString(), + ReportPrintTimes = Convert.ToInt16(row["report_print_times"].ToString()), + Salesman = row["salesman"].ToString(), + SexHormoneTermId = null, + SummaryDate = string.IsNullOrEmpty(row["summary_date"].ToString()) ? null : Convert.ToDateTime(row["summary_date"].ToString()), + SummaryDoctorId = summaryDoctorId, + ThirdInfo = row["third_info"].ToString(), + }; + await _patientRegisterRepository.InsertAsync(data, true); + + //stopwatch31.Stop(); + //_logger.LogInformation($"{row["patient_register_id"]}_第31片段耗时:{stopwatch31.ElapsedMilliseconds}"); + //Stopwatch stopwatch32 = new Stopwatch(); + //stopwatch32.Start(); + #region 登记的项目、结果、小结 - #region 转换人员类别ID - Guid? personnelTypeId = null; - if (!string.IsNullOrWhiteSpace(row["personnel_type_id"].ToString())) + var oldRegisterAsbitemList = await oldDb.Ado.GetDataTableAsync($"select * from register_asbitem where patient_register_id='{row["patient_register_id"].ToString()}'"); + + if (oldRegisterAsbitemList.Rows.Count > 0) + { + var oldRegisterCheckItemListAll= await oldDb.Ado.GetDataTableAsync($"select * from register_item where patient_register_id='{row["patient_register_id"].ToString()}'"); + + var registerCheckList = new List(); + var registerCheckAsbitemList = new List(); + var registerCheckItemList = new List(); + var registerCheckSummaryList = new List(); + foreach (DataRow rowAsbitem in oldRegisterAsbitemList.Rows) + { + //Stopwatch stopwatch34 = new Stopwatch(); + //stopwatch34.Start(); + #region 转换审核医生ID + Guid? auditorUserId = null; + if (!string.IsNullOrWhiteSpace(rowAsbitem["audit_doctor"].ToString())) { - var personnelTypeEnt = (await _fieldComparisonRepository.GetQueryableAsync()).Where(m => m.TableName == "personnel_type" && m.OldKeyValue == row["personnel_type_id"].ToString()).FirstOrDefault(); - if (personnelTypeEnt != null) + var userEnt = userList.Where(m => m.Name == rowAsbitem["audit_doctor"].ToString().Trim()).FirstOrDefault(); + if (userEnt != null) { - personnelTypeId = Guid.Parse(personnelTypeEnt.NewKeyValue); + auditorUserId = userEnt.Id; } } #endregion - #region 转换总检医生ID - Guid? summaryDoctorId = null; - if (!string.IsNullOrWhiteSpace(row["summary_doctor"].ToString())) + #region 转换检查医生ID + string checkDoctorId = null; + if (!string.IsNullOrWhiteSpace(rowAsbitem["check_doctor"].ToString())) { - var userEnt = userList.Where(m => m.Name == row["summary_doctor"].ToString().Trim()).FirstOrDefault(); + var userEnt = userList.Where(m => m.Name == rowAsbitem["check_doctor"].ToString().Trim()).FirstOrDefault(); if (userEnt != null) { - summaryDoctorId = userEnt.Id; + checkDoctorId = userEnt.Id.ToString(); + } + else + { + checkDoctorId = rowAsbitem["check_doctor"].ToString().Trim(); } } #endregion + #region 转换组合项目ID + Guid newAsbitemId = Guid.Parse(asbitemFieldComparisonTempList.Where(m => m.OldKeyValue == rowAsbitem["asbitem_id"].ToString()).FirstOrDefault().NewKeyValue); + #endregion - #region 上传图片,获取地址 - - string photo = ""; - if (!string.IsNullOrEmpty(row["photograph"].ToString())) + //stopwatch34.Stop(); + //_logger.LogInformation($"{row["patient_register_id"]}_第34片段耗时:{stopwatch34.ElapsedMilliseconds}"); + #region 插入register_check + Guid registerCheckId = GuidGenerator.Create(); + var dataRegisterCheck = new RegisterCheck(registerCheckId) { - photo = UpLoadImg(patientRegisterId, Convert.ToDateTime(row["register_date"].ToString()), (byte[])row["photograph"]); - } + AuditorUserId = auditorUserId, + AuditTime = string.IsNullOrEmpty(rowAsbitem["audit_date"].ToString()) ? null : Convert.ToDateTime(rowAsbitem["audit_date"].ToString()), + CheckDate = string.IsNullOrEmpty(rowAsbitem["check_date"].ToString()) ? null : Convert.ToDateTime(rowAsbitem["check_date"].ToString()), + CheckDoctorId = checkDoctorId, + CheckRequestNo = "", + CheckRequestPrintTimes = (short)1, + CompleteFlag = Convert.ToChar(rowAsbitem["complete_flag"].ToString()), + CriticalRangeValue = null, + //CriticalValueCreateDate = null, + IsCriticalValue = null, + CriticalValueContent = null, + //CriticalValueProcessDate = null, + //CriticalValueProcessDoctor = null, + //CriticalValueProcessFlag = null, + IsAudit = string.IsNullOrEmpty(rowAsbitem["audit_flag"].ToString()) ? 'N' : Convert.ToChar(rowAsbitem["audit_flag"].ToString()), + IsLock = string.IsNullOrEmpty(rowAsbitem["lock_flag"].ToString()) ? 'N' : Convert.ToChar(rowAsbitem["lock_flag"].ToString()), + PatientRegisterId = patientRegisterId, + ThirdInfo = rowAsbitem["third_info"].ToString() + }; + //await _registerCheckRepository.InsertAsync(dataRegisterCheck, true); + dataRegisterCheck.SetCreateId(_currentUser.Id); + dataRegisterCheck.SetCreationTime(DateTime.Now); + dataRegisterCheck.SetLastModifierId(_currentUser.Id); + dataRegisterCheck.SetLastModificationTime(DateTime.Now); + registerCheckList.Add(dataRegisterCheck); #endregion - var data = new PatientRegister(patientRegisterId) - { - BirthDate = string.IsNullOrEmpty(row["birth_date"].ToString()) ? null : Convert.ToDateTime(row["birth_date"].ToString()), - MaritalStatusId = row["marital_status_id"].ToString() == "2" ? '4' : Convert.ToChar(row["marital_status_id"].ToString()), - MedicalCenterId = defaultMedicalCenterId, - SexId = ConvertSex(row["sex_id"].ToString()), - Age = string.IsNullOrWhiteSpace(row["age"].ToString()) ? null : Convert.ToInt16(row["age"].ToString()), - AuditDate = string.IsNullOrWhiteSpace(row["audit_date"].ToString()) ? null : Convert.ToDateTime(row["audit_date"].ToString()), - AuditDoctorId = AuditDoctorId, - CompleteFlag = Convert.ToChar(row["complete_flag"].ToString()), - CustomerOrgGroupId = customerOrgGroupId, - CustomerOrgId = customerOrgId, - CustomerOrgRegisterId = customerOrgRegisterId, - GuidePrintTimes = string.IsNullOrWhiteSpace(row["instruct_print_times"].ToString()) ? (short)0 : Convert.ToInt16(row["instruct_print_times"].ToString()), - InterposeMeasure = null, - IsAudit = string.IsNullOrWhiteSpace(row["audit_flag"].ToString()) ? 'N' : Convert.ToChar(row["audit_flag"].ToString()), - IsLock = string.IsNullOrWhiteSpace(row["lock_flag"].ToString()) ? 'N' : Convert.ToChar(row["lock_flag"].ToString()), - IsMedicalStart = string.IsNullOrWhiteSpace(row["medical_start_flag"].ToString()) ? 'N' : Convert.ToChar(row["medical_start_flag"].ToString()), - IsNameHide = string.IsNullOrWhiteSpace(row["name_encrypt_flag"].ToString()) ? 'N' : Convert.ToChar(row["name_encrypt_flag"].ToString()), - IsPhoneFollow = 'N', - IsRecoverGuide = string.IsNullOrWhiteSpace(row["recover_form_flag"].ToString()) ? 'N' : Convert.ToChar(row["recover_form_flag"].ToString()), - IsUpload = string.IsNullOrWhiteSpace(row["upload_flag"].ToString()) ? 'N' : Convert.ToChar(row["upload_flag"].ToString()), - IsVip = string.IsNullOrWhiteSpace(row["vip_flag"].ToString()) ? 'N' : Convert.ToChar(row["vip_flag"].ToString()), - JobCardNo = row["job_card_no"].ToString(), - JobPost = row["job_post"].ToString(), - JobTitle = row["job_title"].ToString(), - MedicalCardNo = row["medical_card_no"].ToString(), - MedicalConclusionId = medicalConclusionId, - MedicalPackageId = medicalPackageId, - MedicalStartDate = string.IsNullOrEmpty(row["medical_start_date"].ToString()) ? null : Convert.ToDateTime(row["medical_start_date"].ToString()), - MedicalTimes = Convert.ToInt16(row["medical_times"].ToString()), - MedicalTypeId = medicalTypeId, - PatientId = patientId, - PatientName = row["name"].ToString(), - PatientRegisterNo = row["barcode_no"].ToString(), - PersonnelTypeId = personnelTypeId, - Photo = photo, - Remark = row["remark"].ToString(), - ReportPrintTimes = Convert.ToInt16(row["report_print_times"].ToString()), - Salesman = row["salesman"].ToString(), - SexHormoneTermId = null, - SummaryDate = string.IsNullOrEmpty(row["summary_date"].ToString()) ? null : Convert.ToDateTime(row["summary_date"].ToString()), - SummaryDoctorId = summaryDoctorId, - ThirdInfo = row["third_info"].ToString(), - }; - await _patientRegisterRepository.InsertAsync(data, true); + #region 插入register_check_asbitem + Guid registerCheckAsbitemId = GuidGenerator.Create(); + var dataRegisterAsbitem = new RegisterCheckAsbitem(registerCheckAsbitemId) + { + Amount = 1, + IsCharge = Convert.ToChar(rowAsbitem["charge_flag"].ToString()), + AsbitemId = newAsbitemId, + ChargePrice = Convert.ToDecimal(rowAsbitem["price"].ToString()), + GroupPackageId = null, + LisRequestId = null, + PatientRegisterId = patientRegisterId, + PayTypeFlag = Convert.ToChar(rowAsbitem["payment_mode"].ToString()), + RegisterCheckId = registerCheckId, + StandardPrice = Convert.ToDecimal(rowAsbitem["standard_price"].ToString()), + + }; + //await _registerCheckAsbitemRepository.InsertAsync(dataRegisterAsbitem); + dataRegisterAsbitem.SetCreateId(_currentUser.Id); + dataRegisterAsbitem.SetCreationTime(DateTime.Now); + dataRegisterAsbitem.SetLastModifierId(_currentUser.Id); + dataRegisterAsbitem.SetLastModificationTime(DateTime.Now); + registerCheckAsbitemList.Add(dataRegisterAsbitem); + #endregion - #region 登记的项目、结果、小结 - var oldRegisterAsbitemList = await oldDb.Ado.GetDataTableAsync($"select * from register_asbitem where patient_register_id='{row["patient_register_id"].ToString()}'"); + #region 插入医生小结 + - if (oldRegisterAsbitemList.Rows.Count > 0) + var oldSummary = rowAsbitem["summary"].ToString(); + if (!string.IsNullOrWhiteSpace(oldSummary)) { - foreach (DataRow rowAsbitem in oldRegisterAsbitemList.Rows) + Guid dataRegisterCheckSummaryId = GuidGenerator.Create(); + var dataRegisterCheckSummary = new RegisterCheckSummary(dataRegisterCheckSummaryId) { - #region 转换审核医生ID - Guid? auditorUserId = null; - if (!string.IsNullOrWhiteSpace(rowAsbitem["audit_doctor"].ToString())) - { - var userEnt = userList.Where(m => m.Name == rowAsbitem["audit_doctor"].ToString().Trim()).FirstOrDefault(); - if (userEnt != null) - { - auditorUserId = userEnt.Id; - } - } - #endregion + RegisterCheckId = registerCheckId, + DisplayOrder = 1, + Summary = oldSummary, + SummaryFlag = '0' + }; - #region 转换检查医生ID - string checkDoctorId = null; - if (!string.IsNullOrWhiteSpace(rowAsbitem["check_doctor"].ToString())) - { - var userEnt = userList.Where(m => m.Name == rowAsbitem["check_doctor"].ToString().Trim()).FirstOrDefault(); - if (userEnt != null) - { - checkDoctorId = userEnt.Id.ToString(); - } - else - { - checkDoctorId = rowAsbitem["check_doctor"].ToString().Trim(); - } - } - #endregion + //await _registerCheckSummaryRepository.InsertAsync(dataRegisterCheckSummary); - #region 转换组合项目ID - Guid newAsbitemId = Guid.Parse((await _fieldComparisonRepository.GetQueryableAsync()) - .Where(m => m.TableName == "asbitem" && m.OldKeyValue == rowAsbitem["asbitem_id"].ToString()).FirstOrDefault().NewKeyValue); - #endregion + dataRegisterCheckSummary.SetCreateId(_currentUser.Id); + dataRegisterCheckSummary.SetCreationTime(DateTime.Now); + dataRegisterCheckSummary.SetLastModifierId(_currentUser.Id); + dataRegisterCheckSummary.SetLastModificationTime(DateTime.Now); + registerCheckSummaryList.Add(dataRegisterCheckSummary); + } - #region 插入register_check - Guid registerCheckId = GuidGenerator.Create(); - var dataRegisterCheck = new RegisterCheck(registerCheckId) - { - AuditorUserId = auditorUserId, - AuditTime = string.IsNullOrEmpty(rowAsbitem["audit_date"].ToString()) ? null : Convert.ToDateTime(rowAsbitem["audit_date"].ToString()), - CheckDate = string.IsNullOrEmpty(rowAsbitem["check_date"].ToString()) ? null : Convert.ToDateTime(rowAsbitem["check_date"].ToString()), - CheckDoctorId = checkDoctorId, - CheckRequestNo = "", - CheckRequestPrintTimes = (short)1, - CompleteFlag = Convert.ToChar(rowAsbitem["complete_flag"].ToString()), - CriticalRangeValue = null, - //CriticalValueCreateDate = null, - IsCriticalValue = null, - CriticalValueContent = null, - //CriticalValueProcessDate = null, - //CriticalValueProcessDoctor = null, - //CriticalValueProcessFlag = null, - IsAudit = string.IsNullOrEmpty(rowAsbitem["audit_flag"].ToString()) ? 'N' : Convert.ToChar(rowAsbitem["audit_flag"].ToString()), - IsLock = string.IsNullOrEmpty(rowAsbitem["lock_flag"].ToString()) ? 'N' : Convert.ToChar(rowAsbitem["lock_flag"].ToString()), - PatientRegisterId = patientRegisterId, - ThirdInfo = rowAsbitem["third_info"].ToString() - }; + #endregion - await _registerCheckRepository.InsertAsync(dataRegisterCheck, true); - #endregion + #region 插入明细项目 + oldRegisterCheckItemListAll.DefaultView.RowFilter = $"asbitem_id={rowAsbitem["asbitem_id"].ToString()}"; + var oldRegisterCheckItemList = oldRegisterCheckItemListAll.DefaultView.ToTable(); + //var oldRegisterCheckItemList = await oldDb.Ado.GetDataTableAsync($"select * from register_item where patient_register_id='{row["patient_register_id"].ToString()}' and asbitem_id='{rowAsbitem["asbitem_id"].ToString()}'"); + + if (oldRegisterCheckItemList.Rows.Count > 0) + { + + foreach (DataRow rowRegisterCheckItem in oldRegisterCheckItemList.Rows) + { + #region 转换项目ID 老转新 + Guid newItemId = Guid.Parse(itemFieldComparisonTempList.Where(m => m.OldKeyValue == rowRegisterCheckItem["item_id"].ToString()).FirstOrDefault().NewKeyValue); + #endregion - #region 插入register_check_asbitem - Guid registerCheckAsbitemId = GuidGenerator.Create(); - var dataRegisterAsbitem = new RegisterCheckAsbitem(registerCheckAsbitemId) + var dataRegisterCheckItem = new RegisterCheckItem { - Amount = 1, - IsCharge = Convert.ToChar(rowAsbitem["charge_flag"].ToString()), - AsbitemId = newAsbitemId, - ChargePrice = Convert.ToDecimal(rowAsbitem["price"].ToString()), - GroupPackageId = null, - LisRequestId = null, - PatientRegisterId = patientRegisterId, - PayTypeFlag = Convert.ToChar(rowAsbitem["payment_mode"].ToString()), + CheckDate = string.IsNullOrEmpty(rowRegisterCheckItem["check_date"].ToString()) ? null : Convert.ToDateTime(rowRegisterCheckItem["check_date"].ToString()), + CriticalValue = null, + CheckDoctorName = rowRegisterCheckItem["check_doctor"].ToString().Trim(), + CriticalRangeValue = null, + ItemId = newItemId, + ReferenceRangeValue = rowRegisterCheckItem["reference_range_value"].ToString(), RegisterCheckId = registerCheckId, - StandardPrice = Convert.ToDecimal(rowAsbitem["standard_price"].ToString()) + Result = rowRegisterCheckItem["result"].ToString(), + ResultStatusId = _registerCheckItemManager.GetResultStatusId(rowRegisterCheckItem["result"].ToString(), rowRegisterCheckItem["reference_range_value"].ToString()), + Unit = rowRegisterCheckItem["Unit"].ToString() }; - await _registerCheckAsbitemRepository.InsertAsync(dataRegisterAsbitem); - #endregion - + //await _registerCheckItemRepository.InsertAsync(dataRegisterCheckItem); + dataRegisterCheckItem.SetCreateId(_currentUser.Id); + dataRegisterCheckItem.SetCreationTime(DateTime.Now); + dataRegisterCheckItem.SetLastModifierId(_currentUser.Id); + dataRegisterCheckItem.SetLastModificationTime(DateTime.Now); + registerCheckItemList.Add(dataRegisterCheckItem); + } - #region 插入医生小结 + } + + + + #endregion - var oldSummary = rowAsbitem["summary"].ToString(); - if (!string.IsNullOrWhiteSpace(oldSummary)) - { - var dataRegisterCheckSummary = new RegisterCheckSummary - { - RegisterCheckId = registerCheckId, - DisplayOrder = 1, - Summary = oldSummary, - SummaryFlag = '0' - }; - await _registerCheckSummaryRepository.InsertAsync(dataRegisterCheckSummary); - } + } - #endregion + //await _registerCheckRepository.InsertManyAsync(registerCheckList, true); + //await _registerCheckAsbitemRepository.InsertManyAsync(registerCheckAsbitemList, true); + //if (registerCheckSummaryList.Count > 0) + //{ + // await _registerCheckSummaryRepository.InsertManyAsync(registerCheckSummaryList, true); + //} + //if (registerCheckItemList.Count > 0) + //{ + // await _registerCheckItemRepository.InsertManyAsync(registerCheckItemList, true); + //} - #region 插入明细项目 - var oldRegisterCheckItemList = await oldDb.Ado.GetDataTableAsync($"select * from register_item where patient_register_id='{row["patient_register_id"].ToString()}' and asbitem_id='{rowAsbitem["asbitem_id"].ToString()}'"); + await dbContext.BulkInsertAsync(registerCheckList, new BulkConfig + { + PreserveInsertOrder = false, // 如果不需要顺序,可以关掉 + SetOutputIdentity = false, // Guid 主键时一定要关掉 + BatchSize = 10000, // 大数据量时调整批次大小 + TrackingEntities = false // 禁用跟踪,加快速度 + }); - if (oldRegisterCheckItemList.Rows.Count > 0) - { + await dbContext.BulkInsertAsync(registerCheckAsbitemList, new BulkConfig + { + PreserveInsertOrder = false, // 如果不需要顺序,可以关掉 + SetOutputIdentity = false, // Guid 主键时一定要关掉 + BatchSize = 10000, // 大数据量时调整批次大小 + TrackingEntities = false // 禁用跟踪,加快速度 + }); + if (registerCheckSummaryList.Count > 0) + { + await dbContext.BulkInsertAsync(registerCheckSummaryList, new BulkConfig + { + PreserveInsertOrder = false, // 如果不需要顺序,可以关掉 + SetOutputIdentity = false, // Guid 主键时一定要关掉 + BatchSize = 10000, // 大数据量时调整批次大小 + TrackingEntities = false // 禁用跟踪,加快速度 + }); + } - foreach (DataRow rowRegisterCheckItem in oldRegisterCheckItemList.Rows) - { - #region 转换项目ID 老转新 - Guid newItemId = Guid.Parse((await _fieldComparisonRepository.GetQueryableAsync()) - .Where(m => m.TableName == "item" && m.OldKeyValue == rowRegisterCheckItem["item_id"].ToString()).FirstOrDefault().NewKeyValue); + if (registerCheckItemList.Count > 0) + { + await dbContext.BulkInsertAsync(registerCheckItemList, new BulkConfig + { + PreserveInsertOrder = false, // 如果不需要顺序,可以关掉 + SetOutputIdentity = false, // Guid 主键时一定要关掉 + BatchSize = 10000, // 大数据量时调整批次大小 + TrackingEntities = false // 禁用跟踪,加快速度 + }); - #endregion + } + } - var dataRegisterCheckItem = new RegisterCheckItem - { - CheckDate = string.IsNullOrEmpty(rowRegisterCheckItem["check_date"].ToString()) ? null : Convert.ToDateTime(rowRegisterCheckItem["check_date"].ToString()), - CriticalValue = null, - CheckDoctorName = rowRegisterCheckItem["check_doctor"].ToString().Trim(), - CriticalRangeValue = null, - ItemId = newItemId, - ReferenceRangeValue = rowRegisterCheckItem["reference_range_value"].ToString(), - RegisterCheckId = registerCheckId, - Result = rowRegisterCheckItem["result"].ToString(), - ResultStatusId = _registerCheckItemManager.GetResultStatusId(rowRegisterCheckItem["result"].ToString(), rowRegisterCheckItem["reference_range_value"].ToString()), - Unit = rowRegisterCheckItem["Unit"].ToString() - }; + #endregion - await _registerCheckItemRepository.InsertAsync(dataRegisterCheckItem); + //stopwatch32.Stop(); + //_logger.LogInformation($"{row["patient_register_id"]}_第32片段耗时:{stopwatch32.ElapsedMilliseconds}"); - } - } + #region 总检建议、综述、总检诊断 - #endregion - } - } + var oldSum = await oldDb.Ado.GetDataTableAsync($"select summary,suggestion,barcode_no from patient_register where patient_register_id='{oldPatientRegisterId}' "); - #endregion + if (oldSum.Rows.Count == 1) + { + string oldSummary = oldSum.Rows[0][0].ToString(); + string oldSuggestion = oldSum.Rows[0][1].ToString(); + if (!string.IsNullOrWhiteSpace(oldSummary)) + { - #region 总检建议、综述、总检诊断 + Guid sumSummaryHeaderId = GuidGenerator.Create(); + var dataSumSummaryHeader = new SumSummaryHeader(sumSummaryHeaderId) + { + DisplayOrder = 1, + SummaryFlag = '0', + PatientRegisterId = patientRegisterId, + SummaryTitle = "异常结果如下" + }; - var oldSum = await oldDb.Ado.GetDataTableAsync($"select summary,suggestion,barcode_no from patient_register where patient_register_id='{oldPatientRegisterId}' "); + await _sumSummaryHeaderRepository.InsertAsync(dataSumSummaryHeader); - if (oldSum.Rows.Count == 1) + Guid sumSummaryContentId = GuidGenerator.Create(); + var dataSumSummaryContent = new SumSummaryContent(sumSummaryContentId) { - string oldSummary = oldSum.Rows[0][0].ToString(); - string oldSuggestion = oldSum.Rows[0][1].ToString(); + DisplayOrder = 1, + SumSummaryHeaderId = sumSummaryHeaderId, + SummaryContent = oldSummary + }; - if (!string.IsNullOrWhiteSpace(oldSummary)) + await _sumSummaryContentRepository.InsertAsync(dataSumSummaryContent); + + } + + + if (!string.IsNullOrWhiteSpace(oldSuggestion)) + { + + Guid sumSuggestionHeaderId = GuidGenerator.Create(); + + var dataSumSuggestionHeader = new SumSuggestionHeader(sumSuggestionHeaderId) + { + DisplayOrder = 1, + SuggestionFlag = '0', + PatientRegisterId = patientRegisterId, + SuggestionTitle = "健康建议如下" + }; + + await _sumSuggestionHeaderRepository.InsertAsync(dataSumSuggestionHeader); + + Guid sumSuggestionContentId = GuidGenerator.Create(); + var dataSumSuggestionContent = new SumSuggestionContent(sumSuggestionContentId) + { + DisplayOrder = 1, + SuggestionContent = oldSuggestion, + SuggestionType = SuggestionTypeFlag.HealthGuidance, + SumSuggestionHeaderId = sumSuggestionHeaderId + }; + + await _sumSuggestionContentRepository.InsertAsync(dataSumSuggestionContent); + + + + #region 总症诊断 + var oldSummaryDiagnosis = await oldDb.Ado.GetDataTableAsync($"select diagnosis_id from summary_diagnosis where patient_register_id='{oldPatientRegisterId}' order by display_order asc "); + + if (oldSummaryDiagnosis.Rows.Count > 0) + { + List sumDiagnosisInsert = new List(); + + foreach (DataRow summaryDiagnosis in oldSummaryDiagnosis.Rows) { + var diagnosisEnt = fieldComparisonTempList.Where(m => m.TableName == "diagnosis" && m.OldKeyValue == summaryDiagnosis["diagnosis_id"].ToString()).FirstOrDefault(); + if (diagnosisEnt != null) + { + + var dataSumDiagnosis = new SumDiagnosis + { + DisplayOrder = oldSummaryDiagnosis.Rows.IndexOf(summaryDiagnosis) + 1, + PatientRegisterId = patientRegisterId, + DiagnosisId = Guid.Parse(diagnosisEnt.NewKeyValue), + SumSuggestionHeaderId = sumSuggestionHeaderId + }; + + sumDiagnosisInsert.Add(dataSumDiagnosis); + + + } + + + } + + if (sumDiagnosisInsert.Any()) + await _sumDiagnosisRepository.InsertManyAsync(sumDiagnosisInsert); + + } + #endregion + - Guid sumSummaryHeaderId = GuidGenerator.Create(); + } + + + } + + + #endregion + + /* 已不需要,暂时屏蔽 + var fieldComparison = new FieldComparison + { + FieldName = "id", + NewKeyValue = patientRegisterId.ToString(), + OldKeyValue = row["patient_register_id"].ToString(), + TableName = "patient_register" + }; + + + await _fieldComparisonRepository.InsertAsync(fieldComparison); + + + await oldDb.Ado.ExecuteCommandAsync($"update tb_export_key set keyvalue='{row["patient_register_id"].ToString()}',addtime=getdate(),handlecount+=1 where tablename='patient_register' "); + */ + await uow.CompleteAsync(); + + + #region 修改创建者日期跟id + Guid registerDoctorId = Guid.Parse(_configuration.GetValue("AdminId")); + var registerDoctorEnt = userList.Where(m => m.Name == row["register_doctor"].ToString().Trim()).FirstOrDefault(); + if (registerDoctorEnt != null) + { + registerDoctorId = registerDoctorEnt.Id; + } + string sql_update = $"update patient_register set creator_id='{registerDoctorId}',creation_time='{Convert.ToDateTime(row["register_date"]).ToString("yyyy-MM-dd HH:mm:ss")}'"; + sql_update += $" where id='{patientRegisterId}' "; + await newDb.Ado.ExecuteCommandAsync(sql_update); + #endregion + ; + } + stopwatch3.Stop(); + _logger.LogInformation($"{row["patient_register_id"]}_处理单个人总耗时:{stopwatch3.ElapsedMilliseconds}"); + } + catch (Exception ex) + { + hangPatientRegisterErrorCount++; + _logger.LogInformation($"数据处理失败,人员id为:{row["patient_register_id"]}"); + #region 添加到tb_error_log表 + await oldDb.Ado.ExecuteCommandAsync($"insert into tb_error_log(old_patient_register_id,error_message,addtime) values ('{row["patient_register_id"]}','{ex.StackTrace}',getdate()) "); + #endregion + } + } + + private async Task ImportSingleParallel(List customerOrgRegisterList, List userList, DataRow row) + { + try + { + Stopwatch stopwatch3 = new Stopwatch(); + stopwatch3.Start(); + + using (var scope = _serviceScopeFactory.CreateScope()) + { + var unitOfWorkManager = scope.ServiceProvider.GetRequiredService(); + using (var uow = unitOfWorkManager.Begin(requiresNew: true, isTransactional: true)) + { + using (var oldDb2 = new SqlSugarClient(new ConnectionConfig() + { + ConnectionString = "server=192.168.0.3;uid=sa;pwd=132****6302;database=oldPeis;Encrypt=false;", + DbType = SqlSugar.DbType.SqlServer, + IsAutoCloseConnection = true + })) + { + using (var newDb2 = new SqlSugarClient(new ConnectionConfig() + { + ConnectionString = "Host=192.168.0.188;Port=5432;Database=ShentunPeis;User ID=postgres;Password=St123456;", + DbType = SqlSugar.DbType.PostgreSQL, + IsAutoCloseConnection = true + })) + { + + + Stopwatch stopwatch31 = new Stopwatch(); + stopwatch31.Start(); + string oldPatientRegisterId = row["patient_register_id"].ToString(); + + //检查是否已经导入 + var isDZPatientRegisterTemp = (await _fieldComparisonRepository.GetListAsync(f => f.TableName == "patient_register" + && f.OldKeyValue == oldPatientRegisterId)); + + + if (isDZPatientRegisterTemp.Count > 0) + { + return; + //continue;//并行处理不使用该语句 + } - var dataSumSummaryHeader = new SumSummaryHeader(sumSummaryHeaderId) + + + //档案ID + Guid patientId = Guid.Empty; + + #region 处理档案,未找到档案就生成 + + var patientEnt = await _patientRepository.FirstOrDefaultAsync(m => m.PatientNo == row["patient_id"].ToString()); + if (patientEnt == null) + { + string nationId = null; + if (!string.IsNullOrWhiteSpace(row["nation_id"].ToString())) { - DisplayOrder = 1, - SummaryFlag = '0', - PatientRegisterId = patientRegisterId, - SummaryTitle = "异常结果如下" + var nationEnt = fieldComparisonTempList.Where(m => m.TableName == "nation" && m.OldKeyValue == row["nation_id"].ToString()).FirstOrDefault(); + if (nationEnt == null) + { + nationId = row["nation_id"].ToString(); + } + else + { + nationId = nationEnt.NewKeyValue; + } + } + + Guid autoPatientId = GuidGenerator.Create(); //档案ID + var patientRepository = scope.ServiceProvider.GetRequiredService>(); + var dataPatient = new Patient(autoPatientId) + { + Address = row["address"].ToString(), + BirthDate = string.IsNullOrEmpty(row["birth_date"].ToString()) ? null : Convert.ToDateTime(row["birth_date"].ToString()), + BirthPlaceId = null, + DisplayName = row["name"].ToString(), + Email = row["email"].ToString(), + IdNo = row["id_card_no"].ToString(), + MaritalStatusId = row["marital_status_id"].ToString() == "2" ? '4' : Convert.ToChar(row["marital_status_id"].ToString()), + MedicalCenterId = defaultMedicalCenterId, + MobileTelephone = row["mobile_telephone"].ToString(), + NationId = nationId, + PatientNo = row["patient_id"].ToString(), + PatientPassword = row["patient_password"].ToString(), + PostalCode = row["postalcode"].ToString(), + SexId = ConvertSex(row["sex_id"].ToString()), + SimpleCode = LanguageConverter.GetPYSimpleCode(row["name"].ToString()), + Telephone = row["telephone"].ToString() }; - await _sumSummaryHeaderRepository.InsertAsync(dataSumSummaryHeader); + await patientRepository.InsertAsync(dataPatient, true); + patientId = autoPatientId; + } + else + { + patientId = patientEnt.Id; + } + - Guid sumSummaryContentId = GuidGenerator.Create(); - var dataSumSummaryContent = new SumSummaryContent(sumSummaryContentId) + #endregion + + + + Guid patientRegisterId = GuidGenerator.Create(); //生成登记ID + + #region 转换审核医生ID + Guid? AuditDoctorId = null; + if (!string.IsNullOrWhiteSpace(row["audit_doctor"].ToString())) + { + var userEnt = userList.Where(m => m.Name == row["audit_doctor"].ToString().Trim()).FirstOrDefault(); + if (userEnt != null) { - DisplayOrder = 1, - SumSummaryHeaderId = sumSummaryHeaderId, - SummaryContent = oldSummary - }; + AuditDoctorId = userEnt.Id; + } + } + #endregion + + #region 转换单位分组ID + Guid? customerOrgGroupId = null; + if (!string.IsNullOrWhiteSpace(row["org_group_id"].ToString())) + { + + var customerOrgGroupEnt = fieldComparisonTempList.Where(m => m.TableName == "customer_org_group" && m.OldKeyValue == row["org_group_id"].ToString()).FirstOrDefault(); + if (customerOrgGroupEnt != null) + { + customerOrgGroupId = Guid.Parse(customerOrgGroupEnt.NewKeyValue); + } + + } + #endregion - await _sumSummaryContentRepository.InsertAsync(dataSumSummaryContent); + #region 转换单位ID 部门 + Guid customerOrgId = Guid.Parse(fieldComparisonTempList.Where(m => m.TableName == "customer_org" && m.OldKeyValue == row["org_id"].ToString()).FirstOrDefault().NewKeyValue); + #endregion + #region 转换单位体检次数ID 没有增加默认值 + Guid customerOrgRegisterId = GuidFlag.PersonCustomerOrgRegisterId; + if (row["org_id"].ToString() != "00000") + { + Guid topCustomerOrgId = Guid.Parse(fieldComparisonTempList.Where(m => m.TableName == "customer_org" && m.OldKeyValue == row["org_id"].ToString().Substring(0, 5)).FirstOrDefault().NewKeyValue); + var customerOrgRegisterEnt = customerOrgRegisterList.Where(m => m.CustomerOrgId == topCustomerOrgId + && m.MedicalTimes == (short)Convert.ToInt32(row["org_medical_times"].ToString())).FirstOrDefault(); + if (customerOrgRegisterEnt != null) + { + customerOrgRegisterId = customerOrgRegisterEnt.Id; + } } + #endregion - if (!string.IsNullOrWhiteSpace(oldSuggestion)) + #region 转换体检结论ID + Guid? medicalConclusionId = null; + if (!string.IsNullOrWhiteSpace(row["medical_conclusion_id"].ToString())) { + var medicalConclusionEnt = fieldComparisonTempList.Where(m => m.TableName == "medical_conclusion" + && m.OldKeyValue == row["medical_conclusion_id"].ToString()).FirstOrDefault(); + if (medicalConclusionEnt != null) + { + medicalConclusionId = Guid.Parse(medicalConclusionEnt.NewKeyValue); + } + } + #endregion - Guid sumSuggestionHeaderId = GuidGenerator.Create(); + #region 转换套餐ID + Guid? medicalPackageId = null; + if (!string.IsNullOrWhiteSpace(row["medical_package_id"].ToString())) + { + var medicalPackageEnt = fieldComparisonTempList.Where(m => m.TableName == "medical_package" && m.OldKeyValue == row["medical_package_id"].ToString()).FirstOrDefault(); + if (medicalPackageEnt != null) + { + medicalPackageId = Guid.Parse(medicalPackageEnt.NewKeyValue); + } + } + #endregion - var dataSumSuggestionHeader = new SumSuggestionHeader(sumSuggestionHeaderId) + #region 转换体检类别ID + Guid? medicalTypeId = null; + if (!string.IsNullOrWhiteSpace(row["medical_type_id"].ToString())) + { + var medicalTypeEnt = fieldComparisonTempList.Where(m => m.TableName == "medical_type" && m.OldKeyValue == row["medical_type_id"].ToString()).FirstOrDefault(); + if (medicalTypeEnt != null) { - DisplayOrder = 1, - SuggestionFlag = '0', - PatientRegisterId = patientRegisterId, - SuggestionTitle = "健康建议如下" - }; + medicalTypeId = Guid.Parse(medicalTypeEnt.NewKeyValue); + } + } + #endregion + - await _sumSuggestionHeaderRepository.InsertAsync(dataSumSuggestionHeader); - Guid sumSuggestionContentId = GuidGenerator.Create(); - var dataSumSuggestionContent = new SumSuggestionContent(sumSuggestionContentId) + #region 转换人员类别ID + Guid? personnelTypeId = null; + if (!string.IsNullOrWhiteSpace(row["personnel_type_id"].ToString())) + { + var personnelTypeEnt = fieldComparisonTempList.Where(m => m.TableName == "personnel_type" && m.OldKeyValue == row["personnel_type_id"].ToString()).FirstOrDefault(); + if (personnelTypeEnt != null) { - DisplayOrder = 1, - SuggestionContent = oldSuggestion, - SuggestionType = SuggestionTypeFlag.HealthGuidance, - SumSuggestionHeaderId = sumSuggestionHeaderId - }; + personnelTypeId = Guid.Parse(personnelTypeEnt.NewKeyValue); + } + } + #endregion + + #region 转换总检医生ID + Guid? summaryDoctorId = null; + if (!string.IsNullOrWhiteSpace(row["summary_doctor"].ToString())) + { + var userEnt = userList.Where(m => m.Name == row["summary_doctor"].ToString().Trim()).FirstOrDefault(); + if (userEnt != null) + { + summaryDoctorId = userEnt.Id; + } + } + #endregion + + + #region 上传图片,获取地址 + + string photo = ""; + if (!string.IsNullOrEmpty(row["photograph"].ToString())) + { + photo = UpLoadImg(patientRegisterId, Convert.ToDateTime(row["register_date"].ToString()), (byte[])row["photograph"]); + } + + #endregion + + var data = new PatientRegister(patientRegisterId) + { + BirthDate = string.IsNullOrEmpty(row["birth_date"].ToString()) ? null : Convert.ToDateTime(row["birth_date"].ToString()), + MaritalStatusId = row["marital_status_id"].ToString() == "2" ? '4' : Convert.ToChar(row["marital_status_id"].ToString()), + MedicalCenterId = defaultMedicalCenterId, + SexId = ConvertSex(row["sex_id"].ToString()), + Age = string.IsNullOrWhiteSpace(row["age"].ToString()) ? null : Convert.ToInt16(row["age"].ToString()), + AuditDate = string.IsNullOrWhiteSpace(row["audit_date"].ToString()) ? null : Convert.ToDateTime(row["audit_date"].ToString()), + AuditDoctorId = AuditDoctorId, + CompleteFlag = Convert.ToChar(row["complete_flag"].ToString()), + CustomerOrgGroupId = customerOrgGroupId, + CustomerOrgId = customerOrgId, + CustomerOrgRegisterId = customerOrgRegisterId, + GuidePrintTimes = string.IsNullOrWhiteSpace(row["instruct_print_times"].ToString()) ? (short)0 : Convert.ToInt16(row["instruct_print_times"].ToString()), + InterposeMeasure = null, + IsAudit = string.IsNullOrWhiteSpace(row["audit_flag"].ToString()) ? 'N' : Convert.ToChar(row["audit_flag"].ToString()), + IsLock = string.IsNullOrWhiteSpace(row["lock_flag"].ToString()) ? 'N' : Convert.ToChar(row["lock_flag"].ToString()), + IsMedicalStart = string.IsNullOrWhiteSpace(row["medical_start_flag"].ToString()) ? 'N' : Convert.ToChar(row["medical_start_flag"].ToString()), + IsNameHide = string.IsNullOrWhiteSpace(row["name_encrypt_flag"].ToString()) ? 'N' : Convert.ToChar(row["name_encrypt_flag"].ToString()), + IsPhoneFollow = 'N', + IsRecoverGuide = string.IsNullOrWhiteSpace(row["recover_form_flag"].ToString()) ? 'N' : Convert.ToChar(row["recover_form_flag"].ToString()), + IsUpload = string.IsNullOrWhiteSpace(row["upload_flag"].ToString()) ? 'N' : Convert.ToChar(row["upload_flag"].ToString()), + IsVip = string.IsNullOrWhiteSpace(row["vip_flag"].ToString()) ? 'N' : Convert.ToChar(row["vip_flag"].ToString()), + JobCardNo = row["job_card_no"].ToString(), + JobPost = row["job_post"].ToString(), + JobTitle = row["job_title"].ToString(), + MedicalCardNo = row["medical_card_no"].ToString(), + MedicalConclusionId = medicalConclusionId, + MedicalPackageId = medicalPackageId, + MedicalStartDate = string.IsNullOrEmpty(row["medical_start_date"].ToString()) ? null : Convert.ToDateTime(row["medical_start_date"].ToString()), + MedicalTimes = Convert.ToInt16(row["medical_times"].ToString()), + MedicalTypeId = medicalTypeId, + PatientId = patientId, + PatientName = row["name"].ToString(), + PatientRegisterNo = row["barcode_no"].ToString(), + PersonnelTypeId = personnelTypeId, + Photo = photo, + Remark = row["remark"].ToString(), + ReportPrintTimes = Convert.ToInt16(row["report_print_times"].ToString()), + Salesman = row["salesman"].ToString(), + SexHormoneTermId = null, + SummaryDate = string.IsNullOrEmpty(row["summary_date"].ToString()) ? null : Convert.ToDateTime(row["summary_date"].ToString()), + SummaryDoctorId = summaryDoctorId, + ThirdInfo = row["third_info"].ToString(), + }; + var patientRegisterRepository = scope.ServiceProvider.GetRequiredService>(); + await patientRegisterRepository.InsertAsync(data, true); - await _sumSuggestionContentRepository.InsertAsync(dataSumSuggestionContent); + stopwatch31.Stop(); + _logger.LogInformation($"{row["patient_register_id"]}_第31片段耗时:{stopwatch31.ElapsedMilliseconds}"); + Stopwatch stopwatch32 = new Stopwatch(); + stopwatch32.Start(); + #region 登记的项目、结果、小结 - #region 总症诊断 - var oldSummaryDiagnosis = await oldDb.Ado.GetDataTableAsync($"select diagnosis_id from summary_diagnosis where patient_register_id='{oldPatientRegisterId}' order by display_order asc "); + var oldRegisterAsbitemList = await oldDb2.Ado.GetDataTableAsync($"select * from register_asbitem where patient_register_id='{row["patient_register_id"].ToString()}'"); - if (oldSummaryDiagnosis.Rows.Count > 0) + if (oldRegisterAsbitemList.Rows.Count > 0) + { + foreach (DataRow rowAsbitem in oldRegisterAsbitemList.Rows) { - List sumDiagnosisInsert = new List(); + Stopwatch stopwatch34 = new Stopwatch(); + stopwatch34.Start(); + #region 转换审核医生ID + Guid? auditorUserId = null; + if (!string.IsNullOrWhiteSpace(rowAsbitem["audit_doctor"].ToString())) + { + var userEnt = userList.Where(m => m.Name == rowAsbitem["audit_doctor"].ToString().Trim()).FirstOrDefault(); + if (userEnt != null) + { + auditorUserId = userEnt.Id; + } + } + #endregion - foreach (DataRow summaryDiagnosis in oldSummaryDiagnosis.Rows) + #region 转换检查医生ID + string checkDoctorId = null; + if (!string.IsNullOrWhiteSpace(rowAsbitem["check_doctor"].ToString())) { - var diagnosisEnt = (await _fieldComparisonRepository.GetQueryableAsync()) - .Where(m => m.TableName == "diagnosis" && m.OldKeyValue == summaryDiagnosis["diagnosis_id"].ToString()).FirstOrDefault(); - if (diagnosisEnt != null) + var userEnt = userList.Where(m => m.Name == rowAsbitem["check_doctor"].ToString().Trim()).FirstOrDefault(); + if (userEnt != null) + { + checkDoctorId = userEnt.Id.ToString(); + } + else { + checkDoctorId = rowAsbitem["check_doctor"].ToString().Trim(); + } + } + #endregion + + #region 转换组合项目ID + Guid newAsbitemId = Guid.Parse(fieldComparisonTempList.Where(m => m.TableName == "asbitem" && m.OldKeyValue == rowAsbitem["asbitem_id"].ToString()).FirstOrDefault().NewKeyValue); + #endregion + + stopwatch34.Stop(); + _logger.LogInformation($"{row["patient_register_id"]}_第34片段耗时:{stopwatch34.ElapsedMilliseconds}"); + #region 插入register_check + Guid registerCheckId = GuidGenerator.Create(); + var dataRegisterCheck = new RegisterCheck(registerCheckId) + { + AuditorUserId = auditorUserId, + AuditTime = string.IsNullOrEmpty(rowAsbitem["audit_date"].ToString()) ? null : Convert.ToDateTime(rowAsbitem["audit_date"].ToString()), + CheckDate = string.IsNullOrEmpty(rowAsbitem["check_date"].ToString()) ? null : Convert.ToDateTime(rowAsbitem["check_date"].ToString()), + CheckDoctorId = checkDoctorId, + CheckRequestNo = "", + CheckRequestPrintTimes = (short)1, + CompleteFlag = Convert.ToChar(rowAsbitem["complete_flag"].ToString()), + CriticalRangeValue = null, + //CriticalValueCreateDate = null, + IsCriticalValue = null, + CriticalValueContent = null, + //CriticalValueProcessDate = null, + //CriticalValueProcessDoctor = null, + //CriticalValueProcessFlag = null, + IsAudit = string.IsNullOrEmpty(rowAsbitem["audit_flag"].ToString()) ? 'N' : Convert.ToChar(rowAsbitem["audit_flag"].ToString()), + IsLock = string.IsNullOrEmpty(rowAsbitem["lock_flag"].ToString()) ? 'N' : Convert.ToChar(rowAsbitem["lock_flag"].ToString()), + PatientRegisterId = patientRegisterId, + ThirdInfo = rowAsbitem["third_info"].ToString() + }; + var registerCheckRepository = scope.ServiceProvider.GetRequiredService>(); + + await registerCheckRepository.InsertAsync(dataRegisterCheck, true); + #endregion + - var dataSumDiagnosis = new SumDiagnosis + + #region 插入register_check_asbitem + Guid registerCheckAsbitemId = GuidGenerator.Create(); + + var dataRegisterAsbitem = new RegisterCheckAsbitem(registerCheckAsbitemId) + { + Amount = 1, + IsCharge = Convert.ToChar(rowAsbitem["charge_flag"].ToString()), + AsbitemId = newAsbitemId, + ChargePrice = Convert.ToDecimal(rowAsbitem["price"].ToString()), + GroupPackageId = null, + LisRequestId = null, + PatientRegisterId = patientRegisterId, + PayTypeFlag = Convert.ToChar(rowAsbitem["payment_mode"].ToString()), + RegisterCheckId = registerCheckId, + StandardPrice = Convert.ToDecimal(rowAsbitem["standard_price"].ToString()) + }; + var registerCheckAsbitemRepository = scope.ServiceProvider.GetRequiredService>(); + await registerCheckAsbitemRepository.InsertAsync(dataRegisterAsbitem); + #endregion + + + #region 插入医生小结 + var registerCheckSummaryRepository = scope.ServiceProvider.GetRequiredService>(); + + var oldSummary = rowAsbitem["summary"].ToString(); + if (!string.IsNullOrWhiteSpace(oldSummary)) + { + var dataRegisterCheckSummary = new RegisterCheckSummary + { + RegisterCheckId = registerCheckId, + DisplayOrder = 1, + Summary = oldSummary, + SummaryFlag = '0' + }; + + await registerCheckSummaryRepository.InsertAsync(dataRegisterCheckSummary); + + } + + #endregion + + + + #region 插入明细项目 + var registerCheckItemRepository = scope.ServiceProvider.GetRequiredService>(); + var oldRegisterCheckItemList = await oldDb2.Ado.GetDataTableAsync($"select * from register_item where patient_register_id='{row["patient_register_id"].ToString()}' and asbitem_id='{rowAsbitem["asbitem_id"].ToString()}'"); + + if (oldRegisterCheckItemList.Rows.Count > 0) + { + + foreach (DataRow rowRegisterCheckItem in oldRegisterCheckItemList.Rows) + { + #region 转换项目ID 老转新 + Guid newItemId = Guid.Parse(fieldComparisonTempList.Where(m => m.TableName == "item" && m.OldKeyValue == rowRegisterCheckItem["item_id"].ToString()).FirstOrDefault().NewKeyValue); + + #endregion + + + var dataRegisterCheckItem = new RegisterCheckItem { - DisplayOrder = oldSummaryDiagnosis.Rows.IndexOf(summaryDiagnosis) + 1, - PatientRegisterId = patientRegisterId, - DiagnosisId = Guid.Parse(diagnosisEnt.NewKeyValue), - SumSuggestionHeaderId = sumSuggestionHeaderId + CheckDate = string.IsNullOrEmpty(rowRegisterCheckItem["check_date"].ToString()) ? null : Convert.ToDateTime(rowRegisterCheckItem["check_date"].ToString()), + CriticalValue = null, + CheckDoctorName = rowRegisterCheckItem["check_doctor"].ToString().Trim(), + CriticalRangeValue = null, + ItemId = newItemId, + ReferenceRangeValue = rowRegisterCheckItem["reference_range_value"].ToString(), + RegisterCheckId = registerCheckId, + Result = rowRegisterCheckItem["result"].ToString(), + ResultStatusId = _registerCheckItemManager.GetResultStatusId(rowRegisterCheckItem["result"].ToString(), rowRegisterCheckItem["reference_range_value"].ToString()), + Unit = rowRegisterCheckItem["Unit"].ToString() }; - sumDiagnosisInsert.Add(dataSumDiagnosis); + await registerCheckItemRepository.InsertAsync(dataRegisterCheckItem); + + } + + } + + #endregion + + + + } + } + + #endregion + + stopwatch32.Stop(); + _logger.LogInformation($"{row["patient_register_id"]}_第32片段耗时:{stopwatch32.ElapsedMilliseconds}"); + + + #region 总检建议、综述、总检诊断 + var sumSummaryHeaderRepository = scope.ServiceProvider.GetRequiredService>(); + var sumSummaryContentRepository = scope.ServiceProvider.GetRequiredService>(); + + var sumSuggestionHeaderRepository = scope.ServiceProvider.GetRequiredService>(); + var sumSuggestionContentRepository = scope.ServiceProvider.GetRequiredService>(); + var sumDiagnosisRepository = scope.ServiceProvider.GetRequiredService>(); + + var oldSum = await oldDb2.Ado.GetDataTableAsync($"select summary,suggestion,barcode_no from patient_register where patient_register_id='{oldPatientRegisterId}' "); + + if (oldSum.Rows.Count == 1) + { + string oldSummary = oldSum.Rows[0][0].ToString(); + string oldSuggestion = oldSum.Rows[0][1].ToString(); + + if (!string.IsNullOrWhiteSpace(oldSummary)) + { + + Guid sumSummaryHeaderId = GuidGenerator.Create(); + + var dataSumSummaryHeader = new SumSummaryHeader(sumSummaryHeaderId) + { + DisplayOrder = 1, + SummaryFlag = '0', + PatientRegisterId = patientRegisterId, + SummaryTitle = "异常结果如下" + }; + + await sumSummaryHeaderRepository.InsertAsync(dataSumSummaryHeader); + + Guid sumSummaryContentId = GuidGenerator.Create(); + var dataSumSummaryContent = new SumSummaryContent(sumSummaryContentId) + { + DisplayOrder = 1, + SumSummaryHeaderId = sumSummaryHeaderId, + SummaryContent = oldSummary + }; + + await sumSummaryContentRepository.InsertAsync(dataSumSummaryContent); + + } + + + if (!string.IsNullOrWhiteSpace(oldSuggestion)) + { + + Guid sumSuggestionHeaderId = GuidGenerator.Create(); + + var dataSumSuggestionHeader = new SumSuggestionHeader(sumSuggestionHeaderId) + { + DisplayOrder = 1, + SuggestionFlag = '0', + PatientRegisterId = patientRegisterId, + SuggestionTitle = "健康建议如下" + }; + + await sumSuggestionHeaderRepository.InsertAsync(dataSumSuggestionHeader); + + Guid sumSuggestionContentId = GuidGenerator.Create(); + var dataSumSuggestionContent = new SumSuggestionContent(sumSuggestionContentId) + { + DisplayOrder = 1, + SuggestionContent = oldSuggestion, + SuggestionType = SuggestionTypeFlag.HealthGuidance, + SumSuggestionHeaderId = sumSuggestionHeaderId + }; + + await sumSuggestionContentRepository.InsertAsync(dataSumSuggestionContent); + + + + #region 总症诊断 + var oldSummaryDiagnosis = await oldDb2.Ado.GetDataTableAsync($"select diagnosis_id from summary_diagnosis where patient_register_id='{oldPatientRegisterId}' order by display_order asc "); + + if (oldSummaryDiagnosis.Rows.Count > 0) + { + List sumDiagnosisInsert = new List(); + + foreach (DataRow summaryDiagnosis in oldSummaryDiagnosis.Rows) + { + var diagnosisEnt = fieldComparisonTempList.Where(m => m.TableName == "diagnosis" && m.OldKeyValue == summaryDiagnosis["diagnosis_id"].ToString()).FirstOrDefault(); + if (diagnosisEnt != null) + { + + var dataSumDiagnosis = new SumDiagnosis + { + DisplayOrder = oldSummaryDiagnosis.Rows.IndexOf(summaryDiagnosis) + 1, + PatientRegisterId = patientRegisterId, + DiagnosisId = Guid.Parse(diagnosisEnt.NewKeyValue), + SumSuggestionHeaderId = sumSuggestionHeaderId + }; + + sumDiagnosisInsert.Add(dataSumDiagnosis); + + + } } + if (sumDiagnosisInsert.Any()) + await sumDiagnosisRepository.InsertManyAsync(sumDiagnosisInsert); } + #endregion - if (sumDiagnosisInsert.Any()) - await _sumDiagnosisRepository.InsertManyAsync(sumDiagnosisInsert); } - #endregion } - } + #endregion - #endregion + var fieldComparison = new FieldComparison + { + FieldName = "id", + NewKeyValue = patientRegisterId.ToString(), + OldKeyValue = row["patient_register_id"].ToString(), + TableName = "patient_register" + }; + var fieldComparisonRepository = scope.ServiceProvider.GetRequiredService>(); + await fieldComparisonRepository.InsertAsync(fieldComparison); - var fieldComparison = new FieldComparison - { - FieldName = "id", - NewKeyValue = patientRegisterId.ToString(), - OldKeyValue = row["patient_register_id"].ToString(), - TableName = "patient_register" - }; - await _fieldComparisonRepository.InsertAsync(fieldComparison); + await oldDb2.Ado.ExecuteCommandAsync($"update tb_export_key set keyvalue='{row["patient_register_id"].ToString()}',addtime=getdate(),handlecount+=1 where tablename='patient_register' "); + await uow.CompleteAsync(); - await oldDb.Ado.ExecuteCommandAsync($"update tb_export_key set keyvalue='{row["patient_register_id"].ToString()}',addtime=getdate(),handlecount+=1 where tablename='patient_register' "); - await uow.CompleteAsync(); + #region 修改创建者日期跟id + Guid registerDoctorId = Guid.Parse(_configuration.GetValue("AdminId")); + var registerDoctorEnt = userList.Where(m => m.Name == row["register_doctor"].ToString().Trim()).FirstOrDefault(); + if (registerDoctorEnt != null) + { + registerDoctorId = registerDoctorEnt.Id; + } + string sql_update = $"update patient_register set creator_id='{registerDoctorId}',creation_time='{Convert.ToDateTime(row["register_date"]).ToString("yyyy-MM-dd HH:mm:ss")}'"; + sql_update += $" where id='{patientRegisterId}' "; + await newDb2.Ado.ExecuteCommandAsync(sql_update); + #endregion + } - #region 修改创建者日期跟id - Guid registerDoctorId = Guid.Parse(_configuration.GetValue("AdminId")); - var registerDoctorEnt = userList.Where(m => m.Name == row["register_doctor"].ToString().Trim()).FirstOrDefault(); - if (registerDoctorEnt != null) - { - registerDoctorId = registerDoctorEnt.Id; - } - string sql_update = $"update patient_register set creator_id='{registerDoctorId}',creation_time='{Convert.ToDateTime(row["register_date"]).ToString("yyyy-MM-dd HH:mm:ss")}'"; - sql_update += $" where id='{patientRegisterId}' "; - await newDb.Ado.ExecuteCommandAsync(sql_update); - #endregion } + ; } - catch (Exception ex) - { - hangPatientRegisterErrorCount++; - _logger.LogInformation($"数据处理失败,人员id为:{row["patient_register_id"]}"); - #region 添加到tb_error_log表 - await oldDb.Ado.ExecuteCommandAsync($"insert into tb_error_log(old_patient_register_id,error_message,addtime) values ('{row["patient_register_id"]}','{ex.StackTrace}',getdate()) "); - #endregion - } + ; } - - _logger.LogInformation($"人员数据处理{oldPatientRegisterList.Rows.Count}条,当前总数{hangPatientRegisterCount}"); - if (isGo) - await TransferPatientRegisterWithDetailData(handCount, startdate, enddate, isGo); + stopwatch3.Stop(); + _logger.LogInformation($"{row["patient_register_id"]}_处理单个人总耗时:{stopwatch3.ElapsedMilliseconds}"); } - else + catch (Exception ex) { - _logger.LogInformation("人员数据已处理完"); + hangPatientRegisterErrorCount++; + _logger.LogInformation($"数据处理失败,人员id为:{row["patient_register_id"]}"); + #region 添加到tb_error_log表 + //await oldDb2.Ado.ExecuteCommandAsync($"insert into tb_error_log(old_patient_register_id,error_message,addtime) values ('{row["patient_register_id"]}','{ex.StackTrace}',getdate()) "); + #endregion } - - - } - /// /// 反向导入人员等业务信息 /// @@ -3034,6 +3870,8 @@ namespace Shentun.Peis.CCTJExportDatas { hangPatientRegisterReverseCount++; + + using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true)) { string oldPatientRegisterId = row["patient_register_id"].ToString(); diff --git a/src/Shentun.Peis.Application/Shentun.Peis.Application.csproj b/src/Shentun.Peis.Application/Shentun.Peis.Application.csproj index cf17dd89..2cd96e01 100644 --- a/src/Shentun.Peis.Application/Shentun.Peis.Application.csproj +++ b/src/Shentun.Peis.Application/Shentun.Peis.Application.csproj @@ -28,6 +28,7 @@ + diff --git a/src/Shentun.Peis.Domain/RegisterCheckAsbitems/RegisterCheckAsbitem.cs b/src/Shentun.Peis.Domain/RegisterCheckAsbitems/RegisterCheckAsbitem.cs index 52be0422..f3294756 100644 --- a/src/Shentun.Peis.Domain/RegisterCheckAsbitems/RegisterCheckAsbitem.cs +++ b/src/Shentun.Peis.Domain/RegisterCheckAsbitems/RegisterCheckAsbitem.cs @@ -153,5 +153,21 @@ namespace Shentun.Peis.Models //{ // return new object[] { RegisterCheckId, AsbitemId }; //} + public void SetCreateId(Guid? id) + { + CreatorId = id; + } + public void SetCreationTime(DateTime dt) + { + CreationTime = dt; + } + public void SetLastModifierId(Guid? id) + { + LastModifierId = id; + } + public void SetLastModificationTime(DateTime dt) + { + LastModificationTime = dt; + } } } diff --git a/src/Shentun.Peis.Domain/RegisterCheckItems/RegisterCheckItem.cs b/src/Shentun.Peis.Domain/RegisterCheckItems/RegisterCheckItem.cs index 824934ae..870e922a 100644 --- a/src/Shentun.Peis.Domain/RegisterCheckItems/RegisterCheckItem.cs +++ b/src/Shentun.Peis.Domain/RegisterCheckItems/RegisterCheckItem.cs @@ -189,6 +189,22 @@ namespace Shentun.Peis.Models [InverseProperty("RegisterCheckItems")] public virtual ResultStatus ResultStatus { get; set; } = null!; + public void SetCreateId(Guid? id) + { + CreatorId = id; + } + public void SetCreationTime(DateTime dt) + { + CreationTime = dt; + } + public void SetLastModifierId(Guid? id) + { + LastModifierId = id; + } + public void SetLastModificationTime(DateTime dt) + { + LastModificationTime = dt; + } public override object[] GetKeys() { return new object[] { RegisterCheckId, ItemId }; diff --git a/src/Shentun.Peis.Domain/RegisterCheckSummarys/RegisterCheckSummary.cs b/src/Shentun.Peis.Domain/RegisterCheckSummarys/RegisterCheckSummary.cs index 0a172170..b4fc7521 100644 --- a/src/Shentun.Peis.Domain/RegisterCheckSummarys/RegisterCheckSummary.cs +++ b/src/Shentun.Peis.Domain/RegisterCheckSummarys/RegisterCheckSummary.cs @@ -58,5 +58,22 @@ namespace Shentun.Peis.Models //{ // return new object[] { RegisterCheckSummaryId }; //} + + public void SetCreateId(Guid? id) + { + CreatorId = id; + } + public void SetCreationTime(DateTime dt) + { + CreationTime = dt; + } + public void SetLastModifierId(Guid? id) + { + LastModifierId = id; + } + public void SetLastModificationTime(DateTime dt) + { + LastModificationTime = dt; + } } } diff --git a/src/Shentun.Peis.Domain/RegisterChecks/RegisterCheck.cs b/src/Shentun.Peis.Domain/RegisterChecks/RegisterCheck.cs index 46bbf794..0a9e5c27 100644 --- a/src/Shentun.Peis.Domain/RegisterChecks/RegisterCheck.cs +++ b/src/Shentun.Peis.Domain/RegisterChecks/RegisterCheck.cs @@ -360,6 +360,23 @@ namespace Shentun.Peis.Models [InverseProperty(nameof(RegisterCheckPacs.RegisterCheck))] public virtual ICollection RegisterCheckPacss { get; set; } + public void SetCreateId(Guid? id) + { + CreatorId = id; + } + public void SetCreationTime(DateTime dt) + { + CreationTime = dt; + } + public void SetLastModifierId(Guid? id) + { + LastModifierId = id; + } + public void SetLastModificationTime(DateTime dt) + { + LastModificationTime = dt; + } + //[ForeignKey(nameof(RegisterAsbitemId))] //[InverseProperty("RegisterChecks")]