using AutoMapper; using EntityFrameworkCore.Triggered; using MassTransit; namespace IRaCIS.Core.Application.Triggers { /// /// 添加访视计划 要给改项目下的所有Subject 添加该访视 /// public class AddSubjectTrigger( IRepository _subjectVisitRepository, IRepository _visitStageRepository, IRepository _trialRepository, IMapper _mapper) : IBeforeSaveTrigger { public async Task BeforeSave(ITriggerContext context, CancellationToken cancellationToken) { var subject = context.Entity; if (context.ChangeType == ChangeType.Added) { //添加受试者的时候,获取访视计划列表,添加到受试者访视表。 var visitPlanList = await _visitStageRepository.Where(t => t.TrialId == subject.TrialId && t.IsConfirmed).ToListAsync(); var svList = _mapper.Map>(visitPlanList); var IsEnrollementQualificationConfirm = await _trialRepository.Where(t => t.Id == subject.TrialId).Select(u => u.IsEnrollementQualificationConfirm).FirstOrDefaultAsync(); svList.ForEach(t => { t.Subject = subject; t.SubjectId = subject.Id; t.TrialId = subject.TrialId; t.TrialSiteId = subject.TrialSiteId; t.IsEnrollmentConfirm = t.IsBaseLine ? IsEnrollementQualificationConfirm : false; t.Id = NewId.NextGuid(); }); await _subjectVisitRepository.AddRangeAsync(svList); await _subjectVisitRepository.SaveChangesAsync(); } } } }