From 49a36b8214e4fcbf20b0dfaf69ad7b14d5e7afb6 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Wed, 10 Sep 2025 15:43:04 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BB=B4=E6=8A=A4=E6=95=B0=E6=8D=AE=E7=BB=93?= =?UTF-8?q?=E6=9D=9F=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Common/TrialImageDownloadService.cs | 105 ++++++++++++++++++ 1 file changed, 105 insertions(+) diff --git a/IRaCIS.Core.Application/Service/Common/TrialImageDownloadService.cs b/IRaCIS.Core.Application/Service/Common/TrialImageDownloadService.cs index 07c6b41a6..5b4d1ef88 100644 --- a/IRaCIS.Core.Application/Service/Common/TrialImageDownloadService.cs +++ b/IRaCIS.Core.Application/Service/Common/TrialImageDownloadService.cs @@ -728,6 +728,10 @@ namespace IRaCIS.Core.Application.Service rows = rows.Where(t => !string.IsNullOrEmpty(t.InstanceId.ToString())).ToList(); + int total = rows.Count(); + int processed = 0; + double lastPercent = 0; + var outputErrorFile = Path.Combine(@"D:\dicomWrite", $"{Guid.NewGuid()}_dicom_info_error.txt"); foreach (var item in rows) @@ -740,6 +744,7 @@ namespace IRaCIS.Core.Application.Service t => t.Id == item.InstanceId, t => new DicomInstance { + IsEncapsulated = item.IsEncapsulated, TransferSytaxUID = item.TransferSyntaxUID, MediaStorageSOPClassUID = item.MediaStorageSOPClassUID, @@ -755,7 +760,18 @@ namespace IRaCIS.Core.Application.Service await File.AppendAllTextAsync(outputErrorFile, errorMsg + Environment.NewLine); } + finally + { + processed++; + double percent = processed * 100.0 / total; + // 每提升 5% 或完成时输出 + if (percent - lastPercent >= 2.0 || processed == total) + { + lastPercent = percent; + Console.WriteLine($"{DateTime.Now} 进度: {processed}/{total} ({percent:F2}%)"); + } + } } @@ -782,6 +798,95 @@ namespace IRaCIS.Core.Application.Service + } + + + [AllowAnonymous] + public async Task ReadExcelImageDataInstanceIsReading([FromServices] IRepository _instanceRepository, + [FromServices] IRepository _seriesRepository, + [FromServices] IRepository _studyRepository) + { + + var trialId = Guid.Parse("01000000-ac13-0242-6397-08dcd2d2a091"); + + var rows = await MiniExcel.QueryAsync(@"C:\Users\hang\Desktop\instanceReading.xlsx"); + + rows = rows.Where(t => !string.IsNullOrEmpty(t.SopInstanceUid) && t.SopInstanceUid.Length > 15).ToList(); + + var outputErrorFile = Path.Combine(@"D:\dicomWrite", $"{Guid.NewGuid()}_dicom_info_error.txt"); + + + //foreach (var batch in rows.Chunk(20)) + //{ + // var sopUids = batch.Select(x => x.SopInstanceUid).ToList(); + + // try + // { + // await _instanceRepository.BatchUpdateNoTrackingAsync( + // t => sopUids.Contains(t.SopInstanceUid) && t.TrialId == trialId, + // t => new DicomInstance + // { + // IsReading = true, + // IsDeleted = false + // }, false); + + + // await _seriesRepository.BatchUpdateNoTrackingAsync( + // t => t.DicomInstanceList.Any(t => sopUids.Contains(t.SopInstanceUid)) && t.TrialId == trialId, + // t => new DicomSeries + // { + // IsReading = true, + // IsDeleted = false + // }, false); + // } + // catch (Exception ex) + // { + // var errorMsg = $"{string.Join(",", sopUids)} {DateTime.Now} 批量更新失败: {ex.Message}"; + // Console.WriteLine(errorMsg); + // await File.AppendAllTextAsync(outputErrorFile, errorMsg + Environment.NewLine); + // } + //} + + //找到该项目的检查,实时统计数量,并且回更数据库 + + var studyList = _studyRepository.Where(t => t.TrialId == trialId && (t.SeriesCount != t.SeriesList.Count() || t.InstanceCount != t.InstanceList.Count())) + .Select(t => new + { + t.Id, + t.StudyCode, + DBSeriesCount = t.SeriesCount, + DBInstanceCount = t.InstanceCount, + + ActrualSeriesCount = t.SeriesList.Count(), + + ActrualInstanceCount = t.InstanceList.Count(), + + }).ToList(); + + + var seriesList = _seriesRepository.Where(t => t.TrialId == trialId && t.InstanceCount != t.DicomInstanceList.Count()) + .Select(t => new + { + SeriesId = t.Id, + t.DicomStudy.StudyCode, + DBInstanceCount = t.InstanceCount, + ActrualInstanceCount = t.DicomInstanceList.Count(), + + }).ToList(); + + + await File.AppendAllTextAsync(outputErrorFile, studyList.ToJsonStr() + Environment.NewLine); + + await File.AppendAllTextAsync(outputErrorFile, seriesList.ToJsonStr() + Environment.NewLine); + + return ResponseOutput.Ok(); + } + + public class DicomSOPInstanceInfo + { + public string SopInstanceUid { get; set; } + + } #endregion