using AutoMapper; using EntityFrameworkCore.Triggered; using IRaCIS.Core.Domain.Share; using MassTransit; namespace IRaCIS.Core.Application.Triggers { /// /// 添加检查批次计划 要给改项目下的所有Subject 添加该检查批次 /// public class AddSubjectTrigger : IBeforeSaveTrigger { private readonly IRepository _subjectVisitRepository; private readonly IRepository _clinicalDataTrialSetRepository; private readonly IRepository _readingClinicalDataRepository; private readonly IRepository _visitStageRepository; private readonly IRepository _trialRepository; private readonly IMapper _mapper; public AddSubjectTrigger(IRepository subjectVisitRepository, IRepository clinicalDataTrialSetRepository, IRepository readingClinicalDataRepository, IMapper mapper, IRepository visitStageRepository, IRepository trialRepository) { _subjectVisitRepository = subjectVisitRepository; this._clinicalDataTrialSetRepository = clinicalDataTrialSetRepository; this._readingClinicalDataRepository = readingClinicalDataRepository; _trialRepository = trialRepository; _visitStageRepository = visitStageRepository; _mapper = mapper; } 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.SiteId = subject.SiteId; t.IsEnrollmentConfirm = t.IsBaseLine ? IsEnrollementQualificationConfirm : false; t.Id = NewId.NextGuid(); }); await _subjectVisitRepository.AddRangeAsync(svList); await _subjectVisitRepository.SaveChangesAsync(); #region 在f检查批次计划确认的时候处理 给subject添加检查批次计划 ////已添加患者 都不存在该新增的计划名称 那么该项目所有患者都增加一个检查批次记录 //if (!await _subjectVisitRepository.AnyAsync(t => t.VisitName == visitPlan.VisitName && t.TrialId == visitPlan.TrialId)) //{ // var subjectSVS = await _subjectVisitRepository.Where(t => t.TrialId == visitPlan.TrialId).Select(t => new { t.SubjectId, t.SiteId, t.IsFinalVisit }).Distinct().ToListAsync(); // var subjects = subjectSVS.Select(t => new { t.SubjectId, t.SiteId }).Distinct().ToList(); // foreach (var subject in subjects) // { // var svItem = _mapper.Map(visitPlan); // svItem.SiteId = subject.SiteId; // svItem.SubjectId = subject.SubjectId; // svItem.Id = NewId.NextGuid(); // //设置了末次检查批次,那么加检查批次计划的时候,设置为不可用 // if (subjectSVS.Any(t => t.SubjectId == svItem.SubjectId && t.IsFinalVisit)) // { // svItem.VisitExecuted = VisitExecutedEnum.Unavailable; // } // await _subjectVisitRepository.AddAsync(svItem); // } // await _subjectVisitRepository.SaveChangesAsync(); //} #endregion } } } }