diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml index 26d9aad82..7f6c1b47c 100644 --- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml +++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml @@ -8614,6 +8614,13 @@ 处理 访视 末次评估 会影响Subject 状态 + + + 处理生成阅片期 以及后续访视状态 + + + + 处理 访视 1、提交状态 2、执行状态 3、最早最晚 拍片日期 diff --git a/IRaCIS.Core.Application/Triggers/SubjectVisitFinalVisitTrigger.cs b/IRaCIS.Core.Application/Triggers/SubjectVisitFinalVisitTrigger.cs index 8164b7972..4f9665048 100644 --- a/IRaCIS.Core.Application/Triggers/SubjectVisitFinalVisitTrigger.cs +++ b/IRaCIS.Core.Application/Triggers/SubjectVisitFinalVisitTrigger.cs @@ -56,13 +56,9 @@ namespace IRaCIS.Core.Application.Triggers { await VerifyDealFinalVisitAsync(subjectVisit); - await _subjectRepository.BatchUpdateNoTrackingAsync(t => t.Id == subjectVisit.SubjectId, - u => new Subject() { Status = SubjectStatus.OutOfVisit, FinalSubjectVisitId = subjectVisit.Id }); + await DealGenerateReadModuleAndSubjectVisit(subjectVisit); - - //末次访视后的 访视设置为不可用 - await _subjectVisitRepository.BatchUpdateNoTrackingAsync(t => t.SubjectId == subjectVisit.SubjectId && t.VisitNum > subjectVisit.VisitNum && - t.VisitExecuted == VisitExecutedEnum.UnExecuted, u => new SubjectVisit() { VisitExecuted = VisitExecutedEnum.Unavailable }); + } else { @@ -73,18 +69,6 @@ namespace IRaCIS.Core.Application.Triggers await _subjectVisitRepository.BatchUpdateNoTrackingAsync(t => t.SubjectId == subjectVisit.SubjectId && t.VisitExecuted == VisitExecutedEnum.Unavailable, u => new SubjectVisit() { VisitExecuted = VisitExecutedEnum.UnExecuted }); - //var readingPeriodSet =await _readingPeriodSetRepository.Where(x => x.TrialId == subjectVisit.TrialId && x.IsGlobal).FirstOrDefaultAsync(); - - //if (readingPeriodSet != null) - //{ - // await _readingPeriodPlanRepository.DeleteFromQueryAsync(x => x.ReadingPeriodSetId == readingPeriodSet.Id && x.SubjectVisitId == subjectVisit.Id); - // await _readModuleRepository.UpdatePartialFromQueryAsync(x => x.SubjectVisitId == subjectVisit.Id && x.ReadingPeriodSetId == readingPeriodSet.Id,x=> new ReadModule() { - // IsDeleted = true - // }); - // await _readModuleRepository.SaveChangesAsync(); - //} - - } } @@ -93,19 +77,29 @@ namespace IRaCIS.Core.Application.Triggers else if (context.ChangeType == ChangeType.Added && subjectVisit.IsFinalVisit) { await VerifyDealFinalVisitAsync(subjectVisit); + + await DealGenerateReadModuleAndSubjectVisit(subjectVisit); } } - private async Task VerifyDealFinalVisitAsync(SubjectVisit subjectVisit) + /// + /// 处理生成阅片期 以及后续访视状态 + /// + /// + /// + private async Task DealGenerateReadModuleAndSubjectVisit(SubjectVisit subjectVisit) { - if (await _subjectVisitRepository.AnyAsync(t => t.SubjectId == subjectVisit.SubjectId && t.VisitNum > subjectVisit.VisitNum && - (t.SubmitState == SubmitStateEnum.ToSubmit || t.SubmitState == SubmitStateEnum.Submitted))) - { - throw new BusinessValidationFailedException("该受试者已有后续访视已上传影像或已提交,当前访视不允许设置为末次访视。"); - } + + await _subjectRepository.BatchUpdateNoTrackingAsync(t => t.Id == subjectVisit.SubjectId, + u => new Subject() { Status = SubjectStatus.OutOfVisit, FinalSubjectVisitId = subjectVisit.Id }); - #region 末次访视生成阅片器和任务 更换位置 废弃 + //末次访视后的 访视设置为不可用 + await _subjectVisitRepository.BatchUpdateNoTrackingAsync(t => t.SubjectId == subjectVisit.SubjectId && t.VisitNum > subjectVisit.VisitNum && + t.VisitExecuted == VisitExecutedEnum.UnExecuted, u => new SubjectVisit() { VisitExecuted = VisitExecutedEnum.Unavailable }); + + + #region 末次访视生成阅片器和任务 var trialId = subjectVisit.TrialId; @@ -121,34 +115,6 @@ namespace IRaCIS.Core.Application.Triggers var criterionList = await _repository.Where(x => x.TrialId == trialId && x.ReadingInfoSignTime != null && x.IsConfirm && x.IsReadingPeriod && x.IsReadingTaskViewInOrder).ToListAsync(); foreach (var item in criterionList) { - //ReadingPeriodSet? readingPeriodSet = await _readingPeriodSetRepository.FirstOrDefaultNoTrackingAsync(x => x.TrialId == trialId && x.IsGlobal && x.TrialReadingCriterionId == item.Id); - - //if (readingPeriodSet == null) - //{ - // readingPeriodSet = new ReadingPeriodSet() - // { - // Id = NewId.NextGuid(), - // ReadingScope = ReadingScopeEnum.All, - // ReadingSetType = ReadingSetType.ImageReading, - // IsTakeEffect = ReadingPeriodStatus.TakeEffect, - // ReadingPeriodName = "Global", - // TrialId = trialId, - // EffectOfTime = DateTime.Now, - // IsGlobal = true, - // TrialReadingCriterionId = item.Id, - // }; - - // await _readingPeriodSetRepository.AddAsync(readingPeriodSet); - - //} - - //await _readingPeriodPlanRepository.AddAsync(new ReadingPeriodPlan() - //{ - // SubjectVisitId = subjectVisitId, - // ReadingPeriodSetId = readingPeriodSet.Id, - //}); - - var readModule = await _readModuleRepository.Where(x => x.ReadingSetType == ReadingSetType.ImageReading && x.TrialReadingCriterionId == item.Id && x.SubjectVisitId == subjectVisitId).FirstOrDefaultAsync(); @@ -207,7 +173,15 @@ namespace IRaCIS.Core.Application.Triggers #endregion + } + private async Task VerifyDealFinalVisitAsync(SubjectVisit subjectVisit) + { + if (await _subjectVisitRepository.AnyAsync(t => t.SubjectId == subjectVisit.SubjectId && t.VisitNum > subjectVisit.VisitNum && + (t.SubmitState == SubmitStateEnum.ToSubmit || t.SubmitState == SubmitStateEnum.Submitted))) + { + throw new BusinessValidationFailedException("该受试者已有后续访视已上传影像或已提交,当前访视不允许设置为末次访视。"); + } } }