diff --git a/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs b/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs index a3c634429..1bdee1ecf 100644 --- a/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs +++ b/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs @@ -2407,65 +2407,78 @@ namespace IRaCIS.Core.Application.Service.Common exportInfo.CriterionName = criterion.CriterionName; exportInfo.CurrentTime = ExportExcelConverterDate.DateTimeInternationalToString(DateTime.Now, _userInfo.TimeZoneId); - var addReadingPeriodNum = criterion.IsGlobalReading ? ReadingCommon.TaskNumDic[ReadingCategory.Global] : 0; + var isGlobalReading = criterion.IsGlobalReading; + var addReadingPeriodNum = isGlobalReading ? ReadingCommon.TaskNumDic[ReadingCategory.Global] : 0; - #region 阅片期可以统一部分 - exportInfo.ReadingPeriodCount = _visitTaskRepository.Where(comonTaskFilter).Where(t => t.ReadingTaskState == ReadingTaskState.HaveSigned) - //找到阅片期已阅片完 - .Where(t => t.Subject.ReadModuleList.Any(c => c.SubjectVisit.VisitNum + addReadingPeriodNum == t.VisitTaskNum && t.TrialReadingCriterionId == trialReadingCriterionId)) - .GroupBy(t => new { t.SubjectId, t.VisitTaskNum }) - .Where(g => g.Count() == 2).Select(g => g.Key.VisitTaskNum).Distinct().Count(); + // 有阅片期没有全局 和有阅片期有全局,主要变化点在于 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 可以统一部分 + + //1、裁判量M:所有完成阅片病例 最后一个阅片期触发裁判的受试者数量; + //2、总样本量N:R1,R2均完成阅片(至少一个阅片期)的受试者数量; exportInfo.SubjectCount = _subjectRepository.Where(t => t.TrialId == inQuery.TrialId) .Where(t => t.SubjectVisitTaskList.AsQueryable().Where(comonTaskFilter).Where(t => t.ReadingTaskState == ReadingTaskState.HaveSigned) //找到两个人完成的阅片期 - .Where(t => t.Subject.ReadModuleList.Any(c => c.SubjectVisit.VisitNum + addReadingPeriodNum == t.VisitTaskNum && t.TrialReadingCriterionId == trialReadingCriterionId)) + .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).Any()) .Count(); - #endregion - #region 统一有问题部分 - //最后一个已完成的全局 没产生裁判 (之前有裁判),不算入裁判量 exportInfo.judgeSubjectCount = _subjectRepository.Where(t => t.TrialId == inQuery.TrialId) .Where(t => t.SubjectVisitTaskList.AsQueryable().Where(comonTaskFilter).Where(t => t.ReadingTaskState == ReadingTaskState.HaveSigned) - .Where(t => t.Subject.ReadModuleList.Any(c => c.SubjectVisit.VisitNum + addReadingPeriodNum == t.VisitTaskNum && t.TrialReadingCriterionId == trialReadingCriterionId)) + .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 && g.Key.VisitTaskNum == g.Max(t => t.VisitTaskNum)) .Any(g => g.Any(t => t.JudgeVisitTaskId != null))) .Count(); - + 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(); exportInfo.judgeReadingPeriodCount = _visitTaskRepository.Where(comonTaskFilter).Where(t => t.ReadingTaskState == ReadingTaskState.HaveSigned) //找到阅片期已阅片完 - .Where(t => t.Subject.ReadModuleList.Any(c => c.SubjectVisit.VisitNum + addReadingPeriodNum == t.VisitTaskNum && t.TrialReadingCriterionId == trialReadingCriterionId)) - .GroupBy(t => new { t.SubjectId, t.VisitTaskNum }) + .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 && g.Any(c => c.JudgeVisitTaskId != null)).Select(g => g.Key.VisitTaskNum).Distinct().Count(); + + //3、裁判认同数J:触发裁判的阅片期中,阅片人被裁判认同的阅片期数量; + //4、总裁判数Q:阅片人完成阅片的阅片期中,触发裁判的阅片期数量; + + exportInfo.DoctorPeriodStatList = _visitTaskRepository.Where(comonTaskFilter).Where(t => t.ReadingTaskState == ReadingTaskState.HaveSigned) + .GroupBy(t => new { t.DoctorUserId, t.DoctorUser.UserName, t.DoctorUser.FullName }) + //有全局裁判 + //.Where(g => g.Any(t => t.ReadingCategory == ReadingCategory.Global && t.JudgeVisitTaskId != null)) + .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) && t.TrialReadingCriterionId == trialReadingCriterionId) + && 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) + && t.JudgeVisitTaskId != null && t.JudgeVisitTask.ReadingTaskState == ReadingTaskState.HaveSigned + && t.JudgeVisitTask.JudgeResultTaskId == t.Id) + .Select(t => t.VisitTaskNum).Distinct().Count(), + + }).ToList(); + + #endregion + if (criterion.IsGlobalReading) { #region 按照受试者维度统计 - //1、裁判量M:所有完成阅片病例 最后一个阅片期触发裁判的受试者数量; - //2、总样本量N:R1,R2均完成阅片(至少一个阅片期)的受试者数量; - - exportInfo.SubjectCount = _subjectRepository.Where(t => t.TrialId == inQuery.TrialId) - .Where(t => t.SubjectVisitTaskList.AsQueryable().Where(comonTaskFilter).Where(t => t.ReadingTaskState == ReadingTaskState.HaveSigned) - //找到两个人完成的阅片期 - .Where(t => t.ReadingCategory == ReadingCategory.Global) - .GroupBy(t => new { t.SubjectId, t.VisitTaskNum }).Where(g => g.Count() == 2).Any()) - .Count(); - - //最后一个已完成的全局 没产生裁判 (之前有裁判),不计入裁判量 - exportInfo.judgeSubjectCount = _subjectRepository.Where(t => t.TrialId == inQuery.TrialId) - .Where(t => t.SubjectVisitTaskList.AsQueryable().Where(comonTaskFilter).Where(t => t.ReadingTaskState == ReadingTaskState.HaveSigned) - .Where(t => t.ReadingCategory == ReadingCategory.Global) - .GroupBy(t => new { t.SubjectId, t.VisitTaskNum }).Where(g => g.Count() == 2 && g.Key.VisitTaskNum == g.Max(t => t.VisitTaskNum)) - .Any(g => g.Any(t => t.JudgeVisitTaskId != null))) - .Count(); exportInfo.DoctorSubjectStatList = _visitTaskRepository.Where(comonTaskFilter).Where(t => t.ReadingTaskState == ReadingTaskState.HaveSigned) .GroupBy(t => new { t.DoctorUserId, t.DoctorUser.UserName, t.DoctorUser.FullName }) @@ -2476,12 +2489,14 @@ namespace IRaCIS.Core.Application.Service.Common FullName = g.Key.FullName, //最后一个阅片期触发裁判 且裁判已阅 - TotalJudgeCount = g.Where(t => t.ReadingCategory == ReadingCategory.Global && t.JudgeVisitTaskId != null && t.JudgeVisitTask.ReadingTaskState == ReadingTaskState.HaveSigned) + 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 && 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 && t.JudgeVisitTaskId != null && t.JudgeVisitTask.ReadingTaskState == ReadingTaskState.HaveSigned) + 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 && t.JudgeVisitTaskId != null && t.JudgeVisitTask.ReadingTaskState == ReadingTaskState.HaveSigned).Max(t => t.VisitTaskNum) && t.JudgeVisitTask.JudgeResultTaskId == t.Id) .Select(t => t.SubjectId).Distinct().Count(), @@ -2490,84 +2505,11 @@ namespace IRaCIS.Core.Application.Service.Common #endregion - #region 按照阅片期维度统计 暂时废弃 - //、裁判量J:所有完成阅片(R1和R2均完成)的阅片期里面触发裁判的阅片期数量; - //2、总样本量Q:R1,R2均完成阅片的阅片期数量; - exportInfo.ReadingPeriodCount = _visitTaskRepository.Where(comonTaskFilter).Where(t => t.ReadingTaskState == ReadingTaskState.HaveSigned) - //找到阅片期已阅片完 - .Where(t => t.ReadingCategory == ReadingCategory.Global) - .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.ReadingCategory == ReadingCategory.Global && t.ReadingTaskState == ReadingTaskState.HaveSigned) - .GroupBy(t => new { t.SubjectId, t.SouceReadModuleId }) - //裁判不要求做完 - .Where(g => g.Count() == 2 && g.Any(c => c.JudgeVisitTaskId != null)).Select(g => g.Key.SouceReadModuleId).Distinct().Count(); - - //3、裁判认同数J:触发裁判的阅片期中,阅片人被裁判认同的阅片期数量; - //4、总裁判数Q:阅片人完成阅片的阅片期中,触发裁判的阅片期数量; - - exportInfo.DoctorPeriodStatList = _visitTaskRepository.Where(comonTaskFilter).Where(t => t.ReadingTaskState == ReadingTaskState.HaveSigned) - .GroupBy(t => new { t.DoctorUserId, t.DoctorUser.UserName, t.DoctorUser.FullName }) - //有全局裁判 - //.Where(g => g.Any(t => t.ReadingCategory == ReadingCategory.Global && t.JudgeVisitTaskId != null)) - .Select(g => new DoctorJudgeRatio() - { - DoctorUserId = g.Key.DoctorUserId, - UserName = g.Key.UserName, - FullName = g.Key.FullName, - - //触发裁判的阅片期的数量 并且裁判要求做完 - TotalJudgeCount = g.Where(t => t.ReadingCategory == ReadingCategory.Global && t.SouceReadModuleId != null && t.JudgeVisitTaskId != null && t.JudgeVisitTask.ReadingTaskState == ReadingTaskState.HaveSigned).Select(t => t.SouceReadModuleId).Distinct().Count(), - - JudgeAgreeCount = g.Where(t => t.ReadingCategory == ReadingCategory.Global && t.JudgeVisitTaskId != null - && t.JudgeVisitTask.JudgeResultTaskId == t.Id && t.JudgeVisitTask.ReadingTaskState == ReadingTaskState.HaveSigned) - .Select(t => t.SouceReadModuleId).Distinct().Count(), - - }).ToList(); - - #endregion } else { - #region 阅片期可以统一部分 - exportInfo.ReadingPeriodCount = _visitTaskRepository.Where(comonTaskFilter).Where(t => t.ReadingTaskState == ReadingTaskState.HaveSigned) - //找到阅片期已阅片完 - .Where(t => t.Subject.ReadModuleList.Any(c => c.SubjectVisit.VisitNum + addReadingPeriodNum == t.VisitTaskNum && t.TrialReadingCriterionId == trialReadingCriterionId)) - .GroupBy(t => new { t.SubjectId, t.VisitTaskNum }) - .Where(g => g.Count() == 2).Select(g => g.Key.VisitTaskNum).Distinct().Count(); - - exportInfo.SubjectCount = _subjectRepository.Where(t => t.TrialId == inQuery.TrialId) - .Where(t => t.SubjectVisitTaskList.AsQueryable().Where(comonTaskFilter).Where(t => t.ReadingTaskState == ReadingTaskState.HaveSigned) - //找到两个人完成的阅片期 - .Where(t => t.Subject.ReadModuleList.Any(c => c.SubjectVisit.VisitNum + addReadingPeriodNum == t.VisitTaskNum && t.TrialReadingCriterionId == trialReadingCriterionId)) - .GroupBy(t => new { t.SubjectId, t.VisitTaskNum }).Where(g => g.Count() == 2).Any()) - .Count(); - - #endregion - - #region 统一有问题部分 - - //最后一个已完成的全局 没产生裁判 (之前有裁判),不算入裁判量 - exportInfo.judgeSubjectCount = _subjectRepository.Where(t => t.TrialId == inQuery.TrialId) - .Where(t => t.SubjectVisitTaskList.AsQueryable().Where(comonTaskFilter).Where(t => t.ReadingTaskState == ReadingTaskState.HaveSigned) - .Where(t => t.Subject.ReadModuleList.Any(c => c.SubjectVisit.VisitNum + addReadingPeriodNum == t.VisitTaskNum && t.TrialReadingCriterionId == trialReadingCriterionId)) - .GroupBy(t => new { t.SubjectId, t.VisitTaskNum }).Where(g => g.Count() == 2 && g.Key.VisitTaskNum == g.Max(t => t.VisitTaskNum)) - .Any(g => g.Any(t => t.JudgeVisitTaskId != null))) - .Count(); - - - - exportInfo.judgeReadingPeriodCount = _visitTaskRepository.Where(comonTaskFilter).Where(t => t.ReadingTaskState == ReadingTaskState.HaveSigned) - //找到阅片期已阅片完 - .Where(t => t.Subject.ReadModuleList.Any(c => c.SubjectVisit.VisitNum + addReadingPeriodNum == t.VisitTaskNum && t.TrialReadingCriterionId == trialReadingCriterionId)) - .GroupBy(t => new { t.SubjectId, t.VisitTaskNum }) - //裁判不要求做完 - .Where(g => g.Count() == 2 && g.Any(c => c.JudgeVisitTaskId != null)).Select(g => g.Key.VisitTaskNum).Distinct().Count(); - - #endregion #region 按照受试者维度统计 @@ -2595,40 +2537,7 @@ namespace IRaCIS.Core.Application.Service.Common #endregion - #region 按照阅片期维度统计 有全局任务 和无全局任务统一 - //、裁判量J:所有完成阅片(R1和R2均完成)的阅片期里面触发裁判的阅片期数量; - //2、总样本量Q:R1,R2均完成阅片的阅片期数量; - - // 有阅片期没有全局 和有阅片期有全局,主要变化点在于 t.ReadingCategory == ReadingCategory.Global 变成了 t.Subject.ReadModuleList.Any(c => c.SubjectVisit.VisitNum + addReadingPeriodNum == t.VisitTaskNum && t.TrialReadingCriterionId==trialReadingCriterionId) - - - //3、裁判认同数J:触发裁判的阅片期中,阅片人被裁判认同的阅片期数量; - //4、总裁判数Q:阅片人完成阅片的阅片期中,触发裁判的阅片期数量; - - exportInfo.DoctorPeriodStatList = _visitTaskRepository.Where(comonTaskFilter).Where(t => t.ReadingTaskState == ReadingTaskState.HaveSigned) - .GroupBy(t => new { t.DoctorUserId, t.DoctorUser.UserName, t.DoctorUser.FullName }) - //有全局裁判 - //.Where(g => g.Any(t => t.ReadingCategory == ReadingCategory.Global && t.JudgeVisitTaskId != null)) - .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 + addReadingPeriodNum == t.VisitTaskNum && t.TrialReadingCriterionId == trialReadingCriterionId) - && 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 + addReadingPeriodNum == t.VisitTaskNum && t.TrialReadingCriterionId == trialReadingCriterionId) - && t.JudgeVisitTaskId != null && t.JudgeVisitTask.ReadingTaskState == ReadingTaskState.HaveSigned - && t.JudgeVisitTask.JudgeResultTaskId == t.Id) - .Select(t => t.VisitTaskNum).Distinct().Count(), - - }).ToList(); - - #endregion }