From 5afe0be277edbaa0a4c27fa48ad1681ad8feceb4 Mon Sep 17 00:00:00 2001 From: hang <87227557@qq.com> Date: Sun, 1 Sep 2024 23:38:27 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E8=A7=86=E5=9B=BE=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../IRaCIS.Core.Application.xml | 2 +- .../Service/Reading/Dto/GetReadModuleDto.cs | 2 +- .../ReadingPeriod/ReadModuleService.cs | 803 +++++++++++------- .../Context/IRaCISDBContext.cs | 1 + 4 files changed, 506 insertions(+), 302 deletions(-) diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml index 30b2eaff0..0e01fbff5 100644 --- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml +++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml @@ -15378,7 +15378,7 @@ - + 用ef 实现之前视图的功能 diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/GetReadModuleDto.cs b/IRaCIS.Core.Application/Service/Reading/Dto/GetReadModuleDto.cs index 1dc49ade4..e02ce0652 100644 --- a/IRaCIS.Core.Application/Service/Reading/Dto/GetReadModuleDto.cs +++ b/IRaCIS.Core.Application/Service/Reading/Dto/GetReadModuleDto.cs @@ -271,7 +271,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto public List Data { get; set; } = new List(); - //public List Data =>VisitData.Union(ReadMouduleData).ToList(); + //public List Data => VisitData.Union(ReadMouduleData).ToList(); [JsonIgnore] diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingPeriod/ReadModuleService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingPeriod/ReadModuleService.cs index 324e8fe40..13d6b67e5 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingPeriod/ReadModuleService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingPeriod/ReadModuleService.cs @@ -10,6 +10,7 @@ using IRaCIS.Core.Infrastructure; using IRaCIS.Core.Application.Filter; using IRaCIS.Core.Domain.Models; using Microsoft.Identity.Client; +using NPOI.SS.Formula.Functions; namespace IRaCIS.Application.Services { @@ -107,7 +108,7 @@ namespace IRaCIS.Application.Services /// /// [HttpPost] - public async Task>> GetReadModuleList_New(GetReadModuleDto inQuery) + public async Task>> GetReadModuleList_new(GetReadModuleDto inQuery) { var criterionInfo = await _readingQuestionCriterionTrialRepository.Where(t => t.Id == inQuery.TrialReadingCriterionId).Select(x => new @@ -126,64 +127,417 @@ namespace IRaCIS.Application.Services var isFilterModuleType = inQuery.ModuleType != null; var isFilterCompleteClinicalData = inQuery.CompleteClinicalData != null; var isFilterReadingStatus = inQuery.ReadingStatus != null; - var isFilterName = !string.IsNullOrWhiteSpace(inQuery.Name) ; - - var query = _subjectRepository.Where(t => t.TrialId == inQuery.TrialId) - .WhereIf(inQuery.SubjectId != null, x => x.Id == inQuery.SubjectId) - .WhereIf(!string.IsNullOrWhiteSpace(inQuery.TrialSiteCode), x => x.TrialSite.TrialSiteCode.Contains(inQuery.TrialSiteCode)) - .WhereIf(!string.IsNullOrWhiteSpace(inQuery.SubjectCode), x => x.Code.Contains(inQuery.SubjectCode)) - - .Select(t => new GetReadModuleDtoOut() - { - SubjectCode = t.Code, - SubjectId = t.Id, - TrialSiteCode = t.TrialSite.TrialSiteCode, - TrialSiteId = t.TrialSiteId, - - #region 分开不用union 在属性里面union - - //访视要查询不失访的其次要查在 <= 截止访视的,截止访视没有就查这个受试者所有的 - VisitData = t.SubjectVisitList.Where(t => t.IsLostVisit == false) - - .Where(sv => t.FinalSubjectVisitId == null ? true : sv.VisitNum < t.LatestSubjectVisit.VisitNum).Select(sv => new ReadModuleView() - { - Id = sv.Id, - CreateTime = sv.CreateTime, - PDState = sv.PDState, - IsBaseLine = sv.IsBaseLine, - SubjectCode = sv.Subject.Code, - IsEnrollmentConfirm = sv.IsEnrollmentConfirm, - IsFinalVisit = sv.IsFinalVisit, - SubjectId = sv.SubjectId, - SubjectVisitId = sv.Id, - IsUrgent = sv.IsUrgent, - SubjectVisitName = sv.VisitName, - IsVisit = true, - - Name = sv.VisitName, - TrialSiteId = sv.TrialSiteId, - TrialSiteCode = sv.TrialSite.TrialSiteCode, - - TrialId = sv.TrialId, - VisitNum = sv.VisitNum, - TrialReadingCriterionId = inQuery.TrialReadingCriterionId, - - OutPlanPreviousVisitId = sv.OutPlanPreviousVisitId, - - OutPlanPreviousVisitName = sv.OutPlanPreviousVisit.VisitName, - - ModuleType = sv.InPlan ? ModuleTypeEnum.InPlanSubjectVisit : ModuleTypeEnum.OutPlanSubjectVisit, - - //只有阅片期有 - CutOffVisitId = null, - CutOffVisitName = null, - ReadingSetType = null, - ReadModuleId = null, - ReadModuleName = "", + var isFilterName = !string.IsNullOrWhiteSpace(inQuery.Name); - ///阅片状态 0 1 2 保持访视的,任务全做完了就是5 没完成就是4 否则就是3 - ReadingStatus = sv.ReadingStatus < ReadingStatusEnum.TaskAllocate ? sv.ReadingStatus : + #region 方式一 + + + + //var query = _subjectRepository.Where(t => t.TrialId == inQuery.TrialId) + // .WhereIf(inQuery.SubjectId != null, x => x.Id == inQuery.SubjectId) + // .WhereIf(!string.IsNullOrWhiteSpace(inQuery.TrialSiteCode), x => x.TrialSite.TrialSiteCode.Contains(inQuery.TrialSiteCode)) + // .WhereIf(!string.IsNullOrWhiteSpace(inQuery.SubjectCode), x => x.Code.Contains(inQuery.SubjectCode)) + + // .Select(t => new GetReadModuleDtoOut() + // { + // SubjectCode = t.Code, + // SubjectId = t.Id, + // TrialSiteCode = t.TrialSite.TrialSiteCode, + // TrialSiteId = t.TrialSiteId, + + // #region 分开不用union 在属性里面union + + // //访视要查询不失访的其次要查在 <= 截止访视的,截止访视没有就查这个受试者所有的 + // VisitData = t.SubjectVisitList.Where(t => t.IsLostVisit == false) + + // .Where(sv => t.FinalSubjectVisitId == null ? true : sv.VisitNum < t.LatestSubjectVisit.VisitNum).Select(sv => new ReadModuleView() + // { + // Id = sv.Id, + // CreateTime = sv.CreateTime, + // PDState = sv.PDState, + // IsBaseLine = sv.IsBaseLine, + // SubjectCode = sv.Subject.Code, + // IsEnrollmentConfirm = sv.IsEnrollmentConfirm, + // IsFinalVisit = sv.IsFinalVisit, + // SubjectId = sv.SubjectId, + // SubjectVisitId = sv.Id, + // IsUrgent = sv.IsUrgent, + // SubjectVisitName = sv.VisitName, + // IsVisit = true, + + // Name = sv.VisitName, + // TrialSiteId = sv.TrialSiteId, + // TrialSiteCode = sv.TrialSite.TrialSiteCode, + + // TrialId = sv.TrialId, + // VisitNum = sv.VisitNum, + // TrialReadingCriterionId = inQuery.TrialReadingCriterionId, + + // OutPlanPreviousVisitId = sv.OutPlanPreviousVisitId, + + // OutPlanPreviousVisitName = sv.OutPlanPreviousVisit.VisitName, + + // ModuleType = sv.InPlan ? ModuleTypeEnum.InPlanSubjectVisit : ModuleTypeEnum.OutPlanSubjectVisit, + + // //只有阅片期有 + // CutOffVisitId = null, + // CutOffVisitName = null, + // ReadingSetType = null, + // ReadModuleId = null, + // ReadModuleName = "", + + + // ///阅片状态 0 1 2 保持访视的,任务全做完了就是5 没完成就是4 否则就是3 + // ReadingStatus = sv.ReadingStatus < ReadingStatusEnum.TaskAllocate ? sv.ReadingStatus : + // (sv.VisitTaskList.Count(t => t.TaskState == TaskState.Effect && t.IsAnalysisCreate == false && t.ReadingTaskState == ReadingTaskState.HaveSigned + // && t.ReadingCategory != ReadingCategory.Judge && t.TrialReadingCriterionId == inQuery.TrialReadingCriterionId) == readingType ? ReadingStatusEnum.ReadCompleted : + // (sv.VisitTaskList.Count(t => t.TaskState == TaskState.Effect && t.IsAnalysisCreate == false && t.TaskAllocationState == TaskAllocationState.Allocated + // && t.ReadingCategory != ReadingCategory.Judge && t.TrialReadingCriterionId == inQuery.TrialReadingCriterionId) == readingType ? ReadingStatusEnum.ImageReading : ReadingStatusEnum.TaskAllocate)), + + + + // //是否是截止访视? + // IsCanChangeCutOffVisit = false, + + // //需要签名数量计算 基线包含subject+访视级别的 + // NeedSignClinicalDataCount = sv.Trial.TrialReadingCriterionList.Where(t => t.Id == inQuery.TrialReadingCriterionId).SelectMany(u => u.TrialClinicalDataSetCriterionList.Select(t => t.TrialClinicalDataSet)).Where(t => t.IsConfirm == true). + // Where(t => sv.IsBaseLine ? t.ClinicalDataLevel <= ClinicalLevel.SubjectVisit : t.ClinicalDataLevel == ClinicalLevel.SubjectVisit).Count() + // + (sv.Trial.TrialReadingCriterionList.Where(t => t.Id == inQuery.TrialReadingCriterionId).SelectMany(u => u.TrialClinicalDataSetCriterionList.Select(t => t.TrialClinicalDataSet)).Where(t => t.IsConfirm == true) + // .Any(t => t.ClinicalDataLevel == ClinicalLevel.Study) ? 1 : 0), + + // //签名的数量 + + // SignClinicalDataCount = sv.ReadingClinicalDataList.Where(t => t.IsSign == true && t.ClinicalDataTrialSet.ClinicalDataLevel != ClinicalLevel.Study && + // t.ClinicalDataTrialSet.TrialClinicalDataSetCriteriaList.Any(t => t.TrialReadingCriterionId == inQuery.TrialReadingCriterionId)).Count() + // + + // (sv.SubmitState == SubmitStateEnum.Submitted && sv.Trial.ClinicalDataTrialSetList + // .Any(t => t.ClinicalDataLevel == ClinicalLevel.Study && t.TrialClinicalDataSetCriteriaList.Any(u => u.TrialReadingCriterionId == inQuery.TrialReadingCriterionId)) ? 1 : 0), + + + + + + // //标准名 应该是可以不查询的,只要保证逻辑正确 + // CriterionName = criterionInfo.CriterionName + + + // }) + + // .Where(t => isFilterModuleType ? t.ModuleType == inQuery.ModuleType : true) + // .Where(t => isFilterName ? t.Name == inQuery.Name : true) + // .Where(t => isFilterReadingStatus ? t.ReadingStatus == inQuery.ReadingStatus : true) + // .Where(t => isFilterCompleteClinicalData && inQuery.CompleteClinicalData == CompleteClinicalDataEnum.NA ? t.NeedSignClinicalDataCount == 0 : true) + // .Where(t => isFilterCompleteClinicalData && inQuery.CompleteClinicalData == CompleteClinicalDataEnum.NotComplete ? t.NeedSignClinicalDataCount != t.SignClinicalDataCount : true) + // .Where(t => isFilterCompleteClinicalData && inQuery.CompleteClinicalData == CompleteClinicalDataEnum.Complete ? t.NeedSignClinicalDataCount == t.SignClinicalDataCount : true) + + // //搜索条件报错 + // //.WhereIf(inQuery.ModuleType != null, t => t.ModuleType == inQuery.ModuleType) + // //.WhereIf(inQuery.CompleteClinicalData == CompleteClinicalDataEnum.NA, x => x.NeedSignClinicalDataCount == 0) + // //.WhereIf(inQuery.CompleteClinicalData == CompleteClinicalDataEnum.NotComplete, x => x.NeedSignClinicalDataCount != x.SignClinicalDataCount) + // //.WhereIf(inQuery.CompleteClinicalData == CompleteClinicalDataEnum.Complete, x => x.NeedSignClinicalDataCount != 0 && x.NeedSignClinicalDataCount == x.SignClinicalDataCount) + // //.WhereIf(inQuery.ReadingStatus != null, x => x.ReadingStatus == inQuery.ReadingStatus) + // .ToList(), + + // //阅片期 + // ReadMouduleData = t.ReadModuleList.Select(rm => new ReadModuleView() + // { + // Id = rm.Id, + // CreateTime = rm.CreateTime, + // PDState = PDStateEnum.None, + // IsBaseLine = false, + // SubjectCode = rm.SubjectVisit.Subject.Code, + // IsEnrollmentConfirm = false, + // IsFinalVisit = false, + // SubjectId = rm.SubjectId, + // SubjectVisitId = rm.SubjectVisitId, + // IsUrgent = rm.SubjectVisit.IsUrgent, + // SubjectVisitName = rm.SubjectVisit.VisitName, + // IsVisit = false, + + // Name = rm.ModuleName, + // TrialSiteId = rm.Subject.TrialSiteId, + // TrialSiteCode = rm.Subject.TrialSite.TrialSiteCode, + + // TrialId = rm.TrialId, + // VisitNum = rm.SubjectVisit.VisitNum, + // TrialReadingCriterionId = inQuery.TrialReadingCriterionId, + + // OutPlanPreviousVisitId = null, + + // OutPlanPreviousVisitName = null, + + // ModuleType = rm.ModuleType, + + // //只有阅片期有 + // CutOffVisitId = rm.SubjectVisit.Id, + // CutOffVisitName = rm.SubjectVisit.VisitName, + // ReadingSetType = null, + + // //之前视图返回的null 应该是没用的? + // ReadModuleId = rm.Id, + // ReadModuleName = rm.ModuleName, + + // //是否是截止访视? + // IsCanChangeCutOffVisit = false, + + + // ///阅片状态 0 1 2 保持访视的,任务全做完了就是5 没完成就是4 否则就是3 + // ReadingStatus = rm.ReadingStatus < ReadingStatusEnum.TaskAllocate ? rm.ReadingStatus : + // (rm.ModuleTaskList.Count(t => t.TaskState == TaskState.Effect && t.IsAnalysisCreate == false && t.ReadingTaskState == ReadingTaskState.HaveSigned + // && t.ReadingCategory != ReadingCategory.Judge && t.TrialReadingCriterionId == inQuery.TrialReadingCriterionId) == readingType ? ReadingStatusEnum.ReadCompleted : + + // (rm.ModuleTaskList.Count(t => t.TaskState == TaskState.Effect && t.IsAnalysisCreate == false && t.TaskAllocationState == TaskAllocationState.Allocated + // && t.ReadingCategory != ReadingCategory.Judge && t.TrialReadingCriterionId == inQuery.TrialReadingCriterionId) == readingType ? ReadingStatusEnum.ImageReading : ReadingStatusEnum.TaskAllocate + // ) + // ), + + + + + + // ////需要签名数量计算 基线包含subject+访视级别的 + // NeedSignClinicalDataCount = rm.Trial.TrialReadingCriterionList.Where(t => t.Id == inQuery.TrialReadingCriterionId).SelectMany(u => u.TrialClinicalDataSetCriterionList.Select(z => z.TrialClinicalDataSet)) + // .Where(t => t.IsConfirm == true && t.UploadRole == UploadRole.PM && (t.ClinicalDataLevel == ClinicalLevel.SubjectVisit || t.ClinicalDataLevel == ClinicalLevel.ImageRead || t.ClinicalDataLevel == ClinicalLevel.OncologyRead)).Count() + // + + // (rm.Trial.TrialReadingCriterionList.Where(t => t.Id == inQuery.TrialReadingCriterionId).SelectMany(u => u.TrialClinicalDataSetCriterionList.Select(z => z.TrialClinicalDataSet)) + // .Where(t => t.IsConfirm == true && t.UploadRole == UploadRole.CRC && + // (t.ClinicalDataLevel == ClinicalLevel.SubjectVisit || t.ClinicalDataLevel == ClinicalLevel.ImageRead || t.ClinicalDataLevel == ClinicalLevel.OncologyRead)).Any() ? 1 : 0) + // , + + // //签名的数量 + + // SignClinicalDataCount = rm.ReadingClinicalDataList.Where(t => t.IsSign == true && t.ClinicalDataTrialSet.UploadRole == UploadRole.PM && + // t.ClinicalDataTrialSet.TrialClinicalDataSetCriteriaList.Any(t => t.TrialReadingCriterionId == inQuery.TrialReadingCriterionId)).Count() + // + + // (rm.IsPMConfirm ? 1 : 0), + + + // //标准名 应该是可以不查询的,只要保证逻辑正确 + // CriterionName = criterionInfo.CriterionName + + // }) + // .Where(t => isFilterModuleType ? t.ModuleType == inQuery.ModuleType : true) + // .Where(t => isFilterName ? t.Name == inQuery.Name : true) + // .Where(t => isFilterReadingStatus ? t.ReadingStatus == inQuery.ReadingStatus : true) + // .Where(t => isFilterCompleteClinicalData && inQuery.CompleteClinicalData == CompleteClinicalDataEnum.NA ? t.NeedSignClinicalDataCount == 0 : true) + // .Where(t => isFilterCompleteClinicalData && inQuery.CompleteClinicalData == CompleteClinicalDataEnum.NotComplete ? t.NeedSignClinicalDataCount != t.SignClinicalDataCount : true) + // .Where(t => isFilterCompleteClinicalData && inQuery.CompleteClinicalData == CompleteClinicalDataEnum.Complete ? t.NeedSignClinicalDataCount == t.SignClinicalDataCount : true) + // .ToList() + + // #endregion + + // #region 用union 报错不行的 + + // ////访视要查询不失访的其次要查在 <= 截止访视的,截止访视没有就查这个受试者所有的 + // //Data = t.SubjectVisitList.Where(t => t.IsLostVisit == false) + // //.Where(sv => t.FinalSubjectVisitId == null ? true : sv.VisitNum < t.LatestSubjectVisit.VisitNum).Select(sv => new ReadModuleView() + // //{ + // // Id = sv.Id, + // // CreateTime = sv.CreateTime, + // // PDState = sv.PDState, + // // IsBaseLine = sv.IsBaseLine, + // // SubjectCode = sv.Subject.Code, + // // IsEnrollmentConfirm = sv.IsEnrollmentConfirm, + // // IsFinalVisit = sv.IsFinalVisit, + // // SubjectId = sv.SubjectId, + // // SubjectVisitId = sv.Id, + // // IsUrgent = sv.IsUrgent, + // // SubjectVisitName = sv.VisitName, + // // IsVisit = true, + + // // Name = sv.VisitName, + // // TrialSiteId = sv.TrialSiteId, + // // TrialSiteCode = sv.TrialSite.TrialSiteCode, + + // // TrialId = sv.TrialId, + // // VisitNum = sv.VisitNum, + // // TrialReadingCriterionId = inQuery.TrialReadingCriterionId, + + // // OutPlanPreviousVisitId = sv.OutPlanPreviousVisitId, + + // // OutPlanPreviousVisitName = sv.OutPlanPreviousVisit.VisitName, + + // // ModuleType = sv.InPlan ? ModuleTypeEnum.InPlanSubjectVisit : ModuleTypeEnum.OutPlanSubjectVisit, + + // // //只有阅片期有 + // // CutOffVisitId = null, + // // CutOffVisitName = null, + // // ReadingSetType = null, + // // ReadModuleId = null, + // // ReadModuleName = "", + + + // // ///阅片状态 0 1 2 保持访视的,任务全做完了就是5 没完成就是4 否则就是3 + // // ReadingStatus = sv.ReadingStatus < ReadingStatusEnum.TaskAllocate ? sv.ReadingStatus : + // // (sv.VisitTaskList.Count(t => t.TaskState == TaskState.Effect && t.IsAnalysisCreate == false && t.ReadingTaskState == ReadingTaskState.HaveSigned + // // && t.ReadingCategory != ReadingCategory.Judge && t.TrialReadingCriterionId == inQuery.TrialReadingCriterionId) == readingType ? ReadingStatusEnum.ReadCompleted : + // // (sv.VisitTaskList.Count(t => t.TaskState == TaskState.Effect && t.IsAnalysisCreate == false && t.TaskAllocationState == TaskAllocationState.Allocated + // // && t.ReadingCategory != ReadingCategory.Judge && t.TrialReadingCriterionId == inQuery.TrialReadingCriterionId) == readingType ? ReadingStatusEnum.ImageReading : ReadingStatusEnum.TaskAllocate)), + + + + // // //是否是截止访视? + // // IsCanChangeCutOffVisit = false, + + // // //需要签名数量计算 基线包含subject+访视级别的 + // // NeedSignClinicalDataCount = sv.Trial.TrialReadingCriterionList.Where(t => t.Id == inQuery.TrialReadingCriterionId).SelectMany(u => u.TrialClinicalDataSetCriterionList).Where(t => t.TrialClinicalDataSet.IsConfirm == true). + // // Where(t => sv.IsBaseLine ? t.TrialClinicalDataSet.ClinicalDataLevel <= ClinicalLevel.SubjectVisit : t.TrialClinicalDataSet.ClinicalDataLevel == ClinicalLevel.SubjectVisit).Count() + // // + (sv.Trial.TrialReadingCriterionList.Where(t => t.Id == inQuery.TrialReadingCriterionId).SelectMany(u => u.TrialClinicalDataSetCriterionList).Where(t => t.TrialClinicalDataSet.IsConfirm == true) + // // .Any(t => t.TrialClinicalDataSet.ClinicalDataLevel == ClinicalLevel.Study) ? 1 : 0), + + // // //签名的数量 + + // // SignClinicalDataCount = sv.ReadingClinicalDataList.Where(t => t.IsSign == true && t.ClinicalDataTrialSet.ClinicalDataLevel != ClinicalLevel.Study && + // // t.ClinicalDataTrialSet.TrialClinicalDataSetCriteriaList.Any(t => t.TrialReadingCriterionId == inQuery.TrialReadingCriterionId)).Count() + // // + + // // (sv.SubmitState == SubmitStateEnum.Submitted && sv.Trial.ClinicalDataTrialSetList + // // .Any(t => t.ClinicalDataLevel == ClinicalLevel.Study && t.TrialClinicalDataSetCriteriaList.Any(u => u.TrialReadingCriterionId == inQuery.TrialReadingCriterionId)) ? 1 : 0), + + + + + + // // //标准名 应该是可以不查询的,只要保证逻辑正确 + // // CriterionName = criterionInfo.CriterionName + + + // //}) + // //.Union(t.ReadModuleList.AsQueryable().Select(rm => new ReadModuleView() + // //{ + // // Id = rm.Id, + // // CreateTime = rm.CreateTime, + // // PDState = PDStateEnum.None, + // // IsBaseLine = false, + // // SubjectCode = rm.SubjectVisit.Subject.Code, + // // IsEnrollmentConfirm = false, + // // IsFinalVisit = false, + // // SubjectId = rm.SubjectId, + // // SubjectVisitId = rm.SubjectVisitId, + // // IsUrgent = rm.SubjectVisit.IsUrgent, + // // SubjectVisitName = rm.SubjectVisit.VisitName, + // // IsVisit = false, + + // // Name = rm.ModuleName, + // // TrialSiteId = rm.Subject.TrialSiteId, + // // TrialSiteCode = rm.Subject.TrialSite.TrialSiteCode, + + // // TrialId = rm.TrialId, + // // VisitNum = rm.SubjectVisit.VisitNum, + // // TrialReadingCriterionId = inQuery.TrialReadingCriterionId, + + // // OutPlanPreviousVisitId = null, + + // // OutPlanPreviousVisitName = null, + + // // ModuleType = rm.ModuleType, + + // // //只有阅片期有 + // // CutOffVisitId = rm.SubjectVisit.Id, + // // CutOffVisitName = rm.SubjectVisit.VisitName, + // // ReadingSetType = null, + + // // //之前视图返回的null 应该是没用的? + // // ReadModuleId = rm.Id, + // // ReadModuleName = rm.ModuleName, + + // // //是否是截止访视? + // // IsCanChangeCutOffVisit = false, + + + // // ///阅片状态 0 1 2 保持访视的,任务全做完了就是5 没完成就是4 否则就是3 + // // ReadingStatus = rm.ReadingStatus < ReadingStatusEnum.TaskAllocate ? rm.ReadingStatus : + // // (rm.ModuleTaskList.Count(t => t.TaskState == TaskState.Effect && t.IsAnalysisCreate == false && t.ReadingTaskState == ReadingTaskState.HaveSigned + // // && t.ReadingCategory != ReadingCategory.Judge && t.TrialReadingCriterionId == inQuery.TrialReadingCriterionId) == readingType ? ReadingStatusEnum.ReadCompleted : + + // // (rm.ModuleTaskList.Count(t => t.TaskState == TaskState.Effect && t.IsAnalysisCreate == false && t.TaskAllocationState == TaskAllocationState.Allocated + // // && t.ReadingCategory != ReadingCategory.Judge && t.TrialReadingCriterionId == inQuery.TrialReadingCriterionId) == readingType ? ReadingStatusEnum.ImageReading : ReadingStatusEnum.TaskAllocate + // // ) + // // ), + + + + + + // // //需要签名数量计算 基线包含subject+访视级别的 + // // NeedSignClinicalDataCount = rm.Trial.TrialReadingCriterionList.Where(t => t.Id == inQuery.TrialReadingCriterionId).SelectMany(u => u.TrialClinicalDataSetCriterionList.Select(z => z.TrialClinicalDataSet)) + // // .Where(t => t.IsConfirm == true && t.UploadRole == UploadRole.PM && (t.ClinicalDataLevel == ClinicalLevel.SubjectVisit || t.ClinicalDataLevel == ClinicalLevel.ImageRead || t.ClinicalDataLevel == ClinicalLevel.OncologyRead)).Count() + // // + + // // (rm.Trial.TrialReadingCriterionList.Where(t => t.Id == inQuery.TrialReadingCriterionId).SelectMany(u => u.TrialClinicalDataSetCriterionList.Select(z => z.TrialClinicalDataSet)) + // // .Where(t => t.IsConfirm == true && t.UploadRole == UploadRole.CRC && + // // (t.ClinicalDataLevel == ClinicalLevel.SubjectVisit || t.ClinicalDataLevel == ClinicalLevel.ImageRead || t.ClinicalDataLevel == ClinicalLevel.OncologyRead)).Any() ? 1 : 0) + // // , + + // // //签名的数量 + + // // SignClinicalDataCount = rm.ReadingClinicalDataList.Where(t => t.IsSign == true && t.ClinicalDataTrialSet.UploadRole == UploadRole.PM && + // // t.ClinicalDataTrialSet.TrialClinicalDataSetCriteriaList.Any(t => t.TrialReadingCriterionId == inQuery.TrialReadingCriterionId)).Count() + // // + + // // (rm.IsPMConfirm ? 1 : 0), + + + // // //标准名 应该是可以不查询的,只要保证逻辑正确 + // // CriterionName = criterionInfo.CriterionName + + // //})).ToList() + + // #endregion + + + + + + + // }); + + + //var pageList = await query/*.Where(t=> (t.VisitData.Count + t.ReadMouduleData.Count)>0)*//*.AsSplitQuery()*/ + // .ToPagedListAsync(inQuery, nameof(GetReadModuleDtoOut.SubjectCode)); + + #endregion + + #region 方式二 + + var subjectVisitQuery = _subjectVisitRepository.Where(t => t.TrialId == inQuery.TrialId).Where(t => t.IsLostVisit == false) + .Where(sv => sv.Subject.FinalSubjectVisitId == null ? true : sv.VisitNum < sv.Subject.LatestSubjectVisit.VisitNum).Select(sv => new ReadModuleView() + { + Id = sv.Id, + CreateTime = sv.CreateTime, + PDState = sv.PDState, + IsBaseLine = sv.IsBaseLine, + SubjectCode = sv.Subject.Code, + IsEnrollmentConfirm = sv.IsEnrollmentConfirm, + IsFinalVisit = sv.IsFinalVisit, + SubjectId = sv.SubjectId, + SubjectVisitId = sv.Id, + IsUrgent = sv.IsUrgent, + SubjectVisitName = sv.VisitName, + IsVisit = true, + + Name = sv.VisitName, + TrialSiteId = sv.TrialSiteId, + TrialSiteCode = sv.TrialSite.TrialSiteCode, + + TrialId = sv.TrialId, + VisitNum = sv.VisitNum, + TrialReadingCriterionId = inQuery.TrialReadingCriterionId, + + OutPlanPreviousVisitId = sv.OutPlanPreviousVisitId, + + OutPlanPreviousVisitName = sv.OutPlanPreviousVisit.VisitName, + + ModuleType = sv.InPlan ? ModuleTypeEnum.InPlanSubjectVisit : ModuleTypeEnum.OutPlanSubjectVisit, + + //只有阅片期有 + CutOffVisitId = null, + CutOffVisitName = null, + ReadingSetType = null, + ReadModuleId = null, + ReadModuleName = "", + + + ///阅片状态 0 1 2 保持访视的,任务全做完了就是5 没完成就是4 否则就是3 + ReadingStatus = sv.ReadingStatus < ReadingStatusEnum.TaskAllocate ? sv.ReadingStatus : (sv.VisitTaskList.Count(t => t.TaskState == TaskState.Effect && t.IsAnalysisCreate == false && t.ReadingTaskState == ReadingTaskState.HaveSigned && t.ReadingCategory != ReadingCategory.Judge && t.TrialReadingCriterionId == inQuery.TrialReadingCriterionId) == readingType ? ReadingStatusEnum.ReadCompleted : (sv.VisitTaskList.Count(t => t.TaskState == TaskState.Effect && t.IsAnalysisCreate == false && t.TaskAllocationState == TaskAllocationState.Allocated @@ -191,19 +545,19 @@ namespace IRaCIS.Application.Services - //是否是截止访视? - IsCanChangeCutOffVisit = false, + //是否是截止访视? + IsCanChangeCutOffVisit = false, - //需要签名数量计算 基线包含subject+访视级别的 - NeedSignClinicalDataCount = sv.Trial.TrialReadingCriterionList.Where(t => t.Id == inQuery.TrialReadingCriterionId).SelectMany(u => u.TrialClinicalDataSetCriterionList).Where(t => t.TrialClinicalDataSet.IsConfirm == true). - Where(t => sv.IsBaseLine ? t.TrialClinicalDataSet.ClinicalDataLevel <= ClinicalLevel.SubjectVisit : t.TrialClinicalDataSet.ClinicalDataLevel == ClinicalLevel.SubjectVisit).Count() - + (sv.Trial.TrialReadingCriterionList.Where(t => t.Id == inQuery.TrialReadingCriterionId).SelectMany(u => u.TrialClinicalDataSetCriterionList).Where(t => t.TrialClinicalDataSet.IsConfirm == true) - .Any(t => t.TrialClinicalDataSet.ClinicalDataLevel == ClinicalLevel.Study) ? 1 : 0), + //需要签名数量计算 基线包含subject+访视级别的 + NeedSignClinicalDataCount = sv.Trial.TrialReadingCriterionList.Where(t => t.Id == inQuery.TrialReadingCriterionId).SelectMany(u => u.TrialClinicalDataSetCriterionList.Select(t => t.TrialClinicalDataSet)).Where(t => t.IsConfirm == true). + Where(t => sv.IsBaseLine ? t.ClinicalDataLevel <= ClinicalLevel.SubjectVisit : t.ClinicalDataLevel == ClinicalLevel.SubjectVisit).Count() + + (sv.Trial.TrialReadingCriterionList.Where(t => t.Id == inQuery.TrialReadingCriterionId).SelectMany(u => u.TrialClinicalDataSetCriterionList.Select(t => t.TrialClinicalDataSet)).Where(t => t.IsConfirm == true) + .Any(t => t.ClinicalDataLevel == ClinicalLevel.Study) ? 1 : 0), - //签名的数量 + //签名的数量 - SignClinicalDataCount = sv.ReadingClinicalDataList.Where(t => t.IsSign == true && t.ClinicalDataTrialSet.ClinicalDataLevel != ClinicalLevel.Study && - t.ClinicalDataTrialSet.TrialClinicalDataSetCriteriaList.Any(t => t.TrialReadingCriterionId == inQuery.TrialReadingCriterionId)).Count() + SignClinicalDataCount = sv.ReadingClinicalDataList.Where(t => t.IsSign == true && t.ClinicalDataTrialSet.ClinicalDataLevel != ClinicalLevel.Study && + t.ClinicalDataTrialSet.TrialClinicalDataSetCriteriaList.Any(t => t.TrialReadingCriterionId == inQuery.TrialReadingCriterionId)).Count() + (sv.SubmitState == SubmitStateEnum.Submitted && sv.Trial.ClinicalDataTrialSetList .Any(t => t.ClinicalDataLevel == ClinicalLevel.Study && t.TrialClinicalDataSetCriteriaList.Any(u => u.TrialReadingCriterionId == inQuery.TrialReadingCriterionId)) ? 1 : 0), @@ -212,72 +566,57 @@ namespace IRaCIS.Application.Services - //标准名 应该是可以不查询的,只要保证逻辑正确 - CriterionName = criterionInfo.CriterionName + //标准名 应该是可以不查询的,只要保证逻辑正确 + CriterionName = criterionInfo.CriterionName - }) + }); - .Where(t=>isFilterModuleType? t.ModuleType==inQuery.ModuleType:true) - .Where(t => isFilterName ? t.Name == inQuery.Name : true) - .Where(t => isFilterReadingStatus ? t.ReadingStatus == inQuery.ReadingStatus : true) - .Where(t => isFilterCompleteClinicalData && inQuery.CompleteClinicalData == CompleteClinicalDataEnum.NA ? t.NeedSignClinicalDataCount == 0 : true) - .Where(t => isFilterCompleteClinicalData && inQuery.CompleteClinicalData == CompleteClinicalDataEnum.NotComplete ? t.NeedSignClinicalDataCount != t.SignClinicalDataCount : true) - .Where(t => isFilterCompleteClinicalData && inQuery.CompleteClinicalData == CompleteClinicalDataEnum.Complete ? t.NeedSignClinicalDataCount == t.SignClinicalDataCount : true) + var readMouduleQuery = _readModuleRepository.Where(t => t.TrialId == inQuery.TrialId) + .Select(rm => new ReadModuleView() + { + Id = rm.Id, + CreateTime = rm.CreateTime, + PDState = PDStateEnum.None, + IsBaseLine = false, + SubjectCode = rm.SubjectVisit.Subject.Code, + IsEnrollmentConfirm = false, + IsFinalVisit = false, + SubjectId = rm.SubjectId, + SubjectVisitId = rm.SubjectVisitId, + IsUrgent = rm.SubjectVisit.IsUrgent, + SubjectVisitName = rm.SubjectVisit.VisitName, + IsVisit = false, - //搜索条件报错 - //.WhereIf(inQuery.ModuleType != null, t => t.ModuleType == inQuery.ModuleType) - //.WhereIf(inQuery.CompleteClinicalData == CompleteClinicalDataEnum.NA, x => x.NeedSignClinicalDataCount == 0) - //.WhereIf(inQuery.CompleteClinicalData == CompleteClinicalDataEnum.NotComplete, x => x.NeedSignClinicalDataCount != x.SignClinicalDataCount) - //.WhereIf(inQuery.CompleteClinicalData == CompleteClinicalDataEnum.Complete, x => x.NeedSignClinicalDataCount != 0 && x.NeedSignClinicalDataCount == x.SignClinicalDataCount) - //.WhereIf(inQuery.ReadingStatus != null, x => x.ReadingStatus == inQuery.ReadingStatus) - .ToList(), + Name = rm.ModuleName, + TrialSiteId = rm.Subject.TrialSiteId, + TrialSiteCode = rm.Subject.TrialSite.TrialSiteCode, - //阅片期 - ReadMouduleData = t.ReadModuleList.Select(rm => new ReadModuleView() - { - Id = rm.Id, - CreateTime = rm.CreateTime, - PDState = PDStateEnum.None, - IsBaseLine = false, - SubjectCode = rm.SubjectVisit.Subject.Code, - IsEnrollmentConfirm = false, - IsFinalVisit = false, - SubjectId = rm.SubjectId, - SubjectVisitId = rm.SubjectVisitId, - IsUrgent = rm.SubjectVisit.IsUrgent, - SubjectVisitName = rm.SubjectVisit.VisitName, - IsVisit = false, + TrialId = rm.TrialId, + VisitNum = rm.SubjectVisit.VisitNum, + TrialReadingCriterionId = inQuery.TrialReadingCriterionId, - Name = rm.ModuleName, - TrialSiteId = rm.Subject.TrialSiteId, - TrialSiteCode = rm.Subject.TrialSite.TrialSiteCode, + OutPlanPreviousVisitId = null, - TrialId = rm.TrialId, - VisitNum = rm.SubjectVisit.VisitNum, - TrialReadingCriterionId = inQuery.TrialReadingCriterionId, + OutPlanPreviousVisitName = null, - OutPlanPreviousVisitId = null, + ModuleType = rm.ModuleType, - OutPlanPreviousVisitName = null, + //只有阅片期有 + CutOffVisitId = rm.SubjectVisit.Id, + CutOffVisitName = rm.SubjectVisit.VisitName, + ReadingSetType = null, - ModuleType = rm.ModuleType, + //之前视图返回的null 应该是没用的? + ReadModuleId = rm.Id, + ReadModuleName = rm.ModuleName, - //只有阅片期有 - CutOffVisitId = rm.SubjectVisit.Id, - CutOffVisitName = rm.SubjectVisit.VisitName, - ReadingSetType = null, - - //之前视图返回的null 应该是没用的? - ReadModuleId = rm.Id, - ReadModuleName = rm.ModuleName, - - //是否是截止访视? - IsCanChangeCutOffVisit = false, + //是否是截止访视? + IsCanChangeCutOffVisit = false, - ///阅片状态 0 1 2 保持访视的,任务全做完了就是5 没完成就是4 否则就是3 - ReadingStatus = rm.ReadingStatus < ReadingStatusEnum.TaskAllocate ? rm.ReadingStatus : + ///阅片状态 0 1 2 保持访视的,任务全做完了就是5 没完成就是4 否则就是3 + ReadingStatus = rm.ReadingStatus < ReadingStatusEnum.TaskAllocate ? rm.ReadingStatus : (rm.ModuleTaskList.Count(t => t.TaskState == TaskState.Effect && t.IsAnalysisCreate == false && t.ReadingTaskState == ReadingTaskState.HaveSigned && t.ReadingCategory != ReadingCategory.Judge && t.TrialReadingCriterionId == inQuery.TrialReadingCriterionId) == readingType ? ReadingStatusEnum.ReadCompleted : @@ -290,8 +629,8 @@ namespace IRaCIS.Application.Services - //需要签名数量计算 基线包含subject+访视级别的 - NeedSignClinicalDataCount = rm.Trial.TrialReadingCriterionList.Where(t => t.Id == inQuery.TrialReadingCriterionId).SelectMany(u => u.TrialClinicalDataSetCriterionList.Select(z => z.TrialClinicalDataSet)) + ////需要签名数量计算 基线包含subject+访视级别的 + NeedSignClinicalDataCount = rm.Trial.TrialReadingCriterionList.Where(t => t.Id == inQuery.TrialReadingCriterionId).SelectMany(u => u.TrialClinicalDataSetCriterionList.Select(z => z.TrialClinicalDataSet)) .Where(t => t.IsConfirm == true && t.UploadRole == UploadRole.PM && (t.ClinicalDataLevel == ClinicalLevel.SubjectVisit || t.ClinicalDataLevel == ClinicalLevel.ImageRead || t.ClinicalDataLevel == ClinicalLevel.OncologyRead)).Count() + (rm.Trial.TrialReadingCriterionList.Where(t => t.Id == inQuery.TrialReadingCriterionId).SelectMany(u => u.TrialClinicalDataSetCriterionList.Select(z => z.TrialClinicalDataSet)) @@ -299,198 +638,62 @@ namespace IRaCIS.Application.Services (t.ClinicalDataLevel == ClinicalLevel.SubjectVisit || t.ClinicalDataLevel == ClinicalLevel.ImageRead || t.ClinicalDataLevel == ClinicalLevel.OncologyRead)).Any() ? 1 : 0) , - //签名的数量 + //签名的数量 - SignClinicalDataCount = rm.ReadingClinicalDataList.Where(t => t.IsSign == true && t.ClinicalDataTrialSet.UploadRole == UploadRole.PM && - t.ClinicalDataTrialSet.TrialClinicalDataSetCriteriaList.Any(t => t.TrialReadingCriterionId == inQuery.TrialReadingCriterionId)).Count() + SignClinicalDataCount = rm.ReadingClinicalDataList.Where(t => t.IsSign == true && t.ClinicalDataTrialSet.UploadRole == UploadRole.PM && + t.ClinicalDataTrialSet.TrialClinicalDataSetCriteriaList.Any(t => t.TrialReadingCriterionId == inQuery.TrialReadingCriterionId)).Count() + (rm.IsPMConfirm ? 1 : 0), - //标准名 应该是可以不查询的,只要保证逻辑正确 - CriterionName = criterionInfo.CriterionName + //标准名 应该是可以不查询的,只要保证逻辑正确 + CriterionName = criterionInfo.CriterionName - }) - .Where(t => isFilterModuleType ? t.ModuleType == inQuery.ModuleType : true) - .Where(t => isFilterName ? t.Name == inQuery.Name : true) - .Where(t => isFilterReadingStatus ? t.ReadingStatus == inQuery.ReadingStatus : true) - .Where(t => isFilterCompleteClinicalData && inQuery.CompleteClinicalData == CompleteClinicalDataEnum.NA ? t.NeedSignClinicalDataCount == 0 : true) - .Where(t => isFilterCompleteClinicalData && inQuery.CompleteClinicalData == CompleteClinicalDataEnum.NotComplete ? t.NeedSignClinicalDataCount != t.SignClinicalDataCount : true) - .Where(t => isFilterCompleteClinicalData && inQuery.CompleteClinicalData == CompleteClinicalDataEnum.Complete ? t.NeedSignClinicalDataCount == t.SignClinicalDataCount : true) - .ToList() - - #endregion - - #region 用union 报错不行的 - - ////访视要查询不失访的其次要查在 <= 截止访视的,截止访视没有就查这个受试者所有的 - //Data = t.SubjectVisitList.Where(t => t.IsLostVisit == false) - //.Where(sv => t.FinalSubjectVisitId == null ? true : sv.VisitNum < t.LatestSubjectVisit.VisitNum).Select(sv => new ReadModuleView() - //{ - // Id = sv.Id, - // CreateTime = sv.CreateTime, - // PDState = sv.PDState, - // IsBaseLine = sv.IsBaseLine, - // SubjectCode = sv.Subject.Code, - // IsEnrollmentConfirm = sv.IsEnrollmentConfirm, - // IsFinalVisit = sv.IsFinalVisit, - // SubjectId = sv.SubjectId, - // SubjectVisitId = sv.Id, - // IsUrgent = sv.IsUrgent, - // SubjectVisitName = sv.VisitName, - // IsVisit = true, - - // Name = sv.VisitName, - // TrialSiteId = sv.TrialSiteId, - // TrialSiteCode = sv.TrialSite.TrialSiteCode, - - // TrialId = sv.TrialId, - // VisitNum = sv.VisitNum, - // TrialReadingCriterionId = inQuery.TrialReadingCriterionId, - - // OutPlanPreviousVisitId = sv.OutPlanPreviousVisitId, - - // OutPlanPreviousVisitName = sv.OutPlanPreviousVisit.VisitName, - - // ModuleType = sv.InPlan ? ModuleTypeEnum.InPlanSubjectVisit : ModuleTypeEnum.OutPlanSubjectVisit, - - // //只有阅片期有 - // CutOffVisitId = null, - // CutOffVisitName = null, - // ReadingSetType = null, - // ReadModuleId = null, - // ReadModuleName = "", + }); - // ///阅片状态 0 1 2 保持访视的,任务全做完了就是5 没完成就是4 否则就是3 - // ReadingStatus = sv.ReadingStatus < ReadingStatusEnum.TaskAllocate ? sv.ReadingStatus : - // (sv.VisitTaskList.Count(t => t.TaskState == TaskState.Effect && t.IsAnalysisCreate == false && t.ReadingTaskState == ReadingTaskState.HaveSigned - // && t.ReadingCategory != ReadingCategory.Judge && t.TrialReadingCriterionId == inQuery.TrialReadingCriterionId) == readingType ? ReadingStatusEnum.ReadCompleted : - // (sv.VisitTaskList.Count(t => t.TaskState == TaskState.Effect && t.IsAnalysisCreate == false && t.TaskAllocationState == TaskAllocationState.Allocated - // && t.ReadingCategory != ReadingCategory.Judge && t.TrialReadingCriterionId == inQuery.TrialReadingCriterionId) == readingType ? ReadingStatusEnum.ImageReading : ReadingStatusEnum.TaskAllocate)), + var query = subjectVisitQuery.Union(readMouduleQuery) + .WhereIf(inQuery.SubjectId != null, x => x.Id == inQuery.SubjectId) + .WhereIf(!string.IsNullOrWhiteSpace(inQuery.TrialSiteCode), x => x.TrialSiteCode.Contains(inQuery.TrialSiteCode)) + .WhereIf(!string.IsNullOrWhiteSpace(inQuery.SubjectCode), x => x.SubjectCode.Contains(inQuery.SubjectCode)) + .WhereIf(isFilterModuleType, t => t.ModuleType == inQuery.ModuleType) + .WhereIf(isFilterName, t => t.Name == inQuery.Name) + .WhereIf(isFilterReadingStatus, t => t.ReadingStatus == inQuery.ReadingStatus) + .WhereIf(isFilterCompleteClinicalData && inQuery.CompleteClinicalData == CompleteClinicalDataEnum.NA, t => t.NeedSignClinicalDataCount == 0) + .WhereIf(isFilterCompleteClinicalData && inQuery.CompleteClinicalData == CompleteClinicalDataEnum.NotComplete, t => t.NeedSignClinicalDataCount != t.SignClinicalDataCount) + .WhereIf(isFilterCompleteClinicalData && inQuery.CompleteClinicalData == CompleteClinicalDataEnum.Complete, t => t.NeedSignClinicalDataCount == t.SignClinicalDataCount); + inQuery.SortField = string.IsNullOrWhiteSpace(inQuery.SortField) ? nameof(ReadModuleView.SubjectCode) : inQuery.SortField; + var subjectIdQuery = query.OrderBy(inQuery.SortField).Select(x => x.SubjectId).Distinct(); + var subjectIds = await subjectIdQuery.Skip((inQuery.PageIndex - 1) * inQuery.PageSize).Take(inQuery.PageSize).ToListAsync(); + var subjectCount = subjectIdQuery.Count(); - // //是否是截止访视? - // IsCanChangeCutOffVisit = false, + var viewList = await query.Where(x => subjectIds.Contains(x.SubjectId)).ToListAsync(); - // //需要签名数量计算 基线包含subject+访视级别的 - // NeedSignClinicalDataCount = sv.Trial.TrialReadingCriterionList.Where(t => t.Id == inQuery.TrialReadingCriterionId).SelectMany(u => u.TrialClinicalDataSetCriterionList).Where(t => t.TrialClinicalDataSet.IsConfirm == true). - // Where(t => sv.IsBaseLine ? t.TrialClinicalDataSet.ClinicalDataLevel <= ClinicalLevel.SubjectVisit : t.TrialClinicalDataSet.ClinicalDataLevel == ClinicalLevel.SubjectVisit).Count() - // + (sv.Trial.TrialReadingCriterionList.Where(t => t.Id == inQuery.TrialReadingCriterionId).SelectMany(u => u.TrialClinicalDataSetCriterionList).Where(t => t.TrialClinicalDataSet.IsConfirm == true) - // .Any(t => t.TrialClinicalDataSet.ClinicalDataLevel == ClinicalLevel.Study) ? 1 : 0), + var list= viewList.GroupBy(x => new { x.SubjectId, x.TrialSiteId, x.TrialSiteCode, x.SubjectCode }) + .Select(x => new GetReadModuleDtoOut() + { + TrialSiteCode = x.Key.TrialSiteCode, + TrialSiteId = x.Key.TrialSiteId, + SubjectCode = x.Key.SubjectCode, + SubjectId = x.Key.SubjectId, + Data = x.OrderBy(x => x.ModuleType).ThenBy(x => x.VisitNum).ToList(), + }).ToList(); - // //签名的数量 - - // SignClinicalDataCount = sv.ReadingClinicalDataList.Where(t => t.IsSign == true && t.ClinicalDataTrialSet.ClinicalDataLevel != ClinicalLevel.Study && - // t.ClinicalDataTrialSet.TrialClinicalDataSetCriteriaList.Any(t => t.TrialReadingCriterionId == inQuery.TrialReadingCriterionId)).Count() - // + - // (sv.SubmitState == SubmitStateEnum.Submitted && sv.Trial.ClinicalDataTrialSetList - // .Any(t => t.ClinicalDataLevel == ClinicalLevel.Study && t.TrialClinicalDataSetCriteriaList.Any(u => u.TrialReadingCriterionId == inQuery.TrialReadingCriterionId)) ? 1 : 0), - - - - - - // //标准名 应该是可以不查询的,只要保证逻辑正确 - // CriterionName = criterionInfo.CriterionName - - - //}) - //.Union(t.ReadModuleList.AsQueryable().Select(rm => new ReadModuleView() - //{ - // Id = rm.Id, - // CreateTime = rm.CreateTime, - // PDState = PDStateEnum.None, - // IsBaseLine = false, - // SubjectCode = rm.SubjectVisit.Subject.Code, - // IsEnrollmentConfirm = false, - // IsFinalVisit = false, - // SubjectId = rm.SubjectId, - // SubjectVisitId = rm.SubjectVisitId, - // IsUrgent = rm.SubjectVisit.IsUrgent, - // SubjectVisitName = rm.SubjectVisit.VisitName, - // IsVisit = false, - - // Name = rm.ModuleName, - // TrialSiteId = rm.Subject.TrialSiteId, - // TrialSiteCode = rm.Subject.TrialSite.TrialSiteCode, - - // TrialId = rm.TrialId, - // VisitNum = rm.SubjectVisit.VisitNum, - // TrialReadingCriterionId = inQuery.TrialReadingCriterionId, - - // OutPlanPreviousVisitId = null, - - // OutPlanPreviousVisitName = null, - - // ModuleType = rm.ModuleType, - - // //只有阅片期有 - // CutOffVisitId = rm.SubjectVisit.Id, - // CutOffVisitName = rm.SubjectVisit.VisitName, - // ReadingSetType = null, - - // //之前视图返回的null 应该是没用的? - // ReadModuleId = rm.Id, - // ReadModuleName = rm.ModuleName, - - // //是否是截止访视? - // IsCanChangeCutOffVisit = false, - - - // ///阅片状态 0 1 2 保持访视的,任务全做完了就是5 没完成就是4 否则就是3 - // ReadingStatus = rm.ReadingStatus < ReadingStatusEnum.TaskAllocate ? rm.ReadingStatus : - // (rm.ModuleTaskList.Count(t => t.TaskState == TaskState.Effect && t.IsAnalysisCreate == false && t.ReadingTaskState == ReadingTaskState.HaveSigned - // && t.ReadingCategory != ReadingCategory.Judge && t.TrialReadingCriterionId == inQuery.TrialReadingCriterionId) == readingType ? ReadingStatusEnum.ReadCompleted : - - // (rm.ModuleTaskList.Count(t => t.TaskState == TaskState.Effect && t.IsAnalysisCreate == false && t.TaskAllocationState == TaskAllocationState.Allocated - // && t.ReadingCategory != ReadingCategory.Judge && t.TrialReadingCriterionId == inQuery.TrialReadingCriterionId) == readingType ? ReadingStatusEnum.ImageReading : ReadingStatusEnum.TaskAllocate - // ) - // ), - - - - - - // //需要签名数量计算 基线包含subject+访视级别的 - // NeedSignClinicalDataCount = rm.Trial.TrialReadingCriterionList.Where(t => t.Id == inQuery.TrialReadingCriterionId).SelectMany(u => u.TrialClinicalDataSetCriterionList.Select(z => z.TrialClinicalDataSet)) - // .Where(t => t.IsConfirm == true && t.UploadRole == UploadRole.PM && (t.ClinicalDataLevel == ClinicalLevel.SubjectVisit || t.ClinicalDataLevel == ClinicalLevel.ImageRead || t.ClinicalDataLevel == ClinicalLevel.OncologyRead)).Count() - // + - // (rm.Trial.TrialReadingCriterionList.Where(t => t.Id == inQuery.TrialReadingCriterionId).SelectMany(u => u.TrialClinicalDataSetCriterionList.Select(z => z.TrialClinicalDataSet)) - // .Where(t => t.IsConfirm == true && t.UploadRole == UploadRole.CRC && - // (t.ClinicalDataLevel == ClinicalLevel.SubjectVisit || t.ClinicalDataLevel == ClinicalLevel.ImageRead || t.ClinicalDataLevel == ClinicalLevel.OncologyRead)).Any() ? 1 : 0) - // , - - // //签名的数量 - - // SignClinicalDataCount = rm.ReadingClinicalDataList.Where(t => t.IsSign == true && t.ClinicalDataTrialSet.UploadRole == UploadRole.PM && - // t.ClinicalDataTrialSet.TrialClinicalDataSetCriteriaList.Any(t => t.TrialReadingCriterionId == inQuery.TrialReadingCriterionId)).Count() - // + - // (rm.IsPMConfirm ? 1 : 0), - - - // //标准名 应该是可以不查询的,只要保证逻辑正确 - // CriterionName = criterionInfo.CriterionName - - //})).ToList() - - #endregion - - - - - - - }); - - var pageList = await query.Where(t=> (t.VisitData.Count + t.ReadMouduleData.Count)>0) - .ToPagedListAsync(inQuery); - - - return ResponseOutput.Ok(pageList, new + var pageOutput = new PageOutput() { - MaxLength = pageList.CurrentPageData.MaxOrDefault(t => t.Data.Count(),0), + PageSize = inQuery.PageSize, + CurrentPageData = list, + PageIndex = inQuery.PageIndex, + TotalCount = subjectCount, + }; + + #endregion + + return ResponseOutput.Ok(pageOutput, new + { + MaxLength = pageOutput.CurrentPageData.MaxOrDefault(t => t.Data.Count(), 0), IsReadingTaskViewInOrder = criterionInfo.IsReadingTaskViewInOrder, IsClinicalReading = criterionInfo.IsOncologyReading, // OnlyExistsMedicalHistory = !(await _clinicalDataTrialSetRepository.AnyAsync(x => x.TrialId == dto.TrialId && x.ClinicalDataSetName != "既往局部治疗史" && x.IsConfirm)), diff --git a/IRaCIS.Core.Infra.EFCore/Context/IRaCISDBContext.cs b/IRaCIS.Core.Infra.EFCore/Context/IRaCISDBContext.cs index 31bd49dc1..c755e150e 100644 --- a/IRaCIS.Core.Infra.EFCore/Context/IRaCISDBContext.cs +++ b/IRaCIS.Core.Infra.EFCore/Context/IRaCISDBContext.cs @@ -70,6 +70,7 @@ namespace IRaCIS.Core.Infra.EFCore protected override void OnModelCreating(ModelBuilder modelBuilder) { + //遍历实体模型手动配置 var typesToRegister = Assembly.GetExecutingAssembly().GetTypes().Where(q => q.GetInterface(typeof(IEntityTypeConfiguration<>).FullName) != null); foreach (var type in typesToRegister)