From 260e29989c139d8cda4230795d7a97a175ef4fb1 Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Wed, 12 Jul 2023 15:13:26 +0800 Subject: [PATCH] =?UTF-8?q?S-49=20=E4=BB=BB=E5=8A=A1=E7=9A=84=E4=B8=B4?= =?UTF-8?q?=E5=BA=8A=E7=8A=B6=E6=80=81=E7=BB=B4=E6=8A=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ClinicalData/ClinicalAnswerService.cs | 18 ++++++++--- .../ReadingClinicalDataService.cs | 32 ++++++++++++++++--- .../Interface/IReadingClinicalDataService.cs | 2 ++ 3 files changed, 43 insertions(+), 9 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs index 06da45ebb..f5f4f6424 100644 --- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs @@ -15,6 +15,7 @@ using IRaCIS.Core.Infrastructure; using IRaCIS.Core.Domain.Models; using IRaCIS.Core.Infrastructure.Extention; using IRaCIS.Core.Application.Service.Reading.Interface; +using IRaCIS.Core.Application.Contracts; namespace IRaCIS.Core.Application.Service { @@ -51,6 +52,8 @@ namespace IRaCIS.Core.Application.Service private readonly IClinicalQuestionService _iClinicalQuestionService; + private readonly IReadingClinicalDataService _iReadingClinicalDataService; + public ClinicalAnswerService(IRepository trialClinicalQuestionRepository, IRepository systemClinicalTableQuestionRepository, @@ -58,7 +61,8 @@ namespace IRaCIS.Core.Application.Service IRepository readingClinicalDataRepository, IRepository clinicalFormRepository, IRepository subjectRepository, - IRepository readModuleCriterionFromRepository, + IReadingClinicalDataService iReadingClinicalDataService + IRepository readModuleCriterionFromRepository, IRepository readModuleRepository, IRepository subjectVisitRepository, IRepository clinicalTableAnswerRepository, @@ -78,8 +82,8 @@ namespace IRaCIS.Core.Application.Service _trialClinicalTableQuestionRepository = trialClinicalTableQuestionRepository; _systemClinicalQuestionRepository = systemClinicalQuestionRepository; _clinicalDataTrialSetRepository = clinicalDataTrialSetRepository; - - _clinicalFormRepository = clinicalFormRepository; + _iReadingClinicalDataService = iReadingClinicalDataService; + _clinicalFormRepository = clinicalFormRepository; this._subjectRepository = subjectRepository; this._readModuleCriterionFromRepository = readModuleCriterionFromRepository; this._readModuleRepository = readModuleRepository; @@ -860,6 +864,8 @@ namespace IRaCIS.Core.Application.Service { IsPMConfirm = true }); + await _readModuleRepository.SaveChangesAsync(); + await _iReadingClinicalDataService.DealVisiTaskClinicalDataSignedAsync(inDto.TrialId, inDto.SubjectId, inDto.ReadModuleId, false, readModuleData.TrialReadingCriterionId); } else { @@ -870,11 +876,13 @@ namespace IRaCIS.Core.Application.Service }); await _readModuleCriterionFromRepository.BatchDeleteNoTrackingAsync(x=>x.ReadModuleId== x.Id); - + await _readModuleRepository.SaveChangesAsync(); + + } - await _readModuleRepository.SaveChangesAsync(); + return ResponseOutput.Ok(true); } diff --git a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs index 5a98ee91a..db3ea8f62 100644 --- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs @@ -303,7 +303,7 @@ namespace IRaCIS.Application.Services } //处理 任务 临床数据是否签名 - private async Task DealVisiTaskClinicalDataSignedAsync(Guid trialId, Guid subjectId, Guid readingId, bool isVisit, Guid trialReadingCritrialId) + public async Task DealVisiTaskClinicalDataSignedAsync(Guid trialId, Guid subjectId, Guid readingId, bool isVisit, Guid trialReadingCritrialId) { //获取确认的临床数据配置 var trialClinicalDataSetList = _clinicalDataTrialSetRepository.Where(t => t.TrialId == trialId && t.IsConfirm).Include(t => t.TrialClinicalDataSetCriteriaList).ToList(); @@ -321,6 +321,8 @@ namespace IRaCIS.Application.Services { var isBaseLine = await _subjectVisitRepository.Where(t => t.Id == readingId).Select(t => t.IsBaseLine).FirstOrDefaultAsync(); + + //判断是否基线 if (isBaseLine) { @@ -349,21 +351,43 @@ namespace IRaCIS.Application.Services else { //判断是影像学 还是肿瘤学阅片 - var readingSetType = await _readModuleRepository.Where(t => t.Id == readingId).Select(t => t.ReadingSetType).FirstOrDefaultAsync(); + var readModule = await _readModuleRepository.Where(t => t.Id == readingId).FirstNotNullAsync(); + + //CRC 阅片期自定义结构化录入是否签名 + bool crcReadModuleSign = true; //影像学 - if (readingSetType == ReadingSetType.ImageReading) + if (readModule.ReadingSetType == ReadingSetType.ImageReading) { needSignCount = trialClinicalDataSetList.Where(t => t.TrialClinicalDataSetCriteriaList.Any(c => c.TrialReadingCriterionId == trialReadingCritrialId) && t.ClinicalDataLevel == ClinicalLevel.ImageRead).Count(); + + // 不存在需要CRC上传的临床数据 或者 PM已确认 + crcReadModuleSign = + !trialClinicalDataSetList.Any(x => + x.UploadRole == UploadRole.CRC + && x.ClinicalDataLevel == ClinicalLevel.ImageRead + && x.ClinicalUploadType == ClinicalUploadType.Structuring + && x.TrialClinicalDataSetCriteriaList.Any(c => c.TrialReadingCriterionId == trialReadingCritrialId)) || readModule.IsPMConfirm; + + } //肿瘤学 else { needSignCount = trialClinicalDataSetList.Where(t => t.TrialClinicalDataSetCriteriaList.Any(c => c.TrialReadingCriterionId == trialReadingCritrialId) && t.ClinicalDataLevel == ClinicalLevel.OncologyRead).Count(); + + // 不存在需要CRC上传的临床数据 或者 PM已确认 + crcReadModuleSign = + !trialClinicalDataSetList.Any(x => + x.UploadRole == UploadRole.CRC + && x.ClinicalDataLevel == ClinicalLevel.OncologyRead + && x.ClinicalUploadType == ClinicalUploadType.Structuring + && x.TrialClinicalDataSetCriteriaList.Any(c => c.TrialReadingCriterionId == trialReadingCritrialId)) || readModule.IsPMConfirm; + } //可能仅仅CRC 基线 没有PM - if (needSignCount == haveSignedCount /*&& needSignCount != 0*/) + if (needSignCount == haveSignedCount && crcReadModuleSign/*&& needSignCount != 0*/) { //将该标准 该subject 该阅片期|肿瘤学 任务临床数据状态变更 await _visitTaskRepository.BatchUpdateNoTrackingAsync(t => t.TrialId == trialId && t.SubjectId == subjectId && t.TrialReadingCriterionId == trialReadingCritrialId && t.SouceReadModuleId == readingId, u => new VisitTask() diff --git a/IRaCIS.Core.Application/Service/Reading/Interface/IReadingClinicalDataService.cs b/IRaCIS.Core.Application/Service/Reading/Interface/IReadingClinicalDataService.cs index 1d1f3f62d..94705f59a 100644 --- a/IRaCIS.Core.Application/Service/Reading/Interface/IReadingClinicalDataService.cs +++ b/IRaCIS.Core.Application/Service/Reading/Interface/IReadingClinicalDataService.cs @@ -23,5 +23,7 @@ namespace IRaCIS.Core.Application.Contracts // Task<(List, object)> GetReadingClinicalDataList(GetReadingClinicalDataListIndto inDto); Task> GetReadingClinicalList(GetReadingClinicalDataListIndto inDto); + + Task DealVisiTaskClinicalDataSignedAsync(Guid trialId, Guid subjectId, Guid readingId, bool isVisit, Guid trialReadingCritrialId); } } \ No newline at end of file