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