diff --git a/IRaCIS.Core.Application/Service/Common/TrialImageDownloadService.cs b/IRaCIS.Core.Application/Service/Common/TrialImageDownloadService.cs index 0f31a3301..7d83f1aca 100644 --- a/IRaCIS.Core.Application/Service/Common/TrialImageDownloadService.cs +++ b/IRaCIS.Core.Application/Service/Common/TrialImageDownloadService.cs @@ -1434,6 +1434,8 @@ namespace IRaCIS.Core.Application.Service var allVersions = new List(); var allDeleteMarkers = new List(); + var allDeleteDistinceKeys = new List(); + var request = new ListObjectVersionsRequest(tempToken.AliyunOSS.BucketName) { Prefix = "test-delete-restore", @@ -1487,7 +1489,14 @@ namespace IRaCIS.Core.Application.Service if (prevVersion == null) continue; // 没找到可恢复版本 + //这里会出现同一个key 删除多次,然后下载多次,恢复的时候插入数据有问题 + if (allDeleteDistinceKeys.Contains(del.Key)) + { + continue; + } + + allDeleteDistinceKeys.Add(del.Key); // 创建 CopyObject 请求 @@ -1560,6 +1569,7 @@ namespace IRaCIS.Core.Application.Service tempToken.AliyunOSS.AccessKeySecret, tempToken.AliyunOSS.SecurityToken); + var allDeleteDistinceKeys = new List(); var restoreCount = 0; foreach (var item in rows) @@ -1570,6 +1580,14 @@ namespace IRaCIS.Core.Application.Service continue; } + if (allDeleteDistinceKeys.Contains(item.Key)) + { + continue; + } + + allDeleteDistinceKeys.Add(item.Key); + + try { @@ -1599,7 +1617,7 @@ namespace IRaCIS.Core.Application.Service var fileSize = new FileInfo(dicomFilePath).Length; - await ArchiveDicomFileAsync(dicomFile, trialId, item.SubjectId, item.SubjectVisitId,item.Key, fileSize); + await ArchiveDicomFileAsync(dicomFile, trialId, item.SubjectId, item.SubjectVisitId, item.Key, fileSize); #endregion @@ -1632,13 +1650,13 @@ namespace IRaCIS.Core.Application.Service var copyResult = _ossClient.CopyObject(copyReq); - Console.WriteLine($"✅ 恢复成功: {item.Key} 版本{item.VersionId}, 新版本ID={copyResult.VersionId}"); + Console.WriteLine($"✅ 恢复成功: {item.SubjectCode} {item.Key} 版本{item.VersionId}, 新版本ID={copyResult.VersionId}"); } catch (Exception ex) { - var errorMsg = $"❌ 恢复失败: {item.Key}, 错误: {ex.Message}"; + var errorMsg = $"❌ 恢复失败:{item.SubjectCode} {item.Key}, 错误: {ex.Message}"; Console.WriteLine(errorMsg); await File.AppendAllTextAsync(outputErrorFile, errorMsg + Environment.NewLine); @@ -1699,7 +1717,7 @@ 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) { var dataset = dicomFile.Dataset; @@ -1822,7 +1840,7 @@ namespace IRaCIS.Core.Application.Service ++findSerice.InstanceCount; //賦值路徑 - findInstance.Path = "/"+path; + findInstance.Path = "/" + path; findInstance.FileSize = fileSize; }