From ca3c818ac7b115e03862b527f7bd10be3200da90 Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Thu, 1 Sep 2022 14:03:05 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Reading/Dto/ReadingImageTaskViewModel.cs | 83 +++++++++++++++++++ .../Reading/ReadingCalculateService.cs | 3 +- .../Reading/ReadingImageTaskService.cs | 77 ++++++++++++++++- .../Service/Reading/_MapConfig.cs | 13 +++ .../Reading/ReadingTableAnswerRowInfo.cs | 7 +- 5 files changed, 179 insertions(+), 4 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs index 1eee09dc8..18308a6c0 100644 --- a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs +++ b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs @@ -28,6 +28,12 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto public int ShowOrder { get; set; } + + /// + /// 是否显示在Dicom阅片中 + /// + public bool IsShowInDicom { get; set; } = false; + public int RowIndex { get; set; } public string GroupName { get; set; } @@ -52,6 +58,8 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto public Guid VisitTaskId { get; set; } public string Answer { get; set; } + + } @@ -141,6 +149,36 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto public string TaskName { get; set; } public decimal VisitTaskNum { get; set; } + + public bool IsCurrentTask { get; set; } + } + + + public class ChangeDicomReadingQuestionAnswerInDto + { + public Guid VisitTaskId { get; set; } + + public List Answers { get; set; } + } + + + public class ChangeDicomReadingQuestionAnswerDto + { + public Guid Id { get; set; } + + public string Answer { get; set; } + } + public class DicomReadingQuestionAnswer : ReadingQuestionTrial + { + public string Answer { get; set; } + + public List Childrens = new List(); + } + public class GetDicomReadingQuestionAnswerInDto + { + public Guid VisitTaskId { get; set; } + + public Guid TrialId { get; set; } } public class GetReadingReportEvaluationInDto @@ -205,6 +243,51 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto public List RelationQuestions { get; set; } = new List(); } + + public class GetTableAnswerRowInfoOutDto + { + public Guid Id { get; set; } + + /// + /// QuestionId + /// + public Guid QuestionId { get; set; } + + /// + /// VisitTaskId + /// + public Guid VisitTaskId { get; set; } + + /// + /// TrialId + /// + public Guid TrialId { get; set; } + + + /// + /// InstanceId + /// + public Guid? InstanceId { get; set; } + + /// + /// SeriesId + /// + public Guid? SeriesId { get; set; } + + /// + /// RowIndex + /// + public int RowIndex { get; set; } + + /// + /// MeasureData + /// + public string MeasureData { get; set; } + + public int ShowOrder { get; set; } + + } + public class GetTableAnswerRowInfoInDto { public Guid VisitTaskId { get; set; } diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingCalculateService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingCalculateService.cs index 80105ea76..d4dff623d 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingCalculateService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingCalculateService.cs @@ -17,7 +17,7 @@ namespace IRaCIS.Core.Application.Service /// /// 阅片计算 /// - [NonDynamicWebApi] + [ApiExplorerSettings(GroupName = "Reading")] public class ReadingCalculateService : BaseService, IReadingCalculateService { @@ -57,6 +57,7 @@ namespace IRaCIS.Core.Application.Service /// /// /// + [HttpPost] public async Task CalculateTask(CalculateTaskInDto inDto) { var visitTask = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).FirstNotNullAsync(); diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingImageTaskService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingImageTaskService.cs index 4082ab458..bf12cba96 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingImageTaskService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingImageTaskService.cs @@ -108,6 +108,75 @@ namespace IRaCIS.Application.Services #region 表格问题相关 + /// + /// 修改Dicom阅片问题 + /// + /// + /// + [HttpPost] + public async Task ChangeDicomReadingQuestionAnswer(ChangeDicomReadingQuestionAnswerInDto inDto) + { + + var taskInfo = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).FirstNotNullAsync(); + var criterionId = await _readingQuestionCriterionTrialRepository.Where(x => x.IsConfirm && x.TrialId == taskInfo.TrialId).Select(x => x.Id).FirstOrDefaultAsync(); + + var questionIds = inDto.Answers.Select(x => x.Id).ToList(); + await _readingTaskQuestionAnswerRepository.BatchDeleteNoTrackingAsync(x => x.VisitTaskId == inDto.VisitTaskId && questionIds.Contains(x.ReadingQuestionTrialId)); + + var needAddAnswer = inDto.Answers.Select(x => new ReadingTaskQuestionAnswer() + { + + Answer = x.Answer, + SubjectId = taskInfo.SubjectId, + ReadingQuestionCriterionTrialId = criterionId, + ReadingQuestionTrialId = x.Id, + TrialId = taskInfo.TrialId, + VisitTaskId = inDto.VisitTaskId, + + }).ToList(); + + await _readingTaskQuestionAnswerRepository.AddRangeAsync(needAddAnswer); + + await _readingTaskQuestionAnswerRepository.SaveChangesAsync(); + return ResponseOutput.Ok(true); + } + + + /// + /// 获取DIcom阅片问题答案 + /// + /// + /// + [HttpPost] + public async Task> GetDicomReadingQuestionAnswer(GetDicomReadingQuestionAnswerInDto inDto) + { + var criterionId = await _readingQuestionCriterionTrialRepository.Where(x => x.IsConfirm && x.TrialId == inDto.TrialId).Select(x => x.Id).FirstOrDefaultAsync(); + + var questions = await _readingQuestionTrialRepository.Where(x => x.IsShowInDicom && x.ReadingQuestionCriterionTrialId == criterionId) + .ProjectTo(_mapper.ConfigurationProvider).OrderBy(x => x.ShowOrder).ToListAsync(); + + var answers = await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == inDto.VisitTaskId).ToListAsync(); + + var result = questions.Where(x => x.Type == "group").ToList(); + + foreach (var item in result) + { + GetDicomReadingAnswer(item, questions, answers); + } + + return result; + } + + private void GetDicomReadingAnswer(DicomReadingQuestionAnswer item,List questions,List answers) + { + item.Answer = answers.Where(x => x.ReadingQuestionTrialId == item.Id).Select(x => x.Answer).FirstIsNullReturnEmpty(); + item.Childrens = questions.Where(x => x.ParentId == item.Id || (x.GroupName == item.GroupName && x.ParentId == null)).ToList(); + foreach (var question in item.Childrens) + { + GetDicomReadingAnswer(question, questions, answers); + } + } + /// /// 获取阅片报告 /// @@ -128,6 +197,8 @@ namespace IRaCIS.Application.Services VisitTaskId = x.Id, TaskName = x.TaskName, VisitTaskNum = x.VisitTaskNum, + IsCurrentTask=x.Id==indto.VisitTaskId, + }).ToListAsync(); result.VisitTaskList = taskInfoList; @@ -150,8 +221,10 @@ namespace IRaCIS.Application.Services { QuestionId = x.Id, GroupName = x.GroupName, + IsShowInDicom=x.IsShowInDicom, QuestionName = x.QuestionName, ShowOrder = x.ShowOrder, + }).ToList(); // 分组 @@ -161,6 +234,7 @@ namespace IRaCIS.Application.Services { GroupName = x.GroupName, QuestionId = x.Id, + IsShowInDicom = x.IsShowInDicom, QuestionName = x.QuestionName, ShowOrder = x.ShowOrder, OrderMark=x.OrderMark, @@ -248,10 +322,11 @@ namespace IRaCIS.Application.Services /// (QuestionId) 可为空 /// /// - public async Task> GetTableAnswerRowInfoList(GetTableAnswerRowInfoInDto inDto) + public async Task> GetTableAnswerRowInfoList(GetTableAnswerRowInfoInDto inDto) { return await _readingTableAnswerRowInfoRepository.Where(x => x.VisitTaskId == inDto.VisitTaskId) .WhereIf(inDto.QuestionId != null, x => x.QuestionId == inDto.QuestionId) + .ProjectTo(_mapper.ConfigurationProvider).OrderBy(x=>x.ShowOrder).ThenBy(x=>x.RowIndex) .ToListAsync(); } diff --git a/IRaCIS.Core.Application/Service/Reading/_MapConfig.cs b/IRaCIS.Core.Application/Service/Reading/_MapConfig.cs index 7695c74da..cd66366f2 100644 --- a/IRaCIS.Core.Application/Service/Reading/_MapConfig.cs +++ b/IRaCIS.Core.Application/Service/Reading/_MapConfig.cs @@ -51,6 +51,19 @@ namespace IRaCIS.Core.Application.Service #region 阅片问题 + // 忽略列 + CreateMap() + .ForMember(dest => dest.ReadingCriterionPage, opt => opt.Ignore()) + .ForMember(dest => dest.ParentReadingQuestionTrial, opt => opt.Ignore()) + .ForMember(dest => dest.RelevanceReadingQuestionTrial, opt => opt.Ignore()) + .ForMember(dest => dest.ReadingQuestionCriterionTrial, opt => opt.Ignore()); + + + CreateMap() + .ForMember(d => d.ShowOrder, u => u.MapFrom(s => s.ReadingQuestionTrial.ShowOrder)); + + + CreateMap(); CreateMap() .ForMember(d => d.ShowOrder, u => u.MapFrom(s => s.ReadingQuestionTrial.ShowOrder)); diff --git a/IRaCIS.Core.Domain/Reading/ReadingTableAnswerRowInfo.cs b/IRaCIS.Core.Domain/Reading/ReadingTableAnswerRowInfo.cs index 7aa6de1d4..83514767f 100644 --- a/IRaCIS.Core.Domain/Reading/ReadingTableAnswerRowInfo.cs +++ b/IRaCIS.Core.Domain/Reading/ReadingTableAnswerRowInfo.cs @@ -60,8 +60,11 @@ namespace IRaCIS.Core.Domain.Models /// CreateUserId /// public Guid CreateUserId { get; set; } - - } + + [ForeignKey("QuestionId")] + public ReadingQuestionTrial ReadingQuestionTrial { get; set; } + + } }