From f45cb3db86efb34179b291a745cd7f86d62f3853 Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Wed, 8 Feb 2023 18:11:04 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/Visit/SubjectVisitService.cs | 25 ++++++++++++- .../Triggers/AddSubjectTrigger.cs | 36 +++++++++++++++++-- 2 files changed, 58 insertions(+), 3 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs b/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs index fa6c0c65..037c3a46 100644 --- a/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs +++ b/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs @@ -17,6 +17,8 @@ namespace IRaCIS.Core.Application.Services public class SubjectVisitService : BaseService, ISubjectVisitService { private readonly IRepository _subjectVisitRepository; + private readonly IRepository _clinicalDataTrialSetRepository; + private readonly IRepository _readingClinicalDataRepository; private readonly IRepository _readModuleRepository; private readonly IRepository _trialRepository; private readonly IRepository _readingPeriodSetRepository; @@ -29,6 +31,8 @@ namespace IRaCIS.Core.Application.Services private readonly IRepository _subjectRepository; public SubjectVisitService(IRepository subjectVisitRepository, + IRepository clinicalDataTrialSetRepository, + IRepository readingClinicalDataRepository, IRepository readModuleRepository, IRepository trialRepository, IRepository readingPeriodSetRepository, @@ -41,6 +45,8 @@ namespace IRaCIS.Core.Application.Services IRepository subjectRepository) { _subjectVisitRepository = subjectVisitRepository; + this._clinicalDataTrialSetRepository = clinicalDataTrialSetRepository; + this._readingClinicalDataRepository = readingClinicalDataRepository; this._readModuleRepository = readModuleRepository; this._trialRepository = trialRepository; this._readingPeriodSetRepository = readingPeriodSetRepository; @@ -84,7 +90,7 @@ namespace IRaCIS.Core.Application.Services svCommand.VisitExecuted = svCommand.IsLostVisit ? VisitExecutedEnum.Executed : svCommand.VisitExecuted; - + SubjectVisit? dbBeforeEntity = null; //Add @@ -107,6 +113,23 @@ namespace IRaCIS.Core.Application.Services } dbBeforeEntity = await _subjectVisitRepository.InsertFromDTOAsync(svCommand, false, verifyExp1, verifyExp2, verifyExp3); + + var cRCClinicalDataIds = await _clinicalDataTrialSetRepository.Where(x => x.TrialId == svCommand.TrialId && x.UploadRole == UploadRole.CRC && x.IsConfirm && x.ClinicalDataLevel == ClinicalLevel.SubjectVisit) + + .Select(x => x.Id).ToListAsync(); + + + + List readingClinicals = cRCClinicalDataIds.Select(x => new ReadingClinicalData() + { + ClinicalDataTrialSetId = x, + IsVisit = true, + SubjectId = svCommand.SubjectId, + ReadingId = dbBeforeEntity.Id, + TrialId = svCommand.TrialId + }).ToList(); + + await _readingClinicalDataRepository.AddRangeAsync(readingClinicals); } else diff --git a/IRaCIS.Core.Application/Triggers/AddSubjectTrigger.cs b/IRaCIS.Core.Application/Triggers/AddSubjectTrigger.cs index 7e8278ca..cd36817f 100644 --- a/IRaCIS.Core.Application/Triggers/AddSubjectTrigger.cs +++ b/IRaCIS.Core.Application/Triggers/AddSubjectTrigger.cs @@ -11,14 +11,20 @@ namespace IRaCIS.Core.Application.Triggers public class AddSubjectTrigger : IBeforeSaveTrigger { private readonly IRepository _subjectVisitRepository; - + private readonly IRepository _clinicalDataTrialSetRepository; + private readonly IRepository _readingClinicalDataRepository; private readonly IRepository _visitStageRepository; private readonly IRepository _trialRepository; private readonly IMapper _mapper; - public AddSubjectTrigger(IRepository subjectVisitRepository, IMapper mapper, IRepository visitStageRepository, IRepository trialRepository) + public AddSubjectTrigger(IRepository subjectVisitRepository, + IRepository clinicalDataTrialSetRepository, + IRepository readingClinicalDataRepository, + IMapper mapper, IRepository visitStageRepository, IRepository trialRepository) { _subjectVisitRepository = subjectVisitRepository; + this._clinicalDataTrialSetRepository = clinicalDataTrialSetRepository; + this._readingClinicalDataRepository = readingClinicalDataRepository; _trialRepository = trialRepository; _visitStageRepository = visitStageRepository; @@ -41,6 +47,16 @@ namespace IRaCIS.Core.Application.Triggers var IsEnrollementQualificationConfirm = await _trialRepository.Where(t => t.Id == subject.TrialId).Select(u => u.IsEnrollementQualificationConfirm).FirstOrDefaultAsync(); + + + + var cRCClinicalDatas = await _clinicalDataTrialSetRepository.Where(x => x.TrialId == subject.TrialId && x.UploadRole == UploadRole.CRC && x.IsConfirm) + + .Select(x =>new { + x.Id, + x.ClinicalDataLevel, + } ).ToListAsync(); + List readingClinicals = new List(); svList.ForEach(t => { t.Subject = subject; @@ -48,8 +64,24 @@ namespace IRaCIS.Core.Application.Triggers t.TrialId = subject.TrialId; t.SiteId = subject.SiteId; t.IsEnrollmentConfirm = t.IsBaseLine ? IsEnrollementQualificationConfirm : false; + + readingClinicals.AddRange( + + cRCClinicalDatas.WhereIf(!t.IsBaseLine, x => x.ClinicalDataLevel == ClinicalLevel.SubjectVisit).Select(x => new ReadingClinicalData() + { + ClinicalDataTrialSetId = x.Id, + IsVisit = true, + SubjectId = subject.Id, + ReadingId = t.Id, + TrialId = subject.TrialId + + }).ToList() + + ); }); + await _readingClinicalDataRepository.AddRangeAsync(readingClinicals); + await _subjectVisitRepository.AddRangeAsync(svList);