diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/PCWG3CalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/PCWG3CalculateService.cs index d78ac77a5..3335709fe 100644 --- a/IRaCIS.Core.Application/Service/ReadingCalculate/PCWG3CalculateService.cs +++ b/IRaCIS.Core.Application/Service/ReadingCalculate/PCWG3CalculateService.cs @@ -473,7 +473,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate // 间隔天数 new ReadingCalculateData (){QuestionType=QuestionType.DaysBetween,GetIntFun=GetNumberOfDaysBetween}, - // 自治疗后第二个访视点以来持续的新骨病变数量 + // 访视点肿瘤评估 new ReadingCalculateData (){QuestionType=QuestionType.SiteVisitForTumorEvaluation,GetStringFun=GetSiteVisitForTumorEvaluation}, @@ -718,11 +718,15 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate /// public async Task GetSiteVisitForTumorEvaluation(ReadingCalculateDto inDto) { - await ChangeLastTaskSiteVisitForTumorEvaluation(inDto); + var isPD= await ChangeLastTaskSiteVisitForTumorEvaluation(inDto); var newLesionsCount = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.NewLesionsCount).Select(x => x.Answer).FirstOrDefault().IsNullOrEmptyReturn0(); var baseLineLesionsCount = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.BaseLineLesionsCount).Select(x => x.Answer).FirstOrDefault().IsNullOrEmptyReturn0(); var alwaysNewLesionsCount = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.AlwaysNewLesionsCount).Select(x => x.Answer).FirstOrDefault().IsNullOrEmptyReturn0(); - if (newLesionsCount == 0 && + + if (isPD) + { + return VisitTumorEvaluation.PD.GetEnumInt(); + }else if (newLesionsCount == 0 && baseLineLesionsCount == 0 && alwaysNewLesionsCount == 0) { @@ -739,7 +743,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate /// /// /// - public async Task ChangeLastTaskSiteVisitForTumorEvaluation(ReadingCalculateDto inDto) + public async Task ChangeLastTaskSiteVisitForTumorEvaluation(ReadingCalculateDto inDto) { var taskinfo = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).FirstNotNullAsync(); var taskList =await GetSiteVisitForTumorList(inDto); @@ -752,41 +756,51 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate if (lastTask != null) { - var lastTasknewLesionsCount = (await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == lastTask.VisitTaskId && x.ReadingQuestionTrialId == newLesionsCountQuestionId).Select(x => x.Answer).FirstOrDefaultAsync()).IsNullOrEmptyReturn0(); - if (lastTask.VisitTaskNum == 1m) + + #region 1、基线后第一个访视:新病灶计数≥ 2个;2、基线后第二个访视(应满足访视间隔6周以上,否则顺延)新病灶≥ 2个; + //1、基线后第一个访视:新病灶计数≥ 2个;2、基线后第二个访视(应满足访视间隔6周以上,否则顺延)新病灶≥ 2个; + + + var firstVisit = taskList.FirstOrDefault(); + + //基线后第二个访视(应满足访视间隔6周以上,否则顺延) + var secondVisit = taskList.Where(x => x.VisitTaskNum >= 2 && x.EarliestScanDate >= baseLineTask.LatestScanDate.AddDays(42)).FirstOrDefault(); + if (secondVisit != null) { - //基线后第二个访视(应满足访视间隔6周以上,否则顺延) - var secondVisit = taskList.Where(x => x.VisitTaskNum >= 2 && x.EarliestScanDate >= baseLineTask.LatestScanDate.AddDays(42)).FirstOrDefault(); - if (secondVisit != null) + + 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) { - - // 第二访视数量 - 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 (lastTasknewLesionsCount >= 2 && secondVisitLesionsCount >= 2) - { - isPDResult = true; - } + secondVisitLesionsCount = (inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.NewLesionsCount).Select(x => x.Answer).FirstOrDefault()).IsNullOrEmptyReturn0(); } - } - else - { - var thisVisitTaskNewLesionsCount= (inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.NewLesionsCount).Select(x => x.Answer).FirstOrDefault()).IsNullOrEmptyReturn0(); - - var thisVisitTask = taskList.LastOrDefault(); - - if (lastTasknewLesionsCount >= 2 && thisVisitTaskNewLesionsCount >= 2&&lastTask.LatestScanDate.AddDays(42)<= thisVisitTask.EarliestScanDate) + if (firstTaskNewLesionsCount >= 2 && secondVisitLesionsCount >= 2) { 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 (lastTasknewLesionsCount >= 2 && thisVisitTaskNewLesionsCount >= 2 && lastTask.LatestScanDate.AddDays(42) <= thisVisitTask.EarliestScanDate) + { + isPDResult = true; + } } } if (isPDResult) @@ -800,6 +814,9 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate }); } + + + return isPDResult; } #endregion diff --git a/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs b/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs index f9edbff67..7a898cd8a 100644 --- a/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs +++ b/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs @@ -265,15 +265,17 @@ namespace IRaCIS.Core.Application.Services // 非Dicom - //var noDicomStudyList = _noneDicomStudyRepository.Where(x => x.TrialId == trialId && x.SubjectVisitId == sujectVisitId).Select(x => new VisitStudyDTO() - //{ - // InstanceCount = x.FileCount, - // Modalities = x.Modalities, - // SeriesCount = x.SeriesCount, - // StudyCode = x.StudyCode, - // StudyId = x.Id, - // IsDicom = false, - //}).ToListAsync(); + var noDicomStudyList = _noneDicomStudyRepository.Where(x => x.TrialId == trialId && x.SubjectVisitId == sujectVisitId).Select(x => new VisitStudyDTO() + { + InstanceCount = x.FileCount, + + // + Modalities = string.Empty, + SeriesCount = 1, + StudyCode = x.StudyCode, + StudyId = x.Id, + IsDicom = false, + }).ToListAsync(); return studyList;