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,
Func<T, string?> ippSelector,
Func<T, string?> iopSelector,
Func<T, int?> instanceNumberSelector)
Func<T, int?> 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));
@@ -1787,7 +1787,7 @@
<param name="_trialRepository"></param>
<param name="_oSSService"></param>
</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>
@@ -10621,6 +10621,16 @@
裁判结果的备注
</summary>
</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">
<summary>
排序
@@ -15395,6 +15405,11 @@
获取裁判表单
</summary>
</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)">
<summary>
编辑裁判表单
@@ -15464,7 +15479,7 @@
<param name="visiTaskId"></param>
<returns></returns>
</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>
计算返回的结果 为True表示不相等
</summary>
@@ -16795,7 +16810,7 @@
<param name="regions"></param>
<param name="options"></param>
</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>
DICOM Slice 排序(IPP + IOP
自动 fallback InstanceNumber
@@ -17788,17 +17803,17 @@
</member>
<member name="F:IRaCIS.Core.Application.ViewModel.AccessToDialogueEnum.Question">
<summary>
质疑
</summary>
</member>
<member name="F:IRaCIS.Core.Application.ViewModel.AccessToDialogueEnum.Consistency">
<summary>
һԺ˲
一致性核查
</summary>
</member>
<member name="T:IRaCIS.Core.Application.ViewModel.CopyFrontAuditConfigItemDto">
<summary>
复制
</summary>
</member>
<member name="T:IRaCIS.Core.Application.ViewModel.SystemNoticeView">
@@ -9,7 +9,7 @@ namespace IRaCIS.Core.Application.Services
{
[ApiExplorerSettings(GroupName = "Image")]
[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
{
@@ -29,12 +29,15 @@ namespace IRaCIS.Core.Application.Services
.OrderBy(s => s.InstanceNumber).ThenBy(s => s.InstanceTime).ThenBy(s => s.CreateTime)
.ProjectTo<DicomInstanceDTO>(_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
@@ -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,
@@ -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;