diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/DicomInstanceModel.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/DicomInstanceModel.cs index a95065a2d..033e402f3 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/DicomInstanceModel.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/DicomInstanceModel.cs @@ -29,6 +29,9 @@ public string SliceThickness { get; set; } = String.Empty; + public string ImagePositionPatient { get; set; } + public string ImageOrientationPatient { get; set; } + } diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/InstanceService.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/InstanceService.cs index 0377588bf..7b057c5c8 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/InstanceService.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/InstanceService.cs @@ -29,6 +29,14 @@ namespace IRaCIS.Core.Application.Services .OrderBy(s => s.InstanceNumber).ThenBy(s => s.InstanceTime).ThenBy(s => s.CreateTime) .ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); + // ⭐ DICOM 空间排序(带兜底) + var sorted = DicomSortHelper.SortSlices( + list, + x => x.ImagePositionPatient, + x => x.ImageOrientationPatient, + x => x.InstanceNumber + ); + var seriesInfo = await _instanceRepository.Where(s => s.SeriesId == seriesId).Select(t => new { t.DicomSerie.ImageResizePath, @@ -38,7 +46,7 @@ namespace IRaCIS.Core.Application.Services t.DicomSerie.SubjectVisit.VisitName }).FirstOrDefaultAsync(); - return ResponseOutput.Ok(list, seriesInfo); + return ResponseOutput.Ok(sorted, seriesInfo); }