using AutoMapper; using EntityFrameworkCore.Triggered; using IRaCIS.Core.Domain.Share; using MassTransit; namespace IRaCIS.Core.Application.Triggers { /// /// /// public class SubjectStateTrigger : IAfterSaveTrigger { private readonly IRepository _subjectVisitRepository; private readonly IRepository _repository; private readonly IMapper _mapper; public SubjectStateTrigger(IRepository subjectVisitRepository, IRepository repository, IMapper mapper) { _subjectVisitRepository = subjectVisitRepository; _repository = repository; _mapper = mapper; } public async Task AfterSave(ITriggerContext context, CancellationToken cancellationToken) { if (context.ChangeType == ChangeType.Modified ) { //Site变更 if ( context.Entity.SiteId != context.UnmodifiedEntity.SiteId) { var subjectId = context.Entity.Id; var siteId = context.Entity.SiteId; await _repository.BatchUpdateAsync(t => t.SubjectId == subjectId, u => new SubjectVisit() { SiteId = siteId }); await _repository.BatchUpdateAsync(t => t.SubjectId == subjectId, u => new DicomStudy() { SiteId = siteId }); #region 废弃 ////如果访视结束了 需要删除计划外未执行的访视 //if (mapedSubject.Status == SubjectStatus.EndOfVisit) //{ // await _repository.DeleteFromQueryAsync(t => t.VisitExecuted == VisitExecutedEnum.UnExecuted && t.SubjectId == mapedSubject.Id && t.InPlan == false); //} ////如果是出组了 将受试者未执行的 设置为不可用 //if (mapedSubject.Status == SubjectStatus.OutOfEnrollment) //{ // await _repository.UpdateFromQueryAsync(t => t.SubjectId == mapedSubject.Id && t.VisitExecuted == VisitExecutedEnum.UnExecuted, u => new SubjectVisit() { VisitExecuted = VisitExecutedEnum.Unavailable }); //} #endregion } } } } }