diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingMedicineQuestionViewModel.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingMedicineQuestionViewModel.cs index 41b1d9fe7..0b049f669 100644 --- a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingMedicineQuestionViewModel.cs +++ b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingMedicineQuestionViewModel.cs @@ -1,6 +1,8 @@ using System; using IRaCIS.Core.Domain.Share; using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; + namespace IRaCIS.Core.Application.ViewModel { @@ -65,6 +67,11 @@ namespace IRaCIS.Core.Application.ViewModel public Guid Id { get; set; } public string QuestionName { get; set; } + + /// + /// 类型值 + /// + public string TypeValue { get; set; } } public class AddTrialDataFromSystemInDto @@ -74,6 +81,23 @@ namespace IRaCIS.Core.Application.ViewModel public List SystemQuestionIds { get; set; } } + public class ConfirmReadingMedicineQuestionInDto + { + [NotDefault] + public Guid TrialId { get; set; } + } + + public class TrialQuestion + { + public Guid Id { get; set; } + + public int ShowOrder { get; set; } + + + public int? ParentShowOrder { get; set; } + + } + /// /// 获取项目的其他问题 /// diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingMedicineQuestionService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingMedicineQuestionService.cs index df81cfdb8..058198a8b 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingMedicineQuestionService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingMedicineQuestionService.cs @@ -5,6 +5,7 @@ using IRaCIS.Core.Application.Interfaces; using IRaCIS.Core.Application.ViewModel; using IRaCIS.Core.Infra.EFCore.Common; using MassTransit; +using IRaCIS.Core.Infrastructure; namespace IRaCIS.Core.Application.Service { @@ -16,14 +17,17 @@ namespace IRaCIS.Core.Application.Service { private readonly IRepository _readingMedicineTrialQuestionRepository; + private readonly IRepository _trialRepository; private readonly IRepository _readingMedicineSystemQuestionRepository; public ReadingMedicineQuestionService( IRepository readingMedicineTrialQuestionRepository, + IRepository trialRepository, IRepository readingMedicineSystemQuestionRepository ) { this._readingMedicineTrialQuestionRepository = readingMedicineTrialQuestionRepository; + this._trialRepository = trialRepository; this._readingMedicineSystemQuestionRepository = readingMedicineSystemQuestionRepository; } @@ -84,7 +88,7 @@ namespace IRaCIS.Core.Application.Service /// /// [HttpPost] - public async Task> GetReadingMedicineTrialQuestionList(ReadingMedicineTrialQuestionQuery inDto) + public async Task<(List,object)> GetReadingMedicineTrialQuestionList(ReadingMedicineTrialQuestionQuery inDto) { var query = _readingMedicineTrialQuestionRepository.AsQueryable() .Where(x=>x.TrialId==inDto.TrialId) @@ -93,7 +97,12 @@ namespace IRaCIS.Core.Application.Service .WhereIf(!inDto.QuestionName.IsNullOrEmpty(), x => x.QuestionName.Contains(inDto.QuestionName)) .WhereIf(!inDto.Type.IsNullOrEmpty(), x => x.Type.Contains(inDto.Type)) .ProjectTo(_mapper.ConfigurationProvider).OrderBy(x=>x.ShowOrder); - return await query.ToListAsync(); + + + var isConfirmMedicineQuestion = await _trialRepository.Where(x => x.Id == inDto.TrialId).Select(x => x.IsConfirmMedicineQuestion).FirstOrDefaultAsync(); + return ((await query.ToListAsync()), new { + IsConfirmMedicineQuestion= isConfirmMedicineQuestion + }); } /// @@ -131,6 +140,8 @@ namespace IRaCIS.Core.Application.Service { Id = x.Id, QuestionName = x.QuestionName, + TypeValue=x.TypeValue, + }).ToListAsync(); return questionList; @@ -180,16 +191,53 @@ namespace IRaCIS.Core.Application.Service } - ///// - ///// 确认医学审核问题 - ///// - ///// - //public async Task ConfirmReadingMedicineQuestion() - //{ - - //} + /// + /// 确认医学审核问题 + /// + /// + public async Task ConfirmReadingMedicineQuestion(ConfirmReadingMedicineQuestionInDto inDto) + { + var readingMedicineQuestionList = await _readingMedicineTrialQuestionRepository.Where(x => x.TrialId == inDto.TrialId) + .Select(x => new TrialQuestion() { + Id = x.Id, + ParentShowOrder = (int?)x.ParentQuestion.ShowOrder, + + }).ToListAsync(); + if (readingMedicineQuestionList.Count == 0) + { + throw new BusinessValidationFailedException("当前未添加医学审核问题。请先添加医学审核问题,再进行确认。"); + } + + if (readingMedicineQuestionList.Count() != readingMedicineQuestionList.Select(t => t.ShowOrder).Distinct().Count()) + { + throw new BusinessValidationFailedException("影像医学审核问题显示序号不能重复。"); + } + + + if (readingMedicineQuestionList.Where(t => t.ParentShowOrder != null).Any(t => t.ParentShowOrder > t.ShowOrder)) + { + throw new BusinessValidationFailedException("父问题的显示序号要比子问题的显示序号小,请确认。"); + } + + + await _readingMedicineTrialQuestionRepository.BatchUpdateNoTrackingAsync(x => x.TrialId == inDto.TrialId, x => new ReadingMedicineTrialQuestion() + { + IsConfirm = true + }); + + await _trialRepository.UpdatePartialFromQueryAsync(inDto.TrialId, x => new Trial() + { + IsConfirmMedicineQuestion = true + }); + + var result = await _trialRepository.SaveChangesAsync(); + return ResponseOutput.Result(result); - } + } + + + + } } diff --git a/IRaCIS.Core.Domain/Reading/ReadingMedicineTrialQuestion.cs b/IRaCIS.Core.Domain/Reading/ReadingMedicineTrialQuestion.cs index dfc4ec374..7e37c0585 100644 --- a/IRaCIS.Core.Domain/Reading/ReadingMedicineTrialQuestion.cs +++ b/IRaCIS.Core.Domain/Reading/ReadingMedicineTrialQuestion.cs @@ -85,8 +85,11 @@ namespace IRaCIS.Core.Domain.Models /// 是否确认 /// public bool? IsConfirm { get; set; } - - } + + [ForeignKey("ParentId")] + public ReadingMedicineTrialQuestion ParentQuestion { get; set; } + + } } diff --git a/IRaCIS.Core.Domain/Trial/Trial.cs b/IRaCIS.Core.Domain/Trial/Trial.cs index 18bf74e4c..016a09682 100644 --- a/IRaCIS.Core.Domain/Trial/Trial.cs +++ b/IRaCIS.Core.Domain/Trial/Trial.cs @@ -361,6 +361,12 @@ namespace IRaCIS.Core.Domain.Models /// public DateTime? SyncClinicalDataTime { get; set; } + /// + /// ȷҽѧ + /// + + public bool IsConfirmMedicineQuestion { get; set; } = false; + //public Guid? ReviewTypeId { get; set; } = Guid.Empty;