From 56a15f3b6166afefa68ea32e3dfff2e0c7466d59 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Mon, 8 Sep 2025 18:00:50 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=B8=8A=E4=BC=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ImageAndDoc/DownloadAndUploadService.cs | 63 +++++++++++-------- 1 file changed, 38 insertions(+), 25 deletions(-) diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs index d289047c0..e01b2daa3 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs @@ -45,7 +45,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc IRepository _noneDicomStudyFileReposiotry, IDistributedLockProvider _distributedLockProvider, IRepository _trialImageDownloadRepository, - IRepository _subjectRepository, + IRepository _subjectRepository, IMapper _mapper, IUserInfo _userInfo, IStringLocalizer _localizer, IFusionCache _fusionCache) : BaseService, IDownloadAndUploadService { @@ -258,7 +258,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc } - [TrialGlobalLimit( "AfterStopCannNotOpt" )] + [TrialGlobalLimit("AfterStopCannNotOpt")] public async Task PreArchiveDicomStudy(PriArchiveTaskStudyCommand preArchiveStudyCommand) { @@ -357,7 +357,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc } - [TrialGlobalLimit( "AfterStopCannNotOpt" )] + [TrialGlobalLimit("AfterStopCannNotOpt")] public async Task AddOrUpdateArchiveTaskStudy(TaskArchiveStudyCommand incommand) { #region 获取该subject 已生成任务的访视的检查 @@ -557,29 +557,42 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc //新的序列 那么 检查的序列数量+1 findStudy.SeriesCount += 1; } - else - { - //该序列掉了instance - dicomSeries.InstanceCount += seriesItem.InstanceList.Count; - } + //else + //{ + // //该序列掉了instance + // dicomSeries.InstanceCount += seriesItem.InstanceList.Count; + //} + + //找到该序列已经存在的instanceId + var existInstanceIdList = _taskInstanceRepository.Where(t => t.SeriesId == dicomSeries.Id).Select(t => t.Id).ToList(); foreach (var instanceItem in seriesItem.InstanceList) { var insntance = _mapper.Map(instanceItem); - insntance.Id = IdentifierHelper.CreateGuid(insntance.StudyInstanceUid, insntance.SeriesInstanceUid, insntance.SopInstanceUid, trialId.ToString(), visiTaskId.ToString()); - insntance.StudyId = findStudy.Id; - insntance.SeriesId = dicomSeries.Id; - insntance.TrialId = incommand.TrialId; - insntance.SubjectId = incommand.SubjectId; - insntance.VisitTaskId = visiTaskId; + var instanceId = IdentifierHelper.CreateGuid(insntance.StudyInstanceUid, insntance.SeriesInstanceUid, insntance.SopInstanceUid, trialId.ToString(), visiTaskId.ToString()); + + + if (!existInstanceIdList.Any(t => t == instanceId)) + { + insntance.Id = instanceId; + insntance.StudyId = findStudy.Id; + insntance.SeriesId = dicomSeries.Id; + + insntance.TrialId = incommand.TrialId; + insntance.SubjectId = incommand.SubjectId; + insntance.VisitTaskId = visiTaskId; + + await _taskInstanceRepository.AddAsync(insntance); + + dicomSeries.InstanceCount++; + findStudy.InstanceCount++; + } - await _taskInstanceRepository.AddAsync(insntance); } - - // 不管是新的序列 还是 该序列 掉了Instance 重传的时候 检查的instance 数量都会增加 - findStudy.InstanceCount += seriesItem.InstanceList.Count; + //// 不管是新的序列 还是 该序列 掉了Instance 重传的时候 检查的instance 数量都会增加 + //findStudy.InstanceCount += seriesItem.InstanceList.Count; } @@ -690,7 +703,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc SubjectCode = u.IsSelfAnalysis == true ? u.BlindSubjectCode : u.Subject.Code, TaskBlindName = u.TaskBlindName, TaskName = u.TaskName, - ReadingTaskState=u.ReadingTaskState, + ReadingTaskState = u.ReadingTaskState, SourceSubjectVisitId = u.SourceSubjectVisitId, VisitTaskId = u.Id, @@ -762,9 +775,9 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc select new { TrialId = sv.TrialId, - SubjectId=sv.SubjectId, + SubjectId = sv.SubjectId, SubjectCode = sv.Subject.Code, - TrialSiteCode=sv.TrialSite.TrialSiteCode, + TrialSiteCode = sv.TrialSite.TrialSiteCode, VisitName = sv.VisitName, StudyList = sv.StudyList.Where(t => isQueryDicom ? inQuery.DicomStudyIdList.Contains(t.Id) : false) @@ -972,7 +985,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc var subjectVisitIdList = inQuery.SubjectVisitTaskList.Select(t => t.SubjectVisitId).ToList(); - var trialSiteCode = _visitTaskRepository.Where(t => t.Id == taskIdList.FirstOrDefault()).Select(t => t.IsAnalysisCreate ? t.BlindTrialSiteCode : t.Subject.TrialSite.TrialSiteCode).FirstOrDefault()??string.Empty; + var trialSiteCode = _visitTaskRepository.Where(t => t.Id == taskIdList.FirstOrDefault()).Select(t => t.IsAnalysisCreate ? t.BlindTrialSiteCode : t.Subject.TrialSite.TrialSiteCode).FirstOrDefault() ?? string.Empty; var query = from sv in _subjectRepository.Where(t => t.Id == inQuery.SubjectId).SelectMany(t => t.SubjectVisitList.Where(t => subjectVisitIdList.Contains(t.Id))) //一致性分析,导致查询出来两条数据 @@ -1033,9 +1046,9 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc { Id = NewId.NextSequentialGuid(), TrialId = info.TrialId, - SubjectId=inQuery.SubjectId, + SubjectId = inQuery.SubjectId, SubjectCode = inQuery.SubjectCode, - TrialSiteCode= trialSiteCode, + TrialSiteCode = trialSiteCode, IP = _userInfo.IP, DownloadStartTime = DateTime.Now, IsSuccess = false, @@ -1155,7 +1168,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc return ResponseOutput.Ok(); } - #region 影像汇总页面 + #region 影像汇总页面 [HttpPost] public async Task>> GetTrialVisitImageStatList(TrialVisitImageQuery inQuery) {