diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml index b4aa35307..260428c00 100644 --- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml +++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml @@ -424,11 +424,11 @@ - + - 获取有序阅片IQuery对象 + 获取subject有序 或者无序阅片IQuery对象 - + diff --git a/IRaCIS.Core.Application/Service/Allocation/DTO/VisitTaskViewModel.cs b/IRaCIS.Core.Application/Service/Allocation/DTO/VisitTaskViewModel.cs index 403ef9918..27bcb5d88 100644 --- a/IRaCIS.Core.Application/Service/Allocation/DTO/VisitTaskViewModel.cs +++ b/IRaCIS.Core.Application/Service/Allocation/DTO/VisitTaskViewModel.cs @@ -370,7 +370,7 @@ namespace IRaCIS.Core.Application.ViewModel } - public class GetOrderReadingIQueryableInDto + public class GetReadingIQueryableInDto:PageInput { public Guid TrialId { get; set; } @@ -380,8 +380,6 @@ namespace IRaCIS.Core.Application.ViewModel public string? SubjectCode { get; set; } = null; - public PageInput? Page { get; set; } = null; - } public class VisitTaskQuery : PageInput diff --git a/IRaCIS.Core.Application/Service/Allocation/Interface/IVisitTaskService.cs b/IRaCIS.Core.Application/Service/Allocation/Interface/IVisitTaskService.cs index c9a5a55bd..6268fa18e 100644 --- a/IRaCIS.Core.Application/Service/Allocation/Interface/IVisitTaskService.cs +++ b/IRaCIS.Core.Application/Service/Allocation/Interface/IVisitTaskService.cs @@ -16,6 +16,6 @@ namespace IRaCIS.Core.Application.Service Task ConfirmReReading(ConfirmReReadingCommand agreeReReadingCommand, [FromServices] IVisitTaskHelpeService _visitTaskCommonService); - Task<(int, List)> GetOrderReadingIQueryable(GetOrderReadingIQueryableInDto inDto); + Task> GetSubjectReadingIQueryable(GetReadingIQueryableInDto inDto); } } \ No newline at end of file diff --git a/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs b/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs index 4450a2779..8699e313b 100644 --- a/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs +++ b/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs @@ -958,42 +958,22 @@ namespace IRaCIS.Core.Application.Service.Allocation var isReadingTaskViewInOrder = criterionConfig.IsReadingTaskViewInOrder; #region 按照Subject 维度 - if (isReadingTaskViewInOrder == ReadingOrder.InOrder) + if (isReadingTaskViewInOrder == ReadingOrder.InOrder || isReadingTaskViewInOrder == ReadingOrder.SubjectRandom) { - var visitTaskListInfo = await GetOrderReadingIQueryable(new GetOrderReadingIQueryableInDto() + var result = await GetSubjectReadingIQueryable(new GetReadingIQueryableInDto() { TrialId = trialId, TrialReadingCriterionId = trialReadingCriterionId, SubjectCode = inQuery.SubjectCode, - Page = new PageInput() - { - PageIndex = inQuery.PageIndex, - PageSize = inQuery.PageSize, - Asc = inQuery.Asc, - SortField = inQuery.SortField, - - } + PageIndex = inQuery.PageIndex, + PageSize = inQuery.PageSize, + Asc = inQuery.Asc, + SortField = inQuery.SortField, }); - - var totalCount = visitTaskListInfo.Item1; - var currentPageData = visitTaskListInfo.Item2; - - - - var result = new PageOutput() - { - PageSize = inQuery.PageSize, - PageIndex = inQuery.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); return ResponseOutput.Ok(result, new { RandomReadInfo = new IRUnReadOutDto(), @@ -1006,69 +986,7 @@ namespace IRaCIS.Core.Application.Service.Allocation CriterionType = criterionConfig.CriterionType, }); } - else if(isReadingTaskViewInOrder == ReadingOrder.SubjectRandom) - { - var critrion = await _trialReadingCriterionRepository.FindAsync(trialReadingCriterionId); - var visitQuery = _visitTaskRepository.Where(x => x.TrialId == trialId && x.DoctorUserId == _userInfo.Id && x.TaskState == TaskState.Effect) - - .WhereIf(!string.IsNullOrEmpty(subjectCode), t => (t.Subject.Code.Contains(subjectCode!) && t.IsAnalysisCreate == false) || (t.BlindSubjectCode.Contains(subjectCode!) && t.IsAnalysisCreate)); - - var visitGroupQuery = visitQuery.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), - - //未读任务量 - UnReadCanReadTaskCount = x.Where(y => y.TrialReadingCriterionId == trialReadingCriterionId && y.ReadingTaskState != ReadingTaskState.HaveSigned).Count(), - - UrgentCount = x.Where(y => y.TrialReadingCriterionId == trialReadingCriterionId && y.ReadingTaskState != ReadingTaskState.HaveSigned).Where(x => x.IsUrgent).Count(), - - //已读任务量 - HaveReadTaskCount = x.Where(y => y.TrialReadingCriterionId == trialReadingCriterionId && y.ReadingTaskState == ReadingTaskState.HaveSigned).Count(), - - ExistReadingApply = x.Any(y => (y.ReReadingApplyState == ReReadingApplyState.DocotorHaveApplyed && y.TrialReadingCriterionId == trialReadingCriterionId) || y.ReReadingApplyState == ReReadingApplyState.TrialGroupHaveApplyed), - - UnReadCanReadTaskList = 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 pageList = await visitTaskQuery.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, string.IsNullOrWhiteSpace(inQuery.SortField)? nameof(IRUnReadSubjectView.UnReadCanReadTaskCount) : inQuery.SortField, inQuery.Asc ); - - - return ResponseOutput.Ok(pageList, new - { - RandomReadInfo = new IRUnReadOutDto(), - IsReadingTaskViewInOrder = isReadingTaskViewInOrder, - ReadingTool = readingTool, - IseCRFShowInDicomReading = criterionConfig.IseCRFShowInDicomReading, - IsReadingShowSubjectInfo = criterionConfig.IsReadingShowSubjectInfo, - IsReadingShowPreviousResults = criterionConfig.IsReadingShowPreviousResults, - DigitPlaces = criterionConfig.DigitPlaces, - CriterionType = criterionConfig.CriterionType, - }); - } else { var taskQuery = _visitTaskRepository.Where(x => x.TrialId == inQuery.TrialId && x.DoctorUserId == _userInfo.Id && x.TaskState == TaskState.Effect && x.TrialReadingCriterionId == trialReadingCriterionId) @@ -1114,130 +1032,188 @@ namespace IRaCIS.Core.Application.Service.Allocation } /// - /// 获取有序阅片IQuery对象 + /// 获取subject有序 或者无序阅片IQuery对象 /// - /// + /// /// - public async Task<(int, List)> GetOrderReadingIQueryable(GetOrderReadingIQueryableInDto inDto) + public async Task> GetSubjectReadingIQueryable(GetReadingIQueryableInDto inQuery) { - var trialReadingCriterionId = inDto.TrialReadingCriterionId; - + var trialReadingCriterionId = inQuery.TrialReadingCriterionId; + var subjectCode = inQuery.SubjectCode; + var trialId = inQuery.TrialId; var critrion = await _trialReadingCriterionRepository.FindAsync(trialReadingCriterionId); - - var visitQuery = _visitTaskRepository.Where(x => x.TrialId == inDto.TrialId && x.DoctorUserId == _userInfo.Id && x.TaskState == TaskState.Effect) - - .WhereIf(inDto.SubjectId!=null,x=>x.SubjectId==inDto.SubjectId) - //前序 不存在 未生成任务的访视 - .WhereIf(critrion.IsAutoCreate == false, t => !t.Subject.SubjectCriteriaEvaluationVisitFilterList.Where(t => t.TrialReadingCriterionId == trialReadingCriterionId).Any(f => f.IsGeneratedTask == false && t.VisitTaskNum > f.SubjectVisit.VisitNum)) - - // 前序 不存在 未一致性核查未通过的 - .Where(t => !t.Subject.SubjectVisitList.Any(sv => sv.CheckState != CheckStateEnum.CVPassed && t.VisitTaskNum >= sv.VisitNum)) - //.WhereIf(critrion.IsAutoCreate == false, t => t.Subject.SubjectCriteriaEvaluationVisitFilterList.Where(t => t.TrialReadingCriterionId == trialReadingCriterionId).Any(t => t.IsGeneratedTask == false) ? - //t.VisitTaskNum <= t.Subject.SubjectCriteriaEvaluationVisitFilterList.Where(t => t.TrialReadingCriterionId == trialReadingCriterionId && t.IsGeneratedTask == false).Min(t => t.SubjectVisit.VisitNum) : true) - //.Where(t => t.Subject.SubjectVisitList.Any(t => t.CheckState != CheckStateEnum.CVPassed) ? t.VisitTaskNum <= t.Subject.SubjectVisitList.Where(t => t.CheckState != CheckStateEnum.CVPassed).Min(t => t.VisitNum) : true) - //满足前序访视不存在 需要签署但是未签署 sql 相当复杂 同时想查询所有未读的统计数字 就无法统计 byzhouhang - //但是加字段 IsFrontTaskNeedSignButNotSign 那么签名临床数据的时候,要对该subject 该标准的有效的任务 这个字段需要在签名的时候维护 采取这种方式 统计数字灵活 - //.Where(t => t.Subject.SubjectVisitTaskList.AsQueryable().Where(visitTaskLambda).Any(c => c.IsNeedClinicalDataSign == true && c.IsClinicalDataSign == false && c.VisitTaskNum < t.VisitTaskNum)) - .WhereIf(!string.IsNullOrEmpty(inDto.SubjectCode), t => (t.Subject.Code.Contains(inDto.SubjectCode!) && t.IsAnalysisCreate == false) || (t.BlindSubjectCode.Contains(inDto.SubjectCode!) && t.IsAnalysisCreate)); - - - var visitGroupQuery = visitQuery.GroupBy(x => new { x.SubjectId, x.Subject.Code, x.BlindSubjectCode }); - - var visitTaskQuery = visitGroupQuery.Select(x => new IRUnReadSubjectView() + if (critrion.IsReadingTaskViewInOrder == ReadingOrder.InOrder) { - SubjectId = x.Key.SubjectId, - SubjectCode = x.Key.BlindSubjectCode == string.Empty ? x.Key.Code : x.Key.BlindSubjectCode, + var visitQuery = _visitTaskRepository.Where(x => x.TrialId == inQuery.TrialId && x.DoctorUserId == _userInfo.Id && x.TaskState == TaskState.Effect) - SuggesteFinishedTime = x.Where(y => y.TrialReadingCriterionId == trialReadingCriterionId && y.ReadingTaskState != ReadingTaskState.HaveSigned).Min(x => x.SuggesteFinishedTime), + .WhereIf(inQuery.SubjectId != null, x => x.SubjectId == inQuery.SubjectId) + //前序 不存在 未生成任务的访视 + .WhereIf(critrion.IsAutoCreate == false, t => !t.Subject.SubjectCriteriaEvaluationVisitFilterList.Where(t => t.TrialReadingCriterionId == trialReadingCriterionId).Any(f => f.IsGeneratedTask == false && t.VisitTaskNum > f.SubjectVisit.VisitNum)) - //未读任务量 - 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 !t.Subject.SubjectVisitList.Any(sv => sv.CheckState != CheckStateEnum.CVPassed && t.VisitTaskNum >= sv.VisitNum)) + //.WhereIf(critrion.IsAutoCreate == false, t => t.Subject.SubjectCriteriaEvaluationVisitFilterList.Where(t => t.TrialReadingCriterionId == trialReadingCriterionId).Any(t => t.IsGeneratedTask == false) ? + //t.VisitTaskNum <= t.Subject.SubjectCriteriaEvaluationVisitFilterList.Where(t => t.TrialReadingCriterionId == trialReadingCriterionId && t.IsGeneratedTask == false).Min(t => t.SubjectVisit.VisitNum) : true) + //.Where(t => t.Subject.SubjectVisitList.Any(t => t.CheckState != CheckStateEnum.CVPassed) ? t.VisitTaskNum <= t.Subject.SubjectVisitList.Where(t => t.CheckState != CheckStateEnum.CVPassed).Min(t => t.VisitNum) : true) + //满足前序访视不存在 需要签署但是未签署 sql 相当复杂 同时想查询所有未读的统计数字 就无法统计 byzhouhang + //但是加字段 IsFrontTaskNeedSignButNotSign 那么签名临床数据的时候,要对该subject 该标准的有效的任务 这个字段需要在签名的时候维护 采取这种方式 统计数字灵活 + //.Where(t => t.Subject.SubjectVisitTaskList.AsQueryable().Where(visitTaskLambda).Any(c => c.IsNeedClinicalDataSign == true && c.IsClinicalDataSign == false && c.VisitTaskNum < t.VisitTaskNum)) + .WhereIf(!string.IsNullOrEmpty(inQuery.SubjectCode), t => (t.Subject.Code.Contains(inQuery.SubjectCode!) && t.IsAnalysisCreate == false) || (t.BlindSubjectCode.Contains(inQuery.SubjectCode!) && t.IsAnalysisCreate)); - UnReadCanReadTaskList = x.Where(y => y.TrialReadingCriterionId == trialReadingCriterionId && y.ReadingTaskState != ReadingTaskState.HaveSigned) - .Where(y => y.IsFrontTaskNeedSignButNotSign == false && (y.IsNeedClinicalDataSign == false || y.IsClinicalDataSign == true)) - .OrderBy(x => x.VisitTaskNum) - .Select(u => new IRUnreadTaskView() + var visitGroupQuery = visitQuery.GroupBy(x => new { x.SubjectId, x.Subject.Code, x.BlindSubjectCode }); + + var visitTaskQuery = visitGroupQuery.Select(x => new IRUnReadSubjectView() { - 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(), + 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) - .Where(y => y.IsFrontTaskNeedSignButNotSign == false && (y.IsNeedClinicalDataSign == false || y.IsClinicalDataSign == true)) - .Where(x => x.IsUrgent).Count(), - - //已读任务量 - HaveReadTaskCount = x.Where(y => y.TrialReadingCriterionId == trialReadingCriterionId && y.ReadingTaskState == ReadingTaskState.HaveSigned).Count(), - - ExistReadingApply = x.Any(y => (y.ReReadingApplyState == ReReadingApplyState.DocotorHaveApplyed && y.TrialReadingCriterionId == trialReadingCriterionId) || 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)/*.OrderBy(x => x.UnReadCanReadTaskCount)*/; - // 有序阅片需要找到最小需要 + UnReadCanReadTaskList = x.Where(y => y.TrialReadingCriterionId == trialReadingCriterionId && y.ReadingTaskState != ReadingTaskState.HaveSigned) + .Where(y => y.IsFrontTaskNeedSignButNotSign == false && (y.IsNeedClinicalDataSign == false || y.IsClinicalDataSign == true)) + .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(), - // 不这样写会有问题 - var count = visitQuery.Where(y => y.TrialReadingCriterionId == trialReadingCriterionId && y.ReadingTaskState != ReadingTaskState.HaveSigned && y.IsFrontTaskNeedSignButNotSign == false && (y.IsNeedClinicalDataSign == false || y.IsClinicalDataSign == true)) - .GroupBy(x => new { x.SubjectId, x.Subject.Code, x.BlindSubjectCode }).Count(); + UrgentCount = x.Where(y => y.TrialReadingCriterionId == trialReadingCriterionId && y.ReadingTaskState != ReadingTaskState.HaveSigned) + .Where(y => y.IsFrontTaskNeedSignButNotSign == false && (y.IsNeedClinicalDataSign == false || y.IsClinicalDataSign == true)) + .Where(x => x.IsUrgent).Count(), + + //已读任务量 + HaveReadTaskCount = x.Where(y => y.TrialReadingCriterionId == trialReadingCriterionId && y.ReadingTaskState == ReadingTaskState.HaveSigned).Count(), + + ExistReadingApply = x.Any(y => (y.ReReadingApplyState == ReReadingApplyState.DocotorHaveApplyed && y.TrialReadingCriterionId == trialReadingCriterionId) || 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)/*.OrderBy(x => x.UnReadCanReadTaskCount)*/; + // 有序阅片需要找到最小需要 + + + // 不这样写会有问题 + var count = visitQuery.Where(y => y.TrialReadingCriterionId == trialReadingCriterionId && y.ReadingTaskState != ReadingTaskState.HaveSigned && y.IsFrontTaskNeedSignButNotSign == false && (y.IsNeedClinicalDataSign == false || y.IsClinicalDataSign == true)) + .GroupBy(x => new { x.SubjectId, x.Subject.Code, x.BlindSubjectCode }).Count(); + + var result = new List(); + + var propName = string.IsNullOrWhiteSpace(inQuery!.SortField) ? nameof(IRUnReadSubjectView.UnReadCanReadTaskCount) : inQuery.SortField; + + var visitTaskOrderQuery = inQuery.Asc ? visitTaskQuery.OrderBy(propName) : visitTaskQuery.OrderBy(propName + " desc"); - var result = new List(); - var propName = string.IsNullOrWhiteSpace(inDto.Page!.SortField) ? nameof(IRUnReadSubjectView.UnReadCanReadTaskCount) : inDto.Page.SortField; - var visitTaskOrderQuery = inDto.Page.Asc ? visitTaskQuery.OrderBy(propName) : visitTaskQuery.OrderBy(propName + " desc"); - if (inDto.Page != null) - { result = await visitTaskOrderQuery - .Skip((inDto.Page.PageIndex - 1) * inDto.Page.PageSize) - .Take(inDto.Page.PageSize).ToListAsync(); + .Skip((inQuery.PageIndex - 1) * inQuery.PageSize) + .Take(inQuery.PageSize).ToListAsync(); + + + return new PageOutput() + { + PageSize = inQuery.PageSize, + PageIndex = inQuery.PageIndex, + TotalCount = count, + CurrentPageData = result, + }; } + else { - result = await visitTaskOrderQuery.ToListAsync(); + + var visitQuery = _visitTaskRepository.Where(x => x.TrialId == trialId && x.DoctorUserId == _userInfo.Id && x.TaskState == TaskState.Effect) + .WhereIf(inQuery.SubjectId != null, x => x.SubjectId == inQuery.SubjectId) + .WhereIf(!string.IsNullOrEmpty(subjectCode), t => (t.Subject.Code.Contains(subjectCode!) && t.IsAnalysisCreate == false) || (t.BlindSubjectCode.Contains(subjectCode!) && t.IsAnalysisCreate)); + + var visitGroupQuery = visitQuery.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), + + //未读任务量 + UnReadCanReadTaskCount = x.Where(y => y.TrialReadingCriterionId == trialReadingCriterionId && y.ReadingTaskState != ReadingTaskState.HaveSigned).Count(), + + UrgentCount = x.Where(y => y.TrialReadingCriterionId == trialReadingCriterionId && y.ReadingTaskState != ReadingTaskState.HaveSigned).Where(x => x.IsUrgent).Count(), + + //已读任务量 + HaveReadTaskCount = x.Where(y => y.TrialReadingCriterionId == trialReadingCriterionId && y.ReadingTaskState == ReadingTaskState.HaveSigned).Count(), + + ExistReadingApply = x.Any(y => (y.ReReadingApplyState == ReReadingApplyState.DocotorHaveApplyed && y.TrialReadingCriterionId == trialReadingCriterionId) || y.ReReadingApplyState == ReReadingApplyState.TrialGroupHaveApplyed), + + UnReadCanReadTaskList = 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 pageList = await visitTaskQuery.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, string.IsNullOrWhiteSpace(inQuery.SortField) ? nameof(IRUnReadSubjectView.UnReadCanReadTaskCount) : inQuery.SortField, inQuery.Asc); + + return pageList; } - - return (count, result); } diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs index b66fde0da..018780dee 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs @@ -52,8 +52,8 @@ namespace IRaCIS.Application.Services private readonly IRepository _trialDocumentRepository; private readonly IRepository _userRepository; private readonly IEasyCachingProvider _provider; - private readonly ILuganoCalculateService _luganoCalculateService; - private readonly IRepository _readingCustomTagRepository; + private readonly ILuganoCalculateService _luganoCalculateService; + private readonly IRepository _readingCustomTagRepository; private readonly IRepository _readingTaskQuestionMarkRepository; private readonly IRepository _readingCriterionDictionaryRepository; private readonly IRepository _readingTrialCriterionDictionaryRepository; @@ -66,8 +66,8 @@ namespace IRaCIS.Application.Services private readonly IRepository _readingQuestionCriterionSystemRepository; private readonly IRepository _readingQuestionSystem; private readonly IRepository _noneDicomStudyFileSystem; - private readonly IGeneralCalculateService _generalCalculateService; - private readonly IRepository _readingQuestionTrialRepository; + private readonly IGeneralCalculateService _generalCalculateService; + private readonly IRepository _readingQuestionTrialRepository; private readonly ITrialEmailNoticeConfigService _trialEmailNoticeConfigService; @@ -94,8 +94,8 @@ namespace IRaCIS.Application.Services IRepository trialDocumentRepository, IRepository userRepository, IEasyCachingProvider provider, - ILuganoCalculateService luganoCalculateService, - IRepository readingCustomTagRepository, + ILuganoCalculateService luganoCalculateService, + IRepository readingCustomTagRepository, IRepository readingTaskQuestionMarkRepository, IRepository readingCriterionDictionaryRepository, IRepository readingTrialCriterionDictionaryRepository, @@ -110,8 +110,8 @@ namespace IRaCIS.Application.Services ITrialEmailNoticeConfigService trialEmailNoticeConfigService, IRepository noneDicomStudyFileSystem, - IGeneralCalculateService generalCalculateService, - IRepository readingQuestionTrialRepository + IGeneralCalculateService generalCalculateService, + IRepository readingQuestionTrialRepository ) { this._noneDicomStudyRepository = noneDicomStudyRepository; @@ -135,8 +135,8 @@ namespace IRaCIS.Application.Services this._trialDocumentRepository = trialDocumentRepository; this._userRepository = userRepository; this._provider = provider; - this._luganoCalculateService = luganoCalculateService; - this._readingCustomTagRepository = readingCustomTagRepository; + this._luganoCalculateService = luganoCalculateService; + this._readingCustomTagRepository = readingCustomTagRepository; this._readingTaskQuestionMarkRepository = readingTaskQuestionMarkRepository; this._readingCriterionDictionaryRepository = readingCriterionDictionaryRepository; this._tumorAssessmentRepository = tumorAssessmentRepository; @@ -150,8 +150,8 @@ namespace IRaCIS.Application.Services this._readingQuestionSystem = ReadingQuestionSystem; this._noneDicomStudyFileSystem = noneDicomStudyFileSystem; - this._generalCalculateService = generalCalculateService; - this._readingQuestionTrialRepository = readingQuestionTrialRepository; + this._generalCalculateService = generalCalculateService; + this._readingQuestionTrialRepository = readingQuestionTrialRepository; this._trialEmailNoticeConfigService = trialEmailNoticeConfigService; } @@ -167,7 +167,7 @@ namespace IRaCIS.Application.Services { return await _readingCalculateService.GetReadingCalculationData(inDto); - } + } #endregion /// @@ -176,7 +176,7 @@ namespace IRaCIS.Application.Services /// /// [HttpPost] - public async Task> GetPreviousOtherPicturePath(GetPreviousOtherPicturePathInDto inDto) + public async Task> GetPreviousOtherPicturePath(GetPreviousOtherPicturePathInDto inDto) { List result = new List() { }; @@ -190,34 +190,34 @@ namespace IRaCIS.Application.Services .OrderBy(x => x.VisitTask.VisitTaskNum).Select(x => new GetPreviousOtherPicturePathOutDto() { VisitTaskId = x.VisitTaskId, - PicturePath = x.OtherPicturePath, + PicturePath = x.OtherPicturePath, TaskBlindName = x.VisitTask.TaskBlindName }).ToListAsync(); } - else if(inDto.VisitTaskId!=null&&inDto.QuestionType!=null) + else if (inDto.VisitTaskId != null && inDto.QuestionType != null) { - var taskInfoList = await _generalCalculateService.GetReadingReportTaskList(inDto.VisitTaskId.Value); - var visitTaskIds = taskInfoList.Where(x=>x.VisitTaskId!= inDto.VisitTaskId.Value).Select(x => x.VisitTaskId).ToList(); - result = await _readingTaskQuestionMarkRepository.Where(x => x.ReadingQuestionTrial.QuestionType == inDto.QuestionType && visitTaskIds.Contains(x.VisitTaskId)) + var taskInfoList = await _generalCalculateService.GetReadingReportTaskList(inDto.VisitTaskId.Value); + var visitTaskIds = taskInfoList.Where(x => x.VisitTaskId != inDto.VisitTaskId.Value).Select(x => x.VisitTaskId).ToList(); + result = await _readingTaskQuestionMarkRepository.Where(x => x.ReadingQuestionTrial.QuestionType == inDto.QuestionType && visitTaskIds.Contains(x.VisitTaskId)) - .OrderBy(x => x.VisitTask.VisitTaskNum).Select(x => new GetPreviousOtherPicturePathOutDto() - { - VisitTaskId = x.VisitTaskId, - PicturePath = x.OtherPicturePath, - TaskBlindName = x.VisitTask.TaskBlindName - }).ToListAsync(); - } + .OrderBy(x => x.VisitTask.VisitTaskNum).Select(x => new GetPreviousOtherPicturePathOutDto() + { + VisitTaskId = x.VisitTaskId, + PicturePath = x.OtherPicturePath, + TaskBlindName = x.VisitTask.TaskBlindName + }).ToListAsync(); + } - return result.Where(x => x.PicturePath != string.Empty && x.PicturePath != null).ToList(); - } + return result.Where(x => x.PicturePath != string.Empty && x.PicturePath != null).ToList(); + } - /// - /// 提交自定义标记 - /// - /// - /// - [HttpPost] + /// + /// 提交自定义标记 + /// + /// + /// + [HttpPost] public async Task SubmitCustomTag(ReadingCustomTagDto inDto) { var entity = await _readingCustomTagRepository.InsertOrUpdateAsync(inDto, true); @@ -245,7 +245,7 @@ namespace IRaCIS.Application.Services [HttpPost] public async Task> GetCustomTag(GetCustomTagInDto inQuery) { - var result= await _readingCustomTagRepository.Where(x => x.VisitTaskId == inQuery.VisitTaskId).ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); + var result = await _readingCustomTagRepository.Where(x => x.VisitTaskId == inQuery.VisitTaskId).ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); return result; } @@ -270,9 +270,9 @@ namespace IRaCIS.Application.Services return await _trialDocumentRepository.Where(x => x.TrialId == inDto.TrialId && x.TrialDocConfirmedUserList.Any(y => y.ConfirmUserId == _userInfo.Id && y.ConfirmTime != null) && x.NeedConfirmedUserTypeList.Any(y => y.NeedConfirmUserTypeId == _userInfo.UserTypeId)) - .WhereIf(userType== UserTypeEnum.IndependentReviewer, t => t.FileType.Code == "2" || t.FileType.Code == "6") + .WhereIf(userType == UserTypeEnum.IndependentReviewer, t => t.FileType.Code == "2" || t.FileType.Code == "6") .WhereIf(userType == UserTypeEnum.IQC, t => t.FileType.Code == "4" || t.FileType.Code == "5") - .WhereIf(!canViewUserType.Contains(userType),t=>false) + .WhereIf(!canViewUserType.Contains(userType), t => false) .IgnoreQueryFilters() .Select(x => new GetManualListOutDto() { @@ -590,20 +590,20 @@ namespace IRaCIS.Application.Services taskQuery = _visitTaskRepository.Where(x => taskInfo.RelatedVisitTaskIdList.Contains(x.Id) || x.Id == taskInfo.Id); } - var result = await taskQuery.Include(x=>x.Subject).OrderBy(x => x.VisitTaskNum).ThenBy(x => x.TaskState) + var result = await taskQuery.Include(x => x.Subject).OrderBy(x => x.VisitTaskNum).ThenBy(x => x.TaskState) .Select(x => new GetRelatedVisitTaskOutDto() { TaskBlindName = x.TaskBlindName, TaskName = x.TaskName, ReadingTaskState = x.ReadingTaskState, VisitId = x.SourceSubjectVisitId, - SubjectCode=x.Subject.Code, + SubjectCode = x.Subject.Code, VisitTaskId = x.Id, VisitTaskNum = x.VisitTaskNum, IsBaseLineTask = x.SourceSubjectVisitId == baselineVisitId, IsCurrentTask = x.Id == inDto.VisitTaskId, - IsConvertedTask=x.IsConvertedTask, - IsFirstChangeTask=x.BeforeConvertedTaskId!=null, + IsConvertedTask = x.IsConvertedTask, + IsFirstChangeTask = x.BeforeConvertedTaskId != null, }).ToListAsync(); @@ -617,7 +617,7 @@ namespace IRaCIS.Application.Services var visitaskIds = result.Select(x => x.VisitTaskId).ToList(); var otherStudys = await _readingTableAnswerRowInfoRepository.Where(x => visitaskIds.Contains(x.VisitTaskId)) - .Where(x=>x.CTSeriesId!=null&&x.PTSeriesId!=null) + .Where(x => x.CTSeriesId != null && x.PTSeriesId != null) .Select(x => new { x.OtherStudyId, @@ -628,7 +628,7 @@ namespace IRaCIS.Application.Services }).ToListAsync(); - foreach (var item in result) + foreach (var item in result) { var clinicalDataList = await _readingClinicalDataService.GetClinicalDataList(new GetReadingOrTaskClinicalDataListInDto() { @@ -647,9 +647,9 @@ namespace IRaCIS.Application.Services item.OtherStudyId = otherStudy.OtherStudyId; } - } + } + - return (result, new @@ -693,10 +693,10 @@ namespace IRaCIS.Application.Services VisitTaskId = x.Id, TaskBlindName = x.TaskBlindName, TaskName = x.TaskName, - ReadModuleVisitId= x.ReadModule!=null?x.ReadModule.SubjectVisitId:null, - VisitName = x.SourceSubjectVisit!=null? x.SourceSubjectVisit.VisitName: x.ReadModule==null?string.Empty: x.ReadModule.SubjectVisit.VisitName, - VisitBlindName = x.TaskBlindName, - VisitTaskNum = x.VisitTaskNum, + ReadModuleVisitId = x.ReadModule != null ? x.ReadModule.SubjectVisitId : null, + VisitName = x.SourceSubjectVisit != null ? x.SourceSubjectVisit.VisitName : x.ReadModule == null ? string.Empty : x.ReadModule.SubjectVisit.VisitName, + VisitBlindName = x.TaskBlindName, + VisitTaskNum = x.VisitTaskNum, JudgeResultArm = x.JudgeResultTask == null ? null : x.JudgeResultTask.ArmEnum, }).ToListAsync(); @@ -707,9 +707,9 @@ namespace IRaCIS.Application.Services if (item.ReadModuleVisitId != null) { item.VisitBlindName = (await _visitTaskRepository.Where(x => x.SourceSubjectVisitId == item.ReadModuleVisitId && x.IsSelfAnalysis == taskInfo.IsSelfAnalysis && - x.IsAnalysisCreate == taskInfo.IsAnalysisCreate ).Select(x => x.TaskBlindName).FirstOrDefaultAsync())??string.Empty; + x.IsAnalysisCreate == taskInfo.IsAnalysisCreate).Select(x => x.TaskBlindName).FirstOrDefaultAsync()) ?? string.Empty; - } + } } @@ -741,7 +741,7 @@ namespace IRaCIS.Application.Services { VisitTaskId = visitTask.Id, SubjectId = visitTask.SubjectId, - SubjectCode = visitTask.BlindSubjectCode.IsNullOrEmpty() ? subjectCode??string.Empty : visitTask.BlindSubjectCode, + SubjectCode = visitTask.BlindSubjectCode.IsNullOrEmpty() ? subjectCode ?? string.Empty : visitTask.BlindSubjectCode, ReadingCategory = visitTask.ReadingCategory, TaskBlindName = visitTask.TaskBlindName, IsReadingShowPreviousResults = criterionInfo.IsReadingShowPreviousResults, @@ -795,9 +795,9 @@ namespace IRaCIS.Application.Services } if (await _visitTaskRepository.AnyAsync(x => x.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId - &&x.IsAnalysisCreate&&taskInfo.IsAnalysisCreate - &&x.SubjectId== taskInfo.SubjectId&&x.TaskState==TaskState.Effect&& - ((x.ReReadingApplyState==ReReadingApplyState.DocotorHaveApplyed && x.DoctorUserId == taskInfo.DoctorUserId)|| x.ReReadingApplyState == ReReadingApplyState.TrialGroupHaveApplyed) + && x.IsAnalysisCreate && taskInfo.IsAnalysisCreate + && x.SubjectId == taskInfo.SubjectId && x.TaskState == TaskState.Effect && + ((x.ReReadingApplyState == ReReadingApplyState.DocotorHaveApplyed && x.DoctorUserId == taskInfo.DoctorUserId) || x.ReReadingApplyState == ReReadingApplyState.TrialGroupHaveApplyed) )) { @@ -825,14 +825,14 @@ namespace IRaCIS.Application.Services { //await AddDefaultValueToTask(inDto.VisitTaskId); var taskInfo = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).FirstNotNullAsync(); - var result = await GetReadingQuestion(taskInfo.TrialReadingCriterionId, taskInfo.Id, inDto.QuestionClassify,inDto.GroupClassifyList); + var result = await GetReadingQuestion(taskInfo.TrialReadingCriterionId, taskInfo.Id, inDto.QuestionClassify, inDto.GroupClassifyList); return (result, new { - QuestionMarkInfoList = await _readingTaskQuestionMarkRepository.Where(x => x.VisitTaskId == inDto.VisitTaskId).ProjectTo(_mapper.ConfigurationProvider).ToListAsync(), - ReadingTaskState = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).Select(x => x.ReadingTaskState).FirstOrDefaultAsync() + QuestionMarkInfoList = await _readingTaskQuestionMarkRepository.Where(x => x.VisitTaskId == inDto.VisitTaskId).ProjectTo(_mapper.ConfigurationProvider).ToListAsync(), + ReadingTaskState = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).Select(x => x.ReadingTaskState).FirstOrDefaultAsync() }); } @@ -854,7 +854,7 @@ namespace IRaCIS.Application.Services //排除表格问题 var questions = await _readingQuestionTrialRepository - .WhereIf(questionClassify!=null,x=>x.QuestionClassify== questionClassify) + .WhereIf(questionClassify != null, x => x.QuestionClassify == questionClassify) .WhereIf(criterionIdInfo.IseCRFShowInDicomReading, x => x.ReadingQuestionCriterionTrialId == trialReadingCriterionId && x.Type != ReadingQestionType.Table) .WhereIf(!criterionIdInfo.IseCRFShowInDicomReading, x => x.IsShowInDicom && x.ReadingQuestionCriterionTrialId == trialReadingCriterionId && x.Type != ReadingQestionType.Table) @@ -880,8 +880,8 @@ namespace IRaCIS.Application.Services } else { - questions = questions.Where(x => x.LimitShow == LimitShow.AllShow || x.LimitShow == LimitShow.FollowShow).ToList(); - } + questions = questions.Where(x => x.LimitShow == LimitShow.AllShow || x.LimitShow == LimitShow.FollowShow).ToList(); + } questions.ForEach(x => { @@ -892,7 +892,7 @@ namespace IRaCIS.Application.Services { questions.ForEach(x => { - x.IsFirstChangeTask =true; + x.IsFirstChangeTask = true; }); } } @@ -910,7 +910,7 @@ namespace IRaCIS.Application.Services var groupids = questions.Where(x => x.Type != ReadingQestionType.Group).Select(x => x.GroupId).ToList(); var result = questions.Where(x => x.Type == ReadingQestionType.Group && groupids.Contains(x.Id)) - .WhereIf(groupClassifyList!=null,x=>x.GroupClassify!=null&& groupClassifyList!=null&& groupClassifyList.Contains(x.GroupClassify.Value)) + .WhereIf(groupClassifyList != null, x => x.GroupClassify != null && groupClassifyList != null && groupClassifyList.Contains(x.GroupClassify.Value)) .ToList(); foreach (var item in result) @@ -972,7 +972,7 @@ namespace IRaCIS.Application.Services var taskInfo = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).ProjectTo(_mapper.ConfigurationProvider).FirstNotNullAsync(); - if (taskInfo.IsConvertedTask &&taskInfo.BeforeConvertedTaskId!=null) + if (taskInfo.IsConvertedTask && taskInfo.BeforeConvertedTaskId != null) { result.ForEach(x => { @@ -990,7 +990,8 @@ namespace IRaCIS.Application.Services var questionMark = await _readingTaskQuestionMarkRepository.Where(x => x.VisitTaskId == inDto.VisitTaskId).ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); - questionMark.ForEach(x => { + questionMark.ForEach(x => + { x.IsFirstChangeTask = x.VisitTaskId == inDto.VisitTaskId; }); @@ -1040,7 +1041,7 @@ namespace IRaCIS.Application.Services TableAnswers = tableAnswers, TableAnsweRowInfos = tableAnsweRowInfos, OrganInfos = organList, - QuestionClassify=inDto.QuestionClassify, + QuestionClassify = inDto.QuestionClassify, } @@ -1051,18 +1052,18 @@ namespace IRaCIS.Application.Services result.PublicPage = questionPage.PublicPage; result.BlindName = visitTaskInfo.TaskBlindName; result.TaskNum = visitTaskInfo.VisitTaskNum; - result.QuestionMarkInfoList=await _readingTaskQuestionMarkRepository.Where(x => x.VisitTaskId == inDto.VisitTaskId).ProjectTo(_mapper.ConfigurationProvider) + result.QuestionMarkInfoList = await _readingTaskQuestionMarkRepository.Where(x => x.VisitTaskId == inDto.VisitTaskId).ProjectTo(_mapper.ConfigurationProvider) .ToListAsync(); var spleenLength = await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == inDto.VisitTaskId && x.ReadingQuestionTrial.QuestionType == QuestionType.SpleenLength).Select(x => x.Answer).FirstOrDefaultAsync(); - return (result, new + return (result, new { readingTaskState = visitTaskInfo.ReadingTaskState, FormType = criterionInfo.FormType, TaskNum = visitTaskInfo.VisitTaskNum, - SpleenLength= spleenLength, + SpleenLength = spleenLength, - }); ; + }); ; } /// @@ -1096,7 +1097,7 @@ namespace IRaCIS.Application.Services TableAnsweRowInfos = tableAnsweRowInfos, IsGetallQuestion = true, OrganInfos = organList, - QuestionClassify=inDto.QuestionClassify, + QuestionClassify = inDto.QuestionClassify, } ), new @@ -1118,29 +1119,29 @@ namespace IRaCIS.Application.Services var criterionInfo = await _readingQuestionCriterionTrialRepository.Where(x => x.Id == inDto.TrialReadingCriterionId).FirstNotNullAsync(); var qusetionList = await _readingQuestionTrialRepository - .WhereIf(inDto.QuestionClassify!=null,x=>x.QuestionClassify==inDto.QuestionClassify) + .WhereIf(inDto.QuestionClassify != null, x => x.QuestionClassify == inDto.QuestionClassify) .Where(x => x.ReadingQuestionCriterionTrialId == inDto.TrialReadingCriterionId).ProjectTo(_mapper.ConfigurationProvider, new - { + { - isEn_Us = _userInfo.IsEn_Us + isEn_Us = _userInfo.IsEn_Us - }).OrderBy(x => x.ShowOrder).ToListAsync(); + }).OrderBy(x => x.ShowOrder).ToListAsync(); var taskInfo = new VisitTaskDto(); if (inDto.TaskId != null) { taskInfo = await _visitTaskRepository.Where(x => x.Id == inDto.TaskId).ProjectTo(_mapper.ConfigurationProvider).FirstNotNullAsync(); - if (taskInfo.VisitTaskNum == 0) - { - qusetionList = qusetionList.Where(x => x.LimitShow == LimitShow.AllShow || x.LimitShow == LimitShow.BaseLineShow).ToList(); + if (taskInfo.VisitTaskNum == 0) + { + qusetionList = qusetionList.Where(x => x.LimitShow == LimitShow.AllShow || x.LimitShow == LimitShow.BaseLineShow).ToList(); - } - else - { - qusetionList = qusetionList.Where(x => x.LimitShow == LimitShow.AllShow || x.LimitShow == LimitShow.FollowShow).ToList(); - } + } + else + { + qusetionList = qusetionList.Where(x => x.LimitShow == LimitShow.AllShow || x.LimitShow == LimitShow.FollowShow).ToList(); + } - qusetionList.ForEach(x => + qusetionList.ForEach(x => { x.CrterionDictionaryGroup = ReadingCommon.GetCrterionDictionaryGroup(taskInfo.IsConvertedTask); }); @@ -1173,7 +1174,7 @@ namespace IRaCIS.Application.Services } - if (inDto.TaskId != null ) + if (inDto.TaskId != null) { if (taskInfo.IsConvertedTask) { @@ -1181,9 +1182,9 @@ namespace IRaCIS.Application.Services } else { - qusetionList = qusetionList.Where(x => x.ConvertShowType == ConvertShowType.All || x.ConvertShowType == ConvertShowType.BeforeShow).OrderBy(x => x.ShowOrder).ToList(); - } - + qusetionList = qusetionList.Where(x => x.ConvertShowType == ConvertShowType.All || x.ConvertShowType == ConvertShowType.BeforeShow).OrderBy(x => x.ShowOrder).ToList(); + } + } var usedGuropIds = qusetionList.Where(x => x.Type == ReadingQestionType.Table).Select(x => x.GroupId).ToList(); @@ -1246,18 +1247,18 @@ namespace IRaCIS.Application.Services && x.VisitTaskNum < taskInfo.VisitTaskNum && x.ArmEnum == taskInfo.ArmEnum && x.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId - && x.ReadingCategory == ReadingCategory.Visit)||x.Id==taskInfo.BeforeConvertedTaskId - ).OrderByDescending(x=>x.VisitTaskNum).Select(x => x.Id).FirstOrDefaultAsync(); + && x.ReadingCategory == ReadingCategory.Visit) || x.Id == taskInfo.BeforeConvertedTaskId + ).OrderByDescending(x => x.VisitTaskNum).Select(x => x.Id).FirstOrDefaultAsync(); if (criterionInfo.IsReadingTaskViewInOrder != ReadingOrder.InOrder) { // 无序的话 不要查 laskTaskId = Guid.NewGuid(); } - lastTaskTableAnswer= await _readingTableQuestionAnswerRepository.Where(x => x.VisitTaskId == laskTaskId).Include(x => x.ReadingTableQuestionTrial).ToListAsync(); + lastTaskTableAnswer = await _readingTableQuestionAnswerRepository.Where(x => x.VisitTaskId == laskTaskId).Include(x => x.ReadingTableQuestionTrial).ToListAsync(); - if (taskInfo.BeforeConvertedTaskId!=null ) + if (taskInfo.BeforeConvertedTaskId != null) { isFirstChangeTask = true; @@ -1326,7 +1327,7 @@ namespace IRaCIS.Application.Services /// /// /// - private async void FindChildQuestion(TrialReadQuestionData item, List questionlists, List tableQuestionLists, List tableAnswers, List tableAnsweRowInfos, List organInfos, List baseLineTableAnswer,bool isFirstChangeTask, List lastTaskTableAnswer,Guid? TaskId) + private async void FindChildQuestion(TrialReadQuestionData item, List questionlists, List tableQuestionLists, List tableAnswers, List tableAnsweRowInfos, List organInfos, List baseLineTableAnswer, bool isFirstChangeTask, List lastTaskTableAnswer, Guid? TaskId) { item.Childrens = questionlists.Where(x => x.ParentId == item.Id || (x.GroupId == item.Id && x.ParentId == null)).ToList(); item.TableQuestions = new TrialReadTableQuestion(); @@ -1452,13 +1453,13 @@ namespace IRaCIS.Application.Services }); - answers.Add("LesionType", rowInfo.LesionType.GetEnumNullInt()); + answers.Add("LesionType", rowInfo.LesionType.GetEnumNullInt()); answers.Add("BlindName", rowInfo.BlindName); answers.Add("IsFirstChangeTask", isFirstChangeTask.ToString()); answers.Add("FromMark", rowInfo.FromMark); answers.Add("IsDicomReading", rowInfo.IsDicomReading.ToString()); answers.Add("MeasureData", rowInfo == null ? string.Empty : rowInfo.MeasureData); - answers.Add("OtherMeasureData", rowInfo == null|| rowInfo.OtherMeasureData==null ? string.Empty : rowInfo.OtherMeasureData.ToString()); + answers.Add("OtherMeasureData", rowInfo == null || rowInfo.OtherMeasureData == null ? string.Empty : rowInfo.OtherMeasureData.ToString()); answers.Add("OtherStudyId", rowInfo == null || rowInfo.OtherStudyId == null ? string.Empty : rowInfo.OtherStudyId.ToString()); answers.Add("OtherSeriesId", rowInfo == null || rowInfo.OtherSeriesId == null ? string.Empty : rowInfo.OtherSeriesId.ToString()); answers.Add("OtherInstanceId", rowInfo == null || rowInfo.OtherInstanceId == null ? string.Empty : rowInfo.OtherInstanceId.ToString()); @@ -1466,23 +1467,23 @@ namespace IRaCIS.Application.Services answers.Add("OtherNumberOfFrames", rowInfo == null || rowInfo.OtherNumberOfFrames == null ? string.Empty : rowInfo.OtherNumberOfFrames.ToString()); answers.Add("OtherMarkTool", rowInfo == null || rowInfo.OtherMarkTool == null ? string.Empty : rowInfo.OtherMarkTool.ToString()); answers.Add("RowIndex", x.ToString()); - answers.Add("RowId", rowInfo==null?string.Empty: rowInfo.Id.ToString()); - answers.Add("MarkTool", rowInfo.MarkTool); - answers.Add("StudyId", rowInfo.StudyId.ToString()); + answers.Add("RowId", rowInfo == null ? string.Empty : rowInfo.Id.ToString()); + answers.Add("MarkTool", rowInfo.MarkTool); + answers.Add("StudyId", rowInfo.StudyId.ToString()); answers.Add("OrganInfoId", rowInfo.OrganInfoId.ToString()); - answers.Add("IsFristAdd", (rowInfo.FristAddTaskId== TaskId).ToString()); - answers.Add("IsCanEditPosition", rowInfo.IsCanEditPosition.ToString()); + answers.Add("IsFristAdd", (rowInfo.FristAddTaskId == TaskId).ToString()); + answers.Add("IsCanEditPosition", rowInfo.IsCanEditPosition.ToString()); answers.Add("InstanceId", rowInfo == null ? string.Empty : rowInfo.InstanceId.ToString()); - answers.Add("PTSeriesId", rowInfo == null ? string.Empty : rowInfo.PTSeriesId.ToString()); - answers.Add("CTSeriesId", rowInfo == null ? string.Empty : rowInfo.CTSeriesId.ToString()); - answers.Add("SeriesId", rowInfo == null ? string.Empty : rowInfo.SeriesId.ToString()); + answers.Add("PTSeriesId", rowInfo == null ? string.Empty : rowInfo.PTSeriesId.ToString()); + answers.Add("CTSeriesId", rowInfo == null ? string.Empty : rowInfo.CTSeriesId.ToString()); + answers.Add("SeriesId", rowInfo == null ? string.Empty : rowInfo.SeriesId.ToString()); answers.Add("IsCurrentTaskAdd", rowInfo == null ? false.ToString() : rowInfo.IsCurrentTaskAdd.ToString()); answers.Add("SplitOrMergeLesionName", rowInfo == null ? string.Empty : rowInfo.SplitName.IsNullOrEmpty() ? rowInfo.MergeName : rowInfo.SplitName); answers.Add("SplitOrMergeType", rowInfo == null ? string.Empty : rowInfo.SplitOrMergeType == null ? string.Empty : ((int)rowInfo.SplitOrMergeType).ToString()); - answers.Add("LastTaskState", lastTaskTableAnswer.Where(n=>n.QuestionId== item.Id&&n.ReadingTableQuestionTrial.QuestionMark==QuestionMark.State&&n.RowIndex==x).Select(n=>n.Answer).FirstOrDefault()??string.Empty); - answers.Add("LastTaskMajorAxis", lastTaskTableAnswer.Where(n => n.QuestionId == item.Id && n.ReadingTableQuestionTrial.QuestionMark == QuestionMark.MajorAxis && n.RowIndex == x).Select(n => n.Answer).FirstOrDefault() ?? string.Empty); - answers.Add("LastTaskShortAxis", lastTaskTableAnswer.Where(n => n.QuestionId == item.Id && n.ReadingTableQuestionTrial.QuestionMark == QuestionMark.ShortAxis && n.RowIndex == x).Select(n => n.Answer).FirstOrDefault() ?? string.Empty); - if (rowInfo.LesionType == LesionType.BaselineLesions) + answers.Add("LastTaskState", lastTaskTableAnswer.Where(n => n.QuestionId == item.Id && n.ReadingTableQuestionTrial.QuestionMark == QuestionMark.State && n.RowIndex == x).Select(n => n.Answer).FirstOrDefault() ?? string.Empty); + answers.Add("LastTaskMajorAxis", lastTaskTableAnswer.Where(n => n.QuestionId == item.Id && n.ReadingTableQuestionTrial.QuestionMark == QuestionMark.MajorAxis && n.RowIndex == x).Select(n => n.Answer).FirstOrDefault() ?? string.Empty); + answers.Add("LastTaskShortAxis", lastTaskTableAnswer.Where(n => n.QuestionId == item.Id && n.ReadingTableQuestionTrial.QuestionMark == QuestionMark.ShortAxis && n.RowIndex == x).Select(n => n.Answer).FirstOrDefault() ?? string.Empty); + if (rowInfo.LesionType == LesionType.BaselineLesions) { answers.Add("BaseLineLesionNumber", baseLineTableAnswer.Where(n => n.ReadingTableQuestionTrial.QuestionMark == QuestionMark.LesionNumber && n.RowIndex == rowInfo.RowIndex).Select(x => x.Answer).FirstIsNullReturnEmpty()); } @@ -1535,15 +1536,15 @@ namespace IRaCIS.Application.Services rowAnswer.SeriesId = null; rowAnswer.IsCurrentTaskAdd = true; rowAnswer.MeasureData = string.Empty; - rowAnswer.OtherMeasureData =null; + rowAnswer.OtherMeasureData = null; List needSaveMark = new List() { QuestionMark.Organ, QuestionMark.Location, QuestionMark.Part, - QuestionMark.IsLymph, - }; + QuestionMark.IsLymph, + }; tableAnswers.ForEach(x => { @@ -1551,17 +1552,17 @@ namespace IRaCIS.Application.Services x.RowIndex = newRowIndex; x.VisitTaskId = inDto.VisitTaskId; x.RowId = rowAnswer.Id; - x.Answer = needSaveMark.Contains(x.QuestionMark) ? x.Answer : string.Empty; + x.Answer = needSaveMark.Contains(x.QuestionMark) ? x.Answer : string.Empty; }); switch (taskInfo.TrialReadingCriterion.CriterionType) { case CriterionType.Lugano2014: - List needSetNa = new List() - { - QuestionMark.LowPPDAddPercent, - QuestionMark.NadirPPD, + List needSetNa = new List() + { + QuestionMark.LowPPDAddPercent, + QuestionMark.NadirPPD, /// /// PPD最低点所在访视 /// @@ -1591,14 +1592,14 @@ namespace IRaCIS.Application.Services /// 相比PPD最低点SDi增加值 /// QuestionMark.LowPPDSDiAdded, - - }; - tableAnswers.ForEach(x => - { - x.Answer = needSetNa.Contains(x.QuestionMark) ?"NA" :x.Answer; - }); - break; + + }; + tableAnswers.ForEach(x => + { + x.Answer = needSetNa.Contains(x.QuestionMark) ? "NA" : x.Answer; + }); + break; } await _readingTableAnswerRowInfoRepository.AddAsync(rowAnswer); await _readingTableQuestionAnswerRepository.AddRangeAsync(_mapper.Map>(tableAnswers)); @@ -1607,7 +1608,7 @@ namespace IRaCIS.Application.Services SplitOrMergeType = SplitOrMergeType.SplitMain }); - await _readingTableAnswerRowInfoRepository.SaveChangesAsync(); + await _readingTableAnswerRowInfoRepository.SaveChangesAsync(); } @@ -1618,56 +1619,56 @@ namespace IRaCIS.Application.Services [HttpPost] public async Task MergeLesion(MergeLesionInDto inDto) { - await VerifyTaskIsSign(inDto.VisitTaskId); - await this.VerifyIsBaseLineTask(inDto.VisitTaskId); + await VerifyTaskIsSign(inDto.VisitTaskId); + await this.VerifyIsBaseLineTask(inDto.VisitTaskId); var taskinfo = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).Include(x => x.TrialReadingCriterion).FirstNotNullAsync(); - var mergeRow = await _readingTableAnswerRowInfoRepository.Where(x => x.Id == inDto.MergeMainRowId).Include(x => x.ReadingQuestionTrial).FirstNotNullAsync(); + var mergeRow = await _readingTableAnswerRowInfoRepository.Where(x => x.Id == inDto.MergeMainRowId).Include(x => x.ReadingQuestionTrial).FirstNotNullAsync(); var mark = mergeRow.ReadingQuestionTrial.OrderMark + mergeRow.RowIndex.GetLesionMark(); - await _readingTableQuestionAnswerRepository.BatchUpdateNoTrackingAsync(x => inDto.MergeRowIdList.Contains(x.RowId) && x.ReadingTableQuestionTrial.QuestionMark == QuestionMark.State, x => new ReadingTableQuestionAnswer() - { - Answer = TargetState.Loss.GetEnumInt(), - }); - - await _readingTableQuestionAnswerRepository.BatchUpdateNoTrackingAsync(x => inDto.MergeRowIdList.Contains(x.RowId) &&( x.ReadingTableQuestionTrial.QuestionMark == QuestionMark.MajorAxis || x.ReadingTableQuestionTrial.QuestionMark == QuestionMark.ShortAxis), x => new ReadingTableQuestionAnswer() - { - Answer = "0", - }); - - - await _readingTableAnswerRowInfoRepository.UpdatePartialFromQueryAsync(x=> inDto.MergeRowIdList.Contains(x.Id), x => new ReadingTableAnswerRowInfo() + await _readingTableQuestionAnswerRepository.BatchUpdateNoTrackingAsync(x => inDto.MergeRowIdList.Contains(x.RowId) && x.ReadingTableQuestionTrial.QuestionMark == QuestionMark.State, x => new ReadingTableQuestionAnswer() { - MergeRowId=inDto.MergeMainRowId, + Answer = TargetState.Loss.GetEnumInt(), + }); + + await _readingTableQuestionAnswerRepository.BatchUpdateNoTrackingAsync(x => inDto.MergeRowIdList.Contains(x.RowId) && (x.ReadingTableQuestionTrial.QuestionMark == QuestionMark.MajorAxis || x.ReadingTableQuestionTrial.QuestionMark == QuestionMark.ShortAxis), x => new ReadingTableQuestionAnswer() + { + Answer = "0", + }); + + + await _readingTableAnswerRowInfoRepository.UpdatePartialFromQueryAsync(x => inDto.MergeRowIdList.Contains(x.Id), x => new ReadingTableAnswerRowInfo() + { + MergeRowId = inDto.MergeMainRowId, SplitOrMergeType = SplitOrMergeType.Merge, - }) ; + }); - await _readingTableAnswerRowInfoRepository.UpdatePartialFromQueryAsync(inDto.MergeMainRowId, x => new ReadingTableAnswerRowInfo() - { - SplitOrMergeType = SplitOrMergeType.MergeMain, - }); - await _readingTableAnswerRowInfoRepository.SaveChangesAsync(); + await _readingTableAnswerRowInfoRepository.UpdatePartialFromQueryAsync(inDto.MergeMainRowId, x => new ReadingTableAnswerRowInfo() + { + SplitOrMergeType = SplitOrMergeType.MergeMain, + }); + await _readingTableAnswerRowInfoRepository.SaveChangesAsync(); - await this._readingCalculateService.CalculateTask(new CalculateTaskInDto() - { - IsChangeOtherTask = false, - VisitTaskId = inDto.VisitTaskId, - ComputationTrigger = ComputationTrigger.MergeLesion, - }); + await this._readingCalculateService.CalculateTask(new CalculateTaskInDto() + { + IsChangeOtherTask = false, + VisitTaskId = inDto.VisitTaskId, + ComputationTrigger = ComputationTrigger.MergeLesion, + }); - // 保存完了计算疾病进展 - switch (taskinfo.TrialReadingCriterion.CriterionType) - { - case CriterionType.Lugano2014: - await _luganoCalculateService.CalculateMergeTargetLesionStatus(new CalculateTargetLesionStatusInDto() - { - QuestionId = inDto.QuestionId, - VisitTaskId = inDto.VisitTaskId, - RowNumber = mergeRow.RowIndex, - }); - break; - } - } + // 保存完了计算疾病进展 + switch (taskinfo.TrialReadingCriterion.CriterionType) + { + case CriterionType.Lugano2014: + await _luganoCalculateService.CalculateMergeTargetLesionStatus(new CalculateTargetLesionStatusInDto() + { + QuestionId = inDto.QuestionId, + VisitTaskId = inDto.VisitTaskId, + RowNumber = mergeRow.RowIndex, + }); + break; + } + } /// /// 获取可合并的病灶 @@ -1677,7 +1678,7 @@ namespace IRaCIS.Application.Services [HttpPost] public async Task> GetCanMergeLesion(GetCanMergeLesionInDto inDto) { - var rowinfo = await _readingTableAnswerRowInfoRepository.Where(x => x.Id == inDto.RowId).Include(x=>x.ReadingQuestionTrial).FirstNotNullAsync(); + var rowinfo = await _readingTableAnswerRowInfoRepository.Where(x => x.Id == inDto.RowId).Include(x => x.ReadingQuestionTrial).FirstNotNullAsync(); var taskInfo = await _visitTaskRepository.Where(x => x.Id == rowinfo.VisitTaskId).Include(x => x.TrialReadingCriterion).FirstNotNullAsync(); // 需要排除的状态 @@ -1685,39 +1686,39 @@ namespace IRaCIS.Application.Services var query = _readingTableAnswerRowInfoRepository.Where(x => x.VisitTaskId == rowinfo.VisitTaskId && x.QuestionId == rowinfo.QuestionId && x.Id != rowinfo.Id) .Where(x => x.SplitOrMergeType != SplitOrMergeType.Split && x.SplitOrMergeType != SplitOrMergeType.SplitMain - &&x.SplitOrMergeType!=SplitOrMergeType.Merge && x.SplitOrMergeType != SplitOrMergeType.MergeMain + && x.SplitOrMergeType != SplitOrMergeType.Merge && x.SplitOrMergeType != SplitOrMergeType.MergeMain && x.SplitOrMergeType != SplitOrMergeType.Merged); - switch (taskInfo.TrialReadingCriterion.CriterionType) + switch (taskInfo.TrialReadingCriterion.CriterionType) { - - case CriterionType.Lugano2014: - // (无法评估 或者 状态为消失的非靶病灶) 并且不能是无法评估的病灶 - query = query.Where(x => + + case CriterionType.Lugano2014: + // (无法评估 或者 状态为消失的非靶病灶) 并且不能是无法评估的病灶 + query = query.Where(x => (x.MeasureData == string.Empty || (x.LesionAnswerList.Any(y => y.ReadingTableQuestionTrial.QuestionMark == QuestionMark.State && y.Answer == TargetState.Loss.GetEnumInt()) && x.LesionAnswerList.Any(y => y.ReadingTableQuestionTrial.QuestionMark == QuestionMark.IsLymph && y.Answer == ReadingYesOrNo.No.GetEnumInt()) )) && !x.LesionAnswerList.Any(y => y.ReadingTableQuestionTrial.QuestionMark == QuestionMark.State && y.Answer == TargetState.UnableEvaluate.GetEnumInt()) - + ); - break; + break; - } + } var result = await query - .Select(x => new GetCanMergeLesionOutDto() + .Select(x => new GetCanMergeLesionOutDto() { RowId = x.Id, RowIndex = x.RowIndex, OrderMarkName = x.ReadingQuestionTrial.OrderMark + x.RowIndex.GetLesionMark(), OrganInfoId = x.OrganInfoId - }).OrderBy(x=>x.RowIndex).ToListAsync(); + }).OrderBy(x => x.RowIndex).ToListAsync(); var organIds = result.Where(x => x.OrganInfoId != null).Select(x => x.OrganInfoId).Distinct().ToList(); - var organList = await _organInfoRepository.Where(x => organIds.Contains(x.Id)).ToListAsync(); + var organList = await _organInfoRepository.Where(x => organIds.Contains(x.Id)).ToListAsync(); result.ForEach(x => { @@ -1735,80 +1736,80 @@ namespace IRaCIS.Application.Services return result; - } + } - #endregion + #endregion - #region 访视任务 - Dicom 阅片 提交、修改 + #region 访视任务 - Dicom 阅片 提交、修改 - /// - /// 保存影像质量 - /// - /// - /// - [HttpPost] - - [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })] + /// + /// 保存影像质量 + /// + /// + /// + [HttpPost] + + [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })] public async Task SaveImageQuality(ChangeDicomReadingQuestionAnswerInDto inDto) { inDto.UpdateMark = true; return await ChangeDicomReadingQuestionAnswer(inDto); } - /// - /// 保存任务问题 带动态稽查参数 - /// - /// - /// 请求类型 - /// - [Route("/SaveTaskQuestion/{param}")] - [HttpPost] - public async Task SaveTaskQuestion(ChangeDicomReadingQuestionAnswerInDto inDto, string param) - { - var taskinfo = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).Include(x => x.TrialReadingCriterion).FirstNotNullAsync(); + /// + /// 保存任务问题 带动态稽查参数 + /// + /// + /// 请求类型 + /// + [Route("/SaveTaskQuestion/{param}")] + [HttpPost] + public async Task SaveTaskQuestion(ChangeDicomReadingQuestionAnswerInDto inDto, string param) + { + var taskinfo = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).Include(x => x.TrialReadingCriterion).FirstNotNullAsync(); try { param = param == string.Empty ? "0" : param; inDto.ComputationTrigger = (ComputationTrigger)int.Parse(param); - } + } catch (Exception) { } - var result = await this.SaveImageQuality(inDto); + var result = await this.SaveImageQuality(inDto); - // 自动计算 - await this._readingCalculateService.CalculateTask(new CalculateTaskInDto() - { - IsChangeOtherTask = false, - VisitTaskId = inDto.VisitTaskId, - ComputationTrigger = inDto.ComputationTrigger, - }); - return result; + // 自动计算 + await this._readingCalculateService.CalculateTask(new CalculateTaskInDto() + { + IsChangeOtherTask = false, + VisitTaskId = inDto.VisitTaskId, + ComputationTrigger = inDto.ComputationTrigger, + }); + return result; - } + } - ///// - ///// 保存ECRF - ///// - ///// - ///// - //[HttpPost] - //public async Task SaveImageQuality(ChangeDicomReadingQuestionAnswerInDto inDto) - //{ - // return await ChangeDicomReadingQuestionAnswer(inDto); - //} + ///// + ///// 保存ECRF + ///// + ///// + ///// + //[HttpPost] + //public async Task SaveImageQuality(ChangeDicomReadingQuestionAnswerInDto inDto) + //{ + // return await ChangeDicomReadingQuestionAnswer(inDto); + //} - /// - /// 修改肿瘤学评估结果 - /// - /// - /// - [HttpPost] + /// + /// 修改肿瘤学评估结果 + /// + /// + /// + [HttpPost] [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })] public async Task ChangeDicomReadingQuestionAnswer(ChangeDicomReadingQuestionAnswerInDto inDto) { @@ -1824,10 +1825,11 @@ namespace IRaCIS.Application.Services if (tumorAnswer != null) { var isConvertedTask = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).Select(x => x.IsConvertedTask).FirstOrDefaultAsync(); - var reportVerify = await _readingCalculateService.GetReportVerify(new GetReportVerifyInDto() { - BeforeConvertedTaskId= taskInfo.BeforeConvertedTaskId, - IsConvertTask= isConvertedTask, - VisitTaskId=inDto.VisitTaskId + var reportVerify = await _readingCalculateService.GetReportVerify(new GetReportVerifyInDto() + { + BeforeConvertedTaskId = taskInfo.BeforeConvertedTaskId, + IsConvertTask = isConvertedTask, + VisitTaskId = inDto.VisitTaskId }); if (tumorAnswer.Answer == reportVerify.TumorEvaluate) @@ -1883,23 +1885,24 @@ namespace IRaCIS.Application.Services { PicturePath = string.Empty, MeasureData = string.Empty, - }) ; + }); - await _readingTaskQuestionMarkRepository.BatchUpdateNoTrackingAsync(x => - (x.QuestionType == QuestionType.LiverSUVmax || x.QuestionType == QuestionType.MediastinumSUVmax) && - x.VisitTaskId == inDto.VisitTaskId && needDeleteMarkQuestonIds.Contains(x.QuestionId), x => new ReadingTaskQuestionMark() - { - OtherPicturePath = string.Empty, - OtherMeasureData=string.Empty, - }); + await _readingTaskQuestionMarkRepository.BatchUpdateNoTrackingAsync(x => + (x.QuestionType == QuestionType.LiverSUVmax || x.QuestionType == QuestionType.MediastinumSUVmax) && + x.VisitTaskId == inDto.VisitTaskId && needDeleteMarkQuestonIds.Contains(x.QuestionId), x => new ReadingTaskQuestionMark() + { + OtherPicturePath = string.Empty, + OtherMeasureData = string.Empty, + }); - await _readingTaskQuestionMarkRepository.BatchDeleteNoTrackingAsync(x => x.VisitTaskId == inDto.VisitTaskId && markquestionId.Contains(x.QuestionId)); + await _readingTaskQuestionMarkRepository.BatchDeleteNoTrackingAsync(x => x.VisitTaskId == inDto.VisitTaskId && markquestionId.Contains(x.QuestionId)); - var datetime = DateTime.Now; + var datetime = DateTime.Now; var markList = _mapper.Map, List>(inDto.QuestionMarkInfoList); - markList.ForEach(x => { + markList.ForEach(x => + { x.Id = NewId.NextGuid(); x.VisitTaskId = inDto.VisitTaskId; x.CreateTime = datetime; @@ -1908,7 +1911,7 @@ namespace IRaCIS.Application.Services await _readingTaskQuestionMarkRepository.AddRangeAsync(markList); } - + await _readingTaskQuestionAnswerRepository.SaveChangesAsync(); return ResponseOutput.Ok(true); } @@ -1929,9 +1932,9 @@ namespace IRaCIS.Application.Services { await VerifyTaskIsSign(inDto.VisitTaskId); - var taskinfo = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).Include(x => x.TrialReadingCriterion).FirstNotNullAsync(); + var taskinfo = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).Include(x => x.TrialReadingCriterion).FirstNotNullAsync(); - var deleteRowInfo = await _readingTableAnswerRowInfoRepository.Where(x => x.Id == inDto.RowId).FirstOrDefaultAsync(); + var deleteRowInfo = await _readingTableAnswerRowInfoRepository.Where(x => x.Id == inDto.RowId).FirstOrDefaultAsync(); if (deleteRowInfo == null) { @@ -1953,21 +1956,21 @@ namespace IRaCIS.Application.Services IsDeleted = true }); - if (!(await _readingTableAnswerRowInfoRepository.AnyAsync(x => x.SplitRowId == deleteRowInfo.SplitRowId && x.Id != deleteRowInfo.Id))) + if (!(await _readingTableAnswerRowInfoRepository.AnyAsync(x => x.SplitRowId == deleteRowInfo.SplitRowId && x.Id != deleteRowInfo.Id))) { - await _readingTableAnswerRowInfoRepository.BatchUpdateNoTrackingAsync(x => x.Id == deleteRowInfo.SplitRowId, x => new ReadingTableAnswerRowInfo() - { - SplitOrMergeType = null, - }); - } - + await _readingTableAnswerRowInfoRepository.BatchUpdateNoTrackingAsync(x => x.Id == deleteRowInfo.SplitRowId, x => new ReadingTableAnswerRowInfo() + { + SplitOrMergeType = null, + }); + } - await _readingTableAnswerRowInfoRepository.UpdatePartialFromQueryAsync(x => x.Id == inDto.RowId, x => new ReadingTableAnswerRowInfo() - { - IsDeleted = true - }); - await _readingTableAnswerRowInfoRepository.SaveChangesAsync(); + await _readingTableAnswerRowInfoRepository.UpdatePartialFromQueryAsync(x => x.Id == inDto.RowId, x => new ReadingTableAnswerRowInfo() + { + + IsDeleted = true + }); + await _readingTableAnswerRowInfoRepository.SaveChangesAsync(); if (inDto.IsNeedSort) @@ -2077,31 +2080,31 @@ namespace IRaCIS.Application.Services await _readingTableAnswerRowInfoRepository.SaveChangesAsync(); } - + // 自动计算 await this._readingCalculateService.CalculateTask(new CalculateTaskInDto() { IsChangeOtherTask = false, VisitTaskId = inDto.VisitTaskId, - ComputationTrigger=ComputationTrigger.RemoveLesion, + ComputationTrigger = ComputationTrigger.RemoveLesion, }); - switch (taskinfo.TrialReadingCriterion.CriterionType) - { - case CriterionType.Lugano2014: - if (deleteRowInfo.RowIndex % 1 != 0) - { - await _luganoCalculateService.CalculateTargetLesionStatus(new CalculateTargetLesionStatusInDto() - { - QuestionId = inDto.QuestionId, - VisitTaskId = inDto.VisitTaskId, - RowNumber = deleteRowInfo.RowIndex - }); - } - break; - } - return ResponseOutput.Ok(true); + switch (taskinfo.TrialReadingCriterion.CriterionType) + { + case CriterionType.Lugano2014: + if (deleteRowInfo.RowIndex % 1 != 0) + { + await _luganoCalculateService.CalculateTargetLesionStatus(new CalculateTargetLesionStatusInDto() + { + QuestionId = inDto.QuestionId, + VisitTaskId = inDto.VisitTaskId, + RowNumber = deleteRowInfo.RowIndex + }); + } + break; + } + return ResponseOutput.Ok(true); } @@ -2248,14 +2251,14 @@ namespace IRaCIS.Application.Services } break; case CriterionType.Lugano2014: - - var targetTablequestionList = await _readingTableQuestionTrialRepository.Where(x => x.TrialCriterionId == taskinfo.TrialReadingCriterionId && x.ReadingQuestionTrial.LesionType == LesionType.TargetLesion).ToListAsync(); - var targetlymphQuestion = targetTablequestionList.Where(x => x.QuestionMark == QuestionMark.IsLymph).FirstOrDefault(); + var targetTablequestionList = await _readingTableQuestionTrialRepository.Where(x => x.TrialCriterionId == taskinfo.TrialReadingCriterionId && x.ReadingQuestionTrial.LesionType == LesionType.TargetLesion).ToListAsync(); - // 判断是否存在淋巴结问题 - if (targetlymphQuestion != null && taskinfo.SourceSubjectVisit.VisitNum == 0) - { + var targetlymphQuestion = targetTablequestionList.Where(x => x.QuestionMark == QuestionMark.IsLymph).FirstOrDefault(); + + // 判断是否存在淋巴结问题 + if (targetlymphQuestion != null && taskinfo.SourceSubjectVisit.VisitNum == 0) + { // 判断是否为淋巴结 if (inDto.QuestionId == targetTablequestionList[0].ReadingQuestionId && inDto.AnswerList.Any(x => x.TableQuestionId == targetlymphQuestion.Id && x.Answer.EqEnum(ReadingYesOrNo.No))) { @@ -2444,8 +2447,8 @@ namespace IRaCIS.Application.Services } else { - await _readingTableAnswerRowInfoRepository.UpdateFromDTOAsync(inDto) ; - + await _readingTableAnswerRowInfoRepository.UpdateFromDTOAsync(inDto); + foreach (var item in inDto.AnswerList) { @@ -2487,7 +2490,7 @@ namespace IRaCIS.Application.Services // 保存完了计算疾病进展 switch (taskinfo.TrialReadingCriterion.CriterionType) { - case CriterionType.Lugano2014: + case CriterionType.Lugano2014: if (inDto.RowIndex % 1 != 0) { await _luganoCalculateService.CalculateTargetLesionStatus(new CalculateTargetLesionStatusInDto() @@ -2498,9 +2501,9 @@ namespace IRaCIS.Application.Services }); } break; - } + } - return result; + return result; } @@ -2614,13 +2617,13 @@ namespace IRaCIS.Application.Services return ResponseOutput.Ok(true); } - + /// - /// 验证访视提交 - /// - /// - /// + /// 验证访视提交 + /// + /// + /// [HttpPost] public async Task VerifyVisitTaskQuestions(VerifyVisitTaskQuestionsInDto inDto) { @@ -2629,9 +2632,9 @@ namespace IRaCIS.Application.Services // 转化后的任务不应该有新病灶 - var isConvertedTask = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).Select(x=>x.IsConvertedTask).FirstNotNullAsync(); + var isConvertedTask = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).Select(x => x.IsConvertedTask).FirstNotNullAsync(); - if (isConvertedTask&&(await _readingTableAnswerRowInfoRepository.AnyAsync(x => x.ReadingQuestionTrial.LesionType == LesionType.NewLesions && x.VisitTaskId == inDto.VisitTaskId))) + if (isConvertedTask && (await _readingTableAnswerRowInfoRepository.AnyAsync(x => x.ReadingQuestionTrial.LesionType == LesionType.NewLesions && x.VisitTaskId == inDto.VisitTaskId))) { throw new BusinessValidationFailedException(_localizer["ReadingImage_NotNewFocus"]); } @@ -2666,7 +2669,7 @@ namespace IRaCIS.Application.Services SubjectId = taskInfo.SubjectId, TrialId = taskInfo.TrialId, VisitTaskId = taskInfo.Id, - + }); var isBaseLine = false; @@ -2704,7 +2707,7 @@ namespace IRaCIS.Application.Services [HttpPost] public async Task GetNextTask(GetNextTaskInDto inDto) { - if (inDto.VisitTaskId == null) + if (inDto.VisitTaskId == null) { await VerifyReadingRestTime(); } @@ -2741,16 +2744,14 @@ namespace IRaCIS.Application.Services } else if (inDto.SubjectId != null && trialReadingCriterion.IsReadingTaskViewInOrder == ReadingOrder.InOrder) { - var subjectTaskList = (await _visitTaskService.GetOrderReadingIQueryable(new GetOrderReadingIQueryableInDto() + var subjectTaskList = (await _visitTaskService.GetSubjectReadingIQueryable(new GetReadingIQueryableInDto() { TrialId = inDto.TrialId, TrialReadingCriterionId = trialReadingCriterionId!.Value, - Page = new PageInput() - { - PageIndex = 1, - PageSize = 99999, - } - })).Item2; + PageIndex = 1, + PageSize = 99999, + + })).CurrentPageData; var index = 0; subjectTaskList.ForEach(x => @@ -2786,37 +2787,34 @@ namespace IRaCIS.Application.Services } else if (inDto.SubjectId != null && trialReadingCriterion.IsReadingTaskViewInOrder == ReadingOrder.SubjectRandom) { - var subjectTaskList = (await _visitTaskService.GetOrderReadingIQueryable(new GetOrderReadingIQueryableInDto() - { - TrialId = inDto.TrialId, - SubjectId=inDto.SubjectId, - TrialReadingCriterionId = trialReadingCriterionId!.Value, - Page = new PageInput() - { - PageIndex = 1, - PageSize = 99999, - } - })).Item2; + var subjectTaskList = (await _visitTaskService.GetSubjectReadingIQueryable(new GetReadingIQueryableInDto() + { + TrialId = inDto.TrialId, + SubjectId = inDto.SubjectId, + TrialReadingCriterionId = trialReadingCriterionId!.Value, + + PageIndex = 1, + PageSize = 99999, + + })).CurrentPageData; if (subjectTaskList.Count() == 0) { - throw new BusinessValidationFailedException(_localizer["ReadingImage_TaskFinish"], ApiResponseCodeEnum.CloseCurrentWindows); - } + throw new BusinessValidationFailedException(_localizer["ReadingImage_TaskFinish"], ApiResponseCodeEnum.CloseCurrentWindows); + } var taskList = subjectTaskList.FirstOrDefault()!.UnReadCanReadTaskList; - var count = taskList.Count(); - Random random = new Random(); - var skipcount = 0; - if (count >= 2) - { - skipcount = random.Next(0, count - 1); - } + var count = taskList.Count(); + Random random = new Random(); + var skipcount = 0; + if (count >= 2) + { + skipcount = random.Next(0, count - 1); + } - var visitTaskId= taskList.Skip(skipcount).FirstOrDefault(); + var visitTaskId = taskList.Skip(skipcount).FirstOrDefault(); - - - } + } else { var query = _visitTaskRepository.Where(x => x.TrialId == inDto.TrialId && x.TrialReadingCriterionId == trialReadingCriterionId && x.ReadingTaskState != ReadingTaskState.HaveSigned && x.DoctorUserId == _userInfo.Id @@ -2912,11 +2910,11 @@ namespace IRaCIS.Application.Services if (visitTaskInfo.ReadingTaskState == ReadingTaskState.WaitReading) { - await _readingCalculateService.AddTaskLesionAnswerFromLastTask(new AddTaskLesionAnswerFromLastTaskInDto() - { - VisitTaskId = task.VisitTaskId - }); - } + await _readingCalculateService.AddTaskLesionAnswerFromLastTask(new AddTaskLesionAnswerFromLastTaskInDto() + { + VisitTaskId = task.VisitTaskId + }); + } // 如果已经签名 就不需要再读了 @@ -2935,8 +2933,8 @@ namespace IRaCIS.Application.Services { await AddDefaultValueToTask(task.VisitTaskId); - } - return task; + } + return task; } /// @@ -2951,45 +2949,45 @@ namespace IRaCIS.Application.Services { return; } - var startReadingTimeKey = _userInfo.Id.ToString()+ "StartReadingTime"; - var startRestTimeKey = _userInfo.Id.ToString() + "StartRestTime"; + var startReadingTimeKey = _userInfo.Id.ToString() + "StartReadingTime"; + var startRestTimeKey = _userInfo.Id.ToString() + "StartRestTime"; int readingMinute = 120; // 为60整数 int restMinute = 10; // - var startReadingTime = _provider.Get(startReadingTimeKey).Value; - var startRestTime = _provider.Get(startRestTimeKey).Value; + var startReadingTime = _provider.Get(startReadingTimeKey).Value; + var startRestTime = _provider.Get(startRestTimeKey).Value; if (startReadingTime == null && startRestTime == null) { _provider.Set(startReadingTimeKey, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), TimeSpan.FromHours(48)); } else if (startRestTime != null) { - var cacheStartRestTime = DateTime.Parse(startRestTime!.ToString()); - int timespanMin = (DateTime.Now - cacheStartRestTime).Minutes; + var cacheStartRestTime = DateTime.Parse(startRestTime!.ToString()); + int timespanMin = (DateTime.Now - cacheStartRestTime).Minutes; if (timespanMin <= restMinute) { - throw new BusinessValidationFailedException(_localizer["ReadingImage_NeedRest", readingMinute/60m, restMinute]); + throw new BusinessValidationFailedException(_localizer["ReadingImage_NeedRest", readingMinute / 60m, restMinute]); } - else + else { // 休息时间>10分钟 删除休息时间的缓存 记录开始阅片时间 - _provider.Remove(startRestTimeKey); - _provider.Set(startReadingTimeKey, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), TimeSpan.FromHours(48)); - } + _provider.Remove(startRestTimeKey); + _provider.Set(startReadingTimeKey, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), TimeSpan.FromHours(48)); + } - } + } // 如果开始阅片时间 不为空 else if (startReadingTime != null) - { + { #region 两小时 var cacheDate = DateTime.Parse(startReadingTime!.ToString()); int timespanMin = (DateTime.Now - cacheDate).Minutes; if (timespanMin > readingMinute) { - _provider.Remove(startReadingTimeKey); - _provider.Set(startRestTimeKey, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), TimeSpan.FromHours(48)); - throw new BusinessValidationFailedException(_localizer["ReadingImage_NeedRest", readingMinute / 60m, restMinute]); + _provider.Remove(startReadingTimeKey); + _provider.Set(startRestTimeKey, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), TimeSpan.FromHours(48)); + throw new BusinessValidationFailedException(_localizer["ReadingImage_NeedRest", readingMinute / 60m, restMinute]); } #endregion @@ -3003,18 +3001,18 @@ namespace IRaCIS.Application.Services [HttpPost] public async Task ResetReadingRestTime(Guid? userID) { - if(userID == null) + if (userID == null) { userID = _userInfo.Id; - } + } - var startReadingTimeKey = userID.ToString() + "StartReadingTime"; - var startRestTimeKey = userID.ToString() + "StartRestTime"; - //int readingMinute = 120; // 为60整数 - int restMinute = 10; // + var startReadingTimeKey = userID.ToString() + "StartReadingTime"; + var startRestTimeKey = userID.ToString() + "StartRestTime"; + //int readingMinute = 120; // 为60整数 + int restMinute = 10; // - var startReadingTime = _provider.Get(startReadingTimeKey).Value; - var startRestTime = _provider.Get(startRestTimeKey).Value; + var startReadingTime = _provider.Get(startReadingTimeKey).Value; + var startRestTime = _provider.Get(startRestTimeKey).Value; if (startRestTime != null) { var cacheStartRestTime = DateTime.Parse(startRestTime!.ToString()); @@ -3026,16 +3024,16 @@ namespace IRaCIS.Application.Services } else if (startReadingTime != null) { - _provider.Set(startReadingTimeKey, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), TimeSpan.FromHours(48)); - } - } + _provider.Set(startReadingTimeKey, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), TimeSpan.FromHours(48)); + } + } - /// - /// 签名提交任务修改状态 - /// - /// - /// - private async Task SubmitTaskChangeState(Guid visitTaskId) + /// + /// 签名提交任务修改状态 + /// + /// + /// + private async Task SubmitTaskChangeState(Guid visitTaskId) { await VerifyTaskIsSign(visitTaskId); await _visitTaskRepository.UpdatePartialFromQueryAsync(visitTaskId, x => new VisitTask() @@ -3048,9 +3046,9 @@ namespace IRaCIS.Application.Services bool isConverted = false; - var taskinfo = await _visitTaskRepository.Where(x => x.Id == visitTaskId).Include(x=>x.TrialReadingCriterion).FirstNotNullAsync(); + var taskinfo = await _visitTaskRepository.Where(x => x.Id == visitTaskId).Include(x => x.TrialReadingCriterion).FirstNotNullAsync(); - var isConvertedTask=await _visitTaskRepository.Where(x => x.Id == visitTaskId).Select(x=>x.IsConvertedTask).FirstNotNullAsync(); + var isConvertedTask = await _visitTaskRepository.Where(x => x.Id == visitTaskId).Select(x => x.IsConvertedTask).FirstNotNullAsync(); switch (taskinfo.TrialReadingCriterion.CriterionType) { case CriterionType.IRECIST1Point1: @@ -3059,7 +3057,7 @@ namespace IRaCIS.Application.Services if (!isConvertedTask && (await _readingTaskQuestionAnswerRepository.AnyAsync(x => x.VisitTaskId == visitTaskId - && x.ReadingQuestionTrial.QuestionType == QuestionType.Tumor && x.Answer==(((int)OverallAssessment.PD)).ToString())) + && x.ReadingQuestionTrial.QuestionType == QuestionType.Tumor && x.Answer == (((int)OverallAssessment.PD)).ToString())) ) { @@ -3093,7 +3091,7 @@ namespace IRaCIS.Application.Services await _trialEmailNoticeConfigService.BaseBusinessScenarioSendEmailAsync(visitTaskId); } - + } @@ -3154,7 +3152,7 @@ namespace IRaCIS.Application.Services x.DoctorUserId == taskInfo.DoctorUserId && x.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId && x.ReadingTaskState == ReadingTaskState.HaveSigned && - (x.TaskState == TaskState.Effect||x.TaskState==TaskState.Freeze) && + (x.TaskState == TaskState.Effect || x.TaskState == TaskState.Freeze) && x.IsSelfAnalysis == taskInfo.IsSelfAnalysis && x.IsAnalysisCreate == taskInfo.IsAnalysisCreate && x.ReadingCategory == taskInfo.ReadingCategory && @@ -3257,7 +3255,7 @@ namespace IRaCIS.Application.Services case ReadingCategory.Visit: needReadList = await _readModuleRepository.Where(x => x.SubjectVisitId == taskInfo.SourceSubjectVisitId && - x.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId ) + x.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId) .Select(x => new ReadingGenerataTaskDTO { IsUrgent = x.IsUrgent ?? false, @@ -3268,9 +3266,9 @@ namespace IRaCIS.Application.Services ReadingCategory = typeChangeDic[x.ModuleType], }).ToListAsync(); - - if (needReadList.Any(x => x.ReadingCategory == ReadingCategory.Global)&& taskInfo.TrialReadingCriterion.IsGlobalReading) + + if (needReadList.Any(x => x.ReadingCategory == ReadingCategory.Global) && taskInfo.TrialReadingCriterion.IsGlobalReading) { needReadList = needReadList.Where(x => x.ReadingCategory != ReadingCategory.Oncology).ToList(); await _visitTaskHelpeService.AddTaskAsync(new GenerateTaskCommand() @@ -3285,13 +3283,13 @@ namespace IRaCIS.Application.Services else if (needReadList.Any(x => x.ReadingCategory == ReadingCategory.Oncology)) { // 添加肿瘤学 - if (await _visitTaskRepository.AnyAsync(x => x.Id == visitTaskId && x.JudgeVisitTaskId == null)) - { - await AddOncologyTask(needReadList.Where(x=> x.ReadingCategory == ReadingCategory.Oncology).First().ReadModuleId); - } - } + if (await _visitTaskRepository.AnyAsync(x => x.Id == visitTaskId && x.JudgeVisitTaskId == null)) + { + await AddOncologyTask(needReadList.Where(x => x.ReadingCategory == ReadingCategory.Oncology).First().ReadModuleId); + } + } //needReadList = needReadList.Where(x => _visitTaskRepository.Where(y => y.SouceReadModuleId == x.ReadModuleId).Count() == 0).ToList(); - + break; // 肿瘤学 case ReadingCategory.Global: