diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml index 278074b04..bda824039 100644 --- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml +++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml @@ -1168,349 +1168,6 @@ - - - 获取Sod的值 - - - - - 删除病灶获取起始病灶序号(RECIST1Point1 固定是1) - - - - - - 获取阅片报告 - - - - - - - 测试计算 - - - - - - - - 计算任务 - - - - - - - 获取报告验证的信息(这里每个标准可能不一样 返回用object) - - - - - - - 自动计算 - - - - - - - - 获取报告整体整体评估 - - - - - - - 获取报告是否存在疾病 - - - - - - - 验证访视提交 - - - - - - - 将上一次的访视病灶添加到这一次 - - - - - - - 获取SOD - - - 靶病灶径线之和(SOD) - 非淋巴结的长径 和淋巴结的短径 - - - - - - 非淋巴结靶病灶长径之和 - - - - - - - 与基线SOD相比变化量(mm) - - - - - - - 与基线访视相比SOD变化百分比 - - - - - - - 与整个访视期间SOD最低点相比增加的值(mm) - - - - 要更新之前的 - - - - - - 与整个访视期间SOD最低点相比增加的百分比 - - - - 要更新之前的 - - - - - - 整个访视期间SOD最低点访视名称 - - - - 要更新之前的 - - - - - - 是否存在非淋巴结靶病灶 - - - - - - - 是否存在淋巴结靶病灶且该病灶比上一访视短径增加5MM以上 - - - - - - - 获取存在淋巴结靶病灶且该病灶比上一访视短径增加5MM以上的病灶 - - - - - - - 被评估为NE的单个靶病灶 - - - - - - - 整体肿瘤评估 - - - - - - - 是否存在疾病 - - - - - - - 修改与整个访视期间SOD最低点相比增加的值(mm) - - - - - - - 修改最低方式点名称 - - - - - - - 修改所有访视任务的答案 - - - - - - - - - 获取基线SOD - - - - - - - 获取最低方式 - - - - - - - 获取访视任务信息 - - - - - - - 获取上一个访视任务Id - - - - - - - 获取非靶病灶评估 - - - - - - - 获取新病灶评估 - - - - - - - 删除病灶获取起始病灶序号 - - - - - - 获取阅片报告 - - - - - - - 将上一次的病灶信息添加到这一次 - - - - - - - 测试计算 - - - - - - - - 计算任务 - - - - - - - 自动计算 - - - - - - - - 基线病灶计数 - - - - - - - 获取新病灶计数 - - - - - - - 既往新病灶计数 - - - - - - - 自治疗后第二个访视点以来持续的新骨病变数量 - - - - - - - 获取 - - - - - - - 访视点肿瘤评估 - - - - - - - 修改上一次访视结果 - - - - - - - 获取访视日期信息 - - - - 获取Sod的值 @@ -1755,6 +1412,349 @@ + + + 删除病灶获取起始病灶序号 + + + + + + 获取阅片报告 + + + + + + + 将上一次的病灶信息添加到这一次 + + + + + + + 测试计算 + + + + + + + + 计算任务 + + + + + + + 自动计算 + + + + + + + + 基线病灶计数 + + + + + + + 获取新病灶计数 + + + + + + + 既往新病灶计数 + + + + + + + 自治疗后第二个访视点以来持续的新骨病变数量 + + + + + + + 获取 + + + + + + + 访视点肿瘤评估 + + + + + + + 修改上一次访视结果 + + + + + + + 获取访视日期信息 + + + + + + + 获取Sod的值 + + + + + 删除病灶获取起始病灶序号(RECIST1Point1 固定是1) + + + + + + 获取阅片报告 + + + + + + + 测试计算 + + + + + + + + 计算任务 + + + + + + + 获取报告验证的信息(这里每个标准可能不一样 返回用object) + + + + + + + 自动计算 + + + + + + + + 获取报告整体整体评估 + + + + + + + 获取报告是否存在疾病 + + + + + + + 验证访视提交 + + + + + + + 将上一次的访视病灶添加到这一次 + + + + + + + 获取SOD + + + 靶病灶径线之和(SOD) + 非淋巴结的长径 和淋巴结的短径 + + + + + + 非淋巴结靶病灶长径之和 + + + + + + + 与基线SOD相比变化量(mm) + + + + + + + 与基线访视相比SOD变化百分比 + + + + + + + 与整个访视期间SOD最低点相比增加的值(mm) + + + + 要更新之前的 + + + + + + 与整个访视期间SOD最低点相比增加的百分比 + + + + 要更新之前的 + + + + + + 整个访视期间SOD最低点访视名称 + + + + 要更新之前的 + + + + + + 是否存在非淋巴结靶病灶 + + + + + + + 是否存在淋巴结靶病灶且该病灶比上一访视短径增加5MM以上 + + + + + + + 获取存在淋巴结靶病灶且该病灶比上一访视短径增加5MM以上的病灶 + + + + + + + 被评估为NE的单个靶病灶 + + + + + + + 整体肿瘤评估 + + + + + + + 是否存在疾病 + + + + + + + 修改与整个访视期间SOD最低点相比增加的值(mm) + + + + + + + 修改最低方式点名称 + + + + + + + 修改所有访视任务的答案 + + + + + + + + + 获取基线SOD + + + + + + + 获取最低方式 + + + + + + + 获取访视任务信息 + + + + + + + 获取上一个访视任务Id + + + + + + + 获取非靶病灶评估 + + + + + + + 获取新病灶评估 + + + + 获取Sod的值 diff --git a/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs b/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs index 1258c41a9..dbd5048bd 100644 --- a/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs +++ b/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs @@ -896,6 +896,7 @@ namespace IRaCIS.Core.Application.Service.Allocation [HttpPost] public async Task<(PageOutput, object)> GetIRUnReadSubjectTaskList(IRUnReadSubjectQuery iRUnReadSubjectQuery) { + var trialId = iRUnReadSubjectQuery.TrialId; var trialReadingCriterionId = iRUnReadSubjectQuery.TrialReadingCriterionId; @@ -905,41 +906,40 @@ namespace IRaCIS.Core.Application.Service.Allocation var readingTool = criterionConfig.ReadingTool; var isReadingTaskViewInOrder = criterionConfig.IsReadingTaskViewInOrder; - var visitTaskListInfo = await GetOrderReadingIQueryable(new GetOrderReadingIQueryableInDto() - { - TrialId = trialId, - TrialReadingCriterionId = trialReadingCriterionId, - SubjectCode = iRUnReadSubjectQuery.SubjectCode, - Page = new PageInput() - { - PageIndex = iRUnReadSubjectQuery.PageIndex, - PageSize = iRUnReadSubjectQuery.PageSize, - Asc = iRUnReadSubjectQuery.Asc, - SortField = iRUnReadSubjectQuery.SortField, - - } - - }); - - - var totalCount = visitTaskListInfo.Item1; - var currentPageData = visitTaskListInfo.Item2; - - - - var result = new PageOutput() - { - PageSize = iRUnReadSubjectQuery.PageSize, - PageIndex = iRUnReadSubjectQuery.PageIndex, - TotalCount = totalCount, - CurrentPageData = currentPageData, - }; - - #region 按照Subject 维度 if (isReadingTaskViewInOrder) { + + var visitTaskListInfo = await GetOrderReadingIQueryable(new GetOrderReadingIQueryableInDto() + { + TrialId = trialId, + TrialReadingCriterionId = trialReadingCriterionId, + SubjectCode = iRUnReadSubjectQuery.SubjectCode, + Page = new PageInput() + { + PageIndex = iRUnReadSubjectQuery.PageIndex, + PageSize = iRUnReadSubjectQuery.PageSize, + Asc = iRUnReadSubjectQuery.Asc, + SortField = iRUnReadSubjectQuery.SortField, + + } + + }); + + + var totalCount = visitTaskListInfo.Item1; + var currentPageData = visitTaskListInfo.Item2; + + + + var result = new PageOutput() + { + PageSize = iRUnReadSubjectQuery.PageSize, + PageIndex = iRUnReadSubjectQuery.PageIndex, + TotalCount = totalCount, + CurrentPageData = currentPageData, + }; // 封装的方法有问题 //var result = await visitQuery.ToPagedListAsync(iRUnReadSubjectQuery.PageIndex, iRUnReadSubjectQuery.PageSize, String.IsNullOrEmpty(iRUnReadSubjectQuery.SortField) ? nameof(IRUnReadSubjectView.SubjectId) : iRUnReadSubjectQuery.SortField, iRUnReadSubjectQuery.Asc); @@ -957,10 +957,9 @@ namespace IRaCIS.Core.Application.Service.Allocation } else { - var taskQuery = _visitTaskRepository.Where(x => x.TrialId == iRUnReadSubjectQuery.TrialId && x.DoctorUserId == _userInfo.Id && x.TaskState == TaskState.Effect && x.TrialReadingCriterionId == trialReadingCriterionId) // .Where(x=>x.Subject.ClinicalDataList.Any(c => c.IsSign && (c.ReadingId == x.SouceReadModuleId || c.ReadingId == x.SourceSubjectVisitId))) - .Where(x => !x.Subject.IsDeleted); + .Where(x => !x.Subject.IsDeleted).Where(x=>(x.IsNeedClinicalDataSign&&x.IsClinicalDataSign)||!x.IsNeedClinicalDataSign); IRUnReadOutDto iRUnReadOut = new IRUnReadOutDto() { @@ -973,8 +972,65 @@ namespace IRaCIS.Core.Application.Service.Allocation + var visitGroupQuery = taskQuery.GroupBy(x => new { x.SubjectId, x.Subject.Code, x.BlindSubjectCode }); + + var visitTaskQuery = visitGroupQuery.Select(x => new IRUnReadSubjectView() + { + SubjectId = x.Key.SubjectId, + SubjectCode = x.Key.BlindSubjectCode == string.Empty ? x.Key.Code : x.Key.BlindSubjectCode, + + SuggesteFinishedTime = x.Where(y => y.TrialReadingCriterionId == trialReadingCriterionId && y.ReadingTaskState != ReadingTaskState.HaveSigned).Min(x => x.SuggesteFinishedTime), + + //未读任务量 + UnReadTaskCount = x.Where(y => y.TrialReadingCriterionId == trialReadingCriterionId && y.ReadingTaskState != ReadingTaskState.HaveSigned).Count(), + + //未读 里可读任务量 + UnReadCanReadTaskCount = x.Where(y => y.TrialReadingCriterionId == trialReadingCriterionId && y.ReadingTaskState != ReadingTaskState.HaveSigned && y.IsFrontTaskNeedSignButNotSign == false && (y.IsNeedClinicalDataSign == false || y.IsClinicalDataSign == true) + //不能对包含聚合或子查询的表达式执行聚合函数 + //&& !x.Any(t => t.ReadingTaskState != ReadingTaskState.HaveSigned && t.IsNeedClinicalDataSign == true && t.IsClinicalDataSign == false && t.VisitTaskNum y.TrialReadingCriterionId == trialReadingCriterionId && y.ReadingTaskState == ReadingTaskState.HaveSigned).Count(), + + ExistReadingApply = x.Any(y => y.ReReadingApplyState == ReReadingApplyState.DocotorHaveApplyed || y.ReReadingApplyState == ReReadingApplyState.TrialGroupHaveApplyed), + + //查出所有未读的 未读的可读的 在这个列表基础上 过滤下 y.IsFrontTaskNeedSignButNotSign==false && (y.IsNeedClinicalDataSign == false || y.IsClinicalDataSign == true) 这样容易排错 确认这三个字段是否维护有误 + UnReadTaskList = x.Where(y => y.TrialReadingCriterionId == trialReadingCriterionId && y.ReadingTaskState != ReadingTaskState.HaveSigned).OrderBy(x => x.VisitTaskNum) + .Select(u => new IRUnreadTaskView() + { + Id = u.Id, + IsUrgent = u.IsUrgent, + VisitNum = u.VisitTaskNum, + TaskBlindName = u.TaskBlindName, + VisistId = u.SourceSubjectVisitId, + SuggesteFinishedTime = u.SuggesteFinishedTime, + ReadingCategory = u.ReadingCategory, + IsAnalysisCreate = u.IsAnalysisCreate, + ArmEnum = u.ArmEnum, + TrialReadingCriterionId = u.TrialReadingCriterionId, + IsNeedClinicalDataSign = u.IsNeedClinicalDataSign, + IsClinicalDataSign = u.IsClinicalDataSign, + IsFrontTaskNeedSignButNotSign = u.IsFrontTaskNeedSignButNotSign + }) + .ToList(), + }).Where(x => x.UnReadCanReadTaskCount > 0); + + + var totalCount = await visitGroupQuery.CountAsync(); + var currentPageData =await visitTaskQuery.ToListAsync(); + + var result = new PageOutput() + { + PageSize = iRUnReadSubjectQuery.PageSize, + PageIndex = iRUnReadSubjectQuery.PageIndex, + TotalCount = totalCount, + CurrentPageData = currentPageData, + }; + return (result, new { IsReadingTaskViewInOrder = isReadingTaskViewInOrder,