diff --git a/src/Shentun.Peis.Application/RegisterChecks/RegisterCheckAppService.cs b/src/Shentun.Peis.Application/RegisterChecks/RegisterCheckAppService.cs index 7ce24b7..48cdf66 100644 --- a/src/Shentun.Peis.Application/RegisterChecks/RegisterCheckAppService.cs +++ b/src/Shentun.Peis.Application/RegisterChecks/RegisterCheckAppService.cs @@ -25,6 +25,7 @@ using Volo.Abp.Domain.Repositories; using Volo.Abp.Guids; using Volo.Abp.Identity; using Volo.Abp.ObjectMapping; +using Volo.Abp.Uow; using Volo.Abp.Users; using static Microsoft.EntityFrameworkCore.DbLoggerCategory; @@ -58,6 +59,8 @@ namespace Shentun.Peis.RegisterChecks private readonly IRepository _lisRequestRepository; private readonly FollowUpAppService _followUpAppService; private readonly IRepository _doctorSignInRepository; + private readonly IRepository _guideTypeRepository; + private readonly UnitOfWorkManager _unitOfWorkManager; public RegisterCheckAppService(IRepository registerCheckRepository, IRepository registerCheckItemRepository, @@ -78,7 +81,9 @@ namespace Shentun.Peis.RegisterChecks IRepository itemTypeRepository, IRepository lisRequestRepository, FollowUpAppService followUpAppService, - IRepository doctorSignInRepository) + IRepository doctorSignInRepository, + IRepository guideTypeRepository, + UnitOfWorkManager unitOfWorkManager) { _registerCheckRepository = registerCheckRepository; _userRepository = userRepository; @@ -100,6 +105,8 @@ namespace Shentun.Peis.RegisterChecks _lisRequestRepository = lisRequestRepository; _followUpAppService = followUpAppService; _doctorSignInRepository = doctorSignInRepository; + _guideTypeRepository = guideTypeRepository; + _unitOfWorkManager = unitOfWorkManager; } /// @@ -580,7 +587,10 @@ namespace Shentun.Peis.RegisterChecks join registerCheck in await _registerCheckRepository.GetQueryableAsync() on patientRegister.Id equals registerCheck.PatientRegisterId join registerCheckAsbitem in await _registerCheckAsbitemRepository.GetQueryableAsync() on registerCheck.Id equals registerCheckAsbitem.RegisterCheckId join asbitem in await _asbitemRepository.GetQueryableAsync() on registerCheckAsbitem.AsbitemId equals asbitem.Id + join itemType in await _itemTypeRepository.GetQueryableAsync() on asbitem.ItemTypeId equals itemType.Id + join guideType in await _guideTypeRepository.GetQueryableAsync() on itemType.GuidTypeId equals guideType.Id where input.PatientRegisterIds.Contains(patientRegister.Id) && asbitem.IsCheck == 'Y' + orderby guideType.DisplayOrder, asbitem.DisplayOrder select new SimpleAsbitemDto { AsbitemId = registerCheckAsbitem.AsbitemId, @@ -656,28 +666,85 @@ namespace Shentun.Peis.RegisterChecks if (!input.CheckDoctorDetail.Any()) throw new UserFriendlyException("需要修改的信息不能为空"); - var registerCheckAsbitemList = (from patientRegister in await _patientRegisterRepository.GetQueryableAsync() - join registerCheck in await _registerCheckRepository.GetQueryableAsync() on patientRegister.Id equals registerCheck.PatientRegisterId - join registerCheckAsbitem in await _registerCheckAsbitemRepository.GetQueryableAsync() on registerCheck.Id equals registerCheckAsbitem.RegisterCheckId - where input.PatientRegisterIds.Contains(patientRegister.Id) - select registerCheckAsbitem).ToList(); + //每次处理100条 + int handNum = 100; - if (registerCheckAsbitemList.Any()) + //处理多少次 + int handCount = Convert.ToInt32(Math.Ceiling(Convert.ToDecimal(input.PatientRegisterIds.Count) / Convert.ToDecimal(handNum))); + + for (int i = 0; i < handCount; i++) { - foreach (var registerCheckAsbitem in registerCheckAsbitemList) + using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true)) { - var checkDoctorEnt = input.CheckDoctorDetail.FirstOrDefault(f => f.AsbitemId == registerCheckAsbitem.AsbitemId); - if (checkDoctorEnt != null) + + var tempPatientRegisterIds = input.PatientRegisterIds.Skip(i * handNum).Take(handNum).ToList(); + + var registerCheckAsbitemList = (from patientRegister in await _patientRegisterRepository.GetQueryableAsync() + join registerCheck in await _registerCheckRepository.GetQueryableAsync() on patientRegister.Id equals registerCheck.PatientRegisterId + join registerCheckAsbitem in await _registerCheckAsbitemRepository.GetQueryableAsync() on registerCheck.Id equals registerCheckAsbitem.RegisterCheckId + where tempPatientRegisterIds.Contains(patientRegister.Id) + select registerCheckAsbitem).ToList(); + + if (registerCheckAsbitemList.Any()) { - var registerCheckEnt = await _registerCheckRepository.FirstOrDefaultAsync(f => f.Id == registerCheckAsbitem.RegisterCheckId); - if (registerCheckEnt != null) + foreach (var registerCheckAsbitem in registerCheckAsbitemList) { - registerCheckEnt.CheckDoctorId = checkDoctorEnt.CheckDoctorId; - await _registerCheckRepository.UpdateAsync(registerCheckEnt); + var checkDoctorEnt = input.CheckDoctorDetail.FirstOrDefault(f => f.AsbitemId == registerCheckAsbitem.AsbitemId); + if (checkDoctorEnt != null) + { + var registerCheckEnt = await _registerCheckRepository.FirstOrDefaultAsync(f => f.Id == registerCheckAsbitem.RegisterCheckId); + if (registerCheckEnt != null) + { + registerCheckEnt.CheckDoctorId = checkDoctorEnt.CheckDoctorId; + await _registerCheckRepository.UpdateAsync(registerCheckEnt); + } + } } } + + + await uow.CompleteAsync(); } } + + //using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true)) + //{ + // var isUploadReport = WebDb0520.Ado.GetDataTable($"select patient_register_id,report_file from patient_register where patient_register_id='{item}' and report_file is null ").Rows.Count; + // if (isUploadReport == 1) + // { + // await SyncPatientRegisterReportByPatientRegisterIdAsync(new PatientRegisterIdInputDto + // { + // PatientRegisterId = item + // }); + // } + + // await uow.CompleteAsync(); + //} + + + + //var registerCheckAsbitemList = (from patientRegister in await _patientRegisterRepository.GetQueryableAsync() + // join registerCheck in await _registerCheckRepository.GetQueryableAsync() on patientRegister.Id equals registerCheck.PatientRegisterId + // join registerCheckAsbitem in await _registerCheckAsbitemRepository.GetQueryableAsync() on registerCheck.Id equals registerCheckAsbitem.RegisterCheckId + // where input.PatientRegisterIds.Contains(patientRegister.Id) + // select registerCheckAsbitem).ToList(); + + //if (registerCheckAsbitemList.Any()) + //{ + // foreach (var registerCheckAsbitem in registerCheckAsbitemList) + // { + // var checkDoctorEnt = input.CheckDoctorDetail.FirstOrDefault(f => f.AsbitemId == registerCheckAsbitem.AsbitemId); + // if (checkDoctorEnt != null) + // { + // var registerCheckEnt = await _registerCheckRepository.FirstOrDefaultAsync(f => f.Id == registerCheckAsbitem.RegisterCheckId); + // if (registerCheckEnt != null) + // { + // registerCheckEnt.CheckDoctorId = checkDoctorEnt.CheckDoctorId; + // await _registerCheckRepository.UpdateAsync(registerCheckEnt); + // } + // } + // } + //} }