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;