using AutoMapper; using EasyCaching.Core; using EntityFrameworkCore.Triggered; using IRaCIS.Core.Application.Interfaces; using IRaCIS.Core.Application.Service; using IRaCIS.Core.Application.ViewModel; using IRaCIS.Core.Domain.Share; using IRaCIS.Core.Infrastructure; namespace IRaCIS.Core.Application.Triggers { /// /// 处理 访视 末次评估 会影响Subject 状态 /// public class SubjectVisitCheckPassedTrigger : IBeforeSaveTrigger { private readonly IVisitTaskHelpeService _visitTaskHelpeService; private readonly IRepository _subjectRepository; private readonly IRepository _clinicalDataTrialSetRepository; private readonly IRepository _readingClinicalDataRepository; private readonly IRepository _trialReadingCriterionRepository; public SubjectVisitCheckPassedTrigger(IRepository subjectRepository, IRepository clinicalDataTrialSetRepository, IRepository readingClinicalDataRepository, IVisitTaskHelpeService visitTaskHelpeService, IRepository trialReadingCriterionRepository ) { _subjectRepository = subjectRepository; _clinicalDataTrialSetRepository = clinicalDataTrialSetRepository; _readingClinicalDataRepository = readingClinicalDataRepository; this._clinicalDataTrialSetRepository = clinicalDataTrialSetRepository; _visitTaskHelpeService = visitTaskHelpeService; _trialReadingCriterionRepository = trialReadingCriterionRepository; } public async Task BeforeSave(ITriggerContext 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; await _visitTaskHelpeService.GenerateVisitTaskAsync(subjectVisit.TrialId, new List() { subjectVisit.Id }, true); } } } } }