From c9ffa64560163392d6e051ea003a2e6717423f76 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Wed, 3 Jun 2026 13:54:10 +0800 Subject: [PATCH] =?UTF-8?q?=E9=81=AE=E7=9B=96=E5=BD=B1=E5=83=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 --- .../Common/TrialImageDownloadService.cs | 24 +++++++++++++--- .../Service/ImageAndDoc/StudyService.cs | 28 ++++++++++++++++++- 2 files changed, 47 insertions(+), 5 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Common/TrialImageDownloadService.cs b/IRaCIS.Core.Application/Service/Common/TrialImageDownloadService.cs index 6ba580e20..ac35dd052 100644 --- a/IRaCIS.Core.Application/Service/Common/TrialImageDownloadService.cs +++ b/IRaCIS.Core.Application/Service/Common/TrialImageDownloadService.cs @@ -60,6 +60,14 @@ namespace IRaCIS.Core.Application.Service { try { + + #region 方式一 有的必须在内存中,不能用这种 + //await using var source = await sourceFactory(); + //// 如果你是从 stream 打开 + //var dicomFile = await DicomFile.OpenAsync(source); + #endregion + + #region 方式二 await using var source = await sourceFactory(); // 【关键修复】将 OSS 流缓冲到 MemoryStream @@ -79,6 +87,8 @@ namespace IRaCIS.Core.Application.Service // 如果你是从 stream 打开 var dicomFile = await DicomFile.OpenAsync(source.CanSeek ? source : bufferedStream); + #endregion + //获取像素是否为封装形式 var syntax = dicomFile.Dataset.InternalTransferSyntax; @@ -211,8 +221,12 @@ namespace IRaCIS.Core.Application.Service #endregion + var oldVisits = MiniExcel.Query(Path.Combine(rootFolder, "Old.xlsx")).ToList(); - var downloadVisits = MiniExcel.Query(Path.Combine(rootFolder, "download.xlsx")).ToList().Where(t => t.SubjectCode.IsNotNullOrEmpty() && t.VisitName.IsNotNullOrEmpty()); + var downloadVisits = MiniExcel.Query(Path.Combine(rootFolder, "download.xlsx")).ToList().Where(t => t.SubjectCode.IsNotNullOrEmpty() && t.VisitName.IsNotNullOrEmpty()).ToList(); + + downloadVisits= downloadVisits.Where(t => !oldVisits.Any(old => old.VisitNum == t.VisitNum && old.SubjectCode == t.SubjectCode && + old.VisitName.Trim().ToLower() == t.VisitName.Trim().ToLower())).ToList(); var downloadJobs = new List(); @@ -308,6 +322,7 @@ namespace IRaCIS.Core.Application.Service continue; } + Log.Logger.Warning($"开始获取访视信息准备下载任务:{visitItem.SubjectCode} {visitItem.VisitName} {visitItem.VisitNum}"); foreach (var studyInfo in visitItem.StudyList) { @@ -502,6 +517,7 @@ namespace IRaCIS.Core.Application.Service return Task.CompletedTask; } }); + } @@ -515,14 +531,14 @@ namespace IRaCIS.Core.Application.Service - - + Log.Logger.Warning($"访视信息准备完毕: {downloadVisits.Count},后端开始下载任务......"); + #region 异步方式处理 int totalCount = downloadJobs.Count; int downloadedCount = 0; - Log.Logger.Warning($"开始下载总数: {totalCount}"); + Log.Logger.Warning($"下载文件总数: {totalCount}"); foreach (var job in downloadJobs) { try diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/StudyService.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/StudyService.cs index 70458f08a..cb899be04 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/StudyService.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/StudyService.cs @@ -82,9 +82,35 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc { try { + #region 方式一 有的必须在内存中,不能用这种 + //await using var source = await sourceFactory(); + //// 如果你是从 stream 打开 + //var dicomFile = await DicomFile.OpenAsync(source); + #endregion + + #region 方式二 + await using var source = await sourceFactory(); + + // 【关键修复】将 OSS 流缓冲到 MemoryStream + using var bufferedStream = new MemoryStream(); + + if (source.CanSeek) + { + source.Position = 0; + + } + else + { + // 完全复制到内存流 + await source.CopyToAsync(bufferedStream); + bufferedStream.Position = 0; // 重置位置 + } + // 如果你是从 stream 打开 - var dicomFile = await DicomFile.OpenAsync(source); + var dicomFile = await DicomFile.OpenAsync(source.CanSeek ? source : bufferedStream); + + #endregion //获取像素是否为封装形式 var syntax = dicomFile.Dataset.InternalTransferSyntax;