From bd4e4e0072c61077571abe5aeb8700be8c599c4f Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Mon, 2 Sep 2024 10:27:01 +0800 Subject: [PATCH] =?UTF-8?q?=E9=98=85=E7=89=87=E6=9C=9F=E6=9B=BF=E4=BB=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ReadingPeriod/ReadModuleService.cs | 165 +++++++++--------- .../Reading/ReadingPeriod/ReadModule.cs | 1 + IRaCIS.Core.Domain/Visit/SubjectVisit.cs | 3 + .../ReadModuleConfigration.cs | 18 ++ .../_IRaCIS/Input/PageInput.cs | 5 +- 5 files changed, 107 insertions(+), 85 deletions(-) create mode 100644 IRaCIS.Core.Infra.EFCore/EntityConfigration/ReadModuleConfigration.cs diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingPeriod/ReadModuleService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingPeriod/ReadModuleService.cs index 13d6b67e5..ddcc65d0b 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingPeriod/ReadModuleService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingPeriod/ReadModuleService.cs @@ -108,7 +108,7 @@ namespace IRaCIS.Application.Services /// /// [HttpPost] - public async Task>> GetReadModuleList_new(GetReadModuleDto inQuery) + public async Task>> GetReadModuleList(GetReadModuleDto inQuery) { var criterionInfo = await _readingQuestionCriterionTrialRepository.Where(t => t.Id == inQuery.TrialReadingCriterionId).Select(x => new @@ -572,7 +572,7 @@ namespace IRaCIS.Application.Services }); - var readMouduleQuery = _readModuleRepository.Where(t => t.TrialId == inQuery.TrialId) + var readMouduleQuery = _readModuleRepository.Where(t => t.TrialId == inQuery.TrialId && t.TrialReadingCriterionId==inQuery.TrialReadingCriterionId) .Select(rm => new ReadModuleView() { Id = rm.Id, @@ -594,7 +594,7 @@ namespace IRaCIS.Application.Services TrialId = rm.TrialId, VisitNum = rm.SubjectVisit.VisitNum, - TrialReadingCriterionId = inQuery.TrialReadingCriterionId, + TrialReadingCriterionId = rm.TrialReadingCriterionId, OutPlanPreviousVisitId = null, @@ -611,8 +611,9 @@ namespace IRaCIS.Application.Services ReadModuleId = rm.Id, ReadModuleName = rm.ModuleName, - //是否是截止访视? - IsCanChangeCutOffVisit = false, + //阅片期切换访视 限制(1、阅片期访视已完成了任务不能,如果本身是肿瘤学不能,或者本身是全局后续有肿瘤学) + IsCanChangeCutOffVisit = !(rm.ModuleTaskList.Any(t => t.TaskState == TaskState.Effect) && rm.ReadingSetType == ReadingSetType.TumorReading && + rm.SubjectVisit.ReadModuleList.Any(t => t.ReadingSetType == ReadingSetType.TumorReading)), ///阅片状态 0 1 2 保持访视的,任务全做完了就是5 没完成就是4 否则就是3 @@ -631,11 +632,11 @@ namespace IRaCIS.Application.Services ////需要签名数量计算 基线包含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() + .Where(t => t.IsConfirm == true && t.UploadRole == UploadRole.PM && (rm.ReadingSetType == ReadingSetType.ImageReading ? 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) + (rm.ReadingSetType == ReadingSetType.ImageReading ? t.ClinicalDataLevel == ClinicalLevel.ImageRead : t.ClinicalDataLevel == ClinicalLevel.OncologyRead)).Any() ? 1 : 0) , //签名的数量 @@ -669,9 +670,9 @@ namespace IRaCIS.Application.Services var subjectIds = await subjectIdQuery.Skip((inQuery.PageIndex - 1) * inQuery.PageSize).Take(inQuery.PageSize).ToListAsync(); var subjectCount = subjectIdQuery.Count(); - var viewList = await query.Where(x => subjectIds.Contains(x.SubjectId)).ToListAsync(); + var viewList = await query.Where(x => subjectIds.Contains(x.SubjectId)).SortToListAsync(inQuery); - var list= viewList.GroupBy(x => new { x.SubjectId, x.TrialSiteId, x.TrialSiteCode, x.SubjectCode }) + var list = viewList.GroupBy(x => new { x.SubjectId, x.TrialSiteId, x.TrialSiteCode, x.SubjectCode }) .Select(x => new GetReadModuleDtoOut() { TrialSiteCode = x.Key.TrialSiteCode, @@ -709,88 +710,88 @@ namespace IRaCIS.Application.Services }); } - /// - /// 获取读片模块 //加了标准参数 - /// - [HttpPost] - public async Task>> GetReadModuleList(GetReadModuleDto dto) - { + ///// + ///// 获取读片模块 //加了标准参数 + ///// + //[HttpPost] + //public async Task>> GetReadModuleList(GetReadModuleDto dto) + //{ - #region MyRegion + // #region MyRegion - if (dto.SortField.IsNullOrEmpty()) - { - dto.SortField = nameof(ReadModuleView.SubjectCode); - dto.Asc = true; - } + // if (dto.SortField.IsNullOrEmpty()) + // { + // dto.SortField = nameof(ReadModuleView.SubjectCode); + // dto.Asc = true; + // } - dto.SortField = dto.Asc ? dto.SortField : dto.SortField + " desc"; - var subjectQuery = _readModuleViewRepository.Where(x => x.TrialReadingCriterionId == dto.TrialReadingCriterionId) - .WhereIf(dto.TrialId != null, x => x.TrialId == dto.TrialId) - .WhereIf(dto.SubjectId != null, x => x.SubjectId == dto.SubjectId) - .WhereIf(dto.TrialSiteCode != null && dto.TrialSiteCode != string.Empty, x => x.TrialSiteCode.Contains(dto.TrialSiteCode)) - .WhereIf(dto.SubjectCode != null && dto.SubjectCode != string.Empty, x => x.SubjectCode.Contains(dto.SubjectCode)) - .WhereIf(dto.ModuleType != null, x => x.ModuleType == dto.ModuleType) - .WhereIf(dto.CompleteClinicalData == CompleteClinicalDataEnum.NA, x => x.NeedSignClinicalDataCount == 0) - .WhereIf(dto.CompleteClinicalData == CompleteClinicalDataEnum.NotComplete, x => x.NeedSignClinicalDataCount != x.SignClinicalDataCount) - .WhereIf(dto.CompleteClinicalData == CompleteClinicalDataEnum.Complete, x => x.NeedSignClinicalDataCount != 0 && x.NeedSignClinicalDataCount == x.SignClinicalDataCount) - .WhereIf(dto.ReadingStatus != null, x => x.ReadingStatus == dto.ReadingStatus); - //.WhereIf(dto.Name != null, x => x.Name.Contains(dto.Name!)).OrderBy(x => x.SiteCode); + // dto.SortField = dto.Asc ? dto.SortField : dto.SortField + " desc"; + // var subjectQuery = _readModuleViewRepository.Where(x => x.TrialReadingCriterionId == dto.TrialReadingCriterionId) + // .WhereIf(dto.TrialId != null, x => x.TrialId == dto.TrialId) + // .WhereIf(dto.SubjectId != null, x => x.SubjectId == dto.SubjectId) + // .WhereIf(dto.TrialSiteCode != null && dto.TrialSiteCode != string.Empty, x => x.TrialSiteCode.Contains(dto.TrialSiteCode)) + // .WhereIf(dto.SubjectCode != null && dto.SubjectCode != string.Empty, x => x.SubjectCode.Contains(dto.SubjectCode)) + // .WhereIf(dto.ModuleType != null, x => x.ModuleType == dto.ModuleType) + // .WhereIf(dto.CompleteClinicalData == CompleteClinicalDataEnum.NA, x => x.NeedSignClinicalDataCount == 0) + // .WhereIf(dto.CompleteClinicalData == CompleteClinicalDataEnum.NotComplete, x => x.NeedSignClinicalDataCount != x.SignClinicalDataCount) + // .WhereIf(dto.CompleteClinicalData == CompleteClinicalDataEnum.Complete, x => x.NeedSignClinicalDataCount != 0 && x.NeedSignClinicalDataCount == x.SignClinicalDataCount) + // .WhereIf(dto.ReadingStatus != null, x => x.ReadingStatus == dto.ReadingStatus); + // //.WhereIf(dto.Name != null, x => x.Name.Contains(dto.Name!)).OrderBy(x => x.SiteCode); - var subjectIds = await subjectQuery.OrderBy(dto.SortField).Select(x => x.SubjectId).Distinct().Skip((dto.PageIndex - 1) * dto.PageSize).Take(dto.PageSize).ToListAsync(); + // var subjectIds = await subjectQuery.OrderBy(dto.SortField).Select(x => x.SubjectId).Distinct().Skip((dto.PageIndex - 1) * dto.PageSize).Take(dto.PageSize).ToListAsync(); - List ReadModuleViewList = await subjectQuery.Where(x => subjectIds.Contains(x.SubjectId)).OrderBy(dto.SortField).ToListAsync(); - List getReadList = ReadModuleViewList.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(); - PageOutput pageOutput = new PageOutput() - { - PageSize = dto.PageSize, - CurrentPageData = getReadList, - PageIndex = dto.PageIndex, - TotalCount = await subjectQuery.Select(x => x.SubjectId).Distinct().CountAsync(), - }; - var maxcount = 0; - pageOutput.CurrentPageData.ForEach(x => - { - maxcount = maxcount < x.Data.Count ? x.Data.Count : maxcount; - }); + // List ReadModuleViewList = await subjectQuery.Where(x => subjectIds.Contains(x.SubjectId)).OrderBy(dto.SortField).ToListAsync(); + // List getReadList = ReadModuleViewList.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(); + // PageOutput pageOutput = new PageOutput() + // { + // PageSize = dto.PageSize, + // CurrentPageData = getReadList, + // PageIndex = dto.PageIndex, + // TotalCount = await subjectQuery.Select(x => x.SubjectId).Distinct().CountAsync(), + // }; + // var maxcount = 0; + // pageOutput.CurrentPageData.ForEach(x => + // { + // maxcount = maxcount < x.Data.Count ? x.Data.Count : maxcount; + // }); - var criterionInfo = await _readingQuestionCriterionTrialRepository.Where(x => x.Id == dto.TrialReadingCriterionId).Select(x => new - { - x.IsReadingTaskViewInOrder, - x.IsOncologyReading, - x.IsGlobalReading, - x.IsReadingPeriod, - x.ReadingInfoSignTime, - }).FirstNotNullAsync(); + // var criterionInfo = await _readingQuestionCriterionTrialRepository.Where(x => x.Id == dto.TrialReadingCriterionId).Select(x => new + // { + // x.IsReadingTaskViewInOrder, + // x.IsOncologyReading, + // x.IsGlobalReading, + // x.IsReadingPeriod, + // x.ReadingInfoSignTime, + // }).FirstNotNullAsync(); - return ResponseOutput.Ok(pageOutput, new - { - MaxLength = maxcount, - IsReadingTaskViewInOrder = criterionInfo.IsReadingTaskViewInOrder, - IsClinicalReading = criterionInfo.IsOncologyReading, - // OnlyExistsMedicalHistory = !(await _clinicalDataTrialSetRepository.AnyAsync(x => x.TrialId == dto.TrialId && x.ClinicalDataSetName != "既往局部治疗史" && x.IsConfirm)), - IsExistsSubjectClinicalData = await _clinicalDataTrialSetRepository.AnyAsync(x => x.TrialId == dto.TrialId && x.ClinicalDataLevel == ClinicalLevel.Subject && x.IsConfirm && x.TrialClinicalDataSetCriteriaList.Any(y => y.TrialReadingCriterionId == dto.TrialReadingCriterionId)), - IsExistsVisitClinicalData = await _clinicalDataTrialSetRepository.AnyAsync(x => x.TrialId == dto.TrialId && x.ClinicalDataLevel == ClinicalLevel.SubjectVisit && x.IsConfirm && x.TrialClinicalDataSetCriteriaList.Any(y => y.TrialReadingCriterionId == dto.TrialReadingCriterionId)), - IsExistsStudyClinicalData = await _clinicalDataTrialSetRepository.AnyAsync(x => x.TrialId == dto.TrialId && x.ClinicalDataLevel == ClinicalLevel.Study && x.IsConfirm && x.TrialClinicalDataSetCriteriaList.Any(y => y.TrialReadingCriterionId == dto.TrialReadingCriterionId)), - IsExistsReadingClinicalData = await _clinicalDataTrialSetRepository.AnyAsync(x => x.TrialId == dto.TrialId && x.ClinicalDataLevel == ClinicalLevel.ImageRead && x.IsConfirm && x.TrialClinicalDataSetCriteriaList.Any(y => y.TrialReadingCriterionId == dto.TrialReadingCriterionId)), - IsExistsOncologyReadClinicalData = await _clinicalDataTrialSetRepository.AnyAsync(x => x.TrialId == dto.TrialId && x.ClinicalDataLevel == ClinicalLevel.OncologyRead && x.IsConfirm && x.TrialClinicalDataSetCriteriaList.Any(y => y.TrialReadingCriterionId == dto.TrialReadingCriterionId)), - IsGlobalReading = criterionInfo.IsGlobalReading, - IsReadingPeriod = criterionInfo.IsReadingPeriod, - ReadingInfoSignTime = criterionInfo.ReadingInfoSignTime, - ExistClinicalData = await _clinicalDataTrialSetRepository.AnyAsync(x => x.IsConfirm && x.TrialClinicalDataSetCriteriaList.Any(y => y.TrialReadingCriterionId == dto.TrialReadingCriterionId)), - }); + // return ResponseOutput.Ok(pageOutput, new + // { + // MaxLength = maxcount, + // IsReadingTaskViewInOrder = criterionInfo.IsReadingTaskViewInOrder, + // IsClinicalReading = criterionInfo.IsOncologyReading, + // // OnlyExistsMedicalHistory = !(await _clinicalDataTrialSetRepository.AnyAsync(x => x.TrialId == dto.TrialId && x.ClinicalDataSetName != "既往局部治疗史" && x.IsConfirm)), + // IsExistsSubjectClinicalData = await _clinicalDataTrialSetRepository.AnyAsync(x => x.TrialId == dto.TrialId && x.ClinicalDataLevel == ClinicalLevel.Subject && x.IsConfirm && x.TrialClinicalDataSetCriteriaList.Any(y => y.TrialReadingCriterionId == dto.TrialReadingCriterionId)), + // IsExistsVisitClinicalData = await _clinicalDataTrialSetRepository.AnyAsync(x => x.TrialId == dto.TrialId && x.ClinicalDataLevel == ClinicalLevel.SubjectVisit && x.IsConfirm && x.TrialClinicalDataSetCriteriaList.Any(y => y.TrialReadingCriterionId == dto.TrialReadingCriterionId)), + // IsExistsStudyClinicalData = await _clinicalDataTrialSetRepository.AnyAsync(x => x.TrialId == dto.TrialId && x.ClinicalDataLevel == ClinicalLevel.Study && x.IsConfirm && x.TrialClinicalDataSetCriteriaList.Any(y => y.TrialReadingCriterionId == dto.TrialReadingCriterionId)), + // IsExistsReadingClinicalData = await _clinicalDataTrialSetRepository.AnyAsync(x => x.TrialId == dto.TrialId && x.ClinicalDataLevel == ClinicalLevel.ImageRead && x.IsConfirm && x.TrialClinicalDataSetCriteriaList.Any(y => y.TrialReadingCriterionId == dto.TrialReadingCriterionId)), + // IsExistsOncologyReadClinicalData = await _clinicalDataTrialSetRepository.AnyAsync(x => x.TrialId == dto.TrialId && x.ClinicalDataLevel == ClinicalLevel.OncologyRead && x.IsConfirm && x.TrialClinicalDataSetCriteriaList.Any(y => y.TrialReadingCriterionId == dto.TrialReadingCriterionId)), + // IsGlobalReading = criterionInfo.IsGlobalReading, + // IsReadingPeriod = criterionInfo.IsReadingPeriod, + // ReadingInfoSignTime = criterionInfo.ReadingInfoSignTime, + // ExistClinicalData = await _clinicalDataTrialSetRepository.AnyAsync(x => x.IsConfirm && x.TrialClinicalDataSetCriteriaList.Any(y => y.TrialReadingCriterionId == dto.TrialReadingCriterionId)), + // }); - #endregion - } + // #endregion + //} diff --git a/IRaCIS.Core.Domain/Reading/ReadingPeriod/ReadModule.cs b/IRaCIS.Core.Domain/Reading/ReadingPeriod/ReadModule.cs index 954b857db..5be3f9597 100644 --- a/IRaCIS.Core.Domain/Reading/ReadingPeriod/ReadModule.cs +++ b/IRaCIS.Core.Domain/Reading/ReadingPeriod/ReadModule.cs @@ -47,6 +47,7 @@ namespace IRaCIS.Core.Domain.Models public List ReadModuleCriterionFromList { get; set; } = new List(); + [JsonIgnore] public List ModuleTaskList { get; set; } [JsonIgnore] diff --git a/IRaCIS.Core.Domain/Visit/SubjectVisit.cs b/IRaCIS.Core.Domain/Visit/SubjectVisit.cs index e0e61e5f0..eaa1465a8 100644 --- a/IRaCIS.Core.Domain/Visit/SubjectVisit.cs +++ b/IRaCIS.Core.Domain/Visit/SubjectVisit.cs @@ -53,6 +53,9 @@ namespace IRaCIS.Core.Domain.Models public Trial Trial { get; set; } + [JsonIgnore] + public List ReadModuleList { get; set; } + [JsonIgnore] [ForeignKey("SubjectId")] diff --git a/IRaCIS.Core.Infra.EFCore/EntityConfigration/ReadModuleConfigration.cs b/IRaCIS.Core.Infra.EFCore/EntityConfigration/ReadModuleConfigration.cs new file mode 100644 index 000000000..5d7c8d501 --- /dev/null +++ b/IRaCIS.Core.Infra.EFCore/EntityConfigration/ReadModuleConfigration.cs @@ -0,0 +1,18 @@ +using IRaCIS.Core.Domain.Models; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Metadata.Builders; + + +namespace IRaCIS.Core.Infra.EFCore.EntityConfigration +{ + public class ReadModuleConfigration : IEntityTypeConfiguration + { + + + public void Configure(EntityTypeBuilder builder) + { + + builder.HasOne(t => t.SubjectVisit).WithMany(t => t.ReadModuleList); + } + } +} diff --git a/IRaCIS.Core.Infrastructure/_IRaCIS/Input/PageInput.cs b/IRaCIS.Core.Infrastructure/_IRaCIS/Input/PageInput.cs index b3dad6a0a..b1a6978fe 100644 --- a/IRaCIS.Core.Infrastructure/_IRaCIS/Input/PageInput.cs +++ b/IRaCIS.Core.Infrastructure/_IRaCIS/Input/PageInput.cs @@ -5,12 +5,11 @@ namespace IRaCIS.Core.Infrastructure.Extention /// /// 分页信息输入 /// - public class PageInput + public class PageInput: SortInput { public int PageIndex { get; set; } = 1; public int PageSize { set; get; } = 10; - public bool Asc { get; set; } = true; - public string SortField { get; set; } = ""; + } public class SortInput