From 1ff6f32e8d67f42b70c9ee7b2ffc54c770e88378 Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Mon, 19 Dec 2022 13:06:30 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ReadingImageTaskService.cs | 11 ++++++ .../Service/Visit/DTO/VisitPointViewModel.cs | 14 +++++++ .../Service/Visit/SubjectVisitService.cs | 37 ++++++++++++++++--- 3 files changed, 56 insertions(+), 6 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs index 70dd590da..a6250cd0f 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs @@ -38,6 +38,7 @@ namespace IRaCIS.Application.Services private readonly IRepository _readingCriterionPageRepository; private readonly IRepository _readingJudgeInfoRepository; private readonly IRepository _readModuleRepository; + private readonly IRepository _dicomInstanceRepository; private readonly IRepository _readingCriterionDictionaryRepository; private readonly IRepository _tumorAssessmentRepository; private readonly IRepository _readingTableAnswerRowInfoRepository; @@ -71,6 +72,7 @@ namespace IRaCIS.Application.Services IRepository readingCriterionPageRepository, IRepository readingJudgeInfoRepository, IRepository readModuleRepository, + IRepository dicomInstanceRepository, IMemoryCache cache, IRepository readingCriterionDictionaryRepository, IRepository tumorAssessmentRepository, @@ -102,6 +104,7 @@ namespace IRaCIS.Application.Services this._readingCriterionPageRepository = readingCriterionPageRepository; this._readingJudgeInfoRepository = readingJudgeInfoRepository; this._readModuleRepository = readModuleRepository; + this._dicomInstanceRepository = dicomInstanceRepository; this._readingCriterionDictionaryRepository = readingCriterionDictionaryRepository; this._tumorAssessmentRepository = tumorAssessmentRepository; this._readingTableAnswerRowInfoRepository = readingTableAnswerRowInfoRepository; @@ -1063,6 +1066,14 @@ namespace IRaCIS.Application.Services SubmitTableQuestionOutDto result = new SubmitTableQuestionOutDto(); await VerifyTaskIsSign(inDto.VisitTaskId); + + if (inDto.InstanceId != null) + { + if (!(await _dicomInstanceRepository.AnyAsync(x => x.Id == inDto.InstanceId && x.SeriesId == inDto.SeriesId))) + { + throw new BusinessValidationFailedException($"InstanceId和SeriesId不对应!"); + } + } var questionInfo = await _readingQuestionTrialRepository.Where(x => x.Id == inDto.QuestionId).FirstNotNullAsync(); var criterionId = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).Select(x => x.TrialReadingCriterionId).FirstOrDefaultAsync(); var criterionInfo = await _readingQuestionCriterionTrialRepository.Where(x => x.Id == criterionId).FirstNotNullAsync(); diff --git a/IRaCIS.Core.Application/Service/Visit/DTO/VisitPointViewModel.cs b/IRaCIS.Core.Application/Service/Visit/DTO/VisitPointViewModel.cs index 20db50888..7ba3e36d1 100644 --- a/IRaCIS.Core.Application/Service/Visit/DTO/VisitPointViewModel.cs +++ b/IRaCIS.Core.Application/Service/Visit/DTO/VisitPointViewModel.cs @@ -189,6 +189,20 @@ namespace IRaCIS.Core.Application.Contracts public Guid? VisitTaskId { get; set; } } + + public class TempInstance + { + public Guid Id { get; set; } + public string Path { get; set; } + public int NumberOfFrames { get; set; } + public int InstanceNumber { get; set; } + + public int ShowOrder { get; set; } + + public decimal RowIndex { get; set; } + + } + public class VisitStudyDTO { public Guid StudyId { get; set; } diff --git a/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs b/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs index e6fc82e84..0ab81656f 100644 --- a/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs +++ b/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs @@ -284,7 +284,14 @@ namespace IRaCIS.Core.Application.Services { var result = new List(); - var thisRowinfo = await _readingTableAnswerRowInfoRepository.Where(x => x.VisitTaskId == indto.VisitTaskId && x.StudyId != null).OrderBy(x=>x.ReadingQuestionTrial.ShowOrder).ThenBy(x=>x.RowIndex).ToListAsync(); + var thisRowinfo = await _readingTableAnswerRowInfoRepository.Where(x => x.VisitTaskId == indto.VisitTaskId && x.StudyId != null).OrderBy(x=>x.ReadingQuestionTrial.ShowOrder).ThenBy(x=>x.RowIndex).Select(x=>new + { + x.ReadingQuestionTrial.ShowOrder, + x.RowIndex, + x.SeriesId, + x.StudyId, + x.InstanceId, + }).ToListAsync(); var taskInfo = await _visitTaskRepository.Where(x => x.Id == indto.VisitTaskId).FirstNotNullAsync(); @@ -292,8 +299,8 @@ namespace IRaCIS.Core.Application.Services if (taskInfo.ReadingTaskState == ReadingTaskState.HaveSigned) { - var thisStudyIds = thisRowinfo.Select(x => x.StudyId).Distinct().ToList(); - var thisSeriesIdIds = thisRowinfo.Where(x => x.SeriesId != null).Select(x => x.SeriesId).Distinct().ToList(); + var thisStudyIds = thisRowinfo.OrderBy(x=>x.ShowOrder).ThenBy(x=>x.RowIndex).Select(x => x.StudyId).Distinct().ToList(); + var thisSeriesIdIds = thisRowinfo.Where(x => x.SeriesId != null).OrderBy(x => x.ShowOrder).ThenBy(x => x.RowIndex).Select(x => x.SeriesId).Distinct().ToList(); if (thisRowinfo.Count > 0) { var thisVisitTaskStudy = await _repository.Where(t => thisStudyIds.Contains(t.Id)).Select(k => new VisitStudyDTO() @@ -318,13 +325,31 @@ namespace IRaCIS.Core.Application.Services { item.SeriesInstanceUid = string.Empty; - item.InstanceList = thisRowinfo.Where(y => y.InstanceId != null).Select(y => y.InstanceId.Value).Distinct().ToList(); + item.InstanceList = thisRowinfo.Where(y => y.InstanceId != null).OrderBy(x => x.ShowOrder).ThenBy(x => x.RowIndex).Select(y => y.InstanceId.Value).Distinct().ToList(); var tempInstanceList = await _repository.Where(t => item.InstanceList.Contains(t.Id)).OrderBy(t => t.InstanceNumber) - .Select(t => new { t.Path, t.NumberOfFrames,t.InstanceNumber }).ToListAsync(); + .Select(t => new TempInstance { + + Id=t.Id, + Path=t.Path, + NumberOfFrames=t.NumberOfFrames, + InstanceNumber = t.InstanceNumber }).ToListAsync(); - item.InstancePathList = tempInstanceList.OrderBy(t => t.InstanceNumber).SelectMany(u => + tempInstanceList.ForEach(x => + { + + var item = thisRowinfo.FirstOrDefault(y => y.InstanceId == x.Id); + if (item != null) + { + x.ShowOrder = item.ShowOrder; + x.RowIndex = item.RowIndex; + } + + }); + + + item.InstancePathList = tempInstanceList.OrderBy(x => x.ShowOrder).ThenBy(x => x.RowIndex).SelectMany(u => { if (u.NumberOfFrames > 1)