EI-Image-Viewer-Api/IRaCIS.Core.Application/Triggers/VisitTaskIsFrontTaskNeedSig...

74 lines
3.2 KiB
C#

using AutoMapper;
using EasyCaching.Core;
using EntityFrameworkCore.Triggered;
using IRaCIS.Core.Application.Service;
using IRaCIS.Core.Application.ViewModel;
using IRaCIS.Core.Domain.Share;
using IRaCIS.Core.Infrastructure;
using System.Linq.Expressions;
namespace IRaCIS.Core.Application.Triggers
{
/// <summary>
/// 因为可能先一致性核查通过,生成其他标准的任务了,新签名的标准也需要产生任务
/// </summary>
public class VisitTaskIsFrontTaskNeedSignButNotSignTrigger : IAfterSaveTrigger<VisitTask>
{
private readonly IRepository<VisitTask> _visitTaskRepository;
public VisitTaskIsFrontTaskNeedSignButNotSignTrigger(
IRepository<VisitTask> visitTaskRepository)
{
_visitTaskRepository = visitTaskRepository;
}
//添加任务的时候 如果需要签名 并且已经签名了 那么要维护该标准 该Subject IsFrontTaskNeedSignButNotSign字段
public async Task AfterSave(ITriggerContext<VisitTask> context, CancellationToken cancellationToken)
{
var visitTask = context.Entity;
Expression<Func<VisitTask, bool>> visitTaskLambda = x => x.TrialId == visitTask.TrialId && x.SubjectId == visitTask.SubjectId && x.TrialReadingCriterionId == visitTask.TrialReadingCriterionId;
if (context.ChangeType == ChangeType.Added)
{
if (visitTask.IsNeedClinicalDataSign )
{
var visitTaskIdQueryable = _visitTaskRepository.Where(visitTaskLambda) //该Subject 该标准的任务
//小于自己任务号的任务 存在需要签名 但是没签名
.Where(t => t.Subject.SubjectVisitTaskList.AsQueryable().Where(visitTaskLambda).Any(c => c.IsNeedClinicalDataSign == true && c.IsClinicalDataSign == false && c.VisitTaskNum < t.VisitTaskNum)
&& t.IsFrontTaskNeedSignButNotSign == false)
.Select(t => t.Id);
await _visitTaskRepository.BatchUpdateNoTrackingAsync(t => visitTaskIdQueryable.Contains(t.Id), u => new VisitTask()
{
IsFrontTaskNeedSignButNotSign = true
});
var visitTaskIdQueryable2 = _visitTaskRepository.Where(visitTaskLambda) //该Subject 该标准的任务
//小于自己任务号的任务 存在需要签名 但是没签名
.Where(t => !t.Subject.SubjectVisitTaskList.AsQueryable().Where(visitTaskLambda).Any(c => c.IsNeedClinicalDataSign == true && c.IsClinicalDataSign == false && c.VisitTaskNum < t.VisitTaskNum)
&& t.IsFrontTaskNeedSignButNotSign == true)
.Select(t => t.Id);
await _visitTaskRepository.BatchUpdateNoTrackingAsync(t => visitTaskIdQueryable2.Contains(t.Id), u => new VisitTask()
{
IsFrontTaskNeedSignButNotSign = false
});
}
}
}
}
}