PWCG 计算
parent
323534e52b
commit
149cca011a
|
|
@ -7,6 +7,7 @@ using IRaCIS.Core.Domain.Share;
|
||||||
using IRaCIS.Core.Infra.EFCore.Common;
|
using IRaCIS.Core.Infra.EFCore.Common;
|
||||||
using IRaCIS.Core.Infrastructure;
|
using IRaCIS.Core.Infrastructure;
|
||||||
using MassTransit;
|
using MassTransit;
|
||||||
|
using MassTransit.Initializers;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using Microsoft.Extensions.Options;
|
using Microsoft.Extensions.Options;
|
||||||
|
|
@ -1110,7 +1111,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 修改上一次访视结果
|
/// 修改上一次访视结果 并且计算是不是PD
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="inDto"></param>
|
/// <param name="inDto"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
|
|
@ -1125,75 +1126,48 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
||||||
|
|
||||||
var isPDResult = false;
|
var isPDResult = false;
|
||||||
|
|
||||||
|
// 先判断有没有上一个任务
|
||||||
if (lastTask != null)
|
if (lastTask != null)
|
||||||
{
|
{
|
||||||
|
// 查看历史有没有PD
|
||||||
|
var taskIdList = taskList.Select(x => x.VisitTaskId).ToList();
|
||||||
|
|
||||||
#region 1、基线后第一个访视:新病灶计数≥ 2个;2、基线后第二个访视(应满足访视间隔6周以上,否则顺延)新病灶≥ 2个;
|
var pdTaskList = await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId!=inDto.VisitTaskId&& taskIdList.Contains(x.VisitTaskId) && x.ReadingQuestionTrial.QuestionType == QuestionType.SiteVisitForTumorEvaluation && x.Answer == VisitTumorEvaluation.PD.GetEnumInt()).OrderByDescending(x=>x.VisitTask.VisitTaskNum).ToListAsync();
|
||||||
//1、基线后第一个访视:新病灶计数≥ 2个;2、基线后第二个访视(应满足访视间隔6周以上,否则顺延)新病灶≥ 2个;
|
|
||||||
|
|
||||||
|
// 当前访视新病灶数量
|
||||||
var firstVisit = taskList.FirstOrDefault();
|
var thisNewLesionsCount = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.NewLesionsCount).Select(x => x.Answer).FirstOrDefault().IsNullOrEmptyReturn0();
|
||||||
if (baseLineTask != null && baseLineTask.StudyTime != null)
|
// 历史有PD
|
||||||
|
if (pdTaskList.Count() > 0&& thisNewLesionsCount >= 2)
|
||||||
{
|
{
|
||||||
//基线后第二个访视(应满足访视间隔6周以上,否则顺延)
|
// 满足以下所有条件:1、前序访视已经确定为PD;2、当前访视,新病灶≥2个;
|
||||||
var secondVisit = taskList.Where(x => x.VisitTaskNum >= 2 && x.StudyTime >= baseLineTask.StudyTime.Value.AddDays(42)).FirstOrDefault();
|
isPDResult = true;
|
||||||
if (secondVisit != null)
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// 满足以下所有条件:1、前序访视没有评估为PD,2、前一个访视:新病灶计数≥2个;3、当前访视:新病灶2个:4.前后2个访视间隔6周以上。
|
||||||
|
|
||||||
|
var lastStudyDate = taskList.Where(x=>x.VisitTaskId==lastTask.VisitTaskId).Select(x=>x.StudyTime).FirstOrDefault();
|
||||||
|
var thisStudyDate= taskList.Where(x => x.VisitTaskId == inDto.VisitTaskId).Select(x => x.StudyTime).FirstOrDefault();
|
||||||
|
|
||||||
|
var lastNewLesionsStr=await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == lastTask.VisitTaskId && x.ReadingQuestionTrialId == newLesionsCountQuestionId).Select(x => x.Answer).FirstOrDefaultAsync();
|
||||||
|
|
||||||
|
var lastNewLesionsCount = lastNewLesionsStr.IsNullOrEmptyReturn0();
|
||||||
|
if (lastStudyDate != null && thisStudyDate != null)
|
||||||
{
|
{
|
||||||
|
if (lastNewLesionsCount >= 2 && thisNewLesionsCount >= 2 && thisStudyDate.Value > lastStudyDate.Value.AddDays(42))
|
||||||
var firstTaskNewLesionsCount = (await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == firstVisit!.VisitTaskId && x.ReadingQuestionTrialId == newLesionsCountQuestionId).Select(x => x.Answer).FirstOrDefaultAsync()).IsNullOrEmptyReturn0();
|
|
||||||
|
|
||||||
// 第二访视数量
|
|
||||||
var secondVisitLesionsCount = (await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == lastTask.VisitTaskId && x.ReadingQuestionTrialId == newLesionsCountQuestionId).Select(x => x.Answer).FirstOrDefaultAsync()).IsNullOrEmptyReturn0();
|
|
||||||
|
|
||||||
// 判断是否是当前访视 当前访视还未入库
|
|
||||||
if (secondVisit.VisitTaskId == inDto.VisitTaskId)
|
|
||||||
{
|
|
||||||
secondVisitLesionsCount = (inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.NewLesionsCount).Select(x => x.Answer).FirstOrDefault()).IsNullOrEmptyReturn0();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (firstTaskNewLesionsCount >= 2 && secondVisitLesionsCount >= 2)
|
|
||||||
{
|
{
|
||||||
|
var visitForTumorEvaluationQuestionId = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.SiteVisitForTumorEvaluation).Select(x => x.QuestionId).FirstOrDefault();
|
||||||
|
await _readingTaskQuestionAnswerRepository.BatchUpdateNoTrackingAsync(x => x.VisitTaskId == lastTask.VisitTaskId && x.ReadingQuestionTrialId == visitForTumorEvaluationQuestionId, x => new ReadingTaskQuestionAnswer
|
||||||
|
{
|
||||||
|
Answer = VisitTumorEvaluation.PD.GetEnumInt(),
|
||||||
|
});
|
||||||
isPDResult = true;
|
isPDResult = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (lastTask.VisitTaskNum >= 2m)
|
|
||||||
{
|
|
||||||
|
|
||||||
var lastTasknewLesionsCount = (await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == lastTask.VisitTaskId && x.ReadingQuestionTrialId == newLesionsCountQuestionId).Select(x => x.Answer).FirstOrDefaultAsync()).IsNullOrEmptyReturn0();
|
|
||||||
var thisVisitTaskNewLesionsCount = (inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.NewLesionsCount).Select(x => x.Answer).FirstOrDefault()).IsNullOrEmptyReturn0();
|
|
||||||
|
|
||||||
var thisVisitTask = taskList.LastOrDefault();
|
|
||||||
|
|
||||||
if (thisVisitTask != null && thisVisitTask.StudyTime != null && lastTask.StudyTime != null &&
|
|
||||||
|
|
||||||
|
|
||||||
lastTasknewLesionsCount >= 2 && thisVisitTaskNewLesionsCount >= 2 && lastTask.StudyTime.Value.AddDays(42) <= thisVisitTask.StudyTime)
|
|
||||||
{
|
|
||||||
isPDResult = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
if (isPDResult)
|
|
||||||
{
|
|
||||||
var visitForTumorEvaluationQuestionId = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.SiteVisitForTumorEvaluation).Select(x => x.QuestionId).FirstOrDefault();
|
|
||||||
|
|
||||||
if (lastTask != null)
|
|
||||||
{
|
|
||||||
await _readingTaskQuestionAnswerRepository.BatchUpdateNoTrackingAsync(x => x.VisitTaskId == lastTask.VisitTaskId && x.ReadingQuestionTrialId == visitForTumorEvaluationQuestionId, x => new ReadingTaskQuestionAnswer
|
|
||||||
{
|
|
||||||
Answer = VisitTumorEvaluation.PD.GetEnumInt(),
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
return isPDResult;
|
return isPDResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue