diff --git a/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs b/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs index 60b45e3b1..103357b7c 100644 --- a/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs +++ b/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs @@ -2370,7 +2370,7 @@ namespace IRaCIS.Core.Application.Service.Common //2、完成阅片的病例数Q:R1,R2均完成阅片的访视数; exportInfo.VisitCount = _visitTaskRepository.Where(comonTaskFilter).Where(t => t.ReadingCategory == ReadingCategory.Visit && t.ReadingTaskState == ReadingTaskState.HaveSigned) - .GroupBy(t => new { t.SubjectId,t.SourceSubjectVisitId }) + .GroupBy(t => new { t.SubjectId, t.SourceSubjectVisitId }) .Where(g => g.Count() == 2).Select(g => g.Key.SourceSubjectVisitId).Distinct().Count(); //裁判不需要完成阅片 @@ -2413,7 +2413,7 @@ namespace IRaCIS.Core.Application.Service.Common // 有阅片期没有全局 和有阅片期有全局,主要变化点在于 t.ReadingCategory == ReadingCategory.Global 变成了 t.Subject.ReadModuleList.Any(c => c.SubjectVisit.VisitNum == (t.VisitTaskNum - addReadingPeriodNum) && c.TrialReadingCriterionId==trialReadingCriterionId) // 或者使用 isGlobalReading ? t.ReadModule.SubjectVisit.VisitNum == (t.VisitTaskNum - addReadingPeriodNum) : t.SourceSubjectVisit.VisitNum == (t.VisitTaskNum - addReadingPeriodNum) - #region 可以统一部分 + #region 患者统计部分 //1、裁判量M:所有完成阅片病例 最后一个阅片期触发裁判的受试者数量; //2、总样本量N:R1,R2均完成阅片(至少一个阅片期)的受试者数量; @@ -2434,12 +2434,40 @@ namespace IRaCIS.Core.Application.Service.Common .Any(g => g.Any(t => t.JudgeVisitTaskId != null))) .Count(); + exportInfo.DoctorSubjectStatList = _visitTaskRepository.Where(comonTaskFilter).Where(t => t.ReadingTaskState == ReadingTaskState.HaveSigned) + //筛选全局 已完成的任务 + .Where(t => t.Subject.ReadModuleList.Any(c => c.SubjectVisit.VisitNum == (t.VisitTaskNum - addReadingPeriodNum) && c.TrialReadingCriterionId == trialReadingCriterionId)) + .GroupBy(t => new { t.DoctorUserId, t.DoctorUser.UserName, t.DoctorUser.FullName }) + .Select(g => new DoctorJudgeRatio() + { + DoctorUserId = g.Key.DoctorUserId, + UserName = g.Key.UserName, + FullName = g.Key.FullName, + + //最后一个阅片期触发裁判 且裁判已阅 + TotalJudgeCount = g.Where(t => t.JudgeVisitTaskId != null && t.JudgeVisitTask.ReadingTaskState == ReadingTaskState.HaveSigned) + .Where(t => t.VisitTaskNum == g.Where(c => c.SubjectId == t.SubjectId && c.JudgeVisitTaskId != null && c.JudgeVisitTask.ReadingTaskState == ReadingTaskState.HaveSigned) + .Max(t => t.VisitTaskNum)) + .Select(t => t.SubjectId).Distinct().Count(), + + // G-2 G-4 可能选择的是不同的医生,要以最后一次选择的为准 + JudgeAgreeCount = g.Where(t => t.JudgeVisitTaskId != null && t.JudgeVisitTask.ReadingTaskState == ReadingTaskState.HaveSigned) + .Where(t => t.VisitTaskNum == g.Where(c => c.SubjectId == t.SubjectId && c.JudgeVisitTaskId != null && c.JudgeVisitTask.ReadingTaskState == ReadingTaskState.HaveSigned) + .Max(t => t.VisitTaskNum)) + .Where(t => t.JudgeVisitTask.JudgeResultTaskId == t.Id) + .Select(t => t.SubjectId).Distinct().Count(), + + }).ToList(); + #endregion + + #region 阅片期部分 + exportInfo.ReadingPeriodCount = _visitTaskRepository.Where(comonTaskFilter).Where(t => t.ReadingTaskState == ReadingTaskState.HaveSigned) - //找到阅片期已阅片完 - .Where(t => t.Subject.ReadModuleList.Any(c => c.SubjectVisit.VisitNum == (t.VisitTaskNum - addReadingPeriodNum) && c.TrialReadingCriterionId == trialReadingCriterionId)) - .GroupBy(t => new { t.SubjectId, t.VisitTaskNum }) - .Where(g => g.Count() == 2) - .Select(g => g.Key.VisitTaskNum).Distinct().Count(); + //找到阅片期已阅片完 + .Where(t => t.Subject.ReadModuleList.Any(c => c.SubjectVisit.VisitNum == (t.VisitTaskNum - addReadingPeriodNum) && c.TrialReadingCriterionId == trialReadingCriterionId)) + .GroupBy(t => new { t.SubjectId, t.VisitTaskNum }) + .Where(g => g.Count() == 2) + .Select(g => g.Key.VisitTaskNum).Distinct().Count(); exportInfo.judgeReadingPeriodCount = _visitTaskRepository.Where(comonTaskFilter).Where(t => t.ReadingTaskState == ReadingTaskState.HaveSigned) //找到阅片期已阅片完 @@ -2465,101 +2493,18 @@ namespace IRaCIS.Core.Application.Service.Common //触发裁判的阅片期的数量 并且裁判要求做完 TotalJudgeCount = g.Where(t => t.Subject.ReadModuleList.Any(c => c.SubjectVisit.VisitNum == (t.VisitTaskNum - addReadingPeriodNum) && t.TrialReadingCriterionId == trialReadingCriterionId)) - .Where(t=> t.JudgeVisitTaskId != null && t.JudgeVisitTask.ReadingTaskState == ReadingTaskState.HaveSigned) + .Where(t => t.JudgeVisitTaskId != null && t.JudgeVisitTask.ReadingTaskState == ReadingTaskState.HaveSigned) .Select(t => t.VisitTaskNum).Distinct().Count(), JudgeAgreeCount = g.Where(t => t.Subject.ReadModuleList.Any(c => c.SubjectVisit.VisitNum == (t.VisitTaskNum - addReadingPeriodNum) && t.TrialReadingCriterionId == trialReadingCriterionId)) .Where(t => t.JudgeVisitTaskId != null && t.JudgeVisitTask.ReadingTaskState == ReadingTaskState.HaveSigned) - .Where(t=> t.JudgeVisitTask.JudgeResultTaskId == t.Id) + .Where(t => t.JudgeVisitTask.JudgeResultTaskId == t.Id) .Select(t => t.VisitTaskNum).Distinct().Count(), }).ToList(); - #endregion - - if (criterion.IsGlobalReading) - { - - #region 按照受试者维度统计 - - exportInfo.DoctorSubjectStatList = _visitTaskRepository.Where(comonTaskFilter).Where(t => t.ReadingTaskState == ReadingTaskState.HaveSigned) - .GroupBy(t => new { t.DoctorUserId, t.DoctorUser.UserName, t.DoctorUser.FullName }) - .Select(g => new DoctorJudgeRatio() - { - DoctorUserId = g.Key.DoctorUserId, - UserName = g.Key.UserName, - FullName = g.Key.FullName, - - //最后一个阅片期触发裁判 且裁判已阅 - TotalJudgeCount = g - .Where(t => t.ReadingCategory == ReadingCategory.Global) - .Where(t => t.JudgeVisitTaskId != null && t.JudgeVisitTask.ReadingTaskState == ReadingTaskState.HaveSigned) - .Where(t => t.VisitTaskNum == g.Where(t => t.ReadingCategory == ReadingCategory.Global) - .Where(t => t.JudgeVisitTaskId != null && t.JudgeVisitTask.ReadingTaskState == ReadingTaskState.HaveSigned) - .Max(t => t.VisitTaskNum)) - .Select(t => t.SubjectId).Distinct().Count(), - - // G-2 G-4 可能选择的是不同的医生,要以最后一次选择的为准 - JudgeAgreeCount = g - .Where(t => t.ReadingCategory == ReadingCategory.Global) - .Where(t => t.JudgeVisitTaskId != null && t.JudgeVisitTask.ReadingTaskState == ReadingTaskState.HaveSigned) - .Where(t => t.VisitTaskNum == g.Where(t => t.ReadingCategory == ReadingCategory.Global) - .Where(t => t.JudgeVisitTaskId != null && t.JudgeVisitTask.ReadingTaskState == ReadingTaskState.HaveSigned) - .Max(t => t.VisitTaskNum)) - .Where(t=>t.JudgeVisitTask.JudgeResultTaskId == t.Id) - .Select(t => t.SubjectId).Distinct().Count(), - - }).ToList(); - - #endregion - - - } - else - { - - - #region 按照受试者维度统计 - - - exportInfo.DoctorSubjectStatList = _visitTaskRepository.Where(comonTaskFilter).Where(t => t.ReadingTaskState == ReadingTaskState.HaveSigned) - .GroupBy(t => new { t.DoctorUserId, t.DoctorUser.UserName, t.DoctorUser.FullName }) - .Select(g => new DoctorJudgeRatio() - { - DoctorUserId = g.Key.DoctorUserId, - UserName = g.Key.UserName, - FullName = g.Key.FullName, - - //最后一个阅片期触发裁判 且裁判已阅 - TotalJudgeCount = g - .Where(t => t.Subject.ReadModuleList.Any(c => c.SubjectVisit.VisitNum == (t.VisitTaskNum - addReadingPeriodNum) && c.TrialReadingCriterionId == trialReadingCriterionId)) - .Where(t => t.JudgeVisitTaskId != null && t.JudgeVisitTask.ReadingTaskState == ReadingTaskState.HaveSigned) - .Where(t => t.VisitTaskNum == g.Where(t => t.Subject.ReadModuleList.Any(c => c.SubjectVisit.VisitNum == (t.VisitTaskNum - addReadingPeriodNum) && c.TrialReadingCriterionId == trialReadingCriterionId)) - .Where(t => t.JudgeVisitTaskId != null && t.JudgeVisitTask.ReadingTaskState == ReadingTaskState.HaveSigned) - .Max(t => t.VisitTaskNum)) - .Select(t => t.SubjectId).Distinct().Count(), - - // G-2 G-4 可能选择的是不同的医生,要以最后一次选择的为准 - JudgeAgreeCount = g - .Where(t => t.Subject.ReadModuleList.Any(c => c.SubjectVisit.VisitNum == (t.VisitTaskNum - addReadingPeriodNum) && c.TrialReadingCriterionId == trialReadingCriterionId)) - .Where(t => t.JudgeVisitTaskId != null && t.JudgeVisitTask.ReadingTaskState == ReadingTaskState.HaveSigned) - .Where(t => t.VisitTaskNum == g.Where(t => t.Subject.ReadModuleList.Any(c => c.SubjectVisit.VisitNum == (t.VisitTaskNum - addReadingPeriodNum) && c.TrialReadingCriterionId == trialReadingCriterionId)) - .Where(t => t.JudgeVisitTaskId != null && t.JudgeVisitTask.ReadingTaskState == ReadingTaskState.HaveSigned) - .Max(t => t.VisitTaskNum)) - .Where(t => t.JudgeVisitTask.JudgeResultTaskId == t.Id) - .Select(t => t.SubjectId).Distinct().Count(), - - }).ToList(); - - #endregion - - - - - } - return await ExcelExportHelper.DataExportAsync(StaticData.Export.ReadingPeriodJudgeRatio_Export, exportInfo, $"{exportInfo.ResearchProgramNo}_{exportInfo.CriterionName}", _commonDocumentRepository, _hostEnvironment); } else