From 1d3e324b9af535293d337312d715a090db7f9f93 Mon Sep 17 00:00:00 2001
From: he <10978375@qq.com>
Date: Mon, 5 Jun 2023 14:33:58 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../IRaCIS.Core.Application.xml | 2 +-
.../Dto/CriterionCalculateDto.cs | 23 ++++-
.../IRECIST1Point1CalculateService.cs | 91 +++++++++++++++++--
3 files changed, 105 insertions(+), 11 deletions(-)
diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
index 95ce32241..67429a1a6 100644
--- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
+++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
@@ -1233,7 +1233,7 @@
-
+
测试计算
diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/Dto/CriterionCalculateDto.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/Dto/CriterionCalculateDto.cs
index 39ae896be..5e9f7d556 100644
--- a/IRaCIS.Core.Application/Service/ReadingCalculate/Dto/CriterionCalculateDto.cs
+++ b/IRaCIS.Core.Application/Service/ReadingCalculate/Dto/CriterionCalculateDto.cs
@@ -22,8 +22,29 @@ namespace IRaCIS.Core.Application.ViewModel
public decimal VisitNum { get; set; }
- public string TumorAnswer { get; set; } = string.Empty;
+ ///
+ /// 靶病灶是否为IUPD或者ICPD
+ ///
+ public bool TargetAssessmentIsIUorIC { get; set; }
+
+ ///
+ /// 靶病灶是否为IUPD或者ICPD
+ ///
+ 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
{
///
diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/IRECIST1Point1CalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/IRECIST1Point1CalculateService.cs
index 3c9ce3764..d85d7986d 100644
--- a/IRaCIS.Core.Application/Service/ReadingCalculate/IRECIST1Point1CalculateService.cs
+++ b/IRaCIS.Core.Application/Service/ReadingCalculate/IRECIST1Point1CalculateService.cs
@@ -88,6 +88,11 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
/// 首次转变的任务ID
///
public Guid? firstChangeTaskId;
+
+ ///
+ /// 触发任务list
+ ///
+ public List? 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(_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;
}