221 lines
11 KiB
C#
221 lines
11 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>
|
|
/// 维护 IsFrontTaskNeedSignButNotSign 字段 另外附加评估结果
|
|
/// </summary>
|
|
public class VisitTaskIsFrontTaskNeedSignButNotSignTrigger : IAfterSaveTrigger<VisitTask>
|
|
{
|
|
|
|
private readonly IRepository<VisitTask> _visitTaskRepository;
|
|
private readonly IRepository<ReadingQuestionCriterionTrial> _trialReadingCriterionRepository;
|
|
|
|
private readonly IRepository<ReadingQuestionTrial> _trialReadingQuestionRepository;
|
|
|
|
private readonly IRepository<ReadingTaskQuestionAnswer> _readingTaskQuestionAnswerRepository;
|
|
|
|
private readonly IRepository<ReadingJudgeInfo> _readingJudgeInfoRepository;
|
|
|
|
|
|
public VisitTaskIsFrontTaskNeedSignButNotSignTrigger(
|
|
|
|
IRepository<VisitTask> visitTaskRepository, IRepository<ReadingQuestionCriterionTrial> trialReadingCriterionRepository, IRepository<ReadingQuestionTrial> trialReadingQuestionRepository
|
|
, IRepository<ReadingTaskQuestionAnswer> readingTaskQuestionAnswerRepository, IRepository<ReadingJudgeInfo> readingJudgeInfoRepository)
|
|
{
|
|
_trialReadingCriterionRepository = trialReadingCriterionRepository;
|
|
|
|
_visitTaskRepository = visitTaskRepository;
|
|
_trialReadingQuestionRepository = trialReadingQuestionRepository;
|
|
|
|
_readingTaskQuestionAnswerRepository = readingTaskQuestionAnswerRepository;
|
|
_readingJudgeInfoRepository = readingJudgeInfoRepository;
|
|
}
|
|
|
|
|
|
//添加任务的时候 如果需要签名 并且已经签名了 那么要维护该标准 该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)
|
|
{
|
|
|
|
//有序阅片 IsFrontTaskNeedSignButNotSign 维护才有意义
|
|
if (_trialReadingCriterionRepository.Any(t => t.Id == visitTask.TrialReadingCriterionId && t.IsReadingTaskViewInOrder == true))
|
|
{
|
|
var visitTaskIdQueryable = _visitTaskRepository.Where(visitTaskLambda) //该Subject 该标准的任务
|
|
//小于自己任务号的任务 存在需要签名 但是没签名
|
|
.Where(t => t.IsFrontTaskNeedSignButNotSign == false &&
|
|
|
|
(t.Subject.SubjectVisitTaskList.AsQueryable().Where(visitTaskLambda).Any(c => c.IsNeedClinicalDataSign == true && c.IsClinicalDataSign == false && c.VisitTaskNum < t.VisitTaskNum)
|
|
|
|
// 前序存在 未一致性核查未通过的
|
|
|| t.Subject.SubjectVisitList.Any(sv => sv.CheckState != CheckStateEnum.CVPassed && t.VisitTaskNum > sv.VisitNum)
|
|
|
|
))
|
|
.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.IsFrontTaskNeedSignButNotSign == true &&
|
|
|
|
//前序任务 不存在需要签名 但是没签名
|
|
!t.Subject.SubjectVisitTaskList.AsQueryable().Where(visitTaskLambda).Any(c => c.IsNeedClinicalDataSign == true && c.IsClinicalDataSign == false && c.VisitTaskNum < t.VisitTaskNum)
|
|
|
|
// 前序 不存在 未一致性核查未通过的
|
|
&& !t.Subject.SubjectVisitList.Any(sv => sv.CheckState != CheckStateEnum.CVPassed && t.VisitTaskNum > sv.VisitNum)
|
|
)
|
|
.Select(t => t.Id);
|
|
|
|
await _visitTaskRepository.BatchUpdateNoTrackingAsync(t => visitTaskIdQueryable2.Contains(t.Id), u => new VisitTask()
|
|
{
|
|
IsFrontTaskNeedSignButNotSign = false
|
|
});
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
else if (context.ChangeType == ChangeType.Modified)
|
|
{
|
|
if (visitTask.ReadingCategory == ReadingCategory.Judge && (visitTask.TaskState == TaskState.Adbandon || visitTask.TaskState == TaskState.HaveReturned))
|
|
{
|
|
var find = _readingJudgeInfoRepository.Where(t => t.JudgeTaskId == visitTask.Id).FirstOrDefault();
|
|
|
|
if (find != null)
|
|
{
|
|
var ids = new Guid[] { find.TaskIdOne, find.TaskIdTwo };
|
|
await _visitTaskRepository.BatchUpdateNoTrackingAsync(t => ids.Contains(t.Id), u => new VisitTask() { JudgeVisitTaskId = null });
|
|
}
|
|
}
|
|
}
|
|
#region 附加评估 暂时废弃
|
|
// //从未签名状态 改为签名状态时 判断是否进行了附加评估,将附加评估的结果冗余
|
|
// if (context.ChangeType == ChangeType.Modified && visitTask.ReadingTaskState == ReadingTaskState.HaveSigned && context.UnmodifiedEntity.ReadingTaskState != ReadingTaskState.HaveSigned)
|
|
// {
|
|
|
|
// var criterion = _trialReadingCriterionRepository.Where(t => t.Id == visitTask.TrialReadingCriterionId).FirstOrDefault();
|
|
|
|
// //如果是附加评估
|
|
// if (criterion.IsAdditionalAssessment)
|
|
// {
|
|
|
|
|
|
// if (visitTask.ReadingCategory == ReadingCategory.Visit)
|
|
// {
|
|
|
|
|
|
// switch (criterion.CriterionType)
|
|
// {
|
|
// case CriterionType.RECIST1Point1:
|
|
// var isbaseLine = _visitTaskRepository.Where(t => t.Id == visitTask.Id).Select(t => t.SourceSubjectVisit.IsBaseLine).FirstOrDefault();
|
|
|
|
|
|
|
|
// if (isbaseLine)
|
|
// {
|
|
// var currentTaskAdditionarlAnswer = await _readingTaskQuestionAnswerRepository.Where(t => t.VisitTaskId == visitTask.Id &&
|
|
// t.ReadingQuestionTrial.IsAdditional == true && t.ReadingQuestionTrial.Type != "group"
|
|
// ).Include(t => t.ReadingQuestionTrial).FirstOrDefaultAsync();
|
|
|
|
|
|
// //双重阅片完成了
|
|
// if (criterion.ReadingType == ReadingMethod.Double &&
|
|
//(_visitTaskRepository.Where(t => t.SubjectId == visitTask.SubjectId && t.TaskName == visitTask.TaskName && t.TaskState == TaskState.Effect && t.ReadingTaskState == ReadingTaskState.HaveSigned).Count() == 2)
|
|
// )
|
|
// {
|
|
|
|
// var otherTaskId = await _visitTaskRepository.Where(t => t.SubjectId == visitTask.SubjectId && t.TaskName == visitTask.TaskName && t.TaskState == TaskState.Effect && t.ReadingTaskState == ReadingTaskState.HaveSigned && t.Id != visitTask.Id)
|
|
// .Select(t => t.Id).FirstOrDefaultAsync();
|
|
|
|
|
|
// var otherTaskAdditionarlAnswer = await _readingTaskQuestionAnswerRepository.Where(t => t.VisitTaskId == otherTaskId &&
|
|
// t.ReadingQuestionTrial.IsAdditional == true && t.ReadingQuestionTrial.Type != "group"
|
|
// ).Include(t => t.ReadingQuestionTrial).FirstOrDefaultAsync();
|
|
|
|
|
|
|
|
// await _subjectAdditionalEvaluationResultRepository.AddAsync(new SubjectAdditionalEvaluationResult()
|
|
// {
|
|
// TrialReadingCriterionId = visitTask.TrialReadingCriterionId,
|
|
// IsFinalResult = true,
|
|
// SubjectId = visitTask.SubjectId,
|
|
// TrialReadingQuestionId = currentTaskAdditionarlAnswer.ReadingQuestionTrialId,
|
|
// FinalAnswer = currentTaskAdditionarlAnswer.Answer,
|
|
// FinalTranslateDictionaryCode = currentTaskAdditionarlAnswer.ReadingQuestionTrial.DictionaryCode,
|
|
|
|
// });
|
|
|
|
// }
|
|
// if (criterion.ReadingType == ReadingMethod.Single)
|
|
// {
|
|
|
|
// await _subjectAdditionalEvaluationResultRepository.AddAsync(new SubjectAdditionalEvaluationResult()
|
|
// {
|
|
// TrialReadingCriterionId = visitTask.TrialReadingCriterionId,
|
|
// IsFinalResult = true,
|
|
// SubjectId = visitTask.SubjectId,
|
|
// TrialReadingQuestionId = currentTaskAdditionarlAnswer.ReadingQuestionTrialId,
|
|
// FinalAnswer = currentTaskAdditionarlAnswer.Answer,
|
|
// FinalTranslateDictionaryCode = currentTaskAdditionarlAnswer.ReadingQuestionTrial.DictionaryCode,
|
|
|
|
// });
|
|
|
|
// }
|
|
|
|
|
|
|
|
// }
|
|
|
|
// break;
|
|
// default:
|
|
// break;
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// }
|
|
// }
|
|
|
|
|
|
#endregion
|
|
|
|
}
|
|
|
|
|
|
}
|
|
} |