diff --git a/IRaCIS.Core.Application/Service/Common/TrialImageDownloadService.cs b/IRaCIS.Core.Application/Service/Common/TrialImageDownloadService.cs index 0de78c012..07036b3d6 100644 --- a/IRaCIS.Core.Application/Service/Common/TrialImageDownloadService.cs +++ b/IRaCIS.Core.Application/Service/Common/TrialImageDownloadService.cs @@ -231,6 +231,27 @@ namespace IRaCIS.Core.Application.Service } + + ///// + ///// 下载影像 维护dir信息 并回传到OSS + ///// + ///// + ///// + //[HttpGet] + //[AllowAnonymous] + //public async Task DownloadAndUploadTrialData(Guid trialId, [FromServices] IRepository _instanceRepository, + // [FromServices] IRepository _studyRepository, + // [FromServices] IRepository _seriesRepository) + //{ + // var list = await _instanceRepository.Where(t => t.TrialId == trialId) + // .Select(t => new { t.SeriesId, t.StudyId, t.Id, t.Path }).ToListAsync(); + + // foreach (var item in list) + // { + + // } + //} + } } \ No newline at end of file diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs index a5639acdf..138b962b2 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs @@ -784,58 +784,60 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc #region DIR处理导出文件名,并将对应关系上传到OSS里面存储 - - var list = _subjectVisitRepository.Where(t => t.Id == inQuery.SubjectVisitId).SelectMany(t => t.StudyList) - .Where(t => isQueryDicom ? inQuery.DicomStudyIdList.Contains(t.Id) : false) - .SelectMany(t => t.InstanceList) - .Select(t => new StudyDIRInfo() - { - - 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(); - - var pathInfo = await _subjectVisitRepository.Where(t => t.Id == inQuery.SubjectVisitId).Select(t => new { t.TrialId, t.SubjectId, VisitId = t.Id }).FirstNotNullAsync(); - - foreach (var item in list.GroupBy(t => new { t.StudyInstanceUid, t.DicomStudyId })) + //有传输语法值的导出 才生成DIR + if (_subjectVisitRepository.Any(t => t.Id == inQuery.SubjectVisitId && t.StudyList.SelectMany(t => t.InstanceList).Any(c => c.TransferSytaxUID != string.Empty))) { - var ossFolder = $"{pathInfo.TrialId}/Image/{pathInfo.SubjectId}/{pathInfo.VisitId}/{item.Key.StudyInstanceUid}"; + var list = _subjectVisitRepository.Where(t => t.Id == inQuery.SubjectVisitId).SelectMany(t => t.StudyList) + .Where(t => isQueryDicom ? inQuery.DicomStudyIdList.Contains(t.Id) : false) + .SelectMany(t => t.InstanceList) + .Select(t => new StudyDIRInfo() + { - await DicomDIRHelper.GenerateStudyDIRAndUploadAsync(item.ToList(), ossFolder, _oSSService); + DicomStudyId = t.DicomStudy.Id, - await _dicomStudyRepository.BatchUpdateNoTrackingAsync(t => t.Id == item.Key.DicomStudyId, u => new DicomStudy() { StudyDIRPath = $"/{ossFolder}/DICOMDIR" }); + 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(); + + var pathInfo = await _subjectVisitRepository.Where(t => t.Id == inQuery.SubjectVisitId).Select(t => new { t.TrialId, t.SubjectId, VisitId = t.Id }).FirstNotNullAsync(); + + foreach (var item in list.GroupBy(t => new { t.StudyInstanceUid, t.DicomStudyId })) + { + var ossFolder = $"{pathInfo.TrialId}/Image/{pathInfo.SubjectId}/{pathInfo.VisitId}/{item.Key.StudyInstanceUid}"; + + await DicomDIRHelper.GenerateStudyDIRAndUploadAsync(item.ToList(), ossFolder, _oSSService); + + await _dicomStudyRepository.BatchUpdateNoTrackingAsync(t => t.Id == item.Key.DicomStudyId, u => new DicomStudy() { StudyDIRPath = $"/{ossFolder}/DICOMDIR" }); + } } - #endregion var query = from sv in _subjectVisitRepository.Where(t => t.Id == inQuery.SubjectVisitId) @@ -1070,7 +1072,10 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc #region 在下载前先处理DIR文件 - var list = _subjectRepository.Where(t => t.Id == inQuery.SubjectId).SelectMany(t => t.SubjectVisitList.Where(t => subjectVisitIdList.Contains(t.Id))).SelectMany(t => t.StudyList) + //有传输语法值的导出 才生成DIR + if (_subjectVisitRepository.Any(t => t.SubjectId == inQuery.SubjectId && t.StudyList.SelectMany(t => t.InstanceList).Any(c => c.TransferSytaxUID != string.Empty))) + { + var list = _subjectRepository.Where(t => t.Id == inQuery.SubjectId).SelectMany(t => t.SubjectVisitList.Where(t => subjectVisitIdList.Contains(t.Id))).SelectMany(t => t.StudyList) .Where(t => isQueryDicom ? inQuery.DicomStudyIdList.Contains(t.Id) : false) .Where(t => info.IsImageFilter ? ("|" + info.CriterionModalitys + "|").Contains("|" + t.ModalityForEdit + "|") : true) .SelectMany(t => t.InstanceList.Where(t => t.IsReading && t.DicomSerie.IsReading)) @@ -1110,18 +1115,20 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc }).ToList(); - var pathInfo = await _subjectRepository.Where(t => t.Id == inQuery.SubjectId).Select(t => new { t.TrialId, SubjectId = t.Id }).FirstNotNullAsync(); + var pathInfo = await _subjectRepository.Where(t => t.Id == inQuery.SubjectId).Select(t => new { t.TrialId, SubjectId = t.Id }).FirstNotNullAsync(); - foreach (var item in list.GroupBy(t => new { t.StudyInstanceUid, t.DicomStudyId })) - { - var visitId = item.First().SubjectVisitId; + foreach (var item in list.GroupBy(t => new { t.StudyInstanceUid, t.DicomStudyId })) + { + var visitId = item.First().SubjectVisitId; - var ossFolder = $"{pathInfo.TrialId}/Image/{pathInfo.SubjectId}/{visitId}/{item.Key.StudyInstanceUid}"; + var ossFolder = $"{pathInfo.TrialId}/Image/{pathInfo.SubjectId}/{visitId}/{item.Key.StudyInstanceUid}"; - await DicomDIRHelper.GenerateStudyDIRAndUploadAsync(item.ToList(), ossFolder, _oSSService); + await DicomDIRHelper.GenerateStudyDIRAndUploadAsync(item.ToList(), ossFolder, _oSSService); - await _dicomStudyRepository.BatchUpdateNoTrackingAsync(t => t.Id == item.Key.DicomStudyId, u => new DicomStudy() { StudyDIRPath = $"/{ossFolder}/DICOMDIR" }); + await _dicomStudyRepository.BatchUpdateNoTrackingAsync(t => t.Id == item.Key.DicomStudyId, u => new DicomStudy() { StudyDIRPath = $"/{ossFolder}/DICOMDIR" }); + } } + #endregion var query = from sv in _subjectRepository.Where(t => t.Id == inQuery.SubjectId).SelectMany(t => t.SubjectVisitList.Where(t => subjectVisitIdList.Contains(t.Id)))