From 02dd9aca328784dfa5e89d00452db88d733d66e2 Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Wed, 28 Jun 2023 13:56:11 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ClinicalData/ClinicalAnswerService.cs | 162 +++++++++++++++--- .../Service/Reading/Dto/ClinicalAnswerDto.cs | 32 +++- 2 files changed, 168 insertions(+), 26 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs index 7fa925768..f20afae29 100644 --- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs @@ -13,6 +13,7 @@ using IRaCIS.Core.Domain.Share; using MassTransit; using IRaCIS.Core.Infrastructure; using IRaCIS.Core.Domain.Models; +using IRaCIS.Core.Infrastructure.Extention; namespace IRaCIS.Core.Application.Service { @@ -34,65 +35,186 @@ namespace IRaCIS.Core.Application.Service private readonly IRepository _clinicalDataTrialSetRepository; - private readonly IRepository _clinicalFormRepository; - - private readonly IRepository _clinicalQuestionAnswerRepository; + private readonly IRepository _clinicalFormRepository; + private readonly IRepository _subjectRepository; + private readonly IRepository _clinicalQuestionAnswerRepository; private readonly IRepository _clinicalTableAnswerRepository; private readonly IRepository _clinicalAnswerRowInfoRepository; - private readonly IClinicalQuestionService _iClinicalQuestionService; + private readonly IRepository _readingClinicalDataRepository; + private readonly IRepository _subjectVisitRepository; + + private readonly IClinicalQuestionService _iClinicalQuestionService; public ClinicalAnswerService(IRepository trialClinicalQuestionRepository, IRepository systemClinicalTableQuestionRepository, IRepository trialClinicalTableQuestionRepository, - IRepository clinicalFormRepository, - IRepository clinicalTableAnswerRepository, + IRepository readingClinicalDataRepository, + IRepository clinicalFormRepository, + IRepository subjectRepository, + IRepository subjectVisitRepository, + IRepository clinicalTableAnswerRepository, IRepository clinicalQuestionAnswerRepository, IClinicalQuestionService iClinicalQuestionService, IRepository clinicalAnswerRowInfoRepository, IRepository clinicalDataTrialSetRepository, - IRepository systemClinicalQuestionRepository + IRepository systemClinicalQuestionRepository ) { - _clinicalAnswerRowInfoRepository = clinicalAnswerRowInfoRepository; + _subjectVisitRepository = subjectVisitRepository; + _readingClinicalDataRepository = readingClinicalDataRepository; + _clinicalAnswerRowInfoRepository = clinicalAnswerRowInfoRepository; _clinicalQuestionAnswerRepository = clinicalQuestionAnswerRepository; _systemClinicalTableQuestionRepository = systemClinicalTableQuestionRepository; _trialClinicalQuestionRepository = trialClinicalQuestionRepository; _trialClinicalTableQuestionRepository = trialClinicalTableQuestionRepository; _systemClinicalQuestionRepository = systemClinicalQuestionRepository; _clinicalDataTrialSetRepository = clinicalDataTrialSetRepository; - _clinicalFormRepository = clinicalFormRepository; - _clinicalTableAnswerRepository = clinicalTableAnswerRepository; + + _clinicalFormRepository = clinicalFormRepository; + this._subjectRepository = subjectRepository; + _clinicalTableAnswerRepository = clinicalTableAnswerRepository; _iClinicalQuestionService = iClinicalQuestionService; } /// - /// 获取CRC受试者临床数据 + /// 自动添加CRC临床数据 /// /// /// - [HttpPost] - public async Task> GetCRCSubjectClinicalList(GetCRCSubjectClinicalInDto inDto) + public async Task AutoAddCRCClinical(AutoAddClinicalInDto inDto) { - var result =await _clinicalDataTrialSetRepository.Where(x => x.TrialId == inDto.TrialId).OrderBy(x=>x.ClinicalDataSetName).Select(x => new GetCRCSubjectClinicalOutDto() + var dataTrialSetList = await _clinicalDataTrialSetRepository.Where(x =>x.TrialId == inDto.TrialId && x.UploadRole == UploadRole.CRC && x.IsConfirm) + .IgnoreAutoIncludes().ToListAsync(); + var baseLine = await _subjectVisitRepository.Where(x => x.TrialId == inDto.TrialId) + .WhereIf(inDto.SubjectId!=null,x=>x.SubjectId==inDto.SubjectId) + + .Select(x => new { - ClinicalDataTrialSetId = x.Id, - ClinicalDataSetName = x.ClinicalDataSetName.LanguageName(x.ClinicalDataSetEnName, _userInfo.IsEn_Us), + x.SubjectId, + VisitId = x.Id, + x.IsBaseLine, + }).ToListAsync(); + + var clinicalDataList =await _readingClinicalDataRepository.Where(x =>x.TrialId==inDto.TrialId&&x.ClinicalDataTrialSet.UploadRole== UploadRole.CRC).IgnoreAutoIncludes().ToListAsync(); + + List readingClinicalDatas = new List(); + + baseLine.Select(x => x.SubjectId).Distinct().ForEach(n => + { + var baseLineVisitId = baseLine.Where(x => x.IsBaseLine && x.SubjectId == n).Select(x => x.VisitId).First(); + readingClinicalDatas.AddRange( + dataTrialSetList.Where(x => x.ClinicalDataLevel == ClinicalLevel.Subject).Where(x => clinicalDataList.Where(y => y.ClinicalDataTrialSetId == x.Id && y.SubjectId == n).Count() == 0) + .Select(x => new ReadingClinicalData() + { + ClinicalDataTrialSetId = x.Id, + IsVisit = true, + SubjectId = n, + ReadingId = baseLineVisitId, + TrialId = inDto.TrialId + }).ToList()); + + + readingClinicalDatas.AddRange( + dataTrialSetList.Where(x => x.ClinicalDataLevel == ClinicalLevel.ImageRead).Where(x => clinicalDataList.Where(y => y.ClinicalDataTrialSetId == x.Id && y.SubjectId == n).Count() == 0) + .Select(x => new ReadingClinicalData() + { + ClinicalDataTrialSetId = x.Id, + IsVisit = false, + SubjectId = n, + ReadingId = default(Guid), + TrialId = inDto.TrialId + }).ToList()); + + readingClinicalDatas.AddRange( + dataTrialSetList.Where(x => x.ClinicalDataLevel == ClinicalLevel.OncologyRead).Where(x => clinicalDataList.Where(y => y.ClinicalDataTrialSetId == x.Id && y.SubjectId == n).Count() == 0) + .Select(x => new ReadingClinicalData() + { + ClinicalDataTrialSetId = x.Id, + IsVisit = false, + SubjectId = n, + ReadingId = default(Guid), + TrialId = inDto.TrialId + }).ToList()); + }); + + baseLine.ForEach(n => + { + readingClinicalDatas.AddRange( + dataTrialSetList.Where(x => x.ClinicalDataLevel == ClinicalLevel.SubjectVisit).Where(x => clinicalDataList.Where(y => y.ClinicalDataTrialSetId == x.Id && y.ReadingId == n.VisitId).Count() == 0) + .Select(x => new ReadingClinicalData() + { + ClinicalDataTrialSetId = x.Id, + IsVisit = true, + SubjectId = n.SubjectId, + ReadingId = n.VisitId, + TrialId = inDto.TrialId + }).ToList()); + }); + + await _readingClinicalDataRepository.AddRangeAsync(readingClinicalDatas); + + await _readingClinicalDataRepository.SaveChangesAsync(); + + + } + + /// + /// 获取CRC受试者临床数据 + /// + /// + /// + [HttpPost] + public async Task> GetCRCSubjectClinicalList(GetCRCSubjectClinicalInDto inDto) + { + + await AutoAddCRCClinical(new AutoAddClinicalInDto() + { + + TrialId = inDto.TrialId + }) ; + + + + var subjects = await _subjectRepository.Where(x => x.TrialId == inDto.TrialId).Select(x => new GetCRCSubjectClinicalResultDto() + { + SubjectId = x.Id, + SunjectCode = x.ShortName }).ToListAsync(); - var clinicalData = await _clinicalFormRepository.Where(x => x.SubjectId == inDto.TrialId).ToListAsync(); + var clinicalData=await _readingClinicalDataRepository.Where(x=>x.TrialId == inDto.TrialId&&x.ClinicalDataTrialSet.UploadRole==UploadRole.CRC&&x.ClinicalDataTrialSet.ClinicalDataLevel!= ClinicalLevel.SubjectVisit) + .Include(x=>x.ClinicalDataTrialSet).Select(x=>new GetCRCSubjectClinicalOutDto() { + SubjectId=x.SubjectId, + ClinicalDataTrialSetId = x.ClinicalDataTrialSet.Id, + ClinicalDataSetName = x.ClinicalDataTrialSet.ClinicalDataSetName.LanguageName(x.ClinicalDataTrialSet.ClinicalDataSetEnName, _userInfo.IsEn_Us), + }).OrderBy(x=>x.ClinicalDataSetName).ToListAsync(); - result.ForEach(x => + + + + var clinicalFormData = await _clinicalFormRepository.Where(x => x.SubjectId == inDto.TrialId).ToListAsync(); + + subjects.ForEach(x => { - x.ClinicalCount = clinicalData.Where(y => y.ClinicalDataTrialSetId == x.ClinicalDataTrialSetId).Count(); + + x.ClinicalDataList = clinicalData.Where(y => y.SubjectId == x.SubjectId).ToList(); + + x.ClinicalDataList.ForEach(n => + { + n.ClinicalCount = clinicalData.Where(y => y.ClinicalDataTrialSetId == n.ClinicalDataTrialSetId && y.SubjectId == n.SubjectId).Count(); + }); + }); - return result; + + + + return subjects; } /// diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalAnswerDto.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalAnswerDto.cs index 49806b73a..80825b48d 100644 --- a/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalAnswerDto.cs +++ b/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalAnswerDto.cs @@ -6,27 +6,47 @@ using System.Threading.Tasks; namespace IRaCIS.Core.Application.Service.Reading.Dto { - public class GetCRCSubjectClinicalInDto - { - public Guid SubjectId { get; set; } + public class AutoAddClinicalInDto + { + public Guid? SubjectId { get; set; } + + //public Guid? VisitId { get; set; } + + public Guid TrialId { get; set; } + } + + + public class GetCRCSubjectClinicalInDto + { public Guid TrialId { get; set; } } public class GetCRCSubjectClinicalOutDto { - public Guid ClinicalDataTrialSetId { get; set; } + public Guid SubjectId { get; set; } + public Guid ClinicalDataTrialSetId { get; set; } public string ClinicalDataSetName { get; set; } - public int ClinicalCount { get; set; } + public int ClinicalCount { get; set; } = 0; } + public class GetCRCSubjectClinicalResultDto + { + public Guid SubjectId { get; set; } + + public string SunjectCode { get; set; } + + public List ClinicalDataList { get; set; } + } - public class GetClinicalQuestionAnswerListInDto + + + public class GetClinicalQuestionAnswerListInDto { public Guid SubjectId { get; set; } From b75fc89011dcb220acbab527ddcf9af403b01e7c Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Wed, 28 Jun 2023 14:00:44 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/Reading/ClinicalData/ClinicalAnswerService.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs index f20afae29..59268af2f 100644 --- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalAnswerService.cs @@ -188,6 +188,7 @@ namespace IRaCIS.Core.Application.Service var clinicalData=await _readingClinicalDataRepository.Where(x=>x.TrialId == inDto.TrialId&&x.ClinicalDataTrialSet.UploadRole==UploadRole.CRC&&x.ClinicalDataTrialSet.ClinicalDataLevel!= ClinicalLevel.SubjectVisit) + .Where(x=>!x.IsSign) .Include(x=>x.ClinicalDataTrialSet).Select(x=>new GetCRCSubjectClinicalOutDto() { SubjectId=x.SubjectId, ClinicalDataTrialSetId = x.ClinicalDataTrialSet.Id,