Dixon 排序修改
continuous-integration/drone/push Build is passing

This commit is contained in:
2026-08-26 13:08:56 +08:00
parent 53c18c4c4c
commit cc826afff1
5 changed files with 51 additions and 15 deletions
@@ -1080,12 +1080,15 @@ public static class DicomSortHelper
IEnumerable<T> source, IEnumerable<T> source,
Func<T, string?> ippSelector, Func<T, string?> ippSelector,
Func<T, string?> iopSelector, Func<T, string?> iopSelector,
Func<T, int?> instanceNumberSelector) Func<T, int?> instanceNumberSelector,string seriesDescription)
{ {
var list = source.ToList(); var list = source.ToList();
if (list.Count < 2) if (list.Count < 2)
return list; return list;
if(seriesDescription.Contains("Dixon", StringComparison.OrdinalIgnoreCase))
return list.OrderBy(instanceNumberSelector).ToList();
var first = list[0]; var first = list[0];
var reference = ParseVector(ippSelector(first)); var reference = ParseVector(ippSelector(first));
@@ -1787,7 +1787,7 @@
<param name="_trialRepository"></param> <param name="_trialRepository"></param>
<param name="_oSSService"></param> <param name="_oSSService"></param>
</member> </member>
<member name="M:IRaCIS.Core.Application.Service.TrialImageDownloadService.#ctor(IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.Trial},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.SubjectVisit},IRaCIS.Core.Application.Helper.IOSSService,Microsoft.AspNetCore.Hosting.IWebHostEnvironment,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.DicomStudy},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.DicomSeries},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.DicomInstance})"> <member name="M:IRaCIS.Core.Application.Service.TrialImageDownloadService.#ctor(IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.Trial},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.SubjectVisit},IRaCIS.Core.Application.Helper.IOSSService,Microsoft.AspNetCore.Hosting.IWebHostEnvironment,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.DicomStudy},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.DicomSeries},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.DicomInstance},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.TaskInstance},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.VisitTask})">
<summary> <summary>
项目影像后台下载,不打包 项目影像后台下载,不打包
</summary> </summary>
@@ -10621,6 +10621,16 @@
裁判结果的备注 裁判结果的备注
</summary> </summary>
</member> </member>
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.GetJudgeFormOutDto.TriggerJudgeQuestionIds">
<summary>
本次生成裁判的触发问题(包含自动计算题追溯到的源问题)
</summary>
</member>
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.JudgeFormQuestionDto.IsTriggerJudge">
<summary>
是否为本次生成裁判的触发问题
</summary>
</member>
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.GlobalVisitJudgeQuestion.ShowOrder"> <member name="P:IRaCIS.Core.Application.Service.Reading.Dto.GlobalVisitJudgeQuestion.ShowOrder">
<summary> <summary>
排序 排序
@@ -15395,6 +15405,11 @@
获取裁判表单 获取裁判表单
</summary> </summary>
</member> </member>
<member name="M:IRaCIS.Core.Application.Service.ReadingImageTaskService.GetTriggerJudgeQuestionIds(System.Collections.Generic.List{System.Guid},System.Collections.Generic.List{IRaCIS.Core.Domain.Models.ReadingQuestionTrial},System.Decimal,IRaCIS.Core.Domain.Models.JudgeRule)">
<summary>
重新按当前访视的裁判规则计算实际触发裁判的问题。
</summary>
</member>
<member name="M:IRaCIS.Core.Application.Service.ReadingImageTaskService.SetJudgeForm(IRaCIS.Core.Application.Service.Reading.Dto.SetJudgeFormInDto)"> <member name="M:IRaCIS.Core.Application.Service.ReadingImageTaskService.SetJudgeForm(IRaCIS.Core.Application.Service.Reading.Dto.SetJudgeFormInDto)">
<summary> <summary>
编辑裁判表单 编辑裁判表单
@@ -15464,7 +15479,7 @@
<param name="visiTaskId"></param> <param name="visiTaskId"></param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:IRaCIS.Core.Application.Service.ReadingImageTaskService.ComputeJudgeResult(System.Collections.Generic.List{IRaCIS.Core.Application.Service.Reading.Dto.GroupTaskAnswerDto},System.Guid)"> <member name="M:IRaCIS.Core.Application.Service.ReadingImageTaskService.ComputeJudgeResult(System.Collections.Generic.List{IRaCIS.Core.Application.Service.Reading.Dto.GroupTaskAnswerDto},System.Guid,System.Collections.Generic.HashSet{System.Guid},System.Boolean)">
<summary> <summary>
计算返回的结果 为True表示不相等 计算返回的结果 为True表示不相等
</summary> </summary>
@@ -16795,7 +16810,7 @@
<param name="regions"></param> <param name="regions"></param>
<param name="options"></param> <param name="options"></param>
</member> </member>
<member name="M:IRaCIS.Core.Application.Helper.DicomSortHelper.SortSlices``1(System.Collections.Generic.IEnumerable{``0},System.Func{``0,System.String},System.Func{``0,System.String},System.Func{``0,System.Nullable{System.Int32}})"> <member name="M:IRaCIS.Core.Application.Helper.DicomSortHelper.SortSlices``1(System.Collections.Generic.IEnumerable{``0},System.Func{``0,System.String},System.Func{``0,System.String},System.Func{``0,System.Nullable{System.Int32}},System.String)">
<summary> <summary>
DICOM Slice 排序(IPP + IOP DICOM Slice 排序(IPP + IOP
自动 fallback InstanceNumber 自动 fallback InstanceNumber
@@ -17788,17 +17803,17 @@
</member> </member>
<member name="F:IRaCIS.Core.Application.ViewModel.AccessToDialogueEnum.Question"> <member name="F:IRaCIS.Core.Application.ViewModel.AccessToDialogueEnum.Question">
<summary> <summary>
质疑
</summary> </summary>
</member> </member>
<member name="F:IRaCIS.Core.Application.ViewModel.AccessToDialogueEnum.Consistency"> <member name="F:IRaCIS.Core.Application.ViewModel.AccessToDialogueEnum.Consistency">
<summary> <summary>
һԺ˲ 一致性核查
</summary> </summary>
</member> </member>
<member name="T:IRaCIS.Core.Application.ViewModel.CopyFrontAuditConfigItemDto"> <member name="T:IRaCIS.Core.Application.ViewModel.CopyFrontAuditConfigItemDto">
<summary> <summary>
复制
</summary> </summary>
</member> </member>
<member name="T:IRaCIS.Core.Application.ViewModel.SystemNoticeView"> <member name="T:IRaCIS.Core.Application.ViewModel.SystemNoticeView">
@@ -9,7 +9,7 @@ namespace IRaCIS.Core.Application.Services
{ {
[ApiExplorerSettings(GroupName = "Image")] [ApiExplorerSettings(GroupName = "Image")]
[AllowAnonymous] [AllowAnonymous]
public class InstanceService(IRepository<DicomInstance> _instanceRepository, public class InstanceService(IRepository<DicomInstance> _instanceRepository, IRepository<DicomSeries> _seriesRepository,
IMapper _mapper, IUserInfo _userInfo, IStringLocalizer _localizer, IWebHostEnvironment _hostEnvironment) : BaseService, IInstanceService 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) .OrderBy(s => s.InstanceNumber).ThenBy(s => s.InstanceTime).ThenBy(s => s.CreateTime)
.ProjectTo<DicomInstanceDTO>(_mapper.ConfigurationProvider).ToListAsync(); .ProjectTo<DicomInstanceDTO>(_mapper.ConfigurationProvider).ToListAsync();
var des = _seriesRepository.Where(t => t.Id == seriesId).Select(t => t.Description).FirstOrDefault();
// ⭐ DICOM 空间排序(带兜底) // ⭐ DICOM 空间排序(带兜底)
var sorted = DicomSortHelper.SortSlices( var sorted = DicomSortHelper.SortSlices(
list, list,
x => x.ImagePositionPatient, x => x.ImagePositionPatient,
x => x.ImageOrientationPatient, x => x.ImageOrientationPatient,
x => x.InstanceNumber x => x.InstanceNumber,
des
); );
var seriesInfo = await _instanceRepository.Where(s => s.SeriesId == seriesId).Select(t => new var seriesInfo = await _instanceRepository.Where(s => s.SeriesId == seriesId).Select(t => new
@@ -59,7 +59,8 @@ namespace IRaCIS.Core.Application.Services
instances, instances,
x => x.ImagePositionPatient, x => x.ImagePositionPatient,
x => x.ImageOrientationPatient, x => x.ImageOrientationPatient,
x => x.InstanceNumber x => x.InstanceNumber,
series.Description
); );
series.InstanceInfoList = sorted.Select(k => series.InstanceInfoList = sorted.Select(k =>
@@ -104,13 +105,24 @@ namespace IRaCIS.Core.Application.Services
.WhereIf(isReading == true, t => t.IsReading == true) .WhereIf(isReading == true, t => t.IsReading == true)
.OrderBy(t => t.SeriesId).ThenBy(t => t.InstanceNumber) .OrderBy(t => t.SeriesId).ThenBy(t => t.InstanceNumber)
.ThenBy(s => s.InstanceTime).ThenBy(s => s.CreateTime) .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) 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() new InstanceBasicInfo()
{ {
Id = k.Id, Id = k.Id,
@@ -292,7 +292,8 @@ namespace IRaCIS.Core.Application.Services
instances, instances,
x => x.ImagePositionPatient, x => x.ImagePositionPatient,
x => x.ImageOrientationPatient, x => x.ImageOrientationPatient,
x => x.InstanceNumber x => x.InstanceNumber,
series.Description
); );
series.InstanceInfoList = sorted.Select(k => series.InstanceInfoList = sorted.Select(k =>
@@ -629,7 +630,8 @@ namespace IRaCIS.Core.Application.Services
instances, instances,
x => x.ImagePositionPatient, x => x.ImagePositionPatient,
x => x.ImageOrientationPatient, x => x.ImageOrientationPatient,
x => x.InstanceNumber x => x.InstanceNumber,
series.Description
); );
series.InstanceInfoList = sorted.Select(k => series.InstanceInfoList = sorted.Select(k =>
@@ -682,7 +684,8 @@ namespace IRaCIS.Core.Application.Services
series.InstanceInfoList, series.InstanceInfoList,
x => x.ImagePositionPatient, x => x.ImagePositionPatient,
x => x.ImageOrientationPatient, x => x.ImageOrientationPatient,
x => x.InstanceNumber x => x.InstanceNumber,
series.Description
); );
series.InstanceInfoList = sorted; series.InstanceInfoList = sorted;