From 038353f8f82344fd1e813ddbe08c4852c204ff28 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Wed, 26 Aug 2026 13:08:56 +0800 Subject: [PATCH] =?UTF-8?q?=20Dixon=20=20=E6=8E=92=E5=BA=8F=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Helper/OtherTool/DicomSortHelper.cs | 5 ++++- .../IRaCIS.Core.Application.xml | 21 ++++++++++++++++--- .../Service/ImageAndDoc/InstanceService.cs | 7 +++++-- .../Service/ImageAndDoc/SeriesService.cs | 18 +++++++++++++--- .../Service/Visit/SubjectVisitService.cs | 9 +++++--- 5 files changed, 48 insertions(+), 12 deletions(-) diff --git a/IRaCIS.Core.Application/Helper/OtherTool/DicomSortHelper.cs b/IRaCIS.Core.Application/Helper/OtherTool/DicomSortHelper.cs index 7ae24842d..296394ce9 100644 --- a/IRaCIS.Core.Application/Helper/OtherTool/DicomSortHelper.cs +++ b/IRaCIS.Core.Application/Helper/OtherTool/DicomSortHelper.cs @@ -1080,12 +1080,15 @@ public static class DicomSortHelper IEnumerable source, Func ippSelector, Func iopSelector, - Func instanceNumberSelector) + Func instanceNumberSelector,string seriesDescription) { var list = source.ToList(); if (list.Count < 2) return list; + if(seriesDescription.Contains("Dixon", StringComparison.OrdinalIgnoreCase)) + return list.OrderBy(instanceNumberSelector).ToList(); + var first = list[0]; var reference = ParseVector(ippSelector(first)); diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml index 4878aee9c..4d512ba92 100644 --- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml +++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml @@ -1787,7 +1787,7 @@ - + 项目影像后台下载,不打包 @@ -10621,6 +10621,16 @@ 裁判结果的备注 + + + 本次生成裁判的触发问题(包含自动计算题追溯到的源问题) + + + + + 是否为本次生成裁判的触发问题 + + 排序 @@ -15402,6 +15412,11 @@ 获取裁判表单 + + + 重新按当前访视的裁判规则计算实际触发裁判的问题。 + + 编辑裁判表单 @@ -15471,7 +15486,7 @@ - + 计算返回的结果 为True表示不相等 @@ -16862,7 +16877,7 @@ - + DICOM Slice 排序(IPP + IOP) 自动 fallback InstanceNumber diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/InstanceService.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/InstanceService.cs index 7b057c5c8..33c18d181 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/InstanceService.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/InstanceService.cs @@ -9,7 +9,7 @@ namespace IRaCIS.Core.Application.Services { [ApiExplorerSettings(GroupName = "Image")] [AllowAnonymous] - public class InstanceService(IRepository _instanceRepository, + public class InstanceService(IRepository _instanceRepository, IRepository _seriesRepository, IMapper _mapper, IUserInfo _userInfo, IStringLocalizer _localizer, IWebHostEnvironment _hostEnvironment) : BaseService, IInstanceService { @@ -29,12 +29,15 @@ namespace IRaCIS.Core.Application.Services .OrderBy(s => s.InstanceNumber).ThenBy(s => s.InstanceTime).ThenBy(s => s.CreateTime) .ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); + var des = _seriesRepository.Where(t => t.Id == seriesId).Select(t => t.Description).FirstOrDefault(); + // ⭐ DICOM 空间排序(带兜底) var sorted = DicomSortHelper.SortSlices( list, x => x.ImagePositionPatient, x => x.ImageOrientationPatient, - x => x.InstanceNumber + x => x.InstanceNumber, + des ); var seriesInfo = await _instanceRepository.Where(s => s.SeriesId == seriesId).Select(t => new diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/SeriesService.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/SeriesService.cs index f86a2b7d0..7db62c71f 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/SeriesService.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/SeriesService.cs @@ -59,7 +59,8 @@ namespace IRaCIS.Core.Application.Services instances, x => x.ImagePositionPatient, x => x.ImageOrientationPatient, - x => x.InstanceNumber + x => x.InstanceNumber, + series.Description ); series.InstanceInfoList = sorted.Select(k => @@ -104,13 +105,24 @@ namespace IRaCIS.Core.Application.Services .WhereIf(isReading == true, t => t.IsReading == true) .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.HtmlPath, t.IsReading, t.IsDeleted, t.FileSize ,t.IsMasked}).ToListAsync();//.GroupBy(u => u.SeriesId); + .Select(t => new { t.SeriesId, t.Id, t.Path, t.NumberOfFrames, t.InstanceNumber, t.HtmlPath, t.IsReading, t.IsDeleted, t.FileSize ,t.IsMasked, 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.Description + ); + + 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 e0a58d493..7f0fbd228 100644 --- a/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs +++ b/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs @@ -292,7 +292,8 @@ namespace IRaCIS.Core.Application.Services instances, x => x.ImagePositionPatient, x => x.ImageOrientationPatient, - x => x.InstanceNumber + x => x.InstanceNumber, + series.Description ); series.InstanceInfoList = sorted.Select(k => @@ -629,7 +630,8 @@ namespace IRaCIS.Core.Application.Services instances, x => x.ImagePositionPatient, x => x.ImageOrientationPatient, - x => x.InstanceNumber + x => x.InstanceNumber, + series.Description ); series.InstanceInfoList = sorted.Select(k => @@ -682,7 +684,8 @@ namespace IRaCIS.Core.Application.Services series.InstanceInfoList, x => x.ImagePositionPatient, x => x.ImageOrientationPatient, - x => x.InstanceNumber + x => x.InstanceNumber, + series.Description ); series.InstanceInfoList = sorted;