From 594849529c7a57453fbb4ce798220d996ac458ba Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Thu, 11 Aug 2022 16:52:13 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Dto/ReadingMedicineQuestionViewModel.cs | 4 ++ .../Service/Reading/ReadModuleService.cs | 2 +- .../Reading/ReadingClinicalDataService.cs | 15 +++++-- .../Reading/ReadingMedicineQuestionService.cs | 43 ++++++++++++++----- IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs | 12 ++++-- 5 files changed, 59 insertions(+), 17 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingMedicineQuestionViewModel.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingMedicineQuestionViewModel.cs index 6b67b73bc..86782970a 100644 --- a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingMedicineQuestionViewModel.cs +++ b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingMedicineQuestionViewModel.cs @@ -117,6 +117,10 @@ namespace IRaCIS.Core.Application.ViewModel public int? ParentShowOrder { get; set; } + /// + /// 任务类型 + /// + public ReadingCategory ReadingCategory { get; set; } } /// diff --git a/IRaCIS.Core.Application/Service/Reading/ReadModuleService.cs b/IRaCIS.Core.Application/Service/Reading/ReadModuleService.cs index 797db83ec..1e3c4f453 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadModuleService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadModuleService.cs @@ -205,7 +205,7 @@ namespace IRaCIS.Application.Services 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), IsExistsVisitClinicalData = await _clinicalDataTrialSetRepository.AnyAsync(x => x.TrialId == dto.TrialId && x.ClinicalDataLevel == ClinicalLevel.SubjectVisit && x.IsConfirm), - IsExistsReadingClinicalData = await _clinicalDataTrialSetRepository.AnyAsync(x => x.TrialId == dto.TrialId && x.ClinicalDataLevel == ClinicalLevel.Read && x.IsConfirm), + IsExistsReadingClinicalData = await _clinicalDataTrialSetRepository.AnyAsync(x => x.TrialId == dto.TrialId && x.ClinicalDataLevel == ClinicalLevel.ImageRead && x.IsConfirm), IsGlobalReading= trialinfo.IsGlobalReading, }) ; diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingClinicalDataService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingClinicalDataService.cs index 914a02212..59e6416ee 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingClinicalDataService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingClinicalDataService.cs @@ -137,7 +137,7 @@ namespace IRaCIS.Application.Services await this.AddCRCClinicalData(inDto); List cRCClinicalDataList = await _readingClinicalDataRepository.Where(x => x.ReadingId == inDto.SubjectVisitId) - .Where(x => x.ClinicalDataTrialSet.TrialId == inDto.TrialId && x.ClinicalDataTrialSet.UploadRole == UploadRole.CRC && x.ClinicalDataTrialSet.ClinicalDataLevel != ClinicalLevel.Read && x.ClinicalDataTrialSet.IsConfirm) + .Where(x => x.ClinicalDataTrialSet.TrialId == inDto.TrialId && x.ClinicalDataTrialSet.UploadRole == UploadRole.CRC && x.ClinicalDataTrialSet.ClinicalDataLevel != ClinicalLevel.ImageRead && x.ClinicalDataTrialSet.ClinicalDataLevel != ClinicalLevel.OncologyRead && x.ClinicalDataTrialSet.IsConfirm) .Select(x => new GetCRCClinicalDataOutDto() { Id = x.Id, @@ -180,7 +180,7 @@ namespace IRaCIS.Application.Services /// private async Task AddCRCClinicalData(GetCRCClinicalDataInDto inDto) { - var cRCClinicalDataIds = await _clinicalDataTrialSetRepository.Where(x => x.TrialId == inDto.TrialId && x.UploadRole == UploadRole.CRC && x.ClinicalDataLevel != ClinicalLevel.Read && x.IsConfirm).Select(x => x.Id).ToListAsync(); + var cRCClinicalDataIds = await _clinicalDataTrialSetRepository.Where(x => x.TrialId == inDto.TrialId && x.UploadRole == UploadRole.CRC && x.ClinicalDataLevel != ClinicalLevel.ImageRead && x.ClinicalDataLevel != ClinicalLevel.OncologyRead && x.IsConfirm).Select(x => x.Id).ToListAsync(); var needAddIds = cRCClinicalDataIds.Where(x => _readingClinicalDataRepository.Where(y => y.ReadingId == inDto.SubjectVisitId && x == y.ClinicalDataTrialSetId).Count() == 0).ToList(); @@ -248,7 +248,15 @@ namespace IRaCIS.Application.Services inDto.UploadRole = UploadRole.PM; } + ReadModule readModule = null; + if (inDto.ReadingId != null) + { + readModule = await _readModuleRepository.Where(x => x.Id ==inDto.ReadingId).FirstNotNullAsync(); + } + Dictionary keyValuePairs = new Dictionary(); + keyValuePairs.Add(ModuleTypeEnum.Global, ClinicalLevel.ImageRead); + keyValuePairs.Add(ModuleTypeEnum.Oncology, ClinicalLevel.OncologyRead); var usedIdsQuery = _readingClinicalDataRepository.Where(x => x.ReadingId == inDto.ReadingId && x.Id != inDto.ReadingClinicalDataId).Select(x => x.ClinicalDataTrialSetId); List clinicalList = await _clinicalDataTrialSetRepository.Where(x => x.TrialId == inDto.TrialId && x.IsConfirm) @@ -256,7 +264,8 @@ namespace IRaCIS.Application.Services .Where(x => !usedIdsQuery.Contains(x.Id)) .WhereIf(inDto.IsVisit && inDto.IsBaseLine, x => x.ClinicalDataLevel == ClinicalLevel.Subject || x.ClinicalDataLevel == ClinicalLevel.SubjectVisit) .WhereIf(inDto.IsVisit && !inDto.IsBaseLine, x => x.ClinicalDataLevel == ClinicalLevel.SubjectVisit) - .WhereIf(!inDto.IsVisit, x => x.ClinicalDataLevel == ClinicalLevel.Read) + .WhereIf(!inDto.IsVisit, x => x.ClinicalDataLevel == ClinicalLevel.ImageRead||x.ClinicalDataLevel==ClinicalLevel.OncologyRead) + .WhereIf(readModule!=null, x => x.ClinicalDataLevel == keyValuePairs[readModule.ModuleType]) .Select(x => new GetTrialClinicalDataSelectOutDto() { ClinicalDataLevel = x.ClinicalDataLevel, diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingMedicineQuestionService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingMedicineQuestionService.cs index 3ad41540a..251c08350 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingMedicineQuestionService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingMedicineQuestionService.cs @@ -7,6 +7,7 @@ using IRaCIS.Core.Infra.EFCore.Common; using MassTransit; using IRaCIS.Core.Infrastructure; using IRaCIS.Core.Application.Contracts; +using IRaCIS.Core.Domain.Share; namespace IRaCIS.Core.Application.Service { @@ -220,7 +221,7 @@ namespace IRaCIS.Core.Application.Service var needList= systemList.Select(x => new ReadingMedicineTrialQuestion() { Id = NewId.NextGuid(), - ShowOrder = maxOrder++, + ShowOrder = x.ShowOrder, IsEnable = x.IsEnable, IsRequired = x.IsRequired, QuestionName = x.QuestionName, @@ -230,7 +231,9 @@ namespace IRaCIS.Core.Application.Service TrialId=inDto.TrialId, }).ToList(); - + needList.ForEach(x => { + x.ShowOrder = maxOrder++; + }); await _readingMedicineTrialQuestionRepository.AddRangeAsync(needList); var result = await _readingMedicineTrialQuestionRepository.SaveChangesAsync(); @@ -255,18 +258,19 @@ namespace IRaCIS.Core.Application.Service } - /// - /// 确认医学审核问题 - /// - /// - public async Task ConfirmReadingMedicineQuestion(ConfirmReadingMedicineQuestionInDto inDto) - { + /// + /// 确认医学审核问题 + /// + /// + public async Task ConfirmReadingMedicineQuestion(ConfirmReadingMedicineQuestionInDto inDto) + { var readingMedicineQuestionList = await _readingMedicineTrialQuestionRepository.Where(x => x.TrialId == inDto.TrialId) .Select(x => new TrialQuestion() { Id = x.Id, + ReadingCategory = x.ReadingCategory, ParentShowOrder = (int?)x.ParentQuestion.ShowOrder, - ShowOrder=x.ShowOrder, - }).ToListAsync(); + ShowOrder = x.ShowOrder, + }).ToListAsync(); if (readingMedicineQuestionList.Count == 0) { throw new BusinessValidationFailedException("当前未添加医学审核问题。请先添加医学审核问题,再进行确认。"); @@ -284,6 +288,25 @@ namespace IRaCIS.Core.Application.Service } + var trialInfo = await _trialRepository.Where(x => x.Id == inDto.TrialId).FirstNotNullAsync(); + + if (trialInfo.IsGlobalReading && !readingMedicineQuestionList.Any(x => x.ReadingCategory == ReadingCategory.Global)) + { + throw new BusinessValidationFailedException("当前项目启用了全局阅片,但未配置全局医学审核问题"); + } + + if (trialInfo.IsArbitrationReading??false && !readingMedicineQuestionList.Any(x => x.ReadingCategory == ReadingCategory.Judge)) + { + throw new BusinessValidationFailedException("当前项目启用了仲裁阅片,但未配置仲裁医学审核问题"); + } + + if (trialInfo.IsClinicalReading && !readingMedicineQuestionList.Any(x => x.ReadingCategory == ReadingCategory.Oncology)) + { + throw new BusinessValidationFailedException("当前项目启用了肿瘤学阅片,但未配置肿瘤学医学审核问题"); + } + + + await _readingMedicineTrialQuestionRepository.BatchUpdateNoTrackingAsync(x => x.TrialId == inDto.TrialId, x => new ReadingMedicineTrialQuestion() { IsConfirm = true diff --git a/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs b/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs index 2ce8e0b0a..0513fde29 100644 --- a/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs +++ b/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs @@ -173,10 +173,16 @@ namespace IRaCIS.Core.Domain.Share SubjectVisit = 1, /// - /// 阅片 + /// 影像学阅片 /// - [DisplayAttribute(Name = "阅片")] - Read = 2, + [DisplayAttribute(Name = "影像学阅片")] + ImageRead = 2, + + /// + /// 肿瘤学阅片 + /// + [DisplayAttribute(Name = "肿瘤学阅片")] + OncologyRead = 3, } ///