From 02ef623ab467ca4dde270fca7ec21dfd3ba4cb60 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Mon, 25 Apr 2022 16:37:26 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=9C=AB=E6=AC=A1=E8=AE=BF?= =?UTF-8?q?=E8=A7=86=E8=A7=A6=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- IRaCIS.Core.API/_ServiceExtensions/EFSetup.cs | 2 +- .../IRaCIS.Core.Application.xml | 16 +++++ .../Service/Visit/SubjectVisitService.cs | 22 ------ .../Triggers/SubjectVisitFinalVisitTrigger.cs | 68 +++++++++++++++++++ ...eDateTrigger.cs => SubjectVisitTrigger.cs} | 12 +++- 5 files changed, 94 insertions(+), 26 deletions(-) create mode 100644 IRaCIS.Core.Application/Triggers/SubjectVisitFinalVisitTrigger.cs rename IRaCIS.Core.Application/Triggers/{SubjectVisitImageDateTrigger.cs => SubjectVisitTrigger.cs} (90%) diff --git a/IRaCIS.Core.API/_ServiceExtensions/EFSetup.cs b/IRaCIS.Core.API/_ServiceExtensions/EFSetup.cs index 2dcfa2add..6db0c184c 100644 --- a/IRaCIS.Core.API/_ServiceExtensions/EFSetup.cs +++ b/IRaCIS.Core.API/_ServiceExtensions/EFSetup.cs @@ -29,7 +29,7 @@ namespace IRaCIS.Core.API //options.UseTriggers(triggerOptions => triggerOptions.AddTrigger()); - options.UseTriggers(triggerOptions => triggerOptions.AddAssemblyTriggers(typeof(SubjectVisitImageDateTrigger).Assembly)); + options.UseTriggers(triggerOptions => triggerOptions.AddAssemblyTriggers(typeof(SubjectVisitTrigger).Assembly)); }); diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml index a09368e39..29143502f 100644 --- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml +++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml @@ -1710,6 +1710,22 @@ + + + 处理 访视 末次评估 会影响Subject 状态 + + + + + 处理 访视 1、提交状态 2、执行状态 3、最早最晚 拍片日期 + + + + 处理提交状态 + + + 处理拍片日期 + 构造函数注入 diff --git a/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs b/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs index b173a46e2..6de03e7c8 100644 --- a/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs +++ b/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs @@ -97,28 +97,6 @@ namespace IRaCIS.Core.Application.Services var subject = (await _subjectRepository.FirstOrDefaultAsync(t => t.Id == svCommand.SubjectId)).IfNullThrowException(); - if (svCommand.IsFinalVisit) - { - - if (await _subjectVisitRepository.AnyAsync(t => t.SubjectId == svCommand.SubjectId && t.VisitNum > svCommand.VisitNum && t.SubmitState == SubmitStateEnum.ToSubmit)) - { - throw new BusinessValidationFailedException("该受试者此访视后有影像上传,该访视不允许设置为末次访视"); - } - - - subject.Status = SubjectStatus.OutOfVisit; - - //末次访视后的 访视设置为不可用 - await _subjectVisitRepository.BatchUpdateAsync(t => t.SubjectId == svCommand.SubjectId && t.VisitNum > svCommand.VisitNum, u => new SubjectVisit() { VisitExecuted = VisitExecutedEnum.Unavailable }); - - } - else - { - //回退 - subject.Status = SubjectStatus.OnVisit; - - await _subjectVisitRepository.BatchUpdateAsync(t => t.SubjectId == svCommand.SubjectId && t.VisitExecuted == VisitExecutedEnum.Unavailable, u => new SubjectVisit() { VisitExecuted = VisitExecutedEnum.UnExecuted }); - } diff --git a/IRaCIS.Core.Application/Triggers/SubjectVisitFinalVisitTrigger.cs b/IRaCIS.Core.Application/Triggers/SubjectVisitFinalVisitTrigger.cs new file mode 100644 index 000000000..ac1015e3a --- /dev/null +++ b/IRaCIS.Core.Application/Triggers/SubjectVisitFinalVisitTrigger.cs @@ -0,0 +1,68 @@ +using EntityFrameworkCore.Triggered; +using IRaCIS.Core.Domain.Share; +using IRaCIS.Core.Infrastructure; + +namespace IRaCIS.Core.Application.Triggers +{ + /// + /// 处理 访视 末次评估 会影响Subject 状态 + /// + public class SubjectVisitFinalVisitTrigger : IAfterSaveTrigger + { + private readonly IRepository _subjectVisitRepository; + private readonly IRepository _subjectRepository; + + public SubjectVisitFinalVisitTrigger(IRepository subjectVisitRepository, IRepository subjectRepository) + { + _subjectVisitRepository = subjectVisitRepository; + _subjectRepository = subjectRepository; + } + + public async Task AfterSave(ITriggerContext context, CancellationToken cancellationToken) + { + + var subjectVisit = context.Entity; + + + if (context.ChangeType == ChangeType.Modified) + { + + // 修改了IsFinalVisit + if (context.UnmodifiedEntity.IsFinalVisit != subjectVisit.IsFinalVisit) + { + if (context.Entity.IsFinalVisit) + { + if (await _subjectVisitRepository.AnyAsync(t => t.SubjectId == subjectVisit.SubjectId && t.VisitNum > subjectVisit.VisitNum && t.SubmitState == SubmitStateEnum.ToSubmit)) + { + throw new BusinessValidationFailedException("该受试者此访视后有影像上传,该访视不允许设置为末次访视"); + } + + await _subjectRepository.BatchUpdateAsync(t => t.Id == subjectVisit.SubjectId, + u => new Subject() { Status = SubjectStatus.OutOfVisit }); + + + //末次访视后的 访视设置为不可用 + await _subjectVisitRepository.BatchUpdateAsync(t => t.SubjectId == subjectVisit.SubjectId && t.VisitNum > subjectVisit.VisitNum, u => new SubjectVisit() { VisitExecuted = VisitExecutedEnum.Unavailable }); + } + else + { + //回退 + + await _subjectRepository.BatchUpdateAsync(t => t.Id == subjectVisit.SubjectId, + u => new Subject() { Status = SubjectStatus.OnVisit }); + + await _subjectVisitRepository.BatchUpdateAsync(t => t.SubjectId == subjectVisit.SubjectId && t.VisitExecuted == VisitExecutedEnum.Unavailable, u => new SubjectVisit() { VisitExecuted = VisitExecutedEnum.UnExecuted }); + } + + + } + + } + + + + } + + + } +} \ No newline at end of file diff --git a/IRaCIS.Core.Application/Triggers/SubjectVisitImageDateTrigger.cs b/IRaCIS.Core.Application/Triggers/SubjectVisitTrigger.cs similarity index 90% rename from IRaCIS.Core.Application/Triggers/SubjectVisitImageDateTrigger.cs rename to IRaCIS.Core.Application/Triggers/SubjectVisitTrigger.cs index 746a29b7d..044e4b62f 100644 --- a/IRaCIS.Core.Application/Triggers/SubjectVisitImageDateTrigger.cs +++ b/IRaCIS.Core.Application/Triggers/SubjectVisitTrigger.cs @@ -3,11 +3,14 @@ using IRaCIS.Core.Domain.Share; namespace IRaCIS.Core.Application.Triggers { - public class SubjectVisitImageDateTrigger : IAfterSaveTrigger, IAfterSaveTrigger + /// + /// 处理 访视 1、提交状态 2、执行状态 3、最早最晚 拍片日期 + /// + public class SubjectVisitTrigger : IAfterSaveTrigger, IAfterSaveTrigger { private readonly IRepository _subjectVisitRepository; - public SubjectVisitImageDateTrigger(IRepository subjectVisitRepository) + public SubjectVisitTrigger(IRepository subjectVisitRepository) { _subjectVisitRepository = subjectVisitRepository; } @@ -20,6 +23,7 @@ namespace IRaCIS.Core.Application.Triggers if (context.ChangeType == ChangeType.Added || context.ChangeType == ChangeType.Modified) { await UpdateSubjectVisitImageDateAsync(context.Entity.SubjectVisitId); + await _subjectVisitRepository.BatchUpdateAsync(t => t.Id == subjectVisitId, u => new SubjectVisit() { VisitExecuted = VisitExecutedEnum.Executed @@ -55,6 +59,8 @@ namespace IRaCIS.Core.Application.Triggers } + /// 处理提交状态 + public async Task UpdateSubjectVisitSubmitStateAsync(Guid subjectVisitId) { @@ -70,7 +76,7 @@ namespace IRaCIS.Core.Application.Triggers } } - + /// 处理拍片日期 private async Task UpdateSubjectVisitImageDateAsync(Guid subjectVisitId) { var svTime = _subjectVisitRepository.Where(t => t.Id == subjectVisitId).Select(t => new