Uat_Study
he 2023-06-05 14:33:58 +08:00
parent 350101091a
commit 1d3e324b9a
3 changed files with 105 additions and 11 deletions

View File

@ -1233,7 +1233,7 @@
<param name="indto"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.Service.ReadingCalculate.IRECIST1Point1CalculateService.TestCalculate(System.Guid,IRaCIS.Core.Domain.Share.QuestionType)">
<member name="M:IRaCIS.Core.Application.Service.ReadingCalculate.IRECIST1Point1CalculateService.TestCalculate(System.Guid,System.Nullable{IRaCIS.Core.Domain.Share.QuestionType})">
<summary>
测试计算
</summary>

View File

@ -22,8 +22,29 @@ namespace IRaCIS.Core.Application.ViewModel
public decimal VisitNum { get; set; }
public string TumorAnswer { get; set; } = string.Empty;
/// <summary>
/// 靶病灶是否为IUPD或者ICPD
/// </summary>
public bool TargetAssessmentIsIUorIC { get; set; }
/// <summary>
/// 靶病灶是否为IUPD或者ICPD
/// </summary>
public bool NewTargetLesionAssessmentIsIUorIC { get; set; }
}
public class TirggerAnswerInfo
{
public Guid VisitTaskId { get; set; }
public QuestionType QuestionType { get; set; }
public string Answer { get; set; } = string.Empty;
}
public class VisitStudyTime
{
/// <summary>

View File

@ -88,6 +88,11 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
/// 首次转变的任务ID
/// </summary>
public Guid? firstChangeTaskId;
/// <summary>
/// 触发任务list
/// </summary>
public List<TirggerTaskInfo>? compareTaskList = null;
#endregion
#region 删除病灶获取起始病灶序号
@ -1704,24 +1709,92 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
{
var taskinfo = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).ProjectTo<VisitTaskDto>(_mapper.ConfigurationProvider).FirstNotNullAsync();
var lastTaskId = await GetLastVisitTaskId(inDto);
if (compareTaskList == null)
{
// 先找到第一个转变任务的number 直接找是否为转变任务 查询耗性能
var firstChangeVisitTaskNum = await _visitTaskRepository.Where(x => x.ReadingCategory == ReadingCategory.Visit &&
x.TrialReadingCriterionId == taskinfo.TrialReadingCriterionId &&
x.IsAnalysisCreate == taskinfo.IsAnalysisCreate &&
x.DoctorUserId == taskinfo.DoctorUserId &&
x.IsSelfAnalysis == taskinfo.IsSelfAnalysis &&
x.SubjectId == taskinfo.SubjectId && x.ReadingTaskState == ReadingTaskState.HaveSigned && x.ArmEnum == taskinfo.ArmEnum
&& x.BeforeConvertedTaskId != null && x.TaskState == TaskState.Effect
).OrderBy(x => x.VisitTaskNum).Select(x => x.VisitTaskNum).FirstOrDefaultAsync();
// 找到转变之后 所有任务
compareTaskList = await _visitTaskRepository.Where(x => x.ReadingCategory == ReadingCategory.Visit &&
x.TrialReadingCriterionId == taskinfo.TrialReadingCriterionId &&
x.IsAnalysisCreate == taskinfo.IsAnalysisCreate &&
x.DoctorUserId == taskinfo.DoctorUserId &&
x.IsSelfAnalysis == taskinfo.IsSelfAnalysis &&
x.SubjectId == taskinfo.SubjectId && x.ReadingTaskState == ReadingTaskState.HaveSigned && x.ArmEnum == taskinfo.ArmEnum &&
x.VisitTaskNum >= firstChangeVisitTaskNum && x.VisitTaskNum < taskinfo.VisitTaskNum && x.TaskState == TaskState.Effect
).OrderBy(x => x.VisitTaskNum).Select(x => new TirggerTaskInfo()
{
VisitTaskId = x.Id,
VisitNum = x.VisitTaskNum,
}).ToListAsync();
// 获取所有任务Id
var visitTaskids = compareTaskList.Select(x => x.VisitTaskId).ToList();
// 找到所有任务的靶病灶评估和非靶病灶评估
var answers = await _readingTaskQuestionAnswerRepository.Where(x => (x.ReadingQuestionTrial.QuestionType == QuestionType.TargetLesion || x.ReadingQuestionTrial.QuestionType == QuestionType.NewTargetLesion) &&
visitTaskids.Contains(x.VisitTaskId)
).Select(x => new TirggerAnswerInfo()
{
VisitTaskId = x.VisitTaskId,
Answer = x.Answer,
QuestionType = x.ReadingQuestionTrial.QuestionType.Value
}).ToListAsync();
compareTaskList.ForEach(x =>
{
x.TargetAssessmentIsIUorIC = answers.Any(x => questionType == QuestionType.TargetLesion && (x.Answer == TargetAssessment.iUPD.GetEnumInt() || x.Answer == TargetAssessment.iCPD.GetEnumInt()));
x.NewTargetLesionAssessmentIsIUorIC = answers.Any(x => questionType == QuestionType.TargetLesion && (x.Answer == NewTargetLesionAssessment.iUPD.GetEnumInt() || x.Answer == NewTargetLesionAssessment.iCPD.GetEnumInt()));
});
}
Guid? compareTaskId = null;
int index = 0;
switch (questionType)
{
case QuestionType.TargetLesion:
if (await _readingTaskQuestionAnswerRepository.AnyAsync(x => x.VisitTaskId == lastTaskId && x.ReadingQuestionTrial.QuestionType == QuestionType.TargetLesion &&
(x.Answer == TargetAssessment.iUPD.GetEnumInt() || x.Answer == TargetAssessment.iCPD.GetEnumInt())))
index = compareTaskList.FindLastIndex(x => x.TargetAssessmentIsIUorIC);
if (index == -1)
{
compareTaskId = lastTaskId;
return compareTaskList[0].VisitTaskId;
}
else if (index > 0 && !compareTaskList[index-1].TargetAssessmentIsIUorIC)
{
return compareTaskList[index-1].VisitTaskId;
}
else
{
return compareTaskList[0].VisitTaskId;
}
break;
case QuestionType.NewTargetLesion:
if (await _readingTaskQuestionAnswerRepository.AnyAsync(x => x.VisitTaskId == lastTaskId && x.ReadingQuestionTrial.QuestionType == QuestionType.TargetLesion &&
(x.Answer == NewTargetLesionAssessment.iUPD.GetEnumInt() || x.Answer == NewTargetLesionAssessment.iCPD.GetEnumInt())))
index = compareTaskList.FindLastIndex(x => x.NewTargetLesionAssessmentIsIUorIC);
if (index == -1)
{
compareTaskId = lastTaskId;
return compareTaskList[0].VisitTaskId;
}
else if (index > 0 && !compareTaskList[index - 1].NewTargetLesionAssessmentIsIUorIC)
{
return compareTaskList[index - 1].VisitTaskId;
}
else
{
return compareTaskList[0].VisitTaskId;
}
break;
}