diff --git a/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs b/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs index 173dcbb8f..db17abecd 100644 --- a/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs +++ b/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs @@ -2407,37 +2407,54 @@ namespace IRaCIS.Core.Application.Service.Common exportInfo.CriterionName = criterion.CriterionName; exportInfo.CurrentTime = ExportExcelConverterDate.DateTimeInternationalToString(DateTime.Now, _userInfo.TimeZoneId); - - - - //1、裁判量M:所有完成阅片病例 最后一个阅片期触发裁判的受试者数量; - //2、总样本量N:R1,R2均完成阅片(至少一个阅片期)的受试者数量; - var addReadingPeriodNum = criterion.IsGlobalReading ? ReadingCommon.TaskNumDic[ReadingCategory.Global] : 0; - exportInfo.SubjectCount = _subjectRepository.Where(t => t.TrialId == inQuery.TrialId).Where(t => - t.SubjectVisitTaskList.AsQueryable().Where(comonTaskFilter).Where(t => t.ReadingTaskState == ReadingTaskState.HaveSigned) - .GroupBy(t => new { t.SubjectId, t.VisitTaskNum }).Where(g => g.Count() == 2).Any(g => t.ReadModuleList.Any(c => c.SubjectVisit.VisitNum + addReadingPeriodNum == g.Key.VisitTaskNum)) - ).Count(); + #region 按照阅片期维度统计 有全局任务 和无全局任务统一 + //、裁判量J:所有完成阅片(R1和R2均完成)的阅片期里面触发裁判的阅片期数量; + //2、总样本量Q:R1,R2均完成阅片的阅片期数量; - //var test = _subjectRepository.Where(t => t.TrialId == inQuery.TrialId).Where(t => - // t.SubjectVisitTaskList.AsQueryable().Where(comonTaskFilter).Where(t => t.ReadingTaskState == ReadingTaskState.HaveSigned) - // //找到两个人完成的阅片期 - // .GroupBy(t => new { t.SubjectId, t.VisitTaskNum }).Any(g => g.Count() == 2 && t.ReadModuleList.Any(c => c.SubjectVisit.VisitNum + addReadingPeriodNum == g.Key.VisitTaskNum)) - // ).Select(t=>new - // { - // dd= t.SubjectVisitTaskList.AsQueryable().Where(comonTaskFilter).Where(t => t.ReadingTaskState == ReadingTaskState.HaveSigned) - // //找到两个人完成的阅片期 - // .GroupBy(t => new { t.SubjectId, t.VisitTaskNum }).Where(g => g.Count() == 2 && t.ReadModuleList.Any(c => c.SubjectVisit.VisitNum + addReadingPeriodNum == g.Key.VisitTaskNum)) - // .Select(g=>new - // { - // g.Key.VisitTaskNum, - // List= g.ToList() - // }).ToList() - // }).ToList(); + // 有阅片期没有全局 和有阅片期有全局,主要变化点在于 t.ReadingCategory == ReadingCategory.Global 变成了 t.Subject.ReadModuleList.Any(c => c.SubjectVisit.VisitNum + addReadingPeriodNum == t.VisitTaskNum) + exportInfo.ReadingPeriodCount = _visitTaskRepository.Where(comonTaskFilter) + //找到阅片期已阅片完 + .Where(t => t.Subject.ReadModuleList.Any(c => c.SubjectVisit.VisitNum + addReadingPeriodNum == t.VisitTaskNum) && t.ReadingTaskState == ReadingTaskState.HaveSigned) + .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.Subject.ReadModuleList.Any(c => c.SubjectVisit.VisitNum + addReadingPeriodNum == t.VisitTaskNum) && t.ReadingTaskState == ReadingTaskState.HaveSigned) + .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 + addReadingPeriodNum == t.VisitTaskNum) + && 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.JudgeVisitTaskId != null && t.JudgeVisitTask.ReadingTaskState == ReadingTaskState.HaveSigned + && t.JudgeVisitTask.JudgeResultTaskId == t.Id) + .Select(t => t.VisitTaskNum).Distinct().Count(), + + }).ToList(); + + #endregion if (criterion.IsGlobalReading) { @@ -2446,10 +2463,10 @@ namespace IRaCIS.Core.Application.Service.Common //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.ReadingCategory == ReadingCategory.Global && t.ReadingTaskState == ReadingTaskState.HaveSigned) - // .GroupBy(t => new { t.SubjectId, t.SouceReadModuleId }).Where(g => g.Count() == 2).Any() - //).Count(); + exportInfo.SubjectCount = _subjectRepository.Where(t => t.TrialId == inQuery.TrialId).Where(t => + t.SubjectVisitTaskList.AsQueryable().Where(comonTaskFilter).Where(t => t.ReadingCategory == ReadingCategory.Global && t.ReadingTaskState == ReadingTaskState.HaveSigned) + .GroupBy(t => new { t.SubjectId, t.SouceReadModuleId }).Where(g => g.Count() == 2).Any() + ).Count(); //最后一个已完成的全局 没产生裁判 (之前有裁判),不算入裁判量 exportInfo.judgeSubjectCount = _subjectRepository.Where(t => t.TrialId == inQuery.TrialId).Where(t => @@ -2480,46 +2497,71 @@ namespace IRaCIS.Core.Application.Service.Common #endregion - #region 按照阅片期维度统计 - //、裁判量J:所有完成阅片(R1和R2均完成)的阅片期里面触发裁判的阅片期数量; - //2、总样本量Q:R1,R2均完成阅片的阅片期数量; + #region 按照阅片期维度统计 暂时废弃 + ////、裁判量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.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.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) + .GroupBy(t => new { t.SubjectId, t.VisitTaskNum }).Where(g => g.Count() == 2).Any(g => t.ReadModuleList.Any(c => c.SubjectVisit.VisitNum + addReadingPeriodNum == g.Key.VisitTaskNum)) + ).Count(); + + #region 测试 + //var test = _subjectRepository.Where(t => t.TrialId == inQuery.TrialId).Where(t => + // t.SubjectVisitTaskList.AsQueryable().Where(comonTaskFilter).Where(t => t.ReadingTaskState == ReadingTaskState.HaveSigned) + // //找到两个人完成的阅片期 + // .GroupBy(t => new { t.SubjectId, t.VisitTaskNum }).Any(g => g.Count() == 2 && t.ReadModuleList.Any(c => c.SubjectVisit.VisitNum + addReadingPeriodNum == g.Key.VisitTaskNum)) + // ).Select(t=>new + // { + // dd= t.SubjectVisitTaskList.AsQueryable().Where(comonTaskFilter).Where(t => t.ReadingTaskState == ReadingTaskState.HaveSigned) + // //找到两个人完成的阅片期 + // .GroupBy(t => new { t.SubjectId, t.VisitTaskNum }).Where(g => g.Count() == 2 && t.ReadModuleList.Any(c => c.SubjectVisit.VisitNum + addReadingPeriodNum == g.Key.VisitTaskNum)) + // .Select(g=>new + // { + // g.Key.VisitTaskNum, + // List= g.ToList() + // }).ToList() + // }).ToList(); + #endregion + + //最后一个已完成的全局 没产生裁判 (之前有裁判),不算入裁判量 exportInfo.judgeSubjectCount = _subjectRepository.Where(t => t.TrialId == inQuery.TrialId).Where(t => t.SubjectVisitTaskList.AsQueryable().Where(comonTaskFilter).Where(t => t.ReadingTaskState == ReadingTaskState.HaveSigned) @@ -2555,42 +2597,7 @@ namespace IRaCIS.Core.Application.Service.Common #endregion - #region 按照阅片期维度统计 - //、裁判量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.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 }