Trigger 修改分类整理
parent
b8f5f32596
commit
7760b0736e
|
@ -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>();
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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,
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
}
|
|
@ -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>
|
||||
{
|
||||
|
||||
|
|
|
@ -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();
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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(
|
||||
IStringLocalizer _localizer,
|
||||
IRepository<SubjectVisit> _subjectVisitRepository) : IAfterSaveTrigger<Subject>
|
||||
public class SubjectTrigger(
|
||||
IStringLocalizer _localizer,
|
||||
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,11 +87,40 @@ 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();
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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,28 +47,78 @@ 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)
|
||||
{
|
||||
await VerifyDealFinalVisitAsync(subjectVisit);
|
||||
|
||||
await DealGenerateReadModuleAndSubjectVisit(subjectVisit);
|
||||
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);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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 &&
|
Loading…
Reference in New Issue