From 35687c01ec5a3663f569ea28dfd4dc0ed19f0c00 Mon Sep 17 00:00:00 2001 From: he <109787524@qq.com> Date: Wed, 17 Jan 2024 10:07:58 +0800 Subject: [PATCH] =?UTF-8?q?=E8=82=BF=E7=98=A4=E5=AD=A6=E9=98=85=E7=89=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Allocation/VisitTaskHelpeService.cs | 31 +++++++-- .../ReadingOncologyTaskService.cs | 68 ++++++++++++++++--- 2 files changed, 84 insertions(+), 15 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Allocation/VisitTaskHelpeService.cs b/IRaCIS.Core.Application/Service/Allocation/VisitTaskHelpeService.cs index 527b89236..131149a88 100644 --- a/IRaCIS.Core.Application/Service/Allocation/VisitTaskHelpeService.cs +++ b/IRaCIS.Core.Application/Service/Allocation/VisitTaskHelpeService.cs @@ -40,7 +40,8 @@ namespace IRaCIS.Core.Application.Service private readonly IRepository _readingTaskQuestionAnswerRepository; private readonly IRepository _readingTableAnswerRowInfoRepository; private readonly IRepository _readingTableQuestionAnswerRepository; - private readonly IRepository _readingTableQuestionTrialRepository; + private readonly IRepository _readingOncologyTaskInfoRepository; + private readonly IRepository _readingTableQuestionTrialRepository; private readonly IRepository _readingQuestionTrialRepository; private readonly IMapper _mapper; private readonly IUserInfo _userInfo; @@ -60,7 +61,8 @@ namespace IRaCIS.Core.Application.Service IRepository readingTaskQuestionAnswerRepository, IRepository readingTableAnswerRowInfoRepository, IRepository readingTableQuestionAnswerRepository, - IRepository readingTableQuestionTrialRepository, + IRepository ReadingOncologyTaskInfoRepository, + IRepository readingTableQuestionTrialRepository, IRepository readingQuestionTrialRepository, IRepository readingJudgeInfoRepository, IRepository taskAllocationRuleRepository, IMapper mapper, IUserInfo userInfo, IRepository visitTaskReReadingRepository, @@ -76,7 +78,8 @@ namespace IRaCIS.Core.Application.Service this._readingTaskQuestionAnswerRepository = readingTaskQuestionAnswerRepository; this._readingTableAnswerRowInfoRepository = readingTableAnswerRowInfoRepository; this._readingTableQuestionAnswerRepository = readingTableQuestionAnswerRepository; - this._readingTableQuestionTrialRepository = readingTableQuestionTrialRepository; + _readingOncologyTaskInfoRepository = ReadingOncologyTaskInfoRepository; + this._readingTableQuestionTrialRepository = readingTableQuestionTrialRepository; this._readingQuestionTrialRepository = readingQuestionTrialRepository; _provider = provider; _subjectVisitRepository = subjectVisitRepository; @@ -1606,11 +1609,12 @@ namespace IRaCIS.Core.Application.Service var oncologySubjectUser = await _subjectUserRepository.Where(x => x.SubjectId == item.SubjectId && x.ArmEnum == Arm.TumorArm && x.IsConfirmed && x.TrialReadingCriterionId == originalTaskInfo.TrialReadingCriterionId).FirstOrDefaultAsync(); item.VisitNum = await _readModuleRepository.Where(x => x.Id == item.ReadModuleId).Select(x => x.SubjectVisit.VisitNum).FirstOrDefaultAsync(); + var id= NewId.NextGuid(); - - var singleTask = await _visitTaskRepository.AddAsync(new VisitTask() + var singleTask = await _visitTaskRepository.AddAsync(new VisitTask() { - TrialId = trialId, + Id= id, + TrialId = trialId, SubjectId = item.SubjectId, IsUrgent = originalTaskInfo.IsUrgent, TaskName = item.ReadingName, @@ -1641,7 +1645,20 @@ namespace IRaCIS.Core.Application.Service currentMaxCodeInt = currentMaxCodeInt + 1; - _provider.Set($"{trialId}_{StaticData.CacheKey.TaskMaxCode}", currentMaxCodeInt, TimeSpan.FromMinutes(30)); + // 生成肿瘤学需要 肿瘤学阅片结果中基线,统一显示为NA + // 找到基线任务ID + var baseLineTaskId = await _visitTaskRepository.Where(x => x.TaskState == TaskState.Effect + && x.ArmEnum == originalTaskInfo.ArmEnum && x.VisitTaskNum == 0 && x.ReadingTaskState == ReadingTaskState.HaveSigned && x.TrialReadingCriterionId == originalTaskInfo.TrialReadingCriterionId).Select(x => x.Id).FirstNotNullAsync(); + await _readingOncologyTaskInfoRepository.AddAsync(new ReadingOncologyTaskInfo() + { + EvaluationResult = "-1", + OncologyTaskId = id, + VisitTaskId = baseLineTaskId, + SubjectId = originalTaskInfo.SubjectId, + TrialId = originalTaskInfo.TrialId + }); + + _provider.Set($"{trialId}_{StaticData.CacheKey.TaskMaxCode}", currentMaxCodeInt, TimeSpan.FromMinutes(30)); } break; } diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingOncologyTaskService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingOncologyTaskService.cs index a4ad78707..31359eadc 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingOncologyTaskService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingOncologyTaskService.cs @@ -151,18 +151,55 @@ namespace IRaCIS.Application.Services var oncologyReadingQuestions = await _readingOncologyTaskInfoRepository.Where(x => x.OncologyTaskId == inDto.VisitTaskId).ToListAsync(); // 上一次肿瘤学阅片 + var lastOncologyTask = await _visitTaskRepository.Where(x => + x.ReadingCategory == ReadingCategory.Oncology + && x.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId + && x.TaskState == TaskState.Effect + && x.ReadingTaskState == ReadingTaskState.HaveSigned + && x.IsAnalysisCreate == taskInfo.IsAnalysisCreate + && x.VisitTaskNum < taskInfo.VisitTaskNum + ).OrderByDescending(x => x.VisitTaskNum).FirstOrDefaultAsync(); + + List lastOncologyAnswerList= new List(); + + if (lastOncologyTask != null) + { + lastOncologyAnswerList= await _readingOncologyTaskInfoRepository.Where(x => x.OncologyTaskId == lastOncologyTask.Id).ToListAsync(); + + } - oncologyVisits.ForEach(x => + oncologyVisits.ForEach(x => { var oncologyData = oncologyReadingQuestions.Where(y => y.VisitTaskId == x.VisitTaskId).FirstOrDefault(); + var lastOncologyData = lastOncologyAnswerList.Where(y => y.VisitTaskId == x.VisitTaskId).FirstOrDefault(); - if (oncologyData != null) + var evaluationResult = string.Empty; + var evaluationReason = string.Empty; + if (oncologyData != null && !oncologyData.EvaluationResult.IsNullOrEmpty()) { - x.EvaluationResult = oncologyData.EvaluationResult; - x.EvaluationReason = oncologyData.EvaluationReason; + evaluationResult = oncologyData.EvaluationResult; } - x.QuestionList = globalTaskReadingInfo.TaskList.Where(y => x.VisitTaskId == y.VisitTaskId).SelectMany(y => y.AfterQuestionList).Where(x => x.GlobalAnswerType == GlobalAnswerType.Question) + else if (lastOncologyData != null && !lastOncologyData.EvaluationResult.IsNullOrEmpty()) + { + evaluationResult = lastOncologyData.EvaluationResult; + } + + + if (oncologyData != null && !oncologyData.EvaluationReason.IsNullOrEmpty()) + { + evaluationReason = oncologyData.EvaluationReason; + } + else if (lastOncologyData != null && !lastOncologyData.EvaluationReason.IsNullOrEmpty()) + { + evaluationReason = lastOncologyData.EvaluationReason; + } + + + x.EvaluationResult = evaluationResult; + x.EvaluationReason = evaluationReason; + + x.QuestionList = globalTaskReadingInfo.TaskList.Where(y => x.VisitTaskId == y.VisitTaskId).SelectMany(y => y.AfterQuestionList).Where(x => x.GlobalAnswerType == GlobalAnswerType.Question) .Select(y => new OncologyQuestion { QuestionId = y.QuestionId ?? default(Guid), @@ -295,7 +332,7 @@ namespace IRaCIS.Application.Services finishReading = true; } - else if (judgeVisitTaskId != null && (await _visitTaskRepository.AnyAsync(x => x.Id == judgeVisitTaskId.Value && x.ReadingTaskState == ReadingTaskState.HaveSigned))) + else if (judgeVisitTaskId != null && (await _visitTaskRepository.AnyAsync(x => x.Id == judgeVisitTaskId.Value&&x.JudgeResultTaskId!=null && x.ReadingTaskState == ReadingTaskState.HaveSigned))) { finishReading = true; } @@ -328,9 +365,24 @@ namespace IRaCIS.Application.Services ReadingCategory = ReadingCategory.Oncology, }); - var originalVisitId = await _visitTaskRepository.Where(x => x.SouceReadModuleId == globalreadModuleId && x.TaskState == TaskState.Effect && x.ReadingCategory == ReadingCategory.Global + var originalVisit = await _visitTaskRepository.Where(x => x.SouceReadModuleId == globalreadModuleId && x.TaskState == TaskState.Effect && x.ReadingCategory == ReadingCategory.Global && x.ReadingTaskState == ReadingTaskState.HaveSigned && !x.IsAnalysisCreate && x.TrialReadingCriterionId == readModuleInfo.TrialReadingCriterionId - ).Select(x => x.Id).FirstOrDefaultAsync(); + ).OrderByDescending(x => x.VisitTaskNum).ThenBy(x => x.ArmEnum).FirstNotNullAsync(); + + var originalVisitId = default(Guid); + + if (originalVisit.JudgeVisitTaskId != null) + { + originalVisitId = (await _visitTaskRepository.Where(x => x.Id == originalVisit.JudgeVisitTaskId).Select(x => x.JudgeResultTaskId).FirstOrDefaultAsync()) ?? originalVisit.Id; + + } + else + { + originalVisitId = originalVisit.Id; + + } + + await _visitTaskHelpeService.AddTaskAsync(new GenerateTaskCommand() { OriginalVisitId= originalVisitId,