From 42e34b5e5c009917f2efe5683d1fbbbb74a827a8 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Thu, 26 Mar 2026 15:51:01 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=AE=BF=E8=A7=86=E6=A3=80?= =?UTF-8?q?=E6=9F=A5+=E5=BA=8F=E5=88=97=E6=8E=A5=E5=8F=A3=E6=8E=92?= =?UTF-8?q?=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/ImageAndDoc/SeriesService.cs | 14 ++++++++++++-- .../Service/Visit/SubjectVisitService.cs | 14 ++++++++++++-- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/SeriesService.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/SeriesService.cs index 59ecf2f34..e7fbd8947 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/SeriesService.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/SeriesService.cs @@ -46,13 +46,23 @@ namespace IRaCIS.Core.Application.Services var instanceList = await _scpInstanceRepository.Where(s => s.StudyId == studyId).IgnoreQueryFilters() .OrderBy(t => t.SeriesId).ThenBy(t => t.InstanceNumber) .ThenBy(s => s.InstanceTime).ThenBy(s => s.CreateTime) - .Select(t => new { t.SeriesId, t.Id, t.Path, t.NumberOfFrames, t.InstanceNumber, t.FileSize }).ToListAsync();//.GroupBy(u => u.SeriesId); + .Select(t => new { t.SeriesId, t.Id, t.Path, t.NumberOfFrames, t.InstanceNumber, t.FileSize, t.ImagePositionPatient, t.ImageOrientationPatient }).ToListAsync();//.GroupBy(u => u.SeriesId); foreach (var series in seriesList) { - series.InstanceInfoList = instanceList.Where(t => t.SeriesId == series.Id).OrderBy(t => t.InstanceNumber).Select(k => + var instances = instanceList.Where(x => x.SeriesId == series.Id); + + // ⭐ DICOM 空间排序(带兜底) + var sorted = DicomSortHelper.SortSlices( + instances, + x => x.ImagePositionPatient, + x => x.ImageOrientationPatient, + x => x.InstanceNumber + ); + + series.InstanceInfoList = sorted.Select(k => new InstanceBasicInfo() { Id = k.Id, diff --git a/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs b/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs index 9bf4dbc8a..a4f8a568d 100644 --- a/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs +++ b/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs @@ -270,7 +270,7 @@ namespace IRaCIS.Core.Application.Services var instanceList = await _dicomInstanceRepository.Where(t => studyIds.Contains(t.StudyId)).IgnoreQueryFilters() .WhereIf(isReading == 1, s => s.IsReading && s.IsDeleted == false) .WhereIf(isQCFinished, t => t.IsDeleted == false) - .Select(t => new { t.SeriesId, t.Id, t.InstanceNumber, t.Path, t.NumberOfFrames, t.HtmlPath, t.IsReading, t.IsDeleted, t.FileSize }).ToListAsync(); + .Select(t => new { t.SeriesId, t.Id, t.InstanceNumber, t.Path, t.NumberOfFrames, t.HtmlPath, t.IsReading, t.IsDeleted, t.FileSize, t.ImagePositionPatient, t.ImageOrientationPatient }).ToListAsync(); foreach (var t in studyList) { @@ -284,7 +284,17 @@ namespace IRaCIS.Core.Application.Services t.SeriesList.ForEach(series => { - series.InstanceInfoList = instanceList.Where(t => t.SeriesId == series.Id).OrderBy(t => t.InstanceNumber).Select(k => + var instances = instanceList.Where(x => x.SeriesId == series.Id); + + // ⭐ DICOM 空间排序(带兜底) + var sorted = DicomSortHelper.SortSlices( + instances, + x => x.ImagePositionPatient, + x => x.ImageOrientationPatient, + x => x.InstanceNumber + ); + + series.InstanceInfoList = sorted.Select(k => new InstanceBasicInfo() { Id = k.Id,