From 476ca95aa33557bd501289cb779371c8ca20506f Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Fri, 5 Dec 2025 09:45:00 +0800 Subject: [PATCH] =?UTF-8?q?uat-=E9=A1=B9=E7=9B=AE=E5=BD=B1=E5=83=8F?= =?UTF-8?q?=E4=B8=8B=E8=BD=BD-dir?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Helper/DicomDIRHelper.cs | 1 + .../ImageAndDoc/DownloadAndUploadService.cs | 89 ++++++++++++++++++- 2 files changed, 88 insertions(+), 2 deletions(-) diff --git a/IRaCIS.Core.Application/Helper/DicomDIRHelper.cs b/IRaCIS.Core.Application/Helper/DicomDIRHelper.cs index 580154c9c..6defc237e 100644 --- a/IRaCIS.Core.Application/Helper/DicomDIRHelper.cs +++ b/IRaCIS.Core.Application/Helper/DicomDIRHelper.cs @@ -13,6 +13,7 @@ namespace IRaCIS.Core.Application.Helper public class StudyDIRInfo { + public Guid SubjectId { get; set; } public bool IsTaskStudy { get; set; } public Guid SubjectVisitId { get; set; } diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs index 1b07f0daa..88be734c7 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs @@ -1944,6 +1944,8 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc var isExportReading = inCommand.IsExportReading == true; + var dirDic = new Dictionary(); + if (inCommand.IsKeyImage) { var downloadInfoList = _visitTaskRepository.Where(t => t.TrialId == inCommand.TrialId && (t.ReadingCategory == ReadingCategory.Visit || t.ReadingCategory == ReadingCategory.Global) @@ -2192,6 +2194,72 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc else { + #region 在下载前先处理DIR文件 + + //有传输语法值的导出 才生成DIR + if (_subjectVisitRepository.Where(t => inCommand.SubjectVisitIdList.Contains(t.Id)).SelectMany(t => t.StudyList.SelectMany(t => t.InstanceList.Where(t => isExportReading ? (t.IsReading && t.DicomSerie.IsReading) : true))).All(c => c.TransferSytaxUID != string.Empty)) + { + var dirInfolist = _subjectVisitRepository.Where(t => inCommand.SubjectVisitIdList.Contains(t.Id)).SelectMany(t => t.StudyList) + .SelectMany(t => t.InstanceList.Where(t => isExportReading ? (t.IsReading && t.DicomSerie.IsReading) : true)) + .Select(t => new StudyDIRInfo() + { + SubjectId = t.SubjectId, + SubjectVisitId = t.SubjectVisitId, + + DicomStudyId = t.DicomStudy.Id, + + PatientId = t.DicomStudy.PatientId, + PatientName = t.DicomStudy.PatientName, + PatientBirthDate = t.DicomStudy.PatientBirthDate, + PatientSex = t.DicomStudy.PatientSex, + + StudyInstanceUid = t.StudyInstanceUid, + StudyId = t.DicomStudy.StudyId, + DicomStudyDate = t.DicomStudy.DicomStudyDate, + DicomStudyTime = t.DicomStudy.DicomStudyTime, + AccessionNumber = t.DicomStudy.AccessionNumber, + + StudyDescription = t.DicomStudy.Description, + + SeriesInstanceUid = t.DicomSerie.SeriesInstanceUid, + Modality = t.DicomSerie.Modality, + DicomSeriesDate = t.DicomSerie.DicomSeriesDate, + DicomSeriesTime = t.DicomSerie.DicomSeriesTime, + SeriesNumber = t.DicomSerie.SeriesNumber, + SeriesDescription = t.DicomSerie.Description, + + InstanceId = t.Id, + SopInstanceUid = t.SopInstanceUid, + SOPClassUID = t.SOPClassUID, + InstanceNumber = t.InstanceNumber, + MediaStorageSOPClassUID = t.MediaStorageSOPClassUID, + MediaStorageSOPInstanceUID = t.MediaStorageSOPInstanceUID, + TransferSytaxUID = t.TransferSytaxUID, + + }).ToList(); + + + + foreach (var item in dirInfolist.GroupBy(t => new { t.StudyInstanceUid, t.DicomStudyId })) + { + var visitId = item.First().SubjectVisitId; + + var subjectId = item.First().SubjectId; + + + var ossFolder = $"{inCommand.TrialId}/Image/{subjectId}/{visitId}/{item.Key.StudyInstanceUid}"; + + var isSucess = await SafeBussinessHelper.RunAsync(async () => await DicomDIRHelper.GenerateStudyDIRAndUploadAsync(item.ToList(), dirDic, ossFolder, _oSSService)); + + if (isSucess) + { + await _dicomStudyRepository.BatchUpdateNoTrackingAsync(t => t.Id == item.Key.DicomStudyId, u => new DicomStudy() { StudyDIRPath = $"/{ossFolder}/DICOMDIR" }); + } + } + } + + #endregion + var downloadInfo = _trialRepository.Where(t => t.Id == inCommand.TrialId).Select(t => new { t.ResearchProgramNo, @@ -2206,14 +2274,19 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc u.PatientId, u.StudyTime, u.StudyCode, + StudyDIRPath = u.StudyDIRPath, SeriesList = u.SeriesList.Where(t => isExportReading ? t.IsReading : true).Select(z => new { z.Modality, - InstancePathList = z.DicomInstanceList.Where(t => isExportReading ? t.IsReading : true).Select(k => new + InstanceList = z.DicomInstanceList.Where(t => isExportReading ? t.IsReading : true).Select(k => new DownloadDicomInstanceDto() { - k.Path + IsEncapsulated = k.IsEncapsulated, + InstanceId = k.Id, + FileName = string.Empty, + Path = k.Path, + FileSize = k.FileSize }) }) @@ -2237,6 +2310,18 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc }).FirstOrDefault(); + + + foreach (var item in downloadInfo.VisitList.SelectMany(t => t.StudyList.SelectMany(t => t.SeriesList).SelectMany(t => t.InstanceList))) + { + var key = item.InstanceId.ToString(); + if (dirDic.ContainsKey(key)) + { + item.FileName = dirDic[key]; + } + } + + return ResponseOutput.Ok(downloadInfo); }