68 lines
2.7 KiB
C#
68 lines
2.7 KiB
C#
using EntityFrameworkCore.Triggered;
|
|
using IRaCIS.Core.Domain.Share;
|
|
using IRaCIS.Core.Infrastructure;
|
|
|
|
namespace IRaCIS.Core.Application.Triggers
|
|
{
|
|
/// <summary>
|
|
/// 处理 访视 末次评估 会影响Subject 状态
|
|
/// </summary>
|
|
public class SubjectVisitFinalVisitTrigger : IAfterSaveTrigger<SubjectVisit>
|
|
{
|
|
private readonly IRepository<SubjectVisit> _subjectVisitRepository;
|
|
private readonly IRepository<Subject> _subjectRepository;
|
|
|
|
public SubjectVisitFinalVisitTrigger(IRepository<SubjectVisit> subjectVisitRepository, IRepository<Subject> subjectRepository)
|
|
{
|
|
_subjectVisitRepository = subjectVisitRepository;
|
|
_subjectRepository = subjectRepository;
|
|
}
|
|
|
|
public async Task AfterSave(ITriggerContext<SubjectVisit> 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.BatchUpdateNoTrackingAsync(t => t.Id == subjectVisit.SubjectId,
|
|
u => new Subject() { Status = SubjectStatus.OutOfVisit });
|
|
|
|
|
|
//末次访视后的 访视设置为不可用
|
|
await _subjectVisitRepository.BatchUpdateNoTrackingAsync(t => t.SubjectId == subjectVisit.SubjectId && t.VisitNum > subjectVisit.VisitNum, u => new SubjectVisit() { VisitExecuted = VisitExecutedEnum.Unavailable });
|
|
}
|
|
else
|
|
{
|
|
//回退
|
|
|
|
await _subjectRepository.BatchUpdateNoTrackingAsync(t => t.Id == subjectVisit.SubjectId,
|
|
u => new Subject() { Status = SubjectStatus.OnVisit });
|
|
|
|
await _subjectVisitRepository.BatchUpdateNoTrackingAsync(t => t.SubjectId == subjectVisit.SubjectId && t.VisitExecuted == VisitExecutedEnum.Unavailable, u => new SubjectVisit() { VisitExecuted = VisitExecutedEnum.UnExecuted });
|
|
}
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
} |