From 04e4b0ac348fc7707cb21954c1a38c0efe5cd665 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Fri, 6 Dec 2024 13:35:45 +0800 Subject: [PATCH 01/15] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=AF=BC=E5=87=BA?= =?UTF-8?q?=E5=88=A4=E6=96=AD=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/Common/ExcelExportService.cs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs b/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs index c9cf90803..6c0a2cd22 100644 --- a/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs +++ b/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs @@ -1540,12 +1540,14 @@ namespace IRaCIS.Core.Application.Service.Common ////默认设置为false 只处理为true 和 空的情况 //visitItem.IsJudgeSelect = false; - if (judegeList.Count > 0) + var subjectJudgeList = judegeList.Where(t => t.SubjectCode == visitItem.SubjectCode).ToList(); + + if (subjectJudgeList.Count > 0) { - var maxFinishedJudge = judegeList.Where(t => t.ReadingTaskState == ReadingTaskState.HaveSigned).OrderByDescending(t => t.VisitTaskNum).FirstOrDefault(); + var maxFinishedJudge = subjectJudgeList.Where(t => t.ReadingTaskState == ReadingTaskState.HaveSigned).OrderByDescending(t => t.VisitTaskNum).FirstOrDefault(); - var maxNotFinishedJudge = judegeList.Where(t => t.ReadingTaskState != ReadingTaskState.HaveSigned).OrderByDescending(t => t.VisitTaskNum).FirstOrDefault(); + var maxNotFinishedJudge = subjectJudgeList.Where(t => t.ReadingTaskState != ReadingTaskState.HaveSigned).OrderByDescending(t => t.VisitTaskNum).FirstOrDefault(); //n个裁判任务都未完成 From 1417277cb1c681474c4ff46860e9432abc61fcd0 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Mon, 9 Dec 2024 11:36:50 +0800 Subject: [PATCH 02/15] =?UTF-8?q?=20=E4=BF=AE=E6=94=B9=E9=98=85=E7=89=87?= =?UTF-8?q?=E6=9C=9F=E8=A3=81=E5=88=A4=20=E9=81=97=E6=BC=8F=E6=83=85?= =?UTF-8?q?=E5=86=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/Common/ExcelExportService.cs | 40 ++++++++++++++----- 1 file changed, 29 insertions(+), 11 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs b/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs index 6c0a2cd22..cf39669ea 100644 --- a/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs +++ b/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs @@ -1542,6 +1542,15 @@ namespace IRaCIS.Core.Application.Service.Common var subjectJudgeList = judegeList.Where(t => t.SubjectCode == visitItem.SubjectCode).ToList(); + //阅片期访视号 + var subjectReadingPeriondVisitNumList = resultExceptJudgeList.Where(t => t.SubjectCode == visitItem.SubjectCode).FirstOrDefault()?.SubjectCriterionReadingPeriodVisitNumList; + + //两个人完成最大得任务号(访视+全局) + var subjectMaxFinishedTaskNum = resultExceptJudgeList.Where(t => t.SubjectCode == visitItem.SubjectCode) + .GroupBy(t => t.VisitTaskNum).Where(g => g.Count() == 2).Select(g => g.Key).DefaultIfEmpty().Max(); + + var addReadingPeriodNum = isGlobalReading ? ReadingCommon.TaskNumDic[ReadingCategory.Global] : 0; + if (subjectJudgeList.Count > 0) { @@ -1549,6 +1558,9 @@ namespace IRaCIS.Core.Application.Service.Common var maxNotFinishedJudge = subjectJudgeList.Where(t => t.ReadingTaskState != ReadingTaskState.HaveSigned).OrderByDescending(t => t.VisitTaskNum).FirstOrDefault(); + //找到<= 完成最大访视任务号最近的阅片期号 + var latestFinishedReadingPeriodTaskNum = subjectReadingPeriondVisitNumList.Select(t => t + addReadingPeriodNum).Where(t => t <= subjectMaxFinishedTaskNum).Max(); + //n个裁判任务都未完成 if (maxFinishedJudge == null && maxNotFinishedJudge != null) @@ -1579,13 +1591,29 @@ namespace IRaCIS.Core.Application.Service.Common { visitItem.IsJudgeSelect = false; } + //裁判都完成的后续 可能有已完成全局,但是没有产生裁判 + else if(visitItem.VisitTaskNum <= latestFinishedReadingPeriodTaskNum) + { + //不存在裁判 将R1设置 + if (visitItem.ArmEnum == Arm.DoubleReadingArm1) + { + visitItem.IsJudgeSelect = true; + visitItem.IsTrigerJudge = false; + + } + else + { + visitItem.IsJudgeSelect = false; + visitItem.IsTrigerJudge = false; + } + } else { - //裁判都完成的后续 没有其他裁判任务 肯定也是未知的 visitItem.IsTrigerJudge = null; visitItem.IsJudgeSelect = null; } } + //n个完成 m个未完成 else { //两个都不为null 肯定是不同的裁判 @@ -1624,21 +1652,11 @@ namespace IRaCIS.Core.Application.Service.Common visitItem.IsJudgeSelect = null; visitItem.IsTrigerJudge = null; - //阅片期访视号 - var subjectReadingPeriondVisitNumList = resultExceptJudgeList.Where(t => t.SubjectCode == visitItem.SubjectCode).FirstOrDefault()?.SubjectCriterionReadingPeriodVisitNumList; if (subjectReadingPeriondVisitNumList != null && subjectReadingPeriondVisitNumList.Count()>0) { - //两个人完成最大得任务号(访视+全局) - var subjectMaxFinishedTaskNum = resultExceptJudgeList.Where(t => t.SubjectCode == visitItem.SubjectCode) - .GroupBy(t => t.VisitTaskNum).Where(g => g.Count() == 2).Select(g => g.Key).DefaultIfEmpty().Max(); - - var addReadingPeriodNum = isGlobalReading ? ReadingCommon.TaskNumDic[ReadingCategory.Global] : 0; - var minReadingPeriodTaskNum = subjectReadingPeriondVisitNumList.Min() + addReadingPeriodNum; - //最小阅片期 完成访视号 - //有阅片期读完了 肯定要读到最小阅片期号后面 if (subjectMaxFinishedTaskNum >= minReadingPeriodTaskNum) From 86692d220a6f34badca1b06be5f150e772402781 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Mon, 9 Dec 2024 15:15:19 +0800 Subject: [PATCH 03/15] =?UTF-8?q?=E8=A3=81=E5=88=A4=E4=B8=80=E8=87=B4?= =?UTF-8?q?=E7=8E=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/Common/ExcelExportService.cs | 36 +++++++++++++++---- 1 file changed, 30 insertions(+), 6 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs b/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs index cf39669ea..f653f3d69 100644 --- a/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs +++ b/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs @@ -1554,6 +1554,11 @@ namespace IRaCIS.Core.Application.Service.Common if (subjectJudgeList.Count > 0) { + //访视的标记先都默认为null + visitItem.IsTrigerJudge = null; + visitItem.IsJudgeSelect = null; + + var maxFinishedJudge = subjectJudgeList.Where(t => t.ReadingTaskState == ReadingTaskState.HaveSigned).OrderByDescending(t => t.VisitTaskNum).FirstOrDefault(); var maxNotFinishedJudge = subjectJudgeList.Where(t => t.ReadingTaskState != ReadingTaskState.HaveSigned).OrderByDescending(t => t.VisitTaskNum).FirstOrDefault(); @@ -1567,16 +1572,31 @@ namespace IRaCIS.Core.Application.Service.Common { if (visitItem.VisitTaskNum < maxNotFinishedJudge.VisitTaskNum) { + visitItem.IsTrigerJudge = false; visitItem.IsJudgeSelect = null; } + //大于当前未完成的全局裁判 后续可能有已完成的未产生裁判的全局 设置默认选择R1 + else if (visitItem.VisitTaskNum <= latestFinishedReadingPeriodTaskNum) + { + //不存在裁判 将R1设置 + if (visitItem.ArmEnum == Arm.DoubleReadingArm1) + { + visitItem.IsJudgeSelect = true; + visitItem.IsTrigerJudge = false; + + } + else + { + visitItem.IsJudgeSelect = false; + visitItem.IsTrigerJudge = false; + } + } else { - //大于当前未完成的全局裁判 后续 肯定是未知的 visitItem.IsTrigerJudge = null; visitItem.IsJudgeSelect = null; } - } //n个全局裁判都完成了,那么以最后一次裁判选择的为准 else if (maxFinishedJudge != null && maxNotFinishedJudge == null) @@ -1592,7 +1612,7 @@ namespace IRaCIS.Core.Application.Service.Common visitItem.IsJudgeSelect = false; } //裁判都完成的后续 可能有已完成全局,但是没有产生裁判 - else if(visitItem.VisitTaskNum <= latestFinishedReadingPeriodTaskNum) + else if (visitItem.VisitTaskNum <= latestFinishedReadingPeriodTaskNum) { //不存在裁判 将R1设置 if (visitItem.ArmEnum == Arm.DoubleReadingArm1) @@ -1653,7 +1673,7 @@ namespace IRaCIS.Core.Application.Service.Common visitItem.IsTrigerJudge = null; - if (subjectReadingPeriondVisitNumList != null && subjectReadingPeriondVisitNumList.Count()>0) + if (subjectReadingPeriondVisitNumList != null && subjectReadingPeriondVisitNumList.Count() > 0) { var minReadingPeriodTaskNum = subjectReadingPeriondVisitNumList.Min() + addReadingPeriodNum; @@ -2410,7 +2430,8 @@ namespace IRaCIS.Core.Application.Service.Common //2、总样本量N:R1,R2均完成阅片(至少一个阅片期)的受试者数量; exportInfo.SubjectCount = _subjectRepository.Where(t => t.TrialId == inQuery.TrialId).Where(t => - t.SubjectVisitTaskList.AsQueryable().Where(comonTaskFilter).Any(t => t.ReadingCategory == ReadingCategory.Global && t.ReadingTaskState == ReadingTaskState.HaveSigned) + 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 => @@ -2429,7 +2450,10 @@ namespace IRaCIS.Core.Application.Service.Common //触发裁判的受试者数量 TotalJudgeCount = g.Where(t => t.ReadingCategory == ReadingCategory.Global && t.JudgeVisitTaskId != null).Select(t => t.SubjectId).Distinct().Count(), - JudgeAgreeCount = g.Where(t => t.ReadingCategory == ReadingCategory.Global && t.JudgeVisitTaskId != null && t.JudgeVisitTask.JudgeResultTaskId == t.Id).Select(t => t.SubjectId).Distinct().Count(), + // G-2 G-4 可能选择的是不同的医生,要以最后一次选择的为准 + JudgeAgreeCount = g.Where(t => t.ReadingCategory == ReadingCategory.Global && t.JudgeVisitTaskId != null + && t.JudgeVisitTask.JudgeResultTaskId == t.Id && t.VisitTaskNum== g.Where(t => t.ReadingCategory == ReadingCategory.Global && t.JudgeVisitTaskId != null).Max(t => t.VisitTaskNum)) + .Select(t => t.SubjectId).Distinct().Count(), }).ToList(); From eb77fcfa2fe419b4e676eb388c3cebbdd85b2476 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Tue, 10 Dec 2024 10:18:25 +0800 Subject: [PATCH 04/15] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=A3=81=E5=88=A4?= =?UTF-8?q?=E6=A0=87=E8=AE=B0=E8=AE=BE=E7=BD=AE=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/Common/ExcelExportService.cs | 247 ++++++++---------- 1 file changed, 107 insertions(+), 140 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs b/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs index f653f3d69..001c01716 100644 --- a/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs +++ b/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs @@ -1551,168 +1551,135 @@ namespace IRaCIS.Core.Application.Service.Common var addReadingPeriodNum = isGlobalReading ? ReadingCommon.TaskNumDic[ReadingCategory.Global] : 0; - if (subjectJudgeList.Count > 0) + + //已完成的全局数量 + var finishedGlobalCount = resultExceptJudgeList.Where(t => t.SubjectCode == visitItem.SubjectCode && t.ReadingCategory == ReadingCategory.Global) + .GroupBy(t => t.VisitTaskNum).Where(g => g.Count() == 2).Select(g => g.Key).Count(); + + + visitItem.IsJudgeSelect = null; + visitItem.IsTrigerJudge = null; + + if (finishedGlobalCount != 0) { + //最大的全局是否产生裁判 - //访视的标记先都默认为null - visitItem.IsTrigerJudge = null; - visitItem.IsJudgeSelect = null; + var subjectMaxFinishedGlobalTaskNum = resultExceptJudgeList.Where(t => t.SubjectCode == visitItem.SubjectCode && t.ReadingCategory == ReadingCategory.Global) + .GroupBy(t => t.VisitTaskNum).Where(g => g.Count() == 2).Select(g => g.Key).DefaultIfEmpty().Max(); - - var maxFinishedJudge = subjectJudgeList.Where(t => t.ReadingTaskState == ReadingTaskState.HaveSigned).OrderByDescending(t => t.VisitTaskNum).FirstOrDefault(); - - var maxNotFinishedJudge = subjectJudgeList.Where(t => t.ReadingTaskState != ReadingTaskState.HaveSigned).OrderByDescending(t => t.VisitTaskNum).FirstOrDefault(); - - //找到<= 完成最大访视任务号最近的阅片期号 - var latestFinishedReadingPeriodTaskNum = subjectReadingPeriondVisitNumList.Select(t => t + addReadingPeriodNum).Where(t => t <= subjectMaxFinishedTaskNum).Max(); - - - //n个裁判任务都未完成 - if (maxFinishedJudge == null && maxNotFinishedJudge != null) + //最大的完成的全局是否产生裁判 + if (subjectJudgeList.Any(t => t.VisitTaskNum == (subjectMaxFinishedGlobalTaskNum + ReadingCommon.TaskNumDic[ReadingCategory.Judge]))) { - if (visitItem.VisitTaskNum < maxNotFinishedJudge.VisitTaskNum) + + var maxJudge = subjectJudgeList.FirstOrDefault(t => t.VisitTaskNum == (subjectMaxFinishedGlobalTaskNum + ReadingCommon.TaskNumDic[ReadingCategory.Judge])); + + //最大裁判完成了 + if (maxJudge.ReadingTaskState == ReadingTaskState.HaveSigned) { - visitItem.IsTrigerJudge = false; - visitItem.IsJudgeSelect = null; - } - //大于当前未完成的全局裁判 后续可能有已完成的未产生裁判的全局 设置默认选择R1 - else if (visitItem.VisitTaskNum <= latestFinishedReadingPeriodTaskNum) - { - //不存在裁判 将R1设置 - if (visitItem.ArmEnum == Arm.DoubleReadingArm1) + if (visitItem.VisitTaskNum < maxJudge.VisitTaskNum) { - visitItem.IsJudgeSelect = true; - visitItem.IsTrigerJudge = false; + //触发裁判 + visitItem.IsTrigerJudge = true; - } - else - { - visitItem.IsJudgeSelect = false; - visitItem.IsTrigerJudge = false; - } - } - else - { - visitItem.IsTrigerJudge = null; - visitItem.IsJudgeSelect = null; - } - - } - //n个全局裁判都完成了,那么以最后一次裁判选择的为准 - else if (maxFinishedJudge != null && maxNotFinishedJudge == null) - { - if (visitItem.ArmEnum == maxFinishedJudge.JudgeArmEnum && visitItem.VisitTaskNum < maxFinishedJudge.VisitTaskNum) - { - visitItem.IsJudgeSelect = true; - visitItem.JudgeNote = maxFinishedJudge.JudgeNote; - } - //裁判没选择的人设置为false - else if (visitItem.VisitTaskNum < maxFinishedJudge.VisitTaskNum) - { - visitItem.IsJudgeSelect = false; - } - //裁判都完成的后续 可能有已完成全局,但是没有产生裁判 - else if (visitItem.VisitTaskNum <= latestFinishedReadingPeriodTaskNum) - { - //不存在裁判 将R1设置 - if (visitItem.ArmEnum == Arm.DoubleReadingArm1) - { - visitItem.IsJudgeSelect = true; - visitItem.IsTrigerJudge = false; - - } - else - { - visitItem.IsJudgeSelect = false; - visitItem.IsTrigerJudge = false; - } - } - else - { - visitItem.IsTrigerJudge = null; - visitItem.IsJudgeSelect = null; - } - } - //n个完成 m个未完成 - else - { - //两个都不为null 肯定是不同的裁判 - - //在未完成裁判之后的 - if (visitItem.VisitTaskNum > maxNotFinishedJudge.VisitTaskNum) - { - visitItem.IsTrigerJudge = null; - visitItem.IsJudgeSelect = null; - } - //完成裁判之后的 ,和未完成裁判之前的 - else if (visitItem.VisitTaskNum < maxNotFinishedJudge.VisitTaskNum && visitItem.VisitTaskNum > maxFinishedJudge.VisitTaskNum) - { - visitItem.IsTrigerJudge = true; - visitItem.IsJudgeSelect = null; - } - else if (visitItem.ArmEnum == maxFinishedJudge.JudgeArmEnum && visitItem.VisitTaskNum < maxFinishedJudge.VisitTaskNum) - { - visitItem.IsJudgeSelect = true; - visitItem.JudgeNote = maxFinishedJudge.JudgeNote; - } - else if (visitItem.VisitTaskNum < maxFinishedJudge.VisitTaskNum) - { - visitItem.IsJudgeSelect = false; - } - - } - } - else - { - - //没有产生裁判 有可能一个人没做完,也有可能做完了没产生裁判 - //两个人都做了(1、两个人都阅片完,确实没产生,2、两个人都阅片完,还没到阅片期,没产生裁判) - - //默认都设置为null 仅仅处理 阅片期读完了没产生裁判 裁判选择标记需要设置的访视 - visitItem.IsJudgeSelect = null; - visitItem.IsTrigerJudge = null; - - - if (subjectReadingPeriondVisitNumList != null && subjectReadingPeriondVisitNumList.Count() > 0) - { - var minReadingPeriodTaskNum = subjectReadingPeriondVisitNumList.Min() + addReadingPeriodNum; - - //有阅片期读完了 肯定要读到最小阅片期号后面 - - if (subjectMaxFinishedTaskNum >= minReadingPeriodTaskNum) - { - //找到<= 完成最大访视任务号最近的阅片期号 - var latestFinishedReadingPeriodTaskNum = subjectReadingPeriondVisitNumList.Select(t => t + addReadingPeriodNum).Where(t => t <= subjectMaxFinishedTaskNum).Max(); - - //小于已完成的阅片期的访视 设置触发裁判标志为否 并设置默认的裁判选择标记 (两个人肯定做完了) - if (visitItem.VisitTaskNum <= latestFinishedReadingPeriodTaskNum) - { - - //不存在裁判 将R1设置 - if (visitItem.ArmEnum == Arm.DoubleReadingArm1) + if (visitItem.ArmEnum == maxJudge.JudgeArmEnum) { visitItem.IsJudgeSelect = true; - visitItem.IsTrigerJudge = false; - + visitItem.JudgeNote = maxJudge.JudgeNote; } + //裁判没选择的人设置为false else { visitItem.IsJudgeSelect = false; - visitItem.IsTrigerJudge = false; + } + } + else + { + //后续访视 未知 默认都是null + + } + } + else + { + //找到当前未阅最大裁判之前的已完成的最大裁判任务 + var maxFinishedJudge = subjectJudgeList.Where(t => t.ReadingTaskState == ReadingTaskState.HaveSigned).OrderByDescending(t => t.VisitTaskNum).FirstOrDefault(); + + if (maxFinishedJudge == null) + { + // 为空 裁判选择标记默认就是null 不用处理 + + if (visitItem.VisitTaskNum < maxJudge.VisitTaskNum) + { + visitItem.IsTrigerJudge = true; } + } + else + { + if (visitItem.VisitTaskNum < maxFinishedJudge.VisitTaskNum) + { + visitItem.IsTrigerJudge = true; + + if (visitItem.ArmEnum == maxFinishedJudge.JudgeArmEnum) + { + visitItem.IsJudgeSelect = true; + visitItem.JudgeNote = maxFinishedJudge.JudgeNote; + } + //裁判没选择的人设置为false + else + { + visitItem.IsJudgeSelect = false; + } + } + else if (visitItem.VisitTaskNum > maxFinishedJudge.VisitTaskNum && visitItem.VisitTaskNum < maxJudge.VisitTaskNum) + { + //完成裁判 和未完成裁判之间的 裁判选择标记默认是null + + visitItem.IsTrigerJudge = true; + } + else + { + //在未完成全局裁判之后的访视 未知 默认都是null + + + } } - } + + + } + else + { + //最大的完成的全局未产生裁判 + + if (visitItem.VisitTaskNum < subjectMaxFinishedGlobalTaskNum) + { + visitItem.IsTrigerJudge = false; + + if (visitItem.ArmEnum == Arm.DoubleReadingArm1) + { + visitItem.IsJudgeSelect = true; + + } + else + { + visitItem.IsJudgeSelect = false; + } + } + else + { + //未产生裁判的全局之后的访视 两个标记都是null (后续可能还有全局,但是全局两个人没做完) + } + + } - - - } + + + } } else @@ -2452,7 +2419,7 @@ namespace IRaCIS.Core.Application.Service.Common // G-2 G-4 可能选择的是不同的医生,要以最后一次选择的为准 JudgeAgreeCount = g.Where(t => t.ReadingCategory == ReadingCategory.Global && t.JudgeVisitTaskId != null - && t.JudgeVisitTask.JudgeResultTaskId == t.Id && t.VisitTaskNum== g.Where(t => t.ReadingCategory == ReadingCategory.Global && t.JudgeVisitTaskId != null).Max(t => t.VisitTaskNum)) + && t.JudgeVisitTask.JudgeResultTaskId == t.Id && t.VisitTaskNum == g.Where(t => t.ReadingCategory == ReadingCategory.Global && t.JudgeVisitTaskId != null).Max(t => t.VisitTaskNum)) .Select(t => t.SubjectId).Distinct().Count(), }).ToList(); From 4b3e1ba5c09a2ec081fe1e502388ba50f21c1a8e Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Tue, 10 Dec 2024 10:48:12 +0800 Subject: [PATCH 05/15] =?UTF-8?q?=E8=A3=81=E5=88=A4=E4=B8=80=E8=87=B4?= =?UTF-8?q?=E7=8E=87=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/Common/ExcelExportService.cs | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs b/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs index 001c01716..a8fa7d3e3 100644 --- a/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs +++ b/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs @@ -2358,6 +2358,7 @@ namespace IRaCIS.Core.Application.Service.Common .GroupBy(t => new { t.SubjectId, t.SourceSubjectVisitId }) .Where(g => g.Count() == 2).Select(g => g.Key.SourceSubjectVisitId).Distinct().Count(); + //裁判不需要完成阅片 exportInfo.JudgeVisitCount = _visitTaskRepository.Where(comonTaskFilter).Where(t => t.ReadingCategory == ReadingCategory.Judge).Count(); //3、裁判认同数M:触发裁判的受试者访视中,阅片人被裁判认同的访视数量; @@ -2371,10 +2372,10 @@ namespace IRaCIS.Core.Application.Service.Common UserName = g.Key.UserName, FullName = g.Key.FullName, - //访视产生裁判的访视数量 + //一致率这边裁判需要完成阅片 TotalJudgeCount = g.Where(t => t.JudgeVisitTaskId != null && t.JudgeVisitTask.ReadingTaskState == ReadingTaskState.HaveSigned).Count(), - JudgeAgreeCount = g.Where(t => t.JudgeVisitTaskId != null && t.JudgeVisitTask.JudgeResultTaskId == t.Id).Count(), + JudgeAgreeCount = g.Where(t => t.JudgeVisitTaskId != null && t.JudgeVisitTask.JudgeResultTaskId == t.Id && t.JudgeVisitTask.ReadingTaskState == ReadingTaskState.HaveSigned).Count(), }).ToList(); @@ -2436,6 +2437,7 @@ namespace IRaCIS.Core.Application.Service.Common 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:触发裁判的阅片期中,阅片人被裁判认同的阅片期数量; @@ -2451,10 +2453,11 @@ namespace IRaCIS.Core.Application.Service.Common 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) + 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(); From 1c0547f3ff04ec5aaeb46bd58b7e22de0b3f0001 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Tue, 10 Dec 2024 13:30:07 +0800 Subject: [PATCH 06/15] =?UTF-8?q?=E6=9C=89=E9=98=85=E7=89=87=E6=9C=9F?= =?UTF-8?q?=E6=97=A0=E5=85=A8=E5=B1=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/Common/ExcelExportService.cs | 244 +++++++++++++----- 1 file changed, 185 insertions(+), 59 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs b/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs index a8fa7d3e3..173dcbb8f 100644 --- a/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs +++ b/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs @@ -1551,10 +1551,20 @@ namespace IRaCIS.Core.Application.Service.Common var addReadingPeriodNum = isGlobalReading ? ReadingCommon.TaskNumDic[ReadingCategory.Global] : 0; + var finishedGlobalCount = 0; - //已完成的全局数量 - var finishedGlobalCount = resultExceptJudgeList.Where(t => t.SubjectCode == visitItem.SubjectCode && t.ReadingCategory == ReadingCategory.Global) - .GroupBy(t => t.VisitTaskNum).Where(g => g.Count() == 2).Select(g => g.Key).Count(); + //没有配置阅片期 + if (subjectReadingPeriondVisitNumList == null) + { + finishedGlobalCount = 0; + } + else + { + //已完成的全局数量 + finishedGlobalCount = resultExceptJudgeList.Where(t => t.SubjectCode == visitItem.SubjectCode && subjectReadingPeriondVisitNumList.Any(c => (c + addReadingPeriodNum) == t.VisitTaskNum) + /*&& t.ReadingCategory == ReadingCategory.Global*/) + .GroupBy(t => t.VisitTaskNum).Where(g => g.Count() == 2).Select(g => g.Key).Count(); + } visitItem.IsJudgeSelect = null; @@ -1564,7 +1574,8 @@ namespace IRaCIS.Core.Application.Service.Common { //最大的全局是否产生裁判 - var subjectMaxFinishedGlobalTaskNum = resultExceptJudgeList.Where(t => t.SubjectCode == visitItem.SubjectCode && t.ReadingCategory == ReadingCategory.Global) + var subjectMaxFinishedGlobalTaskNum = resultExceptJudgeList.Where(t => t.SubjectCode == visitItem.SubjectCode && subjectReadingPeriondVisitNumList.Any(c => (c + addReadingPeriodNum) == t.VisitTaskNum) + /*&& t.ReadingCategory == ReadingCategory.Global*/) .GroupBy(t => t.VisitTaskNum).Where(g => g.Count() == 2).Select(g => g.Key).DefaultIfEmpty().Max(); //最大的完成的全局是否产生裁判 @@ -2288,7 +2299,11 @@ namespace IRaCIS.Core.Application.Service.Common #endregion - + if (export_Template == StaticData.Export.CommonJudgeReadingDetail_Export) + { + //裁判产生标记为空的数据过滤掉 + list = list.Where(t => t.IsTrigerJudge != null).ToList(); + } exportInfo.List = ExportExcelConverterDate.ConvertToClientTimeInObject(list.Where(t => t.ReadingCategory != ReadingCategory.Global).ToList(), _userInfo.TimeZoneId); exportInfo.CurrentTime = ExportExcelConverterDate.DateTimeInternationalToString(DateTime.Now, _userInfo.TimeZoneId); @@ -2335,7 +2350,7 @@ namespace IRaCIS.Core.Application.Service.Common [FromServices] IRepository _trialRepository) { //每次查询必须是单标准的 - var criterion = await _readingQuestionCriterionTrialRepository.Where(t => t.Id == inQuery.TrialReadingCriterionId).Select(t => new { t.CriterionType, t.CriterionName, t.ArbitrationRule }).FirstNotNullAsync(); + var criterion = await _readingQuestionCriterionTrialRepository.Where(t => t.Id == inQuery.TrialReadingCriterionId).Select(t => new { t.CriterionType, t.CriterionName, t.ArbitrationRule, t.IsGlobalReading }).FirstNotNullAsync(); @@ -2393,80 +2408,191 @@ namespace IRaCIS.Core.Application.Service.Common exportInfo.CurrentTime = ExportExcelConverterDate.DateTimeInternationalToString(DateTime.Now, _userInfo.TimeZoneId); - #region 按照受试者维度统计 - //1、裁判量M:所有完成阅片病例(至少一个阅片期)里面触发裁判的受试者数量; + + + //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.ReadingCategory == ReadingCategory.Global && t.ReadingTaskState == ReadingTaskState.HaveSigned) - .GroupBy(t => new { t.SubjectId, t.SouceReadModuleId }).Where(g => g.Count() == 2).Any() + 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(); - exportInfo.judgeSubjectCount = _subjectRepository.Where(t => t.TrialId == inQuery.TrialId).Where(t => - t.SubjectVisitTaskList.AsQueryable().Where(comonTaskFilter).Any(t => t.ReadingCategory == ReadingCategory.Global && t.ReadingTaskState == ReadingTaskState.HaveSigned) - && t.SubjectVisitTaskList.AsQueryable().Where(comonTaskFilter).Any(t => t.ReadingCategory == ReadingCategory.Judge) - ).Count(); - var doctorList = _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, + //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(); - //触发裁判的受试者数量 - TotalJudgeCount = g.Where(t => t.ReadingCategory == ReadingCategory.Global && t.JudgeVisitTaskId != null).Select(t => t.SubjectId).Distinct().Count(), - // G-2 G-4 可能选择的是不同的医生,要以最后一次选择的为准 - JudgeAgreeCount = g.Where(t => t.ReadingCategory == ReadingCategory.Global && t.JudgeVisitTaskId != null - && t.JudgeVisitTask.JudgeResultTaskId == t.Id && t.VisitTaskNum == g.Where(t => t.ReadingCategory == ReadingCategory.Global && t.JudgeVisitTaskId != null).Max(t => t.VisitTaskNum)) - .Select(t => t.SubjectId).Distinct().Count(), - }).ToList(); + if (criterion.IsGlobalReading) + { - #endregion + #region 按照受试者维度统计 + //1、裁判量M:所有完成阅片病例 最后一个阅片期触发裁判的受试者数量; + //2、总样本量N:R1,R2均完成阅片(至少一个阅片期)的受试者数量; - #region 按照阅片期维度统计 - //、裁判量J:所有完成阅片(R1和R2均完成)的阅片期里面触发裁判的阅片期数量; - //2、总样本量Q: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.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.judgeSubjectCount = _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, 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.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.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, - //3、裁判认同数J:触发裁判的阅片期中,阅片人被裁判认同的阅片期数量; - //4、总裁判数Q:阅片人完成阅片的阅片期中,触发裁判的阅片期数量; + //最后一个阅片期触发裁判 且裁判已阅 + TotalJudgeCount = g.Where(t => t.ReadingCategory == ReadingCategory.Global && 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(), - var doctor2List = _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, + // G-2 G-4 可能选择的是不同的医生,要以最后一次选择的为准 + JudgeAgreeCount = g.Where(t => t.ReadingCategory == ReadingCategory.Global && t.JudgeVisitTaskId != null && t.JudgeVisitTask.ReadingTaskState == ReadingTaskState.HaveSigned + && t.JudgeVisitTask.JudgeResultTaskId == t.Id + && 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(), - //触发裁判的阅片期的数量 并且裁判要求做完 - 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(), + }).ToList(); - 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(), + #endregion - }).ToList(); + #region 按照阅片期维度统计 + //、裁判量J:所有完成阅片(R1和R2均完成)的阅片期里面触发裁判的阅片期数量; + //2、总样本量Q:R1,R2均完成阅片的阅片期数量; - #endregion + 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.DoctorSubjectStatList = doctorList; + 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 + { + + //最后一个已完成的全局 没产生裁判 (之前有裁判),不算入裁判量 + exportInfo.judgeSubjectCount = _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 && t.ReadModuleList.Any(c => c.SubjectVisit.VisitNum + addReadingPeriodNum == g.Key.VisitTaskNum)) + + .Any(g => g.Any(t => t.JudgeVisitTaskId != null)) + ).Count(); + + #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 && 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 + && t.JudgeVisitTask.JudgeResultTaskId == t.Id + && 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(), + + }).ToList(); + + #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 + } - exportInfo.DoctorPeriodStatList = doctor2List; return await ExcelExportHelper.DataExportAsync(StaticData.Export.ReadingPeriodJudgeRatio_Export, exportInfo, $"{exportInfo.ResearchProgramNo}_{exportInfo.CriterionName}", _commonDocumentRepository, _hostEnvironment); From 6b02c03f7f24e9fe570ee5087386e482a865bc3f Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Tue, 10 Dec 2024 13:54:33 +0800 Subject: [PATCH 07/15] =?UTF-8?q?=E9=98=85=E7=89=87=E6=9C=9F=E7=BB=B4?= =?UTF-8?q?=E5=BA=A6=E7=BB=9F=E4=B8=80=20=20=E8=A3=81=E5=88=A4=20=E5=92=8C?= =?UTF-8?q?=E4=B8=80=E8=87=B4=E7=8E=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/Common/ExcelExportService.cs | 189 +++++++++--------- 1 file changed, 98 insertions(+), 91 deletions(-) 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 } From 5e34a41902caa9230cdff373c41502a489db89dc Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Tue, 10 Dec 2024 14:08:45 +0800 Subject: [PATCH 08/15] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=97=A0=E5=85=A8?= =?UTF-8?q?=E5=B1=80bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/Common/ExcelExportService.cs | 21 ++++++++----------- 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs b/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs index db17abecd..9add1f2bf 100644 --- a/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs +++ b/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs @@ -1664,7 +1664,7 @@ namespace IRaCIS.Core.Application.Service.Common { //最大的完成的全局未产生裁判 - if (visitItem.VisitTaskNum < subjectMaxFinishedGlobalTaskNum) + if (visitItem.VisitTaskNum <= subjectMaxFinishedGlobalTaskNum) { visitItem.IsTrigerJudge = false; @@ -2370,8 +2370,8 @@ 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 }) - .Where(g => g.Count() == 2).Select(g => g.Key.SourceSubjectVisitId).Distinct().Count(); + .GroupBy(t => new { t.SubjectId, t.VisitTaskNum }) + .Where(g => g.Count() == 2).Select(g => g.Key.VisitTaskNum).Distinct().Count(); //裁判不需要完成阅片 exportInfo.JudgeVisitCount = _visitTaskRepository.Where(comonTaskFilter).Where(t => t.ReadingCategory == ReadingCategory.Judge).Count(); @@ -2465,13 +2465,13 @@ 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.ReadingCategory == ReadingCategory.Global && t.ReadingTaskState == ReadingTaskState.HaveSigned) - .GroupBy(t => new { t.SubjectId, t.SouceReadModuleId }).Where(g => g.Count() == 2).Any() + .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.ReadingCategory == ReadingCategory.Global && t.ReadingTaskState == ReadingTaskState.HaveSigned) - .GroupBy(t => new { t.SubjectId, t.SouceReadModuleId, t.VisitTaskNum }).Where(g => g.Count() == 2 && g.Key.VisitTaskNum == g.Max(t => t.VisitTaskNum)).Any(g => g.Any(t => t.JudgeVisitTaskId != null)) + .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) @@ -2488,9 +2488,10 @@ namespace IRaCIS.Core.Application.Service.Common .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 - && t.JudgeVisitTask.JudgeResultTaskId == t.Id - && t.VisitTaskNum == g.Where(t => t.ReadingCategory == ReadingCategory.Global && t.JudgeVisitTaskId != null && t.JudgeVisitTask.ReadingTaskState == ReadingTaskState.HaveSigned).Max(t => t.VisitTaskNum)) + JudgeAgreeCount = g.Where(t => t.ReadingCategory == ReadingCategory.Global && 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(), }).ToList(); @@ -2600,11 +2601,7 @@ namespace IRaCIS.Core.Application.Service.Common } - return await ExcelExportHelper.DataExportAsync(StaticData.Export.ReadingPeriodJudgeRatio_Export, exportInfo, $"{exportInfo.ResearchProgramNo}_{exportInfo.CriterionName}", _commonDocumentRepository, _hostEnvironment); - - - } else { From 2d03635ec481031dfc3ed60adb72cbbaa9d68d3e Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Tue, 10 Dec 2024 14:11:46 +0800 Subject: [PATCH 09/15] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=90=9C=E7=B4=A2?= =?UTF-8?q?=E6=9D=A1=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/Common/ExcelExportService.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs b/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs index 9add1f2bf..7aa0e370d 100644 --- a/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs +++ b/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs @@ -2416,15 +2416,15 @@ namespace IRaCIS.Core.Application.Service.Common // 有阅片期没有全局 和有阅片期有全局,主要变化点在于 t.ReadingCategory == ReadingCategory.Global 变成了 t.Subject.ReadModuleList.Any(c => c.SubjectVisit.VisitNum + addReadingPeriodNum == t.VisitTaskNum) - exportInfo.ReadingPeriodCount = _visitTaskRepository.Where(comonTaskFilter) + 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.ReadingTaskState == ReadingTaskState.HaveSigned) + .Where(t => t.Subject.ReadModuleList.Any(c => c.SubjectVisit.VisitNum + addReadingPeriodNum == t.VisitTaskNum)) .GroupBy(t => new { t.SubjectId, t.VisitTaskNum }) .Where(g => g.Count() == 2).Select(g => g.Key.VisitTaskNum).Distinct().Count(); - exportInfo.judgeReadingPeriodCount = _visitTaskRepository.Where(comonTaskFilter) + 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.ReadingTaskState == ReadingTaskState.HaveSigned) + .Where(t => t.Subject.ReadModuleList.Any(c => c.SubjectVisit.VisitNum + addReadingPeriodNum == t.VisitTaskNum)) .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(); From 57d9a8665d5f855b6096a8b53cd62b6567ae8937 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Tue, 10 Dec 2024 14:32:40 +0800 Subject: [PATCH 10/15] =?UTF-8?q?=E4=B8=B4=E6=97=B6=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/Common/ExcelExportService.cs | 75 ++++++++----------- 1 file changed, 30 insertions(+), 45 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs b/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs index 7aa0e370d..8f4304b5c 100644 --- a/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs +++ b/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs @@ -2414,17 +2414,17 @@ namespace IRaCIS.Core.Application.Service.Common //、裁判量J:所有完成阅片(R1和R2均完成)的阅片期里面触发裁判的阅片期数量; //2、总样本量Q:R1,R2均完成阅片的阅片期数量; - // 有阅片期没有全局 和有阅片期有全局,主要变化点在于 t.ReadingCategory == ReadingCategory.Global 变成了 t.Subject.ReadModuleList.Any(c => c.SubjectVisit.VisitNum + addReadingPeriodNum == t.VisitTaskNum) + // 有阅片期没有全局 和有阅片期有全局,主要变化点在于 t.ReadingCategory == ReadingCategory.Global 变成了 t.Subject.ReadModuleList.Any(c => c.SubjectVisit.VisitNum + addReadingPeriodNum == t.VisitTaskNum && t.TrialReadingCriterionId==trialReadingCriterionId) exportInfo.ReadingPeriodCount = _visitTaskRepository.Where(comonTaskFilter).Where(t => t.ReadingTaskState == ReadingTaskState.HaveSigned) //找到阅片期已阅片完 - .Where(t => t.Subject.ReadModuleList.Any(c => c.SubjectVisit.VisitNum + addReadingPeriodNum == t.VisitTaskNum)) + .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.judgeReadingPeriodCount = _visitTaskRepository.Where(comonTaskFilter).Where(t => t.ReadingTaskState == ReadingTaskState.HaveSigned) //找到阅片期已阅片完 - .Where(t => t.Subject.ReadModuleList.Any(c => c.SubjectVisit.VisitNum + addReadingPeriodNum == t.VisitTaskNum)) + .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(); @@ -2443,11 +2443,11 @@ namespace IRaCIS.Core.Application.Service.Common FullName = g.Key.FullName, //触发裁判的阅片期的数量 并且裁判要求做完 - TotalJudgeCount = g.Where(t => t.Subject.ReadModuleList.Any(c => c.SubjectVisit.VisitNum + addReadingPeriodNum == t.VisitTaskNum) + 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) + 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(), @@ -2463,16 +2463,20 @@ 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.VisitTaskNum }).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.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.ReadingCategory == ReadingCategory.Global && t.ReadingTaskState == ReadingTaskState.HaveSigned) - .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.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 }) @@ -2490,8 +2494,7 @@ namespace IRaCIS.Core.Application.Service.Common // G-2 G-4 可能选择的是不同的医生,要以最后一次选择的为准 JudgeAgreeCount = g.Where(t => t.ReadingCategory == ReadingCategory.Global && 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 - ) + && t.JudgeVisitTask.JudgeResultTaskId == t.Id) .Select(t => t.SubjectId).Distinct().Count(), }).ToList(); @@ -2538,39 +2541,21 @@ namespace IRaCIS.Core.Application.Service.Common 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.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(); //最后一个已完成的全局 没产生裁判 (之前有裁判),不算入裁判量 - exportInfo.judgeSubjectCount = _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 && t.ReadModuleList.Any(c => c.SubjectVisit.VisitNum + addReadingPeriodNum == g.Key.VisitTaskNum)) - - .Any(g => g.Any(t => t.JudgeVisitTaskId != null)) - ).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.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(); #region 按照受试者维度统计 From a8b614e2a55e29b94a20096fb0d797100b412149 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Tue, 10 Dec 2024 15:00:53 +0800 Subject: [PATCH 11/15] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=B8=B4=E6=97=B6?= =?UTF-8?q?=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/Common/ExcelExportService.cs | 177 +++++++++++------- 1 file changed, 112 insertions(+), 65 deletions(-) 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 + } From 33a15676b53be339712724579e75c37b06bc07b1 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Tue, 10 Dec 2024 16:03:43 +0800 Subject: [PATCH 12/15] =?UTF-8?q?=E5=8F=97=E8=AF=95=E8=80=85=E7=BB=B4?= =?UTF-8?q?=E5=BA=A6=E7=BB=9F=E8=AE=A1=E9=81=97=E7=95=99=20=E5=85=88?= =?UTF-8?q?=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/Common/ExcelExportService.cs | 189 +++++------------- 1 file changed, 49 insertions(+), 140 deletions(-) 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 } From 468a124841bb436827cd9d9f2ff2db1b68489474 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Tue, 10 Dec 2024 16:16:51 +0800 Subject: [PATCH 13/15] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=A3=81=E5=88=A4?= =?UTF-8?q?=E8=AE=BF=E8=A7=86=E6=95=B0=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/Common/ExcelExportService.cs | 60 ++++++++++++------- 1 file changed, 37 insertions(+), 23 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs b/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs index 1bdee1ecf..e0631276c 100644 --- a/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs +++ b/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs @@ -2370,8 +2370,8 @@ 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.VisitTaskNum }) - .Where(g => g.Count() == 2).Select(g => g.Key.VisitTaskNum).Distinct().Count(); + .GroupBy(t => new { t.SubjectId,t.SourceSubjectVisitId }) + .Where(g => g.Count() == 2).Select(g => g.Key.SourceSubjectVisitId).Distinct().Count(); //裁判不需要完成阅片 exportInfo.JudgeVisitCount = _visitTaskRepository.Where(comonTaskFilter).Where(t => t.ReadingCategory == ReadingCategory.Judge).Count(); @@ -2489,16 +2489,22 @@ namespace IRaCIS.Core.Application.Service.Common FullName = g.Key.FullName, //最后一个阅片期触发裁判 且裁判已阅 - TotalJudgeCount = g.Where(t => t.ReadingCategory == ReadingCategory.Global) + 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)) + .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) + 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) + .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(); @@ -2515,25 +2521,33 @@ namespace IRaCIS.Core.Application.Service.Common 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, + .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 && 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(), + //最后一个阅片期触发裁判 且裁判已阅 + 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 && t.JudgeVisitTaskId != null && t.JudgeVisitTask.ReadingTaskState == ReadingTaskState.HaveSigned - && t.JudgeVisitTask.JudgeResultTaskId == t.Id - && 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) + .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(); + }).ToList(); #endregion From 30f41ba270fcbc7c9abe9a2f16cdae4a9bd359b3 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Tue, 10 Dec 2024 16:34:04 +0800 Subject: [PATCH 14/15] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=B5=8B=E8=AF=95demo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/Common/ExcelExportService.cs | 30 +++++++++++-------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs b/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs index e0631276c..60b45e3b1 100644 --- a/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs +++ b/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs @@ -2421,14 +2421,16 @@ namespace IRaCIS.Core.Application.Service.Common .Where(t => t.SubjectVisitTaskList.AsQueryable().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).Any()) + .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.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)) + .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(); @@ -2436,14 +2438,16 @@ namespace IRaCIS.Core.Application.Service.Common //找到阅片期已阅片完 .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(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 == (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(); + .Where(g => g.Count() == 2 && g.Any(c => c.JudgeVisitTaskId != null)) + .Select(g => g.Key.VisitTaskNum).Distinct().Count(); //3、裁判认同数J:触发裁判的阅片期中,阅片人被裁判认同的阅片期数量; @@ -2460,13 +2464,13 @@ namespace IRaCIS.Core.Application.Service.Common 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) + 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) .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) + 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) .Select(t => t.VisitTaskNum).Distinct().Count(), }).ToList(); @@ -2530,18 +2534,18 @@ namespace IRaCIS.Core.Application.Service.Common //最后一个阅片期触发裁判 且裁判已阅 TotalJudgeCount = g - .Where(t => t.ReadingCategory == ReadingCategory.Global) + .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.ReadingCategory == ReadingCategory.Global) + .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.ReadingCategory == ReadingCategory.Global) + .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.ReadingCategory == ReadingCategory.Global) + .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) From e147c2a3707544f94824e80c5fc22e8228110674 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Tue, 10 Dec 2024 17:07:23 +0800 Subject: [PATCH 15/15] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=AF=BC=E5=87=BA=20?= =?UTF-8?q?=E6=82=A3=E8=80=85=E8=A3=81=E5=88=A4=E7=8E=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/Common/ExcelExportService.cs | 129 +++++------------- 1 file changed, 37 insertions(+), 92 deletions(-) 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