diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml index cb51b6cae..5e8e3f29a 100644 --- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml +++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml @@ -3366,7 +3366,7 @@ - + 添加访视计划 要给改项目下的所有Subject 添加该访视 diff --git a/IRaCIS.Core.Application/Service/Visit/SubjectService.cs b/IRaCIS.Core.Application/Service/Visit/SubjectService.cs index 0fa201658..8603dcabc 100644 --- a/IRaCIS.Core.Application/Service/Visit/SubjectService.cs +++ b/IRaCIS.Core.Application/Service/Visit/SubjectService.cs @@ -55,24 +55,6 @@ namespace IRaCIS.Application.Services mapedSubject= await _subjectRepository.InsertFromDTOAsync(subjectCommand, false, verifyExp1); - //添加受试者的时候,获取访视计划列表,添加到受试者访视表。 - var visitPlan = await _repository.Where(t => t.TrialId == subjectCommand.TrialId&&t.IsConfirmed).ToListAsync(); - - svlist = _mapper.Map>(visitPlan); - - var IsEnrollementQualificationConfirm = await _repository.Where(t => t.Id == mapedSubject.TrialId).Select(u => u.IsEnrollementQualificationConfirm).FirstOrDefaultAsync(); - - svlist.ForEach(t => - { - t.Subject = mapedSubject; - t.SubjectId = mapedSubject.Id; - t.TrialId = subjectCommand.TrialId; - t.SiteId = subjectCommand.SiteId; - t.IsEnrollmentConfirm = t.IsBaseLine ? IsEnrollementQualificationConfirm : false; - }); - - - await _subjectVisitRepository.AddRangeAsync(svlist); } else //update { diff --git a/IRaCIS.Core.Application/Service/Visit/VisitPlanService.cs b/IRaCIS.Core.Application/Service/Visit/VisitPlanService.cs index 8b2f94607..fcb72be74 100644 --- a/IRaCIS.Core.Application/Service/Visit/VisitPlanService.cs +++ b/IRaCIS.Core.Application/Service/Visit/VisitPlanService.cs @@ -23,10 +23,10 @@ namespace IRaCIS.Application.Services private readonly IRepository _subjectRepository; private readonly IRepository _visitPlanInfluenceStatRepository; - + public VisitPlanService(IRepository visitStageRepository, IRepository trialRepository, IRepository subjectVisitRepository, - IRepository visitPlanInfluenceStudy,IRepository subjectRepository, IRepository visitPlanInfluenceStatRepository) + IRepository visitPlanInfluenceStudy, IRepository subjectRepository, IRepository visitPlanInfluenceStatRepository) { _visitStageRepository = visitStageRepository; _trialRepository = trialRepository; @@ -128,7 +128,6 @@ namespace IRaCIS.Application.Services { var trial = (await _trialRepository.FirstOrDefaultAsync(t => t.Id == visitPlan.TrialId)).IfNullThrowException(); - trial.VisitPlanConfirmed = false; if (await _visitStageRepository.AnyAsync(t => t.TrialId == visitPlan.TrialId && (t.VisitName == visitPlan.VisitName || t.VisitNum == visitPlan.VisitNum), true)) { @@ -228,17 +227,6 @@ namespace IRaCIS.Application.Services trial.VisitPlanConfirmed = true; - var subjects = _subjectRepository.Where(x => x.TrialId == trialId).Select(x => new - { - x.Code, - x.SiteId, - x.Id, - x.IsEnrollment, - x.IsUrgent, - x.TrialId - - }); - #region 统一给Subject 增加访视任务 //首次确认时 IsHaveFirstConfirmed都为false 不需要给Subject 加访视 @@ -250,26 +238,39 @@ namespace IRaCIS.Application.Services foreach (var visitPlan in addvisitStages) { - foreach (var subject in subjects) - { - var addSv = _mapper.Map(visitPlan); - addSv.SubjectId = subject.Id; - addSv.TrialId = subject.TrialId; - addSv.SiteId = subject.SiteId; + var subjectSVS = await _subjectVisitRepository.Where(t => t.TrialId == visitPlan.TrialId).Select(t => new { t.SubjectId, t.SiteId, t.IsFinalVisit }).Distinct().ToListAsync(); + + var subjectList = subjectSVS.Select(t => new { t.SubjectId, t.SiteId }).Distinct().ToList(); + + foreach (var subject in subjectList) + { + + var svItem = _mapper.Map(visitPlan); + svItem.SiteId = subject.SiteId; + svItem.SubjectId = subject.SubjectId; + + //设置了末次访视,那么加访视计划的时候,设置为不可用 + if (subjectSVS.Any(t => t.SubjectId == svItem.SubjectId && t.IsFinalVisit)) + { + svItem.VisitExecuted = VisitExecutedEnum.Unavailable; + } //再加一层保险,防止重复 - if (!await _subjectVisitRepository.AnyAsync(t => t.VisitStageId == visitPlan.Id && t.SubjectId == subject.Id)) + if (!await _subjectVisitRepository.AnyAsync(t => t.VisitStageId == visitPlan.Id && t.SubjectId == subject.SubjectId)) { - subjectVisits.Add(addSv); + await _subjectVisitRepository.AddAsync(svItem); + } } + + } await _subjectVisitRepository.AddRangeAsync(subjectVisits); } - + #endregion diff --git a/IRaCIS.Core.Application/Triggers/AddSubjectTrigger.cs b/IRaCIS.Core.Application/Triggers/AddSubjectTrigger.cs new file mode 100644 index 000000000..2c94b729b --- /dev/null +++ b/IRaCIS.Core.Application/Triggers/AddSubjectTrigger.cs @@ -0,0 +1,90 @@ +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 _visitStageRepository; + private readonly IRepository _trialRepository; + private readonly IMapper _mapper; + + public AddSubjectTrigger(IRepository subjectVisitRepository, IMapper mapper, IRepository visitStageRepository, IRepository trialRepository) + { + _subjectVisitRepository = subjectVisitRepository; + _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; + }); + + + await _subjectVisitRepository.AddRangeAsync(svList); + + + #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 + + + } + } + } +} \ No newline at end of file diff --git a/IRaCIS.Core.Application/Triggers/AddVisitPlanTrigger.cs b/IRaCIS.Core.Application/Triggers/AddVisitPlanTrigger.cs deleted file mode 100644 index 3ada949c7..000000000 --- a/IRaCIS.Core.Application/Triggers/AddVisitPlanTrigger.cs +++ /dev/null @@ -1,58 +0,0 @@ -using AutoMapper; -using EntityFrameworkCore.Triggered; -using IRaCIS.Core.Domain.Share; -using MassTransit; - -namespace IRaCIS.Core.Application.Triggers -{ - /// - /// 添加访视计划 要给改项目下的所有Subject 添加该访视 - /// - public class AddVisitPlanTrigger : IAfterSaveTrigger - { - private readonly IRepository _subjectVisitRepository; - private readonly IMapper _mapper; - - public AddVisitPlanTrigger(IRepository subjectVisitRepository,IMapper mapper) - { - _subjectVisitRepository = subjectVisitRepository; - _mapper = mapper; - } - - public async Task AfterSave(ITriggerContext context, CancellationToken cancellationToken) - { - var visitPlan = context.Entity; - - if (context.ChangeType == ChangeType.Added) - { - //已添加受试者 都不存在该新增的计划名称 那么该项目所有受试者都增加一个访视记录 - 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(); - } - - } - } - } -} \ No newline at end of file