From 6ee51a7f435f5380ddb9372f6db04d2c6faebd66 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Fri, 12 Dec 2025 13:31:49 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=90=9C=E7=B4=A2=E6=9D=A1?= =?UTF-8?q?=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/Document/TrialDocumentService.cs | 9 +++-- .../TrialSiteUser/DTO/TrialStatViewModel.cs | 9 ++++- .../Service/TrialSiteUser/TrialStatService.cs | 40 +++++++++++++------ 3 files changed, 40 insertions(+), 18 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Document/TrialDocumentService.cs b/IRaCIS.Core.Application/Service/Document/TrialDocumentService.cs index c53becf40..9dcf012d4 100644 --- a/IRaCIS.Core.Application/Service/Document/TrialDocumentService.cs +++ b/IRaCIS.Core.Application/Service/Document/TrialDocumentService.cs @@ -54,9 +54,9 @@ namespace IRaCIS.Core.Application.Services var trialDocumentAttachmentQueryable = _trialDocumentAttachmentRepository .WhereIf(inQuery.TrialDocumentId != null, x => x.TrialDocumentId == inQuery.TrialDocumentId) - .WhereIf(inQuery.Name != null, x => x.Name.Contains(inQuery.Name)) - .WhereIf(inQuery.FileFormat != null, x => x.FileFormat == inQuery.FileFormat) - .ProjectTo(_mapper.ConfigurationProvider); + .WhereIf(inQuery.Name != null, x => x.Name.Contains(inQuery.Name)) + .WhereIf(inQuery.FileFormat != null, x => x.FileFormat == inQuery.FileFormat) + .ProjectTo(_mapper.ConfigurationProvider); var pageList = await trialDocumentAttachmentQueryable.ToPagedListAsync(inQuery); @@ -171,7 +171,7 @@ namespace IRaCIS.Core.Application.Services .WhereIf(inQuery.UserTypeId != null, t => t.NeedConfirmedUserTypeList.Any(t => t.NeedConfirmUserTypeId == inQuery.UserTypeId)) .WhereIf(inQuery.IsDeleted != null, t => t.IsDeleted == inQuery.IsDeleted) .WhereIf(inQuery.IsPublish != null, t => t.IsPublish == inQuery.IsPublish) - .WhereIf(!string.IsNullOrEmpty(inQuery.FileTypeCode), t => t.FileType.Code== inQuery.FileTypeCode) + .WhereIf(!string.IsNullOrEmpty(inQuery.FileTypeCode), t => t.FileType.Code== inQuery.FileTypeCode) .ProjectTo(_mapper.ConfigurationProvider, new { token = _userInfo.UserToken, isEn_Us = _userInfo.IsEn_Us }); return await trialDocumentQueryable.ToPagedListAsync(inQuery); @@ -1113,6 +1113,7 @@ namespace IRaCIS.Core.Application.Services _mapper.Map(addOrEditTrialDocument, document); document.UpdateTime = DateTime.Now; + #region 不区分路径了 //if (document.FileTypeId != addOrEditTrialDocument.FileTypeId) diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/TrialStatViewModel.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/TrialStatViewModel.cs index 1fcddc4d4..1244fe508 100644 --- a/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/TrialStatViewModel.cs +++ b/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/TrialStatViewModel.cs @@ -13,6 +13,8 @@ namespace IRaCIS.Core.Application.ViewModel { public Guid TrialId { get; set; } + public Guid? TrialSiteId { get; set; } + public Guid? TrialReadingCriterionId { get; set; } } @@ -42,6 +44,8 @@ namespace IRaCIS.Core.Application.ViewModel { public Guid TrialId { get; set; } + public Guid? TrialSiteId { get; set; } + } public class VisitQuestionViewModel @@ -83,10 +87,13 @@ namespace IRaCIS.Core.Application.ViewModel public Guid TrialId { get; set; } [NotDefault] public Guid TrialReadingCriterionId { get; set; } + + public Guid? TrialSiteId { get; set; } } public class EfficacyEvaluationStatViewModel { + public string? DictionaryCode { get; set; } public string OverallTumorEvaluation { get; set; } public int SubjectCount { get; set; } @@ -139,7 +146,7 @@ namespace IRaCIS.Core.Application.ViewModel public List SubjectCriterionReadingPeriodVisitNumList { get; set; } - + public string? DictionaryCode { get; set; } public string OverallTumorEvaluation { get; set; } diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialStatService.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialStatService.cs index bdb2116ca..3a13402db 100644 --- a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialStatService.cs +++ b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialStatService.cs @@ -1,4 +1,5 @@ -using IRaCIS.Core.Application.Contracts; +using IRaCIS.Application.Contracts; +using IRaCIS.Core.Application.Contracts; using IRaCIS.Core.Application.ViewModel; using IRaCIS.Core.Domain.Share; using IRaCIS.Core.Infra.EFCore.Common; @@ -35,16 +36,21 @@ public class TrialStatService( var list = await _trialRepository.Where(t => t.Id == inQuery.TrialId).Select(t => new VisitFinishedStatViewModel() { - UploadedCount = t.SubjectVisitList.Where(t => t.SubmitState == SubmitStateEnum.Submitted).Count(), - QCFinishedCount = t.SubjectVisitList.Where(t => t.AuditState == AuditStateEnum.QCPassed || t.AuditState == AuditStateEnum.QCFailed).Count(), - CheckFinishedCount = t.SubjectVisitList.Where(t => t.CheckState == CheckStateEnum.CVPassed).Count(), + UploadedCount = t.SubjectVisitList.Where(t => inQuery.TrialSiteId != null ? t.TrialSiteId == inQuery.TrialSiteId : true) + .Where(t => t.SubmitState == SubmitStateEnum.Submitted).Count(), + QCFinishedCount = t.SubjectVisitList.Where(t => inQuery.TrialSiteId != null ? t.TrialSiteId == inQuery.TrialSiteId : true) + .Where(t => t.AuditState == AuditStateEnum.QCPassed || t.AuditState == AuditStateEnum.QCFailed).Count(), + CheckFinishedCount = t.SubjectVisitList.Where(t => inQuery.TrialSiteId != null ? t.TrialSiteId == inQuery.TrialSiteId : true) + .Where(t => t.CheckState == CheckStateEnum.CVPassed).Count(), CriterionList = t.TrialReadingCriterionList.Where(t => inQuery.TrialReadingCriterionId != null ? t.Id == inQuery.TrialReadingCriterionId : true) .Select(t => new VisitReadingCriterionInfo() { TrialReadingCriterionId = t.Id, TrialReadingCriterionName = t.CriterionName, - ReadingFinishedCount = t.VisitTaskList.Where(t => t.TaskState == TaskState.Effect && t.IsAnalysisCreate == false + ReadingFinishedCount = t.VisitTaskList + .Where(t => inQuery.TrialSiteId != null ? t.Subject.TrialSiteId == inQuery.TrialSiteId : true) + .Where(t => t.TaskState == TaskState.Effect && t.IsAnalysisCreate == false && t.ReadingTaskState == ReadingTaskState.HaveSigned && t.ReadingCategory == ReadingCategory.Visit) .GroupBy(t => t.SourceSubjectVisitId) .Where(g => t.ReadingType == ReadingMethod.Double ? g.Count() == 2 : true) @@ -73,17 +79,23 @@ public class TrialStatService( { - QCQuestion_ClosedCount = t.SubjectVisitList.SelectMany(t => t.QCChallengeList).Where(c => c.IsClosed).Count(), + QCQuestion_ClosedCount = t.SubjectVisitList.Where(t => inQuery.TrialSiteId != null ? t.TrialSiteId == inQuery.TrialSiteId : true) + .SelectMany(t => t.QCChallengeList).Where(c => c.IsClosed).Count(), - QCQuestion_IngCount = t.SubjectVisitList.SelectMany(t => t.QCChallengeList).Where(c => c.IsClosed == false).Count(), + QCQuestion_IngCount = t.SubjectVisitList.Where(t => inQuery.TrialSiteId != null ? t.TrialSiteId == inQuery.TrialSiteId : true) + .SelectMany(t => t.QCChallengeList).Where(c => c.IsClosed == false).Count(), - CheckQuestion_ClosedCount = t.SubjectVisitList.Where(t => t.CheckChallengeState == CheckChanllengeTypeEnum.Closed).Count(), - CheckQuestion_IngCount = t.SubjectVisitList.Where(t => t.CheckChallengeState != CheckChanllengeTypeEnum.Closed).Count(), + CheckQuestion_ClosedCount = t.SubjectVisitList.Where(t => inQuery.TrialSiteId != null ? t.TrialSiteId == inQuery.TrialSiteId : true) + .Where(t => t.CheckChallengeState == CheckChanllengeTypeEnum.Closed).Count(), + CheckQuestion_IngCount = t.SubjectVisitList.Where(t => inQuery.TrialSiteId != null ? t.TrialSiteId == inQuery.TrialSiteId : true) + .Where(t => t.CheckChallengeState != CheckChanllengeTypeEnum.Closed).Count(), - MedicalReviewQuestion_ClosedCount = t.TaskMedicalReviewList.Where(t => t.VisitTask.IsAnalysisCreate == false && t.IsClosedDialog).Count(), + MedicalReviewQuestion_ClosedCount = t.TaskMedicalReviewList.Where(t => inQuery.TrialSiteId != null ? t.VisitTask.Subject.TrialSiteId == inQuery.TrialSiteId : true) + .Where(t => t.VisitTask.IsAnalysisCreate == false && t.IsClosedDialog).Count(), - MedicalReviewQuestion_IngCount = t.TaskMedicalReviewList.Where(t => t.VisitTask.IsAnalysisCreate == false && t.IsClosedDialog == false).Count(), + MedicalReviewQuestion_IngCount = t.TaskMedicalReviewList.Where(t => inQuery.TrialSiteId != null ? t.VisitTask.Subject.TrialSiteId == inQuery.TrialSiteId : true) + .Where(t => t.VisitTask.IsAnalysisCreate == false && t.IsClosedDialog == false).Count(), }).ToListAsync(); @@ -132,7 +144,7 @@ public class TrialStatService( } - var query = _visitTaskRepository + var query = _visitTaskRepository.WhereIf(inQuery.TrialSiteId != null, t => t.Subject.TrialSiteId == inQuery.TrialSiteId) .Where(t => t.TrialId == inQuery.TrialId && t.TrialReadingCriterionId == trialReadingCriterionId && t.IsAnalysisCreate == false && (t.TaskState == TaskState.Effect || t.TaskState == TaskState.Freeze)) //访视和全局查询已签名完成的,裁判可以是未签名,未完成的 @@ -159,8 +171,9 @@ public class TrialStatService( JudgeNote = t.ReadingCategory == ReadingCategory.Judge ? t.JudgeResultRemark : "", SubjectCriterionReadingPeriodVisitNumList = t.Subject.ReadModuleList.Where(t => t.TrialReadingCriterionId == trialReadingCriterionId && t.ReadingSetType == ReadingSetType.ImageReading).Select(c => c.SubjectVisit.VisitNum).ToList(), + DictionaryCode = t.ReadingTaskQuestionAnswerList.Where(c => c.ReadingQuestionTrial.QuestionType == questionType).Select(t=>t.ReadingQuestionTrial.DictionaryCode).FirstOrDefault(), //整体肿瘤评估答案 - OverallTumorEvaluation = t.ReadingTaskQuestionAnswerList.Where(c => c.ReadingQuestionTrial.QuestionType == questionType).FirstOrDefault()!.Answer + OverallTumorEvaluation = t.ReadingTaskQuestionAnswerList.Where(c => c.ReadingQuestionTrial.QuestionType == questionType).FirstOrDefault()!.Answer }); @@ -187,6 +200,7 @@ public class TrialStatService( //判断subject的逻辑需要确认,这么多次访视任务,有的符合,有的不符合,准则是什么? return list.GroupBy(t => t.OverallTumorEvaluation).Select(g => new EfficacyEvaluationStatViewModel() { + DictionaryCode=g.FirstOrDefault()?.DictionaryCode, OverallTumorEvaluation = g.Key, SubjectCount = g.Select(t => t.SubjectId).Distinct().Count() }).ToList();