diff --git a/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs b/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs index 8f4304b5c..a3c634429 100644 --- a/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs +++ b/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs @@ -2409,19 +2409,33 @@ namespace IRaCIS.Core.Application.Service.Common var addReadingPeriodNum = criterion.IsGlobalReading ? ReadingCommon.TaskNumDic[ReadingCategory.Global] : 0; - #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) - + #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)) @@ -2429,31 +2443,6 @@ namespace IRaCIS.Core.Application.Service.Common //裁判不要求做完 .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 + 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 if (criterion.IsGlobalReading) @@ -2465,12 +2454,12 @@ namespace IRaCIS.Core.Application.Service.Common 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) @@ -2502,52 +2491,64 @@ namespace IRaCIS.Core.Application.Service.Common #endregion #region 按照阅片期维度统计 暂时废弃 - ////、裁判量J:所有完成阅片(R1和R2均完成)的阅片期里面触发裁判的阅片期数量; - ////2、总样本量Q:R1,R2均完成阅片的阅片期数量; + //、裁判量J:所有完成阅片(R1和R2均完成)的阅片期里面触发裁判的阅片期数量; + //2、总样本量Q:R1,R2均完成阅片的阅片期数量; - //exportInfo.ReadingPeriodCount = _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).Select(g => g.Key.SouceReadModuleId).Distinct().Count(); + 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(); + 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:阅片人完成阅片的阅片期中,触发裁判的阅片期数量; + //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, + 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(), + //触发裁判的阅片期的数量 并且裁判要求做完 + 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(), + 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(); + }).ToList(); #endregion } else { - exportInfo.SubjectCount = _subjectRepository.Where(t => t.TrialId == inQuery.TrialId) - .Where(t => t.SubjectVisitTaskList.AsQueryable().Where(comonTaskFilter).Where(t => t.ReadingTaskState == ReadingTaskState.HaveSigned) - //找到两个人完成的阅片期 + #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).Any()) - .Count(); + .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) @@ -2557,6 +2558,17 @@ namespace IRaCIS.Core.Application.Service.Common .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 按照受试者维度统计 @@ -2583,6 +2595,41 @@ 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 + }