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); 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 24cd4ac71..7ae807523 100644 --- a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialConfigService.cs +++ b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialConfigService.cs @@ -865,6 +865,16 @@ 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 _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 +883,22 @@ 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 _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 }); - + } } @@ -924,7 +941,6 @@ namespace IRaCIS.Core.Application //---影像质控审核问题已被其他人员确认,不允许再次确认。 throw new BusinessValidationFailedException(_localizer["TrialConfig_AuditQuestionConfirmed"]); } - //不记录这个稽查,不关注问题上的确认标记 await _trialQCQuestionRepository.BatchUpdateNoTrackingAsync(t => t.TrialId == signConfirmDTO.TrialId, x => new TrialQCQuestion { 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); } 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)