From e7f281a03d249ea9de795192a5c107675242e329 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Tue, 4 Jul 2023 09:23:29 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=9A=82=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../TrialSiteUser/PersonalWorkstation.cs | 101 ++++++++---------- 1 file changed, 45 insertions(+), 56 deletions(-) diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/PersonalWorkstation.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/PersonalWorkstation.cs index 59bc45268..e111ecdf0 100644 --- a/IRaCIS.Core.Application/Service/TrialSiteUser/PersonalWorkstation.cs +++ b/IRaCIS.Core.Application/Service/TrialSiteUser/PersonalWorkstation.cs @@ -8,6 +8,7 @@ using IRaCIS.Core.Infrastructure; using IRaCIS.Core.Infrastructure.Extention; using MathNet.Numerics; using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore.Metadata.Internal; using System.Linq; using System.Linq.Dynamic.Core; @@ -872,6 +873,9 @@ namespace IRaCIS.Core.Application CriterionName = g.Key.CriterionName, TrialReadingCriterionId = g.Key.TrialReadingCriterionId, + #region 不能对包含聚合或子查询的表达式执行聚合函数 + + #endregion //UrgentCount = g.Where(u => u.VisitTask.IsUrgent //&& u.ReadingMedicalReviewDialogList.OrderByDescending(l => l.CreateTime).First().UserTypeEnumInt == (int)UserTypeEnum.MIM).Count(), @@ -914,64 +918,49 @@ namespace IRaCIS.Core.Application #region 废弃不能对包含聚合或子查询的表达式执行聚合函数 - var query = _taskMedicalReviewRepository - .Where(t => t.Trial.TrialUserList.Any(t => t.UserId == _userInfo.Id)) - .Where(t => t.IsClosedDialog == false) - .GroupBy(t => new - { - t.TrialId, - t.Trial.ResearchProgramNo, - t.Trial.ExperimentName, - t.Trial.TrialCode, - t.VisitTask.TrialReadingCriterionId, - t.VisitTask.TrialReadingCriterion.CriterionName - }) - .Select(g => new MedicalCommentsToBeDoneDto() - { - TrialId = g.Key.TrialId, - ResearchProgramNo = g.Key.ResearchProgramNo, - ExperimentName = g.Key.ExperimentName, - TrialCode = g.Key.TrialCode, - CriterionName = g.Key.CriterionName, - - //UrgentCount = g.Where(u => u.VisitTask.IsUrgent).Select(u => u.ReadingMedicalReviewDialogList.OrderByDescending(l => l.CreateTime).First()) - //.Count(t => t.UserTypeEnumInt == (int)UserTypeEnum.IndependentReviewer), - - //ToBeReplyedCount = g.Select(t => t.ReadingMedicalReviewDialogList.OrderByDescending(l => l.CreateTime).First()).Count(t => t.UserTypeEnumInt == (int)UserTypeEnum.IndependentReviewer), - - ToBeReviewedCount = g.Where(u => !u.IsInvalid && u.AuditState != MedicalReviewAuditState.HaveSigned).Count() - - }); #endregion - //var query = _trialReadingCriterionRepository - // .Where(t => t.Trial.TrialUserList.Any(t => t.UserId == _userInfo.Id)) - // //.Where(t => t.IsClosedDialog == false) - // .GroupBy(t => new - // { - // t.TrialId, - // t.Trial.ResearchProgramNo, - // t.Trial.ExperimentName, - // t.Trial.TrialCode, - // t.VisitTask.TrialReadingCriterionId, - // t.VisitTask.TrialReadingCriterion.CriterionName - // }) - // .Select(g => new MedicalCommentsToBeDoneDto() - // { - // TrialId = g.Key.TrialId, - // ResearchProgramNo = g.Key.ResearchProgramNo, - // ExperimentName = g.Key.ExperimentName, - // TrialCode = g.Key.TrialCode, - // CriterionName = g.Key.CriterionName, + + var subquery = _taskMedicalReviewRepository + .Where(t => t.Trial.TrialUserList.Any(tu => tu.UserId == _userInfo.Id)) + .Where(t => !t.IsClosedDialog) + .Select(t => new + { + t.TrialId, + t.Trial.ResearchProgramNo, + t.Trial.ExperimentName, + t.Trial.TrialCode, + t.VisitTask.TrialReadingCriterionId, + t.VisitTask.TrialReadingCriterion.CriterionName, + + IsIndependentReviewer = (t.ReadingMedicalReviewDialogList.OrderByDescending(l => l.CreateTime).FirstOrDefault().UserTypeEnumInt == (int)UserTypeEnum.IndependentReviewer), + IsInvalid = t.IsInvalid, + AuditState = t.AuditState + }); - // UrgentCount = g.Where(u => u.VisitTask.IsUrgent).Select(u=>u.ReadingMedicalReviewDialogList.OrderByDescending(l => l.CreateTime).First()) - // .Count(t=>t.UserTypeEnumInt == (int)UserTypeEnum.IndependentReviewer), + var query = subquery + .GroupBy(t => new + { + t.TrialId, + t.ResearchProgramNo, + t.ExperimentName, + t.TrialCode, + t.TrialReadingCriterionId, + t.CriterionName + }) + .Select(g => new MedicalCommentsToBeDoneDto() + { + TrialId = g.Key.TrialId, + ResearchProgramNo = g.Key.ResearchProgramNo, + ExperimentName = g.Key.ExperimentName, + TrialCode = g.Key.TrialCode, + CriterionName = g.Key.CriterionName, + UrgentCount = g.Count(t => t.IsIndependentReviewer ), + ToBeReplyedCount = g.Count(t => t.IsIndependentReviewer), + ToBeReviewedCount = g.Count(t => !t.IsInvalid && t.AuditState != MedicalReviewAuditState.HaveSigned) + }); - // ToBeReplyedCount = g.Select(t=>t.ReadingMedicalReviewDialogList.OrderByDescending(l => l.CreateTime).First()).Count(t=>t.UserTypeEnumInt == (int)UserTypeEnum.IndependentReviewer), - - // ToBeReviewedCount=g.Where(u => !u.IsInvalid && u.AuditState != MedicalReviewAuditState.HaveSigned).Count() - - // }); + var list = query.ToList(); var result = await query.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, string.IsNullOrEmpty(inQuery.SortField) ? nameof(MedicalCommentsToBeDoneDto.TrialId) : inQuery.SortField, inQuery.Asc); @@ -1206,11 +1195,11 @@ namespace IRaCIS.Core.Application .Where(t => t.IsClosedDialog == false) .Where(u => u.ReadingMedicalReviewDialogList.OrderByDescending(l => l.CreateTime).First().UserTypeEnumInt == (int)UserTypeEnum.IndependentReviewer).Count() : 0, - Medical_MIM_ToBeReviewedCount= + Medical_MIM_ToBeReviewedCount = (t.User.UserTypeEnum == UserTypeEnum.MIM) ? t.Trial.TaskMedicalReviewList .Where(t => t.IsClosedDialog == false) - .Where(u => !u.IsInvalid && u.AuditState != MedicalReviewAuditState.HaveSigned).Count():0 + .Where(u => !u.IsInvalid && u.AuditState != MedicalReviewAuditState.HaveSigned).Count() : 0 });