diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml index 58b19553f..5009139ec 100644 --- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml +++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml @@ -18826,7 +18826,7 @@ - + 影像库 和影像下载界面批量下载原始影像 患者列表只传递 患者Id数组 检查列表,把患者Id数组 和检查Id数组都传递 diff --git a/IRaCIS.Core.Application/Service/Visit/PatientService.cs b/IRaCIS.Core.Application/Service/Visit/PatientService.cs index 7ec09d0fa..deb8f3db0 100644 --- a/IRaCIS.Core.Application/Service/Visit/PatientService.cs +++ b/IRaCIS.Core.Application/Service/Visit/PatientService.cs @@ -3186,8 +3186,7 @@ namespace IRaCIS.Application.Services /// /// /// - public async Task TrialImageAddExtralField(Guid trialId, - [FromServices] IRepository _scpInstanceRepository, + public async Task TrialImageAddExtralField([FromServices] IRepository _scpInstanceRepository, [FromServices] IRepository _instanceRepository, [FromServices] IOSSService _oSSService) { @@ -3206,29 +3205,40 @@ namespace IRaCIS.Application.Services foreach (var item in seriesList) { - var stream = await _oSSService.GetStreamFromOSSAsync(item.Path); - - var dicomFile = DicomFile.Open(stream); - - var pixelData = DicomPixelData.Create(dicomFile.Dataset); - - //获取像素是否为封装形式 - var syntax = dicomFile.Dataset.InternalTransferSyntax; - - //读取需要维护的值 - var transferSyntaxUID = dicomFile.FileMetaInfo.GetSingleValueOrDefault(DicomTag.TransferSyntaxUID, string.Empty); - var mediaStorageSOPClassUID = dicomFile.FileMetaInfo.GetSingleValueOrDefault(DicomTag.MediaStorageSOPClassUID, string.Empty); - var mediaStorageSOPInstanceUID = dicomFile.FileMetaInfo.GetSingleValueOrDefault(DicomTag.MediaStorageSOPInstanceUID, string.Empty); - var sOPClassUID = dicomFile.Dataset.GetSingleValueOrDefault(DicomTag.SOPClassUID, string.Empty); - - //维护序列层级四个字段 后再用sql 维护study series 时间拆分 和 MediaStorageSOPInstanceUID - await _scpInstanceRepository.BatchUpdateNoTrackingAsync(t => t.SeriesId == item.SeriesId, t => new SCPInstance() + try { - IsEncapsulated = syntax.IsEncapsulated, - TransferSyntaxUID = transferSyntaxUID, - MediaStorageSOPClassUID = mediaStorageSOPClassUID, - SOPClassUID = sOPClassUID, - }); + var stream = await _oSSService.GetStreamFromOSSAsync(item.Path); + + var dicomFile = DicomFile.Open(stream); + + //var pixelData = DicomPixelData.Create(dicomFile.Dataset); + + //获取像素是否为封装形式 + var syntax = dicomFile.Dataset.InternalTransferSyntax; + + //读取需要维护的值 + var transferSyntaxUID = dicomFile.FileMetaInfo.GetSingleValueOrDefault(DicomTag.TransferSyntaxUID, string.Empty); + var mediaStorageSOPClassUID = dicomFile.FileMetaInfo.GetSingleValueOrDefault(DicomTag.MediaStorageSOPClassUID, string.Empty); + var mediaStorageSOPInstanceUID = dicomFile.FileMetaInfo.GetSingleValueOrDefault(DicomTag.MediaStorageSOPInstanceUID, string.Empty); + var sOPClassUID = dicomFile.Dataset.GetSingleValueOrDefault(DicomTag.SOPClassUID, string.Empty); + + //维护序列层级四个字段 后再用sql 维护study series 时间拆分 和 MediaStorageSOPInstanceUID + await _scpInstanceRepository.BatchUpdateNoTrackingAsync(t => t.SeriesId == item.SeriesId, t => new SCPInstance() + { + IsEncapsulated = syntax.IsEncapsulated, + TransferSyntaxUID = transferSyntaxUID, + MediaStorageSOPClassUID = mediaStorageSOPClassUID, + SOPClassUID = sOPClassUID, + }); + } + catch (Exception ex) + { + + Console.WriteLine($"[{DateTime.Now:yyyy-MM-dd HH:mm:ss}] SCP下载失败 SeriesId: {item.SeriesId} Path:{item.Path} Error: {ex.Message}\n" ); + + } + + } @@ -3241,29 +3251,39 @@ namespace IRaCIS.Application.Services foreach (var item in seriesList2) { - var stream = await _oSSService.GetStreamFromOSSAsync(item.Path); - - var dicomFile = DicomFile.Open(stream); - - var pixelData = DicomPixelData.Create(dicomFile.Dataset); - - //获取像素是否为封装形式 - var syntax = dicomFile.Dataset.InternalTransferSyntax; - - //读取需要维护的值 - var transferSyntaxUID = dicomFile.FileMetaInfo.GetSingleValueOrDefault(DicomTag.TransferSyntaxUID, string.Empty); - var mediaStorageSOPClassUID = dicomFile.FileMetaInfo.GetSingleValueOrDefault(DicomTag.MediaStorageSOPClassUID, string.Empty); - var mediaStorageSOPInstanceUID = dicomFile.FileMetaInfo.GetSingleValueOrDefault(DicomTag.MediaStorageSOPInstanceUID, string.Empty); - var sOPClassUID = dicomFile.Dataset.GetSingleValueOrDefault(DicomTag.SOPClassUID, string.Empty); - - //维护序列层级四个字段 后再用sql 维护study series 时间拆分 和 MediaStorageSOPInstanceUID - await _instanceRepository.BatchUpdateNoTrackingAsync(t => t.SeriesId == item.SeriesId, t => new DicomInstance() + try { - IsEncapsulated = syntax.IsEncapsulated, - TransferSyntaxUID = transferSyntaxUID, - MediaStorageSOPClassUID = mediaStorageSOPClassUID, - SOPClassUID = sOPClassUID, - }); + var stream = await _oSSService.GetStreamFromOSSAsync(item.Path); + + var dicomFile = DicomFile.Open(stream); + + //var pixelData = DicomPixelData.Create(dicomFile.Dataset); + + //获取像素是否为封装形式 + var syntax = dicomFile.Dataset.InternalTransferSyntax; + + //读取需要维护的值 + var transferSyntaxUID = dicomFile.FileMetaInfo.GetSingleValueOrDefault(DicomTag.TransferSyntaxUID, string.Empty); + var mediaStorageSOPClassUID = dicomFile.FileMetaInfo.GetSingleValueOrDefault(DicomTag.MediaStorageSOPClassUID, string.Empty); + var mediaStorageSOPInstanceUID = dicomFile.FileMetaInfo.GetSingleValueOrDefault(DicomTag.MediaStorageSOPInstanceUID, string.Empty); + var sOPClassUID = dicomFile.Dataset.GetSingleValueOrDefault(DicomTag.SOPClassUID, string.Empty); + + //维护序列层级四个字段 后再用sql 维护study series 时间拆分 和 MediaStorageSOPInstanceUID + await _instanceRepository.BatchUpdateNoTrackingAsync(t => t.SeriesId == item.SeriesId, t => new DicomInstance() + { + IsEncapsulated = syntax.IsEncapsulated, + TransferSyntaxUID = transferSyntaxUID, + MediaStorageSOPClassUID = mediaStorageSOPClassUID, + SOPClassUID = sOPClassUID, + }); + } + catch (Exception ex) + { + + Console.WriteLine($"[{DateTime.Now:yyyy-MM-dd HH:mm:ss}] 下载失败 SeriesId: {item.SeriesId} Path:{item.Path} Error: {ex.Message}\n"); + } + + }