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; }