From 9296871b28fd2ecba26da38a220ba31cc6cddb1a Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Tue, 31 Jan 2023 13:46:03 +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 --- .../ReadingGlobalTaskService.cs | 27 +++- .../ReadingImageTaskService.cs | 129 +++++++++++++++--- .../ReadingJudgeTaskService.cs | 16 ++- .../ReadingOncologyTaskService.cs | 19 ++- .../GeneralCalculateService.cs | 23 ++-- IRaCIS.Core.Domain/Allocation/VisitTask.cs | 60 ++++++++ IRaCIS.Core.Domain/SQLFile/Test.sql | 7 + 7 files changed, 239 insertions(+), 42 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingGlobalTaskService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingGlobalTaskService.cs index 3216bc837..f58311ba6 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingGlobalTaskService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingGlobalTaskService.cs @@ -169,14 +169,31 @@ namespace IRaCIS.Application.Services result.JudgeTaskId = judgeInfo.Id; result.JudgeTaskName = judgeInfo.TaskBlindName; } - + // 一致性分析按照doctorId 其他按照分组 - result.TaskList = await _visitTaskRepository.Where(x => x.ReadingCategory == ReadingCategory.Visit && - x.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId && - x.SubjectId == taskInfo.SubjectId && x.IsAnalysisCreate == taskInfo.IsAnalysisCreate && x.TaskState == TaskState.Effect && x.VisitTaskNum < taskInfo.VisitTaskNum) - .Where(x => x.DoctorUserId == taskInfo.DoctorUserId) + + var queruTask = _visitTaskRepository.Where(x => + x.TrialId == taskInfo.TrialId && + x.SubjectId == taskInfo.SubjectId && + x.ReadingCategory == ReadingCategory.Visit && + x.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId && + x.ReadingTaskState == ReadingTaskState.HaveSigned && + x.IsAnalysisCreate == taskInfo.IsAnalysisCreate && + x.ArmEnum == taskInfo.ArmEnum && + x.IsSelfAnalysis == taskInfo.IsSelfAnalysis && + x.DoctorUserId == taskInfo.DoctorUserId && + x.TaskState == TaskState.Effect && + x.VisitTaskNum < taskInfo.VisitTaskNum); + + + if (taskInfo.ReadingTaskState == ReadingTaskState.HaveSigned) + { + queruTask = _visitTaskRepository.Where(x => taskInfo.RelatedVisitTaskIdList.Contains(x.Id)); + } + + result.TaskList = await queruTask .OrderBy(x => x.VisitTaskNum).Select(x => new GlobalVisitInfo() { VisitName = x.TaskName, diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs index 2d8f2daf7..adb804650 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs @@ -282,9 +282,9 @@ namespace IRaCIS.Application.Services { var taskInfo = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).Include(x => x.TrialReadingCriterion).FirstNotNullAsync(); var baselineVisitId = await _subjectVisitRepository.Where(x => x.SubjectId == taskInfo.SubjectId && x.IsBaseLine && !x.IsLostVisit).Select(x => x.Id).FirstNotNullAsync(); - var result = await _visitTaskRepository - .WhereIf(taskInfo.TaskState != TaskState.Effect, x => x.Id == inDto.VisitTaskId) - .Where(x => + + + var taskQuery = _visitTaskRepository.Where(x => (x.TrialId == taskInfo.TrialId && x.SubjectId == taskInfo.SubjectId && x.ArmEnum == taskInfo.ArmEnum && @@ -294,7 +294,14 @@ namespace IRaCIS.Application.Services x.TaskState == TaskState.Effect && x.VisitTaskNum <= taskInfo.VisitTaskNum && x.IsAnalysisCreate == taskInfo.IsAnalysisCreate && - x.ReadingCategory == ReadingCategory.Visit) || x.Id == inDto.VisitTaskId) + x.ReadingCategory == ReadingCategory.Visit) || x.Id == inDto.VisitTaskId); + + if (taskInfo.ReadingTaskState == ReadingTaskState.HaveSigned) + { + taskQuery = _visitTaskRepository.Where(x => taskInfo.RelatedVisitTaskIdList.Contains(x.Id)); + } + + var result = await taskQuery .Select(x => new GetRelatedVisitTaskOutDto() { TaskBlindName = x.TaskBlindName, @@ -327,20 +334,28 @@ namespace IRaCIS.Application.Services public async Task> GetReadingPastResultList(GetReadingPastResultListInDto inDto) { var taskInfo = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).FirstNotNullAsync(); - var readingPastResultList = await _visitTaskRepository.Where(x => - x.TrialId == taskInfo.TrialId && - x.SubjectId == taskInfo.SubjectId && - x.VisitTaskNum <= taskInfo.VisitTaskNum && - x.ArmEnum == taskInfo.ArmEnum && - x.Id != inDto.VisitTaskId && - x.DoctorUserId == taskInfo.DoctorUserId && - x.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId && - x.ReadingTaskState == ReadingTaskState.HaveSigned && - x.TaskState == TaskState.Effect && - x.IsSelfAnalysis == taskInfo.IsSelfAnalysis&& - x.IsAnalysisCreate == taskInfo.IsAnalysisCreate) - .WhereIf(taskInfo.ReadingCategory != ReadingCategory.Visit, x => x.ReadingCategory == taskInfo.ReadingCategory) + var taskQuery = _visitTaskRepository.Where(x => + x.TrialId == taskInfo.TrialId && + x.SubjectId == taskInfo.SubjectId && + x.VisitTaskNum <= taskInfo.VisitTaskNum && + x.ArmEnum == taskInfo.ArmEnum && + x.Id != inDto.VisitTaskId && + x.DoctorUserId == taskInfo.DoctorUserId && + x.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId && + x.ReadingTaskState == ReadingTaskState.HaveSigned && + x.TaskState == TaskState.Effect && + x.IsSelfAnalysis == taskInfo.IsSelfAnalysis && + x.IsAnalysisCreate == taskInfo.IsAnalysisCreate && + x.ReadingCategory == taskInfo.ReadingCategory + ); + + if (taskInfo.ReadingTaskState == ReadingTaskState.HaveSigned) + { + taskQuery = _visitTaskRepository.Where(x => taskInfo.RelatedVisitTaskIdList.Contains(x.Id)); + } + + var readingPastResultList = await taskQuery .ProjectTo(_mapper.ConfigurationProvider).OrderBy(x => x.VisitTaskNum).ToListAsync(); return readingPastResultList; } @@ -1931,6 +1946,8 @@ namespace IRaCIS.Application.Services // 完成阅片修改状态 //await this.FinishReadUpdateState(visitTaskId); + // 创建任务关联关系 + await this.CreateTaskRelated(visitTaskId); await _visitTaskRepository.SaveChangesAsync(); @@ -1938,6 +1955,84 @@ namespace IRaCIS.Application.Services } + /// + /// 签名时创建任务关联 + /// + /// + private async Task CreateTaskRelated(Guid visitTaskId) + { + var taskInfo = await _visitTaskRepository.Where(x => x.Id == visitTaskId).FirstNotNullAsync(); + + + // 判断是否有序阅片 + + var isReadingTaskViewInOrder = await _readingQuestionCriterionTrialRepository.Where(x => x.Id == taskInfo.TrialReadingCriterionId).Select(x => x.IsReadingTaskViewInOrder).FirstNotNullAsync(); + + // 判断任务类型 + + // 关联Id + List relatedVisitTaskIdList = new List(); + + // 既往任务Id + List pastResultTaskIdList = new List(); + + + if (isReadingTaskViewInOrder) + { + pastResultTaskIdList = await _visitTaskRepository.Where(x => + x.TrialId == taskInfo.TrialId && + x.SubjectId == taskInfo.SubjectId && + x.VisitTaskNum < taskInfo.VisitTaskNum && + x.ArmEnum == taskInfo.ArmEnum && + x.DoctorUserId == taskInfo.DoctorUserId && + x.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId && + x.ReadingTaskState == ReadingTaskState.HaveSigned && + x.TaskState == TaskState.Effect && + x.IsSelfAnalysis == taskInfo.IsSelfAnalysis && + x.IsAnalysisCreate == taskInfo.IsAnalysisCreate && + x.ReadingCategory == taskInfo.ReadingCategory && + x.Id != taskInfo.Id + ).Select(x => x.Id).ToListAsync(); + + switch (taskInfo.ReadingCategory) + { + case ReadingCategory.Visit: + case ReadingCategory.Global: + case ReadingCategory.Oncology: + relatedVisitTaskIdList = await _visitTaskRepository.Where(x => + x.TrialId == taskInfo.TrialId && + x.SubjectId == taskInfo.SubjectId && + x.ReadingCategory == ReadingCategory.Visit && + x.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId && + x.ReadingTaskState == ReadingTaskState.HaveSigned && + x.IsAnalysisCreate == taskInfo.IsAnalysisCreate && + x.ArmEnum == taskInfo.ArmEnum && + x.IsSelfAnalysis == taskInfo.IsSelfAnalysis && + x.DoctorUserId == taskInfo.DoctorUserId && + x.TaskState == TaskState.Effect && x.VisitTaskNum <= taskInfo.VisitTaskNum).Select(x => x.Id).ToListAsync(); + break; + } + } + else + { + if (taskInfo.ReadingCategory == ReadingCategory.Visit) + { + relatedVisitTaskIdList.Add(taskInfo.Id); + } + } + + await _visitTaskRepository.UpdatePartialFromQueryAsync(taskInfo.Id, x => new VisitTask() + { + + PastResultTaskIds = JsonConvert.SerializeObject(pastResultTaskIdList), + RelatedVisitTaskIds = JsonConvert.SerializeObject(relatedVisitTaskIdList), + }); + + await _visitTaskRepository.SaveChangesAsync(); + } + + + /// /// 阅片期 -全局和肿瘤学任务的生成 /// diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingJudgeTaskService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingJudgeTaskService.cs index 0227a40a0..a3eca9eb2 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingJudgeTaskService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingJudgeTaskService.cs @@ -123,13 +123,11 @@ namespace IRaCIS.Application.Services // 判断是否是全局访视任务 if (await VerifyIsGlobalVisitTask(taskList[0].Id)) { - + + var globalVisitTaskIds = await _visitTaskRepository.Where(x=>x.Id== taskList[0].Id).Select(x=>x.RelatedVisitTaskIdList).FirstNotNullAsync(); + // 找到所有的的任务 - var globalVisitTasks = await _visitTaskRepository.Where(x => x.ReadingTaskState == ReadingTaskState.HaveSigned && x.ReadingCategory != ReadingCategory.Judge - && x.TaskState == TaskState.Effect - && x.TrialReadingCriterionId == taskList[0].TrialReadingCriterionId - && x.IsAnalysisCreate == false - && x.ReadingCategory == ReadingCategory.Visit && x.VisitTaskNum <= taskList[0].VisitTaskNum).Select(x => new { + var globalVisitTasks = await _visitTaskRepository.Where(x => globalVisitTaskIds.Contains(x.Id)).Select(x => new { x.Id, x.ArmEnum, x.VisitTaskNum, @@ -137,7 +135,7 @@ namespace IRaCIS.Application.Services x.TaskBlindName, } ).ToListAsync(); - var globalVisitTaskIds = globalVisitTasks.Select(x => x.Id).ToList(); + var taskNum = globalVisitTasks.Select(x => x.VisitTaskNum).Distinct().OrderBy(x=>x).ToList(); @@ -394,6 +392,10 @@ namespace IRaCIS.Application.Services var result = await _visitTaskRepository.SaveChangesAsync(); + + + // 创建任务关联关系 + await this.CreateTaskRelated(inDto.VisitTaskId); return ResponseOutput.Ok(result); } diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingOncologyTaskService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingOncologyTaskService.cs index 798a34f66..6a784f08d 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingOncologyTaskService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingOncologyTaskService.cs @@ -93,10 +93,18 @@ namespace IRaCIS.Application.Services // 找到对应的访视 - List oncologyVisits = await _visitTaskRepository.Where(x => x.ReadingCategory == ReadingCategory.Visit && - x.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId && - x.SubjectId == visitTask.SubjectId && x.IsAnalysisCreate == visitTask.IsAnalysisCreate && x.TaskState == TaskState.Effect && x.VisitTaskNum < visitTask.VisitTaskNum) - .Where(x => x.DoctorUserId == visitTask.DoctorUserId) + List oncologyVisits = await _visitTaskRepository.Where(x => + x.TrialId == taskInfo.TrialId && + x.SubjectId == taskInfo.SubjectId && + x.ReadingCategory == ReadingCategory.Visit && + x.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId && + x.ReadingTaskState == ReadingTaskState.HaveSigned && + x.IsAnalysisCreate == taskInfo.IsAnalysisCreate && + x.ArmEnum == taskInfo.ArmEnum && + x.IsSelfAnalysis == taskInfo.IsSelfAnalysis && + x.DoctorUserId == taskInfo.DoctorUserId && + x.TaskState == TaskState.Effect && + x.VisitTaskNum < taskInfo.VisitTaskNum) .OrderBy(x => x.VisitTaskNum).Select(x => new OncologyVisitTaskInfo() { VisitName = x.SourceSubjectVisit.VisitName, @@ -305,6 +313,9 @@ namespace IRaCIS.Application.Services SignTime = DateTime.Now, }); await _visitTaskRepository.SaveChangesAsync(); + + // 创建任务关联关系 + await this.CreateTaskRelated(inDto.OncologyTaskId); return ResponseOutput.Ok(true); } } diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/GeneralCalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/GeneralCalculateService.cs index 652008095..34c716571 100644 --- a/IRaCIS.Core.Application/Service/ReadingCalculate/GeneralCalculateService.cs +++ b/IRaCIS.Core.Application/Service/ReadingCalculate/GeneralCalculateService.cs @@ -150,18 +150,23 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate { var visitTaskInfo = await _visitTaskRepository.Where(x => x.Id == visitTaskId).FirstNotNullAsync(); - var taskInfoList = await _visitTaskRepository - // 失效的只查看自己 - .WhereIf(visitTaskInfo.TaskState != TaskState.Effect, x => x.Id == visitTaskId) - .Where(x => (x.SubjectId == visitTaskInfo.SubjectId && x.TaskState == TaskState.Effect - && x.IsAnalysisCreate == visitTaskInfo.IsAnalysisCreate - &&x.DoctorUserId==visitTaskInfo.DoctorUserId - && x.IsSelfAnalysis == visitTaskInfo.IsSelfAnalysis - && x.VisitTaskNum<= visitTaskInfo.VisitTaskNum + var taskquery = _visitTaskRepository + .Where(x => (x.SubjectId == visitTaskInfo.SubjectId && x.TaskState == TaskState.Effect + && x.IsAnalysisCreate == visitTaskInfo.IsAnalysisCreate + && x.DoctorUserId == visitTaskInfo.DoctorUserId + && x.IsSelfAnalysis == visitTaskInfo.IsSelfAnalysis + && x.VisitTaskNum <= visitTaskInfo.VisitTaskNum && x.ArmEnum == visitTaskInfo.ArmEnum && x.TrialReadingCriterionId == visitTaskInfo.TrialReadingCriterionId && x.ReadingCategory == ReadingCategory.Visit && x.ReadingTaskState == ReadingTaskState.HaveSigned) || x.Id == visitTaskId - ).OrderBy(x => x.VisitTaskNum).Select(x => new VisitTaskInfo() + ); + if(visitTaskInfo.ReadingTaskState==ReadingTaskState.HaveSigned) + { + taskquery = _visitTaskRepository.Where(x => visitTaskInfo.RelatedVisitTaskIdList.Contains(x.Id)); + } + + + var taskInfoList = await taskquery.OrderBy(x => x.VisitTaskNum).Select(x => new VisitTaskInfo() { BlindName = x.TaskBlindName, IsBaseLine = x.SourceSubjectVisit.IsBaseLine, diff --git a/IRaCIS.Core.Domain/Allocation/VisitTask.cs b/IRaCIS.Core.Domain/Allocation/VisitTask.cs index e766565f0..b051f5dde 100644 --- a/IRaCIS.Core.Domain/Allocation/VisitTask.cs +++ b/IRaCIS.Core.Domain/Allocation/VisitTask.cs @@ -175,6 +175,64 @@ namespace IRaCIS.Core.Domain.Models /// public bool IsReadClinicalData { get; set; } = false; + /// + /// 关联的访视任务ID (当前任务是访视任务的话会有自己) + /// + public string RelatedVisitTaskIds { get; set; } = "[]"; + + /// + /// 关联的访视任务ID (当前任务是访视任务的话会有自己)集合 + /// + [NotMapped] + public List RelatedVisitTaskIdList + { + get + { + + try + { + + return this.RelatedVisitTaskIds.Trim().Split(',').Select(x=>Guid.Parse(x)).ToList(); + } + catch (Exception) + { + + return new List(); + } + + } + } + + /// + /// 既往任务Id 不包括自己 + /// + + public string PastResultTaskIds { get; set; } = "[]"; + + + + /// + /// 既往任务Id 不包括自己集合 + /// + [NotMapped] + public List PastResultTaskIdList + { + get + { + + try + { + + return this.PastResultTaskIds.Trim().Split(',').Select(x => Guid.Parse(x)).ToList(); + } + catch (Exception) + { + + return new List(); + } + + } + } #region 裁判任务特有 @@ -231,6 +289,8 @@ namespace IRaCIS.Core.Domain.Models //前序任务需要签名 但是未签名 public bool IsFrontTaskNeedSignButNotSign { get; set; } + + [JsonIgnore] public Trial Trial { get; set; } diff --git a/IRaCIS.Core.Domain/SQLFile/Test.sql b/IRaCIS.Core.Domain/SQLFile/Test.sql index 40e455073..59278f9fb 100644 --- a/IRaCIS.Core.Domain/SQLFile/Test.sql +++ b/IRaCIS.Core.Domain/SQLFile/Test.sql @@ -421,6 +421,13 @@ GROUP BY V.TrialId, V.SubjectId, V.SouceReadModuleId , V.TrialReadingCriterion HAVING Count(*)>2 +---------------------维护表格问题ID +update ReadingTableQuestionTrial set ReadingTableQuestionTrial.SystemTableQuestionId= ReadingTableQuestionSystem.Id from ReadingTableQuestionSystem +inner join ReadingTableQuestionTrial on ReadingTableQuestionSystem.QuestionName=ReadingTableQuestionTrial.QuestionName +inner join ReadingQuestionTrial on ReadingTableQuestionTrial.ReadingQuestionId=ReadingQuestionTrial.Id and ReadingQuestionTrial.ReadingQuestionSystemId=ReadingTableQuestionSystem.ReadingQuestionId + +where ReadingQuestionTrial.ReadingQuestionSystemId is not null and ReadingTableQuestionTrial.SystemTableQuestionId is null +