From b119b01b952cb1335ed5fd6693f0f1884687fe74 Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Wed, 17 Aug 2022 14:14:54 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=B8=80=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/Reading/Dto/OrganInfoViewModel.cs | 15 ++++ .../Reading/Dto/ReadingQuestionViewModel.cs | 6 ++ .../Reading/Interface/IOrganInfoService.cs | 5 +- .../Service/Reading/OrganInfoService.cs | 68 +++++++++++++++++++ .../Service/Reading/ReadingQuestionService.cs | 16 +++++ .../TrialSiteUser/TrialConfigService.cs | 19 +++++- IRaCIS.Core.Domain/Reading/OrganTrialInfo.cs | 10 ++- .../Reading/ReadingQuestionCriterionTrial.cs | 6 ++ 8 files changed, 140 insertions(+), 5 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/OrganInfoViewModel.cs b/IRaCIS.Core.Application/Service/Reading/Dto/OrganInfoViewModel.cs index 7f0922cce..a72477e57 100644 --- a/IRaCIS.Core.Application/Service/Reading/Dto/OrganInfoViewModel.cs +++ b/IRaCIS.Core.Application/Service/Reading/Dto/OrganInfoViewModel.cs @@ -77,6 +77,21 @@ namespace IRaCIS.Core.Application.ViewModel } + public class CriterionNidusData : CriterionNidus + { + public Guid OriginalId { get; set; } + } + + public class SynchronizeSystemOrganToTrialInDto + { + + public Guid TrialId { get; set; } + + + + public Guid? SystemCriterionId { get; set; } + } + public class SetOrganIsEnableInDto { public bool IsEnable { get; set; } diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingQuestionViewModel.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingQuestionViewModel.cs index 2a8c26824..cdc9397ac 100644 --- a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingQuestionViewModel.cs +++ b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingQuestionViewModel.cs @@ -8,6 +8,12 @@ using System.Threading.Tasks; namespace IRaCIS.Core.Application.Service.Reading.Dto { + public class GetSystemCriterionListOutDto + { + public Guid CriterionId { get; set; } + + public string CriterionName { get; set; } + } public class ReadingTableQuestionSystemView { public Guid Id { get; set; } diff --git a/IRaCIS.Core.Application/Service/Reading/Interface/IOrganInfoService.cs b/IRaCIS.Core.Application/Service/Reading/Interface/IOrganInfoService.cs index 9ce2f24aa..dc0d219ab 100644 --- a/IRaCIS.Core.Application/Service/Reading/Interface/IOrganInfoService.cs +++ b/IRaCIS.Core.Application/Service/Reading/Interface/IOrganInfoService.cs @@ -22,6 +22,9 @@ namespace IRaCIS.Core.Application.Interfaces Task DeleteOrganInfo(Guid organInfoId); - + Task SynchronizeSystemOrganToTrial(SynchronizeSystemOrganToTrialInDto inDto); + + + } } diff --git a/IRaCIS.Core.Application/Service/Reading/OrganInfoService.cs b/IRaCIS.Core.Application/Service/Reading/OrganInfoService.cs index d98f664e8..b2d63ec87 100644 --- a/IRaCIS.Core.Application/Service/Reading/OrganInfoService.cs +++ b/IRaCIS.Core.Application/Service/Reading/OrganInfoService.cs @@ -9,6 +9,7 @@ using Microsoft.AspNetCore.Mvc; using IRaCIS.Core.Application.Interfaces; using IRaCIS.Core.Application.ViewModel; using IRaCIS.Core.Infra.EFCore.Common; +using MassTransit; namespace IRaCIS.Core.Application.Service { @@ -21,16 +22,19 @@ namespace IRaCIS.Core.Application.Service private readonly IRepository _organInfoRepository; private readonly IRepository _organTrialInfoRepository; + private readonly IRepository _readingQuestionCriterionTrial; private readonly IRepository _criterionNidusRepository; public OrganInfoService( IRepository organInfoRepository, IRepository organTrialInfoRepository, + IRepository readingQuestionCriterionTrial, IRepository criterionNidusRepository ) { _organInfoRepository = organInfoRepository; this._organTrialInfoRepository = organTrialInfoRepository; + this._readingQuestionCriterionTrial = readingQuestionCriterionTrial; this._criterionNidusRepository = criterionNidusRepository; } @@ -217,6 +221,70 @@ namespace IRaCIS.Core.Application.Service return await organInfoQueryable.ToListAsync(); } + /// + /// 同步系统器官到项目 + /// + /// + /// + [HttpPost] + public async Task SynchronizeSystemOrganToTrial(SynchronizeSystemOrganToTrialInDto inDto) + { + + var readingQuestionCriterionTrial = await _readingQuestionCriterionTrial.Where(x => x.TrialId == inDto.TrialId && x.IsConfirm).FirstOrDefaultAsync(); + + if (readingQuestionCriterionTrial != null) + { + Guid trialCriterionId = default(Guid); + + trialCriterionId = readingQuestionCriterionTrial.Id; + if (inDto.SystemCriterionId == null) + { + inDto.SystemCriterionId = readingQuestionCriterionTrial.ReadingQuestionCriterionSystemId; + } + await _criterionNidusRepository.BatchDeleteNoTrackingAsync(x => x.CriterionId == trialCriterionId); + List criterionNidusList = await _criterionNidusRepository.Where(x => x.CriterionId == inDto.SystemCriterionId).Select(x => new CriterionNidusData() + { + Id = NewId.NextGuid(), + CriterionId = trialCriterionId, + NidusType = x.NidusType, + NidusTypeCN = x.NidusTypeCN, + OriginalId = x.Id, + }).ToListAsync(); + + await _criterionNidusRepository.AddRangeAsync(criterionNidusList); + await _organTrialInfoRepository.BatchDeleteNoTrackingAsync(x => x.TrialId == inDto.TrialId); + var originalIds = criterionNidusList.Select(x => x.OriginalId).Distinct().ToList(); + List organTrialInfoList = await _organInfoRepository.Where(x => originalIds.Contains(x.CriterionNidusId)).Select(x => new OrganTrialInfo() + { + CriterionNidusId = x.CriterionNidusId, + Id = NewId.NextGuid(), + IsEnable = true, + OrganInfoId = x.Id, + TrialId = inDto.TrialId, + }).ToListAsync(); + + organTrialInfoList.ForEach(x => + { + + x.OrganInfoId = criterionNidusList.Where(y => y.OriginalId == x.OrganInfoId).Select(x => x.Id).FirstOrDefault(); + }); + + + await _organTrialInfoRepository.AddRangeAsync(organTrialInfoList); + await _readingQuestionCriterionTrial.UpdatePartialFromQueryAsync(trialCriterionId,x=> new ReadingQuestionCriterionTrial() { + SynchronizeOriginalTime=DateTime.Now + }); + await _organTrialInfoRepository.SaveChangesAsync(); + } + + + + return ResponseOutput.Ok(); + + } + + + /// /// 设置项目器官是否生效 diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingQuestionService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingQuestionService.cs index cff7cb8eb..ed0454c0c 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingQuestionService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingQuestionService.cs @@ -68,6 +68,22 @@ namespace IRaCIS.Application.Services this._previousPDFRepository = previousPDFRepository; } + /// + /// 获取获取系统阅片标准下拉 + /// + /// + [HttpPost] + public async Task> GetSystemCriterionList() + { + List result = await _readingQuestionCriterionSystemRepository.Select(x => new GetSystemCriterionListOutDto() + { + CriterionId=x.Id, + CriterionName=x.CriterionName, + + }).ToListAsync(); + + return result; + } /// /// 获取系统的表格问题 diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialConfigService.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialConfigService.cs index 095ed7f2a..3a89dea4d 100644 --- a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialConfigService.cs +++ b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialConfigService.cs @@ -11,6 +11,8 @@ using IRaCIS.Core.Application.Auth; using Panda.DynamicWebApi.Attributes; using IRaCIS.Core.Infra.EFCore.Common; using IRaCIS.Core.Application.Service.Reading.Dto; +using IRaCIS.Core.Application.Interfaces; +using IRaCIS.Core.Application.ViewModel; namespace IRaCIS.Core.Application { @@ -24,7 +26,7 @@ namespace IRaCIS.Core.Application private readonly IRepository _clinicalDataTrialSetRepository; private readonly IRepository _readingCriterionPageRepository; private readonly IEasyCachingProvider _provider; - + private readonly IOrganInfoService _iOrganInfoService; private readonly IRepository _taskAllocationRuleRepository; private readonly IReadingQuestionService iReadingQuestionService; @@ -36,7 +38,8 @@ namespace IRaCIS.Core.Application IRepository readingCriterionPageRepository, IRepository taskAllocationRuleRepository, IReadingQuestionService iReadingQuestionService, - IEasyCachingProvider provider + IEasyCachingProvider provider, + IOrganInfoService iOrganInfoService ) { _trialRepository = trialRepository; @@ -48,6 +51,7 @@ namespace IRaCIS.Core.Application this._clinicalDataTrialSetRepository = clinicalDataTrialSetRepository; this._readingCriterionPageRepository = readingCriterionPageRepository; this._provider = provider; + this._iOrganInfoService = iOrganInfoService; } @@ -238,12 +242,23 @@ namespace IRaCIS.Core.Application result.FormType = trialCriterion.FormType; result.IsFromSystem = trialCriterion.ReadingQuestionCriterionSystemId != null; + if (trialCriterion.SynchronizeOriginalTime == null && trialCriterion.ReadingQuestionCriterionSystemId != null) + { + await _iOrganInfoService.SynchronizeSystemOrganToTrial(new SynchronizeSystemOrganToTrialInDto() + { + TrialId = inDto.TrialId, + SystemCriterionId = trialCriterion.ReadingQuestionCriterionSystemId + }); + } + }; result.TrialQuestionList = await _readingQuestionTrialRepository.Where(x => x.ReadingQuestionCriterionTrial.IsConfirm && x.TrialId == inDto.TrialId&&x.ReadingQuestionCriterionTrialId == result.TrialCriterionId &&x.ReadingCriterionPageId==null) .ProjectTo(_mapper.ConfigurationProvider).OrderBy(x => x.ShowOrder).ToListAsync(); + + return result; } diff --git a/IRaCIS.Core.Domain/Reading/OrganTrialInfo.cs b/IRaCIS.Core.Domain/Reading/OrganTrialInfo.cs index c70c18633..32d12697e 100644 --- a/IRaCIS.Core.Domain/Reading/OrganTrialInfo.cs +++ b/IRaCIS.Core.Domain/Reading/OrganTrialInfo.cs @@ -37,8 +37,14 @@ namespace IRaCIS.Core.Domain.Models /// CreateUserId /// public Guid CreateUserId { get; set; } - - } + + + /// + /// 标准 病灶类型 + /// + public Guid CriterionNidusId { get; set; } + + } } diff --git a/IRaCIS.Core.Domain/Reading/ReadingQuestionCriterionTrial.cs b/IRaCIS.Core.Domain/Reading/ReadingQuestionCriterionTrial.cs index 5f6f20339..0f06e0ceb 100644 --- a/IRaCIS.Core.Domain/Reading/ReadingQuestionCriterionTrial.cs +++ b/IRaCIS.Core.Domain/Reading/ReadingQuestionCriterionTrial.cs @@ -94,6 +94,12 @@ namespace IRaCIS.Core.Domain.Models /// public DateTime SynchronizeTime { get; set; } + + /// + /// 同步器官时间 + /// + public DateTime? SynchronizeOriginalTime { get; set; } + /// /// 项目 ///