Trigger 修改分类整理

IRC_NewDev
hang 2024-09-27 15:11:49 +08:00
parent b8f5f32596
commit 7760b0736e
8 changed files with 189 additions and 230 deletions

View File

@ -75,12 +75,9 @@ namespace IRaCIS.Core.API
options.UseTriggers(triggerOptions =>
{
triggerOptions.AddTrigger<AddSubjectTrigger>();
triggerOptions.AddTrigger<SubjectTrigger>();
triggerOptions.AddTrigger<ChallengeStateTrigger>();
triggerOptions.AddTrigger<SubjectStateTrigger>();
triggerOptions.AddTrigger<AddCRCCliniaclDataTrigger>();
triggerOptions.AddTrigger<SubjectVisitCheckPassedTrigger>();
triggerOptions.AddTrigger<SubjectVisitFinalVisitTrigger>();
triggerOptions.AddTrigger<SubjectVisitTrigger>();
triggerOptions.AddTrigger<SubjectVisitScanDateTrigger>();
triggerOptions.AddTrigger<TrialCriterionSignTrigger>();
triggerOptions.AddTrigger<TableQuestionRowTrigger>();

View File

@ -16097,32 +16097,19 @@
<param name="trialConfig"></param>
<returns></returns>
</member>
<member name="T:IRaCIS.Core.Application.Triggers.SubjectStateTrigger">
<member name="T:IRaCIS.Core.Application.Triggers.ChallengeStateTrigger">
<summary>
访视 质疑状态 触发修改
</summary>
<param name="_qcChallengeRepository"></param>
<param name="_subjectVisitRepository"></param>
</member>
<member name="M:IRaCIS.Core.Application.Triggers.SubjectStateTrigger.#ctor(Microsoft.Extensions.Localization.IStringLocalizer,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.SubjectVisit})">
<member name="M:IRaCIS.Core.Application.Triggers.ChallengeStateTrigger.#ctor(IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.QCChallenge},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.SubjectVisit})">
<summary>
访视 质疑状态 触发修改
</summary>
</member>
<member name="T:IRaCIS.Core.Application.Triggers.SubjectVisitFinalVisitTrigger">
<summary>
处理 访视 末次评估 会影响Subject 状态
</summary>
</member>
<member name="M:IRaCIS.Core.Application.Triggers.SubjectVisitFinalVisitTrigger.#ctor(IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.SubjectVisit},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadModule},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.Subject},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.VisitTask},IRaCIS.Core.Application.Service.IVisitTaskHelpeService,Microsoft.Extensions.Localization.IStringLocalizer,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.Trial},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingQuestionCriterionTrial})">
<summary>
处理 访视 末次评估 会影响Subject 状态
</summary>
</member>
<member name="M:IRaCIS.Core.Application.Triggers.SubjectVisitFinalVisitTrigger.DealGenerateReadModuleAndSubjectVisit(IRaCIS.Core.Domain.Models.SubjectVisit)">
<summary>
处理生成阅片期 以及后续访视状态
</summary>
<param name="subjectVisit"></param>
<returns></returns>
<param name="_qcChallengeRepository"></param>
<param name="_subjectVisitRepository"></param>
</member>
<member name="T:IRaCIS.Core.Application.Triggers.VisitTaskIsFrontTaskNeedSignButNotSignTrigger">
<summary>
@ -16134,26 +16121,6 @@
维护 IsFrontTaskNeedSignButNotSign 字段 另外附加评估结果
</summary>
</member>
<member name="T:IRaCIS.Core.Application.Triggers.AddSubjectTrigger">
<summary>
添加访视计划 要给改项目下的所有Subject 添加该访视
</summary>
</member>
<member name="M:IRaCIS.Core.Application.Triggers.AddSubjectTrigger.#ctor(IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.SubjectVisit},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.VisitStage},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.Trial},AutoMapper.IMapper)">
<summary>
添加访视计划 要给改项目下的所有Subject 添加该访视
</summary>
</member>
<member name="T:IRaCIS.Core.Application.Triggers.SubjectVisitCheckPassedTrigger">
<summary>
处理 访视 末次评估 会影响Subject 状态
</summary>
</member>
<member name="M:IRaCIS.Core.Application.Triggers.SubjectVisitCheckPassedTrigger.#ctor(IRaCIS.Core.Application.Service.IVisitTaskHelpeService,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.Subject},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingQuestionCriterionTrial},IRaCIS.Core.Application.Interfaces.ISubjectCriteriaEvaluationService,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.SubjectCriteriaEvaluation})">
<summary>
处理 访视 末次评估 会影响Subject 状态
</summary>
</member>
<member name="T:IRaCIS.Core.Application.Triggers.TrialCriterionSignTrigger">
<summary>
因为可能先一致性核查通过,生成其他标准的任务了,新签名的标准也需要产生任务
@ -16185,6 +16152,25 @@
<param name="cancellationToken"></param>
<returns></returns>
</member>
<member name="T:IRaCIS.Core.Application.Triggers.SubjectTrigger">
<summary>
添加访视计划 要给改项目下的所有Subject 添加该访视
</summary>
</member>
<member name="M:IRaCIS.Core.Application.Triggers.SubjectTrigger.#ctor(Microsoft.Extensions.Localization.IStringLocalizer,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.SubjectVisit},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.VisitStage},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.Trial},AutoMapper.IMapper)">
<summary>
添加访视计划 要给改项目下的所有Subject 添加该访视
</summary>
</member>
<member name="M:IRaCIS.Core.Application.Triggers.SubjectTrigger.AfterSave(EntityFrameworkCore.Triggered.ITriggerContext{IRaCIS.Core.Domain.Models.Subject},System.Threading.CancellationToken)">
<summary>
手动设置出组状态
</summary>
<param name="context"></param>
<param name="cancellationToken"></param>
<returns></returns>
<exception cref="T:IRaCIS.Core.Infrastructure.BusinessValidationFailedException"></exception>
</member>
<member name="T:IRaCIS.Core.Application.Triggers.SubjectVisitScanDateTrigger">
<summary>
处理 访视 1、提交状态 2、执行状态 3、最早最晚 拍片日期
@ -16209,6 +16195,33 @@
<param name="subjectVisitId"></param>
<returns></returns>
</member>
<member name="T:IRaCIS.Core.Application.Triggers.SubjectVisitTrigger">
<summary>
访视保存后: 末次访视设置和取消触发 Subject状态以后后续访视状态的修改以及自动生成阅片期和任务
访视保存前:一致性核查通过,生成任务
</summary>
</member>
<member name="M:IRaCIS.Core.Application.Triggers.SubjectVisitTrigger.#ctor(IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.SubjectVisit},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadModule},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.Subject},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.VisitTask},Microsoft.Extensions.Localization.IStringLocalizer,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.Trial},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingQuestionCriterionTrial},IRaCIS.Core.Application.Service.Reading.Interface.IClinicalAnswerService,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingQuestionCriterionTrial},IRaCIS.Core.Application.Interfaces.ISubjectCriteriaEvaluationService,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.SubjectCriteriaEvaluation},IRaCIS.Core.Application.Service.IVisitTaskHelpeService)">
<summary>
访视保存后: 末次访视设置和取消触发 Subject状态以后后续访视状态的修改以及自动生成阅片期和任务
访视保存前:一致性核查通过,生成任务
</summary>
</member>
<member name="M:IRaCIS.Core.Application.Triggers.SubjectVisitTrigger.DealGenerateReadModuleAndSubjectVisit(IRaCIS.Core.Domain.Models.SubjectVisit)">
<summary>
处理生成阅片期 以及后续访视状态
</summary>
<param name="subjectVisit"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.Triggers.SubjectVisitTrigger.VerifyDealFinalVisitAsync(IRaCIS.Core.Domain.Models.SubjectVisit)">
<summary>
验证末次访视
</summary>
<param name="subjectVisit"></param>
<returns></returns>
<exception cref="T:IRaCIS.Core.Infrastructure.BusinessValidationFailedException"></exception>
</member>
<member name="P:IRaCIS.Core.Domain.Models.ReadModuleView.Id">
<summary>
Id(阅片期Id 或者 访视ID)

View File

@ -1,26 +0,0 @@
using EntityFrameworkCore.Triggered;
using IRaCIS.Core.Application.Service.Reading.Interface;
namespace IRaCIS.Core.Application.Triggers
{
public class AddCRCCliniaclDataTrigger(
IRepository<SubjectVisit> _subjectVisitRepository,
IClinicalAnswerService _iClinicalAnswerService) : IAfterSaveTrigger<SubjectVisit>
{
//注意删除不能用扩展方法必须用EF跟踪的实体 否则不能取到 SubjectVisitId
public async Task AfterSave(ITriggerContext<SubjectVisit> context, CancellationToken cancellationToken)
{
var subjectVisit = context.Entity;
await _iClinicalAnswerService.AutoAddCRCClinical(new Service.Reading.Dto.AutoAddClinicalInDto()
{
TrialId = subjectVisit.TrialId,
SubjectId = subjectVisit.SubjectId,
});
}
}
}

View File

@ -4,7 +4,11 @@ using IRaCIS.Core.Domain.Share;
namespace IRaCIS.Core.Application.Triggers
{
//访视 质疑状态 触发修改
/// <summary>
/// 访视 质疑状态 触发修改
/// </summary>
/// <param name="_qcChallengeRepository"></param>
/// <param name="_subjectVisitRepository"></param>
public class ChallengeStateTrigger(IRepository<QCChallenge> _qcChallengeRepository, IRepository<SubjectVisit> _subjectVisitRepository) : IAfterSaveTrigger<QCChallenge>
{

View File

@ -1,59 +0,0 @@
using AutoMapper;
using EntityFrameworkCore.Triggered;
using MassTransit;
namespace IRaCIS.Core.Application.Triggers
{
/// <summary>
/// 添加访视计划 要给改项目下的所有Subject 添加该访视
/// </summary>
public class AddSubjectTrigger(
IRepository<SubjectVisit> _subjectVisitRepository,
IRepository<VisitStage> _visitStageRepository,
IRepository<Trial> _trialRepository,
IMapper _mapper) : IBeforeSaveTrigger<Subject>
{
public async Task BeforeSave(ITriggerContext<Subject> 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<List<SubjectVisit>>(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();
}
}
}
}

View File

@ -1,67 +0,0 @@
using EntityFrameworkCore.Triggered;
using IRaCIS.Core.Application.Interfaces;
using IRaCIS.Core.Domain.Share;
namespace IRaCIS.Core.Application.Triggers
{
/// <summary>
/// 处理 访视 末次评估 会影响Subject 状态
/// </summary>
public class SubjectVisitCheckPassedTrigger(
IVisitTaskHelpeService _visitTaskHelpeService,
IRepository<Subject> _subjectRepository,
IRepository<ReadingQuestionCriterionTrial> _trialReadingCriterionRepository,
ISubjectCriteriaEvaluationService _subjectCriteriaEvaluationService,
IRepository<SubjectCriteriaEvaluation> _subjectCriteriaEvaluationRepository) : IBeforeSaveTrigger<SubjectVisit>
{
public async Task BeforeSave(ITriggerContext<SubjectVisit> context, CancellationToken cancellationToken)
{
var subjectVisit = context.Entity;
if (context.ChangeType == ChangeType.Modified)
{
// 一致性核查通过 生成读片任务
if (context.UnmodifiedEntity?.CheckState != subjectVisit.CheckState && subjectVisit.CheckState == CheckStateEnum.CVPassed)
{
//退回或者重阅的任务一致性核查通过了 此时设置Subject 重阅影响状态
if (context.Entity.IsPMBackOrReReading == true)
{
await _subjectRepository.UpdatePartialFromQueryAsync(context.Entity.SubjectId, u => new Subject() { IsReReadingOrBackInfluenceAnalysis = false });
}
context.Entity.IsPMBackOrReReading = false;
//找到手动生成任务的标准
var criterionList = await _trialReadingCriterionRepository.Where(t => t.IsAutoCreate == false && t.IsSigned == true).Select(t => new { t.Id, t.TrialId, t.IsReadingTaskViewInOrder }).ToListAsync();
foreach (var criterion in criterionList)
{
//if(!await _SubjectCriteriaEvaluationVisitFilterRepository.AnyAsync(t=>t.SubjectId==subjectVisit.SubjectId&& t.SubjectVisitId==subjectVisit.Id && t.TrialReadingCriterionId == criterion.Id))
//{
// await _SubjectCriteriaEvaluationVisitFilterRepository.AddAsync(new SubjectCriteriaEvaluationVisitFilter() { SubjectId = subjectVisit.SubjectId, SubjectVisitId = subjectVisit.Id, TrialReadingCriterionId = criterion.Id });
//}
//如果参与评估,那么久对当前访视进行自动筛选
if (await _subjectCriteriaEvaluationRepository.AnyAsync(t => t.SubjectId == subjectVisit.SubjectId && t.TrialReadingCriterionId == criterion.Id && t.IsJoinEvaluation))
{
await _subjectCriteriaEvaluationService.AutoSubjectCriteriaEvaluationVisitFilter(subjectVisit.SubjectId, subjectVisit.Id, criterion.Id);
}
}
await _visitTaskHelpeService.GenerateVisitTaskAsync(subjectVisit.TrialId, new List<Guid>() { subjectVisit.Id }, true);
}
}
}
}
}

View File

@ -1,28 +1,36 @@
using EntityFrameworkCore.Triggered;
using AutoMapper;
using EntityFrameworkCore.Triggered;
using IRaCIS.Core.Domain.Share;
using IRaCIS.Core.Infrastructure;
using MassTransit;
using Microsoft.Extensions.Localization;
namespace IRaCIS.Core.Application.Triggers
{
/// <summary>
///
/// 添加访视计划 要给改项目下的所有Subject 添加该访视
/// </summary>
public class SubjectStateTrigger(
public class SubjectTrigger(
IStringLocalizer _localizer,
IRepository<SubjectVisit> _subjectVisitRepository) : IAfterSaveTrigger<Subject>
IRepository<SubjectVisit> _subjectVisitRepository,
IRepository<VisitStage> _visitStageRepository,
IRepository<Trial> _trialRepository,
IMapper _mapper) : IBeforeSaveTrigger<Subject>, IAfterSaveTrigger<Subject>
{
/// <summary>
/// 手动设置出组状态
/// </summary>
/// <param name="context"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
/// <exception cref="BusinessValidationFailedException"></exception>
public async Task AfterSave(ITriggerContext<Subject> context, CancellationToken cancellationToken)
{
var dbSubject = context.Entity;
if (context.ChangeType == ChangeType.Modified)
{
//Site变更
var dbSubject = context.Entity;
//Site变更
if (context.Entity.TrialSiteId != context.UnmodifiedEntity?.TrialSiteId)
{
var subjectId = context.Entity.Id;
@ -31,8 +39,6 @@ namespace IRaCIS.Core.Application.Triggers
await _subjectVisitRepository.BatchUpdateNoTrackingAsync(t => t.SubjectId == subjectId, u => new SubjectVisit() { TrialSiteId = trialSiteId });
#region 废弃
////如果访视结束了 需要删除计划外未执行的访视
//if (mapedSubject.Status == SubjectStatus.EndOfVisit)
@ -81,10 +87,39 @@ namespace IRaCIS.Core.Application.Triggers
}
}
}
}
public async Task BeforeSave(ITriggerContext<Subject> 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<List<SubjectVisit>>(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();
}
}
}

View File

@ -1,4 +1,6 @@
using EntityFrameworkCore.Triggered;
using IRaCIS.Core.Application.Interfaces;
using IRaCIS.Core.Application.Service.Reading.Interface;
using IRaCIS.Core.Application.ViewModel;
using IRaCIS.Core.Domain.Share;
using IRaCIS.Core.Infrastructure;
@ -8,18 +10,23 @@ using Microsoft.Extensions.Localization;
namespace IRaCIS.Core.Application.Triggers
{
/// <summary>
/// 处理 访视 末次评估 会影响Subject 状态
/// 访视保存后: 末次访视设置和取消触发 Subject状态以后后续访视状态的修改以及自动生成阅片期和任务
/// 访视保存前:一致性核查通过,生成任务
/// </summary>
public class SubjectVisitFinalVisitTrigger(
public class SubjectVisitTrigger(
IRepository<SubjectVisit> _subjectVisitRepository,
IRepository<ReadModule> _readModuleRepository,
IRepository<Subject> _subjectRepository,
IRepository<VisitTask> _visitTaskRepository,
IVisitTaskHelpeService _ivisitTaskHelpeService,
IStringLocalizer _localizer,
IRepository<Trial> _trialRepository,
IRepository<ReadingQuestionCriterionTrial> _readingQuestionCriterionTrialRepository
) : IAfterSaveTrigger<SubjectVisit>
IRepository<ReadingQuestionCriterionTrial> _readingQuestionCriterionTrialRepository,
IClinicalAnswerService _iClinicalAnswerService,
IRepository<ReadingQuestionCriterionTrial> _trialReadingCriterionRepository,
ISubjectCriteriaEvaluationService _subjectCriteriaEvaluationService,
IRepository<SubjectCriteriaEvaluation> _subjectCriteriaEvaluationRepository,
IVisitTaskHelpeService _visitTaskHelpeService
) : IAfterSaveTrigger<SubjectVisit>, IBeforeSaveTrigger<SubjectVisit>
{
@ -40,29 +47,79 @@ namespace IRaCIS.Core.Application.Triggers
await VerifyDealFinalVisitAsync(subjectVisit);
await DealGenerateReadModuleAndSubjectVisit(subjectVisit);
}
else
{
//回退
await _subjectRepository.BatchUpdateNoTrackingAsync(t => t.Id == subjectVisit.SubjectId,
u => new Subject() { Status = SubjectStatus.OnVisit, FinalSubjectVisitId = null });
await _subjectVisitRepository.BatchUpdateNoTrackingAsync(t => t.SubjectId == subjectVisit.SubjectId && t.VisitExecuted == VisitExecutedEnum.Unavailable, u => new SubjectVisit() { VisitExecuted = VisitExecutedEnum.UnExecuted });
}
}
}
else if (context.ChangeType == ChangeType.Added && subjectVisit.IsFinalVisit)
else if (context.ChangeType == ChangeType.Added)
{
if (subjectVisit.IsFinalVisit)
{
await VerifyDealFinalVisitAsync(subjectVisit);
await DealGenerateReadModuleAndSubjectVisit(subjectVisit);
}
//访视添加后 自动处理临床数据 移动
await _iClinicalAnswerService.AutoAddCRCClinical(new Service.Reading.Dto.AutoAddClinicalInDto()
{
TrialId = subjectVisit.TrialId,
SubjectId = subjectVisit.SubjectId,
});
}
}
public async Task BeforeSave(ITriggerContext<SubjectVisit> context, CancellationToken cancellationToken)
{
var subjectVisit = context.Entity;
if (context.ChangeType == ChangeType.Modified)
{
// 一致性核查通过 生成读片任务
if (context.UnmodifiedEntity?.CheckState != subjectVisit.CheckState && subjectVisit.CheckState == CheckStateEnum.CVPassed)
{
//退回或者重阅的任务一致性核查通过了 此时设置Subject 重阅影响状态
if (context.Entity.IsPMBackOrReReading == true)
{
await _subjectRepository.UpdatePartialFromQueryAsync(context.Entity.SubjectId, u => new Subject() { IsReReadingOrBackInfluenceAnalysis = false });
}
context.Entity.IsPMBackOrReReading = false;
//找到手动生成任务的标准
var criterionList = await _trialReadingCriterionRepository.Where(t => t.IsAutoCreate == false && t.IsSigned == true).Select(t => new { t.Id, t.TrialId, t.IsReadingTaskViewInOrder }).ToListAsync();
foreach (var criterion in criterionList)
{
//if(!await _SubjectCriteriaEvaluationVisitFilterRepository.AnyAsync(t=>t.SubjectId==subjectVisit.SubjectId&& t.SubjectVisitId==subjectVisit.Id && t.TrialReadingCriterionId == criterion.Id))
//{
// await _SubjectCriteriaEvaluationVisitFilterRepository.AddAsync(new SubjectCriteriaEvaluationVisitFilter() { SubjectId = subjectVisit.SubjectId, SubjectVisitId = subjectVisit.Id, TrialReadingCriterionId = criterion.Id });
//}
//如果参与评估,那么久对当前访视进行自动筛选
if (await _subjectCriteriaEvaluationRepository.AnyAsync(t => t.SubjectId == subjectVisit.SubjectId && t.TrialReadingCriterionId == criterion.Id && t.IsJoinEvaluation))
{
await _subjectCriteriaEvaluationService.AutoSubjectCriteriaEvaluationVisitFilter(subjectVisit.SubjectId, subjectVisit.Id, criterion.Id);
}
}
await _visitTaskHelpeService.GenerateVisitTaskAsync(subjectVisit.TrialId, new List<Guid>() { subjectVisit.Id }, true);
}
}
}
/// <summary>
@ -102,7 +159,6 @@ namespace IRaCIS.Core.Application.Triggers
var readModule = await _readModuleRepository.Where(x => x.ReadingSetType == ReadingSetType.ImageReading && x.TrialReadingCriterionId == item.Id && x.SubjectVisitId == subjectVisitId).FirstOrDefaultAsync();
if (readModule == null)
{
ReadModule newReadModule = new ReadModule()
@ -128,7 +184,7 @@ namespace IRaCIS.Core.Application.Triggers
foreach (var visitTask in visitTaskList)
{
await _ivisitTaskHelpeService.AddTaskAsync(new GenerateTaskCommand()
await _visitTaskHelpeService.AddTaskAsync(new GenerateTaskCommand()
{
OriginalVisitId = visitTask.Id,
ReadingCategory = GenerateTaskCategory.Global,
@ -158,6 +214,12 @@ namespace IRaCIS.Core.Application.Triggers
#endregion
}
/// <summary>
/// 验证末次访视
/// </summary>
/// <param name="subjectVisit"></param>
/// <returns></returns>
/// <exception cref="BusinessValidationFailedException"></exception>
private async Task VerifyDealFinalVisitAsync(SubjectVisit subjectVisit)
{
if (await _subjectVisitRepository.AnyAsync(t => t.SubjectId == subjectVisit.SubjectId && t.VisitNum > subjectVisit.VisitNum &&