From f191da2df336e787df015a0aac54fbf4cc5285e0 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Fri, 18 Jul 2025 16:57:03 +0800 Subject: [PATCH 1/6] =?UTF-8?q?=E7=BB=B4=E6=8A=A4dicom=20=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E5=A4=A7=E5=B0=8F=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- IRaCIS.Core.Application/TestService.cs | 30 ++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/IRaCIS.Core.Application/TestService.cs b/IRaCIS.Core.Application/TestService.cs index e9d5c9588..82afeaeff 100644 --- a/IRaCIS.Core.Application/TestService.cs +++ b/IRaCIS.Core.Application/TestService.cs @@ -120,7 +120,7 @@ namespace IRaCIS.Core.Application.Service foreach (var user in userList) { - var lastLoginRegion = _userLogRepository.Where(t => t.ActionIdentityUserId == user.Id && (t.OptType == UserOptType.Login || t.OptType == UserOptType.LoginLockedAccount)).OrderByDescending(t => t.CreateTime).Select(t => t.IPRegion).FirstOrDefault()??string.Empty; + var lastLoginRegion = _userLogRepository.Where(t => t.ActionIdentityUserId == user.Id && (t.OptType == UserOptType.Login || t.OptType == UserOptType.LoginLockedAccount)).OrderByDescending(t => t.CreateTime).Select(t => t.IPRegion).FirstOrDefault() ?? string.Empty; await _identityUserRepository.BatchUpdateNoTrackingAsync(t => t.Id == user.Id, u => new Domain.Models.IdentityUser() { LastLoginIP = lastLoginRegion, UpdateUserId = user.UpdateUserId }); } @@ -385,6 +385,32 @@ namespace IRaCIS.Core.Application.Service return ResponseOutput.Ok(); } + [AllowAnonymous] + public async Task DealDicomFileSize([FromServices] IOSSService _oSSService, [FromServices] IRepository _dicomInstanceRepository) + { + var instanceList = _dicomInstanceRepository.Where(t => t.TrialId == Guid.Parse("01000000-AC13-0242-3AE4-08DC9B0495C6")) + .Where(t => t.FileSize == 0 || t.FileSize == null) + .Select(t => new { t.Path, t.Id }).ToList(); + + + foreach (var item in instanceList) + { + try + { + var fileSize = await _oSSService.GetObjectSizeAsync(item.Path); + await _dicomInstanceRepository.BatchUpdateNoTrackingAsync(t => t.Id == item.Id, u => new DicomInstance() { FileSize = fileSize }); + + } + catch (Exception ex) + { + Console.WriteLine(item.Path + " : " + ex.Message); + } + } + + return ResponseOutput.Ok(); + + } + /// /// 非dicom 临床数据 /// @@ -411,7 +437,7 @@ namespace IRaCIS.Core.Application.Service } catch (Exception ex) { - Console.WriteLine(item.Path+" : " + ex.Message); + Console.WriteLine(item.Path + " : " + ex.Message); } From 435479cd9d7b4cb9a33d3e64c7d222565fbe6f6c Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Fri, 18 Jul 2025 09:25:56 +0800 Subject: [PATCH 2/6] =?UTF-8?q?=E5=A4=8D=E6=A0=B8=E7=A8=BD=E6=9F=A5?= =?UTF-8?q?=E4=BF=AE=E6=94=B9012?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/TrialSiteUser/TrialConfigService.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialConfigService.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialConfigService.cs index 24cd4ac71..e9ca04d77 100644 --- a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialConfigService.cs +++ b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialConfigService.cs @@ -924,7 +924,6 @@ namespace IRaCIS.Core.Application //---影像质控审核问题已被其他人员确认,不允许再次确认。 throw new BusinessValidationFailedException(_localizer["TrialConfig_AuditQuestionConfirmed"]); } - //不记录这个稽查,不关注问题上的确认标记 await _trialQCQuestionRepository.BatchUpdateNoTrackingAsync(t => t.TrialId == signConfirmDTO.TrialId, x => new TrialQCQuestion { From e9b79cc1f14a0541f0ff44a5c14f62a4a635f954 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Fri, 18 Jul 2025 11:34:13 +0800 Subject: [PATCH 3/6] =?UTF-8?q?=E5=A4=8D=E6=A0=B8=E7=A8=BD=E6=9F=A5?= =?UTF-8?q?=E4=BF=AE=E6=94=B9013?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- IRaCIS.Core.Infra.EFCore/Common/AuditingData.cs | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/IRaCIS.Core.Infra.EFCore/Common/AuditingData.cs b/IRaCIS.Core.Infra.EFCore/Common/AuditingData.cs index 804dcc616..26bb4439e 100644 --- a/IRaCIS.Core.Infra.EFCore/Common/AuditingData.cs +++ b/IRaCIS.Core.Infra.EFCore/Common/AuditingData.cs @@ -2059,13 +2059,16 @@ namespace IRaCIS.Core.Infra.EFCore.Common extraIdentification = "/DeleteNoneDicomFileZero"; } - - if (entity.CheckChallengeState == CheckChanllengeTypeEnum.CRCWaitPMReply || entity.CheckChallengeState == CheckChanllengeTypeEnum.PMWaitCRCReply) + + if(_userInfo.RequestUrl== "QCOperation/addCheckChallengeReply" || _userInfo.RequestUrl == "QCOperation/UploadVisitCheckExcel") { - //发送对话 修改质疑状态 不需要区分接口 - isDistinctionInterface = false; + if (entity.CheckChallengeState == CheckChanllengeTypeEnum.CRCWaitPMReply || entity.CheckChallengeState == CheckChanllengeTypeEnum.PMWaitCRCReply) + { + //发送对话 修改质疑状态 不需要区分接口 + isDistinctionInterface = false; - extraIdentification = "/ModifyCheckChallengeState"; + extraIdentification = "/ModifyCheckChallengeState"; + } } if (entity.SubmitState == SubmitStateEnum.ToSubmit) From caca3e77a52b688c82aad1454c131009eb28cae4 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Fri, 18 Jul 2025 12:17:55 +0800 Subject: [PATCH 4/6] =?UTF-8?q?=E5=A4=8D=E6=A0=B8=E7=A8=BD=E6=9F=A5?= =?UTF-8?q?=E4=BF=AE=E6=94=B9014?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/ImageAndDoc/StudyService.cs | 16 +++++++++--- .../TrialSiteUser/TrialConfigService.cs | 25 ++++++++++++++++--- 2 files changed, 33 insertions(+), 8 deletions(-) diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/StudyService.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/StudyService.cs index fe0feed5a..51bf23ad6 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/StudyService.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/StudyService.cs @@ -579,7 +579,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc /// [HttpGet("{subjectVisitId:guid}")] [AllowAnonymous] - public IResponseOutput> GetAllRelationStudyList(Guid subjectVisitId) + public IResponseOutput> GetAllRelationStudyList(Guid subjectVisitId,bool? isReading) { #region 废弃 //var studylist = _studyRepository.Where(u => u.SubjectVisitId == subjectVisitId && u.IsDeleted == false).Select(t => new { StudyId = t.Id, t.SubjectId, t.TrialId }).ToList(); @@ -607,10 +607,18 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc var studyInfo = _dicomStudyRepository.Where(u => u.SubjectVisitId == subjectVisitId).Select(t => new { t.SubjectId, t.TrialId }).FirstOrDefault().IfNullThrowException(); - var query = _dicomStudyRepository.Where(t => t.SubjectVisitId != subjectVisitId && t.TrialId == studyInfo.TrialId && t.SubjectId == studyInfo.SubjectId) - .ProjectTo(_mapper.ConfigurationProvider).ToList(); + var list = _dicomStudyRepository.Where(t => t.SubjectVisitId != subjectVisitId && t.TrialId == studyInfo.TrialId && t.SubjectId == studyInfo.SubjectId) + .Select(t=> new RelationStudyDTO() + { + StudyId = t.Id, + StudyCode = t.StudyCode, + VisitName = t.SubjectVisit.VisitName, + Modalities = t.Modalities, + Description = t.Description, + SeriesCount = t.SeriesList.Where(t=> isReading==true? t.IsReading==true:true).Count() + }) .ToList(); - var list = query.OrderBy(u => u.VisitName).ThenBy(s => s.StudyCode).ToList(); + list = list.Where(t=>t.SeriesCount>0).OrderBy(u => u.VisitName).ThenBy(s => s.StudyCode).ToList(); return ResponseOutput.Ok(list); } diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialConfigService.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialConfigService.cs index e9ca04d77..3d1c4ab83 100644 --- a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialConfigService.cs +++ b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialConfigService.cs @@ -865,6 +865,23 @@ namespace IRaCIS.Core.Application } else if (signConfirmDTO.SignCode == ((int)SignEnum.TrialQCQuestionConfirmUpdate).ToString()) { + var trialConfirmTime = _trialRepository.Where(t => t.Id == signConfirmDTO.TrialId).Select(t => t.QCQuestionConfirmedTime).FirstOrDefault(); + + if (trialConfirmTime != null) + { + //删除复审中间临时数据 + await _qcQuestionAnswerRepository.BatchDeleteNoTrackingAsync(t => t.SubjectVisit.TrialId == signConfirmDTO.TrialId && t.SubjectVisit.SecondReviewState == SecondReviewState.WaitAudit + && t.CurrentQCEnum == CurrentQC.SecondReview && t.UpdateTime > trialConfirmTime); + + //删除质控中 临时保存的问题答案 (因为添加那里只会新增 和全部更新,如果不处理,那么有新增,也有更新,稽查那里也会有问题) + await _qcQuestionAnswerRepository.BatchDeleteNoTrackingAsync(t => t.SubjectVisit.TrialId == signConfirmDTO.TrialId && t.SubjectVisit.AuditState == AuditStateEnum.InPrimaryQC + && t.CurrentQCEnum == CurrentQC.First); + + await _qcQuestionAnswerRepository.BatchDeleteNoTrackingAsync(t => t.SubjectVisit.TrialId == signConfirmDTO.TrialId && t.SubjectVisit.AuditState == AuditStateEnum.InSecondaryQC + && t.CurrentQCEnum == CurrentQC.Second); + + } + await _trialRepository.UpdatePartialFromQueryAsync(t => t.Id == signConfirmDTO.TrialId, u => new Trial() { QCQuestionConfirmedTime = null, QCQuestionConfirmedUserId = null, IsQCQuestionConfirmed = false }); } else if (signConfirmDTO.SignCode == ((int)SignEnum.SecondReviewConfirm).ToString()) @@ -873,15 +890,15 @@ namespace IRaCIS.Core.Application if (trialConfirmTime != null) { - //删除复审中间临时数据 - await _qcQuestionAnswerRepository.BatchDeleteNoTrackingAsync(t => t.SubjectVisit.TrialId == signConfirmDTO.TrialId && t.SubjectVisit.SecondReviewState == SecondReviewState.WaitAudit - && t.CurrentQCEnum == CurrentQC.SecondReview && t.UpdateTime> trialConfirmTime); + //删除复审中间临时数据--没重置,一直点生成复核任务 + await _qcQuestionAnswerRepository.BatchDeleteNoTrackingAsync(t => t.SubjectVisit.TrialId == signConfirmDTO.TrialId && t.SubjectVisit.SecondReviewState == SecondReviewState.WaitAudit + && t.CurrentQCEnum == CurrentQC.SecondReview && t.UpdateTime > trialConfirmTime); //重复二次复核签名 await _subjectVisitRepository.UpdatePartialFromQueryAsync(t => t.TrialId == signConfirmDTO.TrialId && t.AuditState == AuditStateEnum.QCPassed && !t.TrialQCQuestionAnswerList.Any(t => t.SecondReviewTime == trialConfirmTime), u => new SubjectVisit() { SecondReviewState = SecondReviewState.WaitAudit }); - + } } From 1d74e33b8b28961c8df2324ab67514d84a5b3611 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Fri, 18 Jul 2025 13:04:58 +0800 Subject: [PATCH 5/6] =?UTF-8?q?=E5=A4=8D=E6=A0=B8=E7=A8=BD=E6=9F=A5?= =?UTF-8?q?=E4=BF=AE=E6=94=B9015?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/TrialSiteUser/TrialConfigService.cs | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialConfigService.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialConfigService.cs index 3d1c4ab83..7ae807523 100644 --- a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialConfigService.cs +++ b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialConfigService.cs @@ -873,13 +873,6 @@ namespace IRaCIS.Core.Application await _qcQuestionAnswerRepository.BatchDeleteNoTrackingAsync(t => t.SubjectVisit.TrialId == signConfirmDTO.TrialId && t.SubjectVisit.SecondReviewState == SecondReviewState.WaitAudit && t.CurrentQCEnum == CurrentQC.SecondReview && t.UpdateTime > trialConfirmTime); - //删除质控中 临时保存的问题答案 (因为添加那里只会新增 和全部更新,如果不处理,那么有新增,也有更新,稽查那里也会有问题) - await _qcQuestionAnswerRepository.BatchDeleteNoTrackingAsync(t => t.SubjectVisit.TrialId == signConfirmDTO.TrialId && t.SubjectVisit.AuditState == AuditStateEnum.InPrimaryQC - && t.CurrentQCEnum == CurrentQC.First); - - await _qcQuestionAnswerRepository.BatchDeleteNoTrackingAsync(t => t.SubjectVisit.TrialId == signConfirmDTO.TrialId && t.SubjectVisit.AuditState == AuditStateEnum.InSecondaryQC - && t.CurrentQCEnum == CurrentQC.Second); - } await _trialRepository.UpdatePartialFromQueryAsync(t => t.Id == signConfirmDTO.TrialId, u => new Trial() { QCQuestionConfirmedTime = null, QCQuestionConfirmedUserId = null, IsQCQuestionConfirmed = false }); @@ -894,6 +887,13 @@ namespace IRaCIS.Core.Application await _qcQuestionAnswerRepository.BatchDeleteNoTrackingAsync(t => t.SubjectVisit.TrialId == signConfirmDTO.TrialId && t.SubjectVisit.SecondReviewState == SecondReviewState.WaitAudit && t.CurrentQCEnum == CurrentQC.SecondReview && t.UpdateTime > trialConfirmTime); + //删除质控中 临时保存的问题答案 (因为添加那里只会新增 和全部更新,如果不处理,那么有新增,也有更新,稽查那里也会有问题) + await _qcQuestionAnswerRepository.BatchDeleteNoTrackingAsync(t => t.SubjectVisit.TrialId == signConfirmDTO.TrialId && t.SubjectVisit.AuditState == AuditStateEnum.InPrimaryQC + && t.CurrentQCEnum == CurrentQC.First); + + await _qcQuestionAnswerRepository.BatchDeleteNoTrackingAsync(t => t.SubjectVisit.TrialId == signConfirmDTO.TrialId && t.SubjectVisit.AuditState == AuditStateEnum.InSecondaryQC + && t.CurrentQCEnum == CurrentQC.Second); + //重复二次复核签名 await _subjectVisitRepository.UpdatePartialFromQueryAsync(t => t.TrialId == signConfirmDTO.TrialId && t.AuditState == AuditStateEnum.QCPassed && !t.TrialQCQuestionAnswerList.Any(t => t.SecondReviewTime == trialConfirmTime), u => new SubjectVisit() { SecondReviewState = SecondReviewState.WaitAudit }); From bae6f099fee840ccee3134398068e6c99b311121 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Fri, 18 Jul 2025 13:15:23 +0800 Subject: [PATCH 6/6] =?UTF-8?q?=E5=A4=8D=E6=A0=B8=E7=A8=BD=E6=9F=A5?= =?UTF-8?q?=E4=BF=AE=E6=94=B9016?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/ImageAndDoc/Interface/IStudyService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/Interface/IStudyService.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/Interface/IStudyService.cs index 643154f4c..ce4e2186d 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/Interface/IStudyService.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/Interface/IStudyService.cs @@ -4,7 +4,7 @@ namespace IRaCIS.Core.Application.Contracts { public interface IStudyService { - IResponseOutput> GetAllRelationStudyList(Guid subjectVisitId); + IResponseOutput> GetAllRelationStudyList(Guid subjectVisitId,bool? isReading); Task> GetDicomAndNoneDicomStudyList(StudyQuery studyQuery); Task> GetDicomAndNoneDicomStudyMonitorList(StudyQuery studyQuery); (List SeriesInstanceUid, List SopInstanceUid) GetHasUploadSeriesAndInstance(Guid studyId);