From 2b820442132648a186a00cbe59f51caaf61b6cf6 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Mon, 22 Sep 2025 14:49:51 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=BB=B4=E6=8A=A4=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E4=BB=A3=E7=A0=81-2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Common/TrialImageDownloadService.cs | 53 ++++++++++++++++--- 1 file changed, 47 insertions(+), 6 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Common/TrialImageDownloadService.cs b/IRaCIS.Core.Application/Service/Common/TrialImageDownloadService.cs index cd4ce5b97..77c8dce6d 100644 --- a/IRaCIS.Core.Application/Service/Common/TrialImageDownloadService.cs +++ b/IRaCIS.Core.Application/Service/Common/TrialImageDownloadService.cs @@ -1572,6 +1572,9 @@ namespace IRaCIS.Core.Application.Service var allDeleteDistinceKeys = new List(); + var haveRestoreInstanceIdList = new List(); + var haveRestoreSeriesIdList = new List(); + var restoreCount = 0; foreach (var item in rows) { @@ -1616,10 +1619,19 @@ namespace IRaCIS.Core.Application.Service var fileSize = new FileInfo(dicomFilePath).Length; - var isInstanceNeedAdd = await ArchiveDicomFileAsync(dicomFile, trialId, item.SubjectId, item.SubjectVisitId, item.Key, fileSize); + var archieveInfo = await ArchiveDicomFileAsync(dicomFile, trialId, item.SubjectId, item.SubjectVisitId, item.Key, fileSize, haveRestoreSeriesIdList, haveRestoreInstanceIdList); + if (archieveInfo.IsInstanceAdd) + { + haveRestoreInstanceIdList.Add(archieveInfo.InstanceId); + } - if (isInstanceNeedAdd == false) + if (archieveInfo.IsSeriesAdd) + { + haveRestoreSeriesIdList.Add(archieveInfo.SeriesId); + } + + if (archieveInfo.IsInstanceAdd == false) { continue; } @@ -1717,6 +1729,23 @@ namespace IRaCIS.Core.Application.Service public string SOPInstanceUID { get; set; } } + public class CurrentImageArchiveInfo + { + public bool IsStudyAdd { get; set; } + + public bool IsSeriesAdd { get; set; } + + public bool IsInstanceAdd { get; set; } + + public Guid StudyId { get; set; } + + public Guid SeriesId { get; set; } + + + public Guid InstanceId { get; set; } + } + + /// /// 单个文件接收 归档 /// @@ -1726,8 +1755,9 @@ namespace IRaCIS.Core.Application.Service /// /// /// - public async Task ArchiveDicomFileAsync(DicomFile dicomFile, Guid trialId, Guid subjectId, Guid subjectVisitId, string path, long fileSize) + public async Task ArchiveDicomFileAsync(DicomFile dicomFile, Guid trialId, Guid subjectId, Guid subjectVisitId, string path, long fileSize, List addSeriesIdList, List addInstanceIdList) { + var dataset = dicomFile.Dataset; string studyInstanceUid = dataset.GetString(DicomTag.StudyInstanceUID); @@ -1741,6 +1771,9 @@ namespace IRaCIS.Core.Application.Service var isSeriesNeedAdd = false; var isInstanceNeedAdd = false; + var archieveInfo = new CurrentImageArchiveInfo() { StudyId = studyId, SeriesId = seriesId, InstanceId = instanceId }; + + var findStudy = await _studyRepository.FirstOrDefaultAsync(t => t.Id == studyId); var findSerice = await _seriesRepository.FirstOrDefaultAsync(t => t.Id == seriesId); @@ -1752,6 +1785,8 @@ namespace IRaCIS.Core.Application.Service { isSeriesNeedAdd = true; + + findSerice = new DicomSeries { @@ -1854,16 +1889,22 @@ namespace IRaCIS.Core.Application.Service } - if (isSeriesNeedAdd) + if (isSeriesNeedAdd && !addSeriesIdList.Any(t => t == seriesId)) { + archieveInfo.IsSeriesAdd = true; + await _seriesRepository.AddAsync(findSerice); } - if (isInstanceNeedAdd) + if (isInstanceNeedAdd && !addInstanceIdList.Any(t => t == instanceId)) { + archieveInfo.IsInstanceAdd = true; await _instanceRepository.AddAsync(findInstance); } - return isInstanceNeedAdd; + return archieveInfo; + + ////有新建序列的,否则就要自己记住是否有新建序列,不然会重复跟踪 + //await _studyRepository.SaveChangesAsync(); } }