统计数字换成分组统计子查询
continuous-integration/drone/push Build is running Details

Test_IRC_Net8
hang 2026-03-23 17:02:01 +08:00
parent de0cb6788e
commit 4e20a86155
2 changed files with 39 additions and 16 deletions

View File

@ -289,7 +289,7 @@ namespace IRaCIS.Application.Contracts
public List<TrialCriterionReadingCategory> CriterionReadingCategoryList { get; set; } public List<TrialCriterionReadingCategory> CriterionReadingCategoryList { get; set; }
//任务阅片状态 //任务阅片状态
public List<DoctorUserTask> ReadingTaskStateList { get; set; } = new List<DoctorUserTask>(); public List<DoctorTaskStat> ReadingTaskStateList { get; set; } = new List<DoctorTaskStat>();
public List<CriterionFile> CriterionFileList { get; set; } = new List<CriterionFile>(); public List<CriterionFile> CriterionFileList { get; set; } = new List<CriterionFile>();
@ -299,11 +299,17 @@ namespace IRaCIS.Application.Contracts
new CriterionReadingCategory() new CriterionReadingCategory()
{ {
EnrollId = EnrollId, EnrollId = EnrollId,
PendingCount = ReadingTaskStateList.Where(x => x.ReadingTaskState != ReadingTaskState.HaveSigned && x.TrialReadingCriterionId == t.TrialReadingCriterionId).Count(), //PendingCount = ReadingTaskStateList.Where(x => x.ReadingTaskState != ReadingTaskState.HaveSigned && x.TrialReadingCriterionId == t.TrialReadingCriterionId).Count(),
ComplectedCount = ReadingTaskStateList.Where(x => x.ReadingTaskState == ReadingTaskState.HaveSigned && x.TrialReadingCriterionId == t.TrialReadingCriterionId).Count(), //ComplectedCount = ReadingTaskStateList.Where(x => x.ReadingTaskState == ReadingTaskState.HaveSigned && x.TrialReadingCriterionId == t.TrialReadingCriterionId).Count(),
TotalCount = ReadingTaskStateList.Where(x => x.TrialReadingCriterionId == t.TrialReadingCriterionId).Count(), //TotalCount = ReadingTaskStateList.Where(x => x.TrialReadingCriterionId == t.TrialReadingCriterionId).Count(),
PendingCount = ReadingTaskStateList.Where(x => x.TrialReadingCriterionId == t.TrialReadingCriterionId).FirstOrDefault()?.PendingCount,
ComplectedCount = ReadingTaskStateList.Where(x => x.TrialReadingCriterionId == t.TrialReadingCriterionId).FirstOrDefault()?.ComplectedCount,
TotalCount = ReadingTaskStateList.Where(x => x.TrialReadingCriterionId == t.TrialReadingCriterionId).FirstOrDefault()?.TotalCount,
StatementCriterionFileList = CriterionFileList.Where(x => x.CriterionType == t.CriterionType && x.FileType == CriterionFileType.Statement) StatementCriterionFileList = CriterionFileList.Where(x => x.CriterionType == t.CriterionType && x.FileType == CriterionFileType.Statement)
.WhereIf(t.CriterionType == CriterionType.SelfDefine, x => x.TrialReadingCriterionId == t.TrialReadingCriterionId).ToList(), .WhereIf(t.CriterionType == CriterionType.SelfDefine, x => x.TrialReadingCriterionId == t.TrialReadingCriterionId).ToList(),
@ -348,6 +354,19 @@ namespace IRaCIS.Application.Contracts
public Guid TrialReadingCriterionId { get; set; } public Guid TrialReadingCriterionId { get; set; }
} }
public class DoctorTaskStat
{
public CriterionType? CriterionType { get; set; }
public Guid TrialReadingCriterionId { get; set; }
public int PendingCount { get; set; }
public int ComplectedCount { get; set; }
public int TotalCount { get; set; }
}
public class TrialReadingCriterionDto public class TrialReadingCriterionDto
{ {
public ReadingOrder IsReadingTaskViewInOrder { get; set; } public ReadingOrder IsReadingTaskViewInOrder { get; set; }
@ -435,11 +454,11 @@ namespace IRaCIS.Application.Contracts
/// <summary> /// <summary>
/// 待办数量 /// 待办数量
/// </summary> /// </summary>
public int PendingCount { get; set; } public int? PendingCount { get; set; }
public int ComplectedCount { get; set; } public int? ComplectedCount { get; set; }
public int TotalCount { get; set; } public int? TotalCount { get; set; }
public List<CriterionFile> StatementCriterionFileList { get; set; } public List<CriterionFile> StatementCriterionFileList { get; set; }

View File

@ -118,7 +118,7 @@ namespace IRaCIS.Core.Application.Service
/// <param name="inDto"></param> /// <param name="inDto"></param>
/// <returns></returns> /// <returns></returns>
//[Authorize(Policy = IRaCISPolicy.PM_APM)] //[Authorize(Policy = IRaCISPolicy.PM_APM)]
[TrialGlobalLimit( "AfterStopCannNotOpt" )] [TrialGlobalLimit("AfterStopCannNotOpt")]
public async Task<IResponseOutput> SetEnrollReadingCategory(SetEnrollReadingCategoryInDto inDto) public async Task<IResponseOutput> SetEnrollReadingCategory(SetEnrollReadingCategoryInDto inDto)
{ {
@ -167,7 +167,7 @@ namespace IRaCIS.Core.Application.Service
/// <param name="inCommand"></param> /// <param name="inCommand"></param>
/// <returns></returns> /// <returns></returns>
//[Authorize(Policy = IRaCISPolicy.PM_APM)] //[Authorize(Policy = IRaCISPolicy.PM_APM)]
[TrialGlobalLimit( "AfterStopCannNotOpt" )] [TrialGlobalLimit("AfterStopCannNotOpt")]
public async Task<IResponseOutput> UpdateTrialReviewerState(SetEnrollEnableCommand inCommand) public async Task<IResponseOutput> UpdateTrialReviewerState(SetEnrollEnableCommand inCommand)
{ {
await _taskAllocationRuleRepository.UpdatePartialFromQueryAsync(t => t.TrialId == inCommand.TrialId && t.EnrollId == inCommand.EnrollId, u => new TaskAllocationRule() { IsEnable = inCommand.IsEnable }, true); await _taskAllocationRuleRepository.UpdatePartialFromQueryAsync(t => t.TrialId == inCommand.TrialId && t.EnrollId == inCommand.EnrollId, u => new TaskAllocationRule() { IsEnable = inCommand.IsEnable }, true);
@ -181,7 +181,7 @@ namespace IRaCIS.Core.Application.Service
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
[HttpPost("{trialId}/{doctorId}/{type}")] [HttpPost("{trialId}/{doctorId}/{type}")]
[TrialGlobalLimit( "AfterStopCannNotOpt" )] [TrialGlobalLimit("AfterStopCannNotOpt")]
//[Authorize(Policy = IRaCISPolicy.PM_APM)] //[Authorize(Policy = IRaCISPolicy.PM_APM)]
public async Task<IResponseOutput> UpdateReviewerReadingType(Guid trialId, Guid doctorId, int type) public async Task<IResponseOutput> UpdateReviewerReadingType(Guid trialId, Guid doctorId, int type)
{ {
@ -218,7 +218,7 @@ namespace IRaCIS.Core.Application.Service
TrialReadingCriterionList = intoGroup.Trial.TrialReadingCriterionList.Where(t => t.IsConfirm).Select(t => new TrialReadingCriterionDto() { TrialReadingCriterionId = t.Id, TrialReadingCriterionName = t.CriterionName, CriterionType = t.CriterionType, IsOncologyReading = t.IsOncologyReading, IsArbitrationReading = t.IsArbitrationReading, IsGlobalReading = t.IsGlobalReading, ReadingInfoSignTime = t.ReadingInfoSignTime, ReadingType = t.ReadingType }).ToList(), TrialReadingCriterionList = intoGroup.Trial.TrialReadingCriterionList.Where(t => t.IsConfirm).Select(t => new TrialReadingCriterionDto() { TrialReadingCriterionId = t.Id, TrialReadingCriterionName = t.CriterionName, CriterionType = t.CriterionType, IsOncologyReading = t.IsOncologyReading, IsArbitrationReading = t.IsArbitrationReading, IsGlobalReading = t.IsGlobalReading, ReadingInfoSignTime = t.ReadingInfoSignTime, ReadingType = t.ReadingType }).ToList(),
DoctorCriterionStatusList = intoGroup.EnrollReadingCriteriaList.Where(t=>t.TrialReadingCriterion.IsConfirm).Select(t => new DoctorCriterionStatus() DoctorCriterionStatusList = intoGroup.EnrollReadingCriteriaList.Where(t => t.TrialReadingCriterion.IsConfirm).Select(t => new DoctorCriterionStatus()
{ {
EnrollId = t.Id, EnrollId = t.Id,
Id = t.Id, Id = t.Id,
@ -230,7 +230,7 @@ namespace IRaCIS.Core.Application.Service
CriterionReadingCategoryList = intoGroup.EnrollReadingCategoryList.Where(t => t.TrialReadingCriterion.IsConfirm).Select(t => new TrialCriterionReadingCategory() { EnrollId = t.EnrollId, ReadingCategory = t.ReadingCategory, TrialReadingCriterionId = t.TrialReadingCriterionId }).ToList(), CriterionReadingCategoryList = intoGroup.EnrollReadingCategoryList.Where(t => t.TrialReadingCriterion.IsConfirm).Select(t => new TrialCriterionReadingCategory() { EnrollId = t.EnrollId, ReadingCategory = t.ReadingCategory, TrialReadingCriterionId = t.TrialReadingCriterionId }).ToList(),
CriterionFileList = doctor.CriterionFileList.Where(t => t.TrialReadingCriterion.IsConfirm || t.TrialReadingCriterionId==null).Where(x => x.IsEnable && (x.TrialId == null || x.TrialId == trialId)).Select(x => new CriterionFile() CriterionFileList = doctor.CriterionFileList.Where(t => t.TrialReadingCriterion.IsConfirm || t.TrialReadingCriterionId == null).Where(x => x.IsEnable && (x.TrialId == null || x.TrialId == trialId)).Select(x => new CriterionFile()
{ {
CriterionType = x.CriterionType, CriterionType = x.CriterionType,
DoctorId = x.DoctorId, DoctorId = x.DoctorId,
@ -242,11 +242,15 @@ namespace IRaCIS.Core.Application.Service
Id = x.Id Id = x.Id
}).ToList(), }).ToList(),
ReadingTaskStateList = intoGroup.DoctorUser.VisitTaskList.Where(t => t.TrialReadingCriterion.IsConfirm).Where(x => x.TaskState == TaskState.Effect && x.TrialId == trialId).Select(x => new DoctorUserTask() ReadingTaskStateList = intoGroup.DoctorUser.VisitTaskList.Where(t => t.TrialReadingCriterion.IsConfirm).Where(x => x.TaskState == TaskState.Effect && x.TrialId == trialId).GroupBy(x => new { x.TrialReadingCriterionId, x.TrialReadingCriterion.CriterionType }).Select(g => new DoctorTaskStat()
{ {
ReadingTaskState = x.ReadingTaskState,
TrialReadingCriterionId = x.TrialReadingCriterionId,
CriterionType = x.TrialReadingCriterion.CriterionType, PendingCount = g.Count(x => x.ReadingTaskState != ReadingTaskState.HaveSigned),
TotalCount = g.Count(),
ComplectedCount = g.Count(x => x.ReadingTaskState == ReadingTaskState.HaveSigned),
TrialReadingCriterionId = g.Key.TrialReadingCriterionId,
CriterionType = g.Key.CriterionType,
}).ToList(), }).ToList(),