From 00427897a604ddf2d4ed1df56ffcc97ca1926b08 Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Mon, 1 Aug 2022 16:45:58 +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 --- .../Controllers/InspectionController.cs | 14 ++ .../IRaCIS.Core.Application.xml | 84 +++++++++++ .../Reading/Dto/ReadingImageTaskViewModel.cs | 57 ++++++- .../Interface/IReadingImageTaskService.cs | 2 + .../Reading/ReadingImageTaskService.cs | 140 ++++++++++++++++-- .../Reading/ReadingOncologyTaskInfo.cs | 2 +- .../Reading/ReadingQuestionCriterionTrial.cs | 2 +- 7 files changed, 289 insertions(+), 12 deletions(-) diff --git a/IRaCIS.Core.API/Controllers/InspectionController.cs b/IRaCIS.Core.API/Controllers/InspectionController.cs index 7f2cddbbf..01e40ebcd 100644 --- a/IRaCIS.Core.API/Controllers/InspectionController.cs +++ b/IRaCIS.Core.API/Controllers/InspectionController.cs @@ -106,6 +106,20 @@ namespace IRaCIS.Core.API.Controllers } #endregion + /// + /// 提交肿瘤学阅片任务 + /// + /// + /// + [HttpPost, Route("Inspection/ReadingImageTask/SetOncologyReadingInfo")] + [UnitOfWork] + public async Task SetOncologyReadingInfo(DataInspectionDto opt) + { + var singid = await _inspectionService.RecordSing(opt.SignInfo); + var result = await _iReadingImageTaskService.SetOncologyReadingInfo(opt.Data); + await _inspectionService.CompletedSign(singid, result); + return result; + } /// /// 提交全局阅片任务 diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml index f2a4e522e..69e154e4f 100644 --- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml +++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml @@ -1507,6 +1507,36 @@ 文件路径 + + + 评估结果 + + + + + 评估原因 + + + + + 评估结果 + + + + + 评估原因 + + + + + 评估结果 + + + + + 评估原因 + + 当新答案为空的时候 是否是有原数据 @@ -4235,6 +4265,31 @@ 项目问题集合 + + + 项目ID + + + + + 评估结果 + + + + + 评估原因 + + + + + 评估结果 + + + + + 评估原因 + + 表单类型 @@ -4876,6 +4931,20 @@ + + + 获取项目肿瘤学配置 + + + + + + + 设置项目肿瘤学配置 + + + + 获取项目裁判信息 @@ -5781,6 +5850,21 @@ IR影像阅片 + + + 获取肿瘤学任务信息 + + + + + + + + 修改全局阅片信息 + + + + 保存全局阅片结果 diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs index 2f765f9b6..55ae58d02 100644 --- a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs +++ b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs @@ -29,6 +29,28 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto public Guid GlobalTaskId { get; set; } } + public class SetOncologyQuestion + { + public Guid VisitTaskId { get; set; } + + /// + /// 评估结果 + /// + public string EvaluationResult { get; set; } = string.Empty; + + /// + /// 评估原因 + /// + public string EvaluationReason { get; set; } = string.Empty; + } + + public class SetOncologyReadingInfoInDto + { + public Guid OncologyTaskId { get; set; } + + public List OncologyQuestionList { get; set; } + } + public class SaveGlobalReadingInfoInDto { public Guid GlobalTaskId { get; set; } @@ -51,10 +73,22 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto public string Answer { get; set; } } - public class GetOncologyReadingInfoOutDto + + public class OncologyQuestion + { + public Guid QuestionId { get; set; } + + public string QuestionName { get; set; } + + public string Answer { get; set; } + } + + public class OncologyVisitTaskInfo { public Guid VisitTaskId { get; set; } + public string VisitName { get; set; } + /// /// 评估结果 /// @@ -64,6 +98,27 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto /// 评估原因 /// public string EvaluationReason { get; set; } = string.Empty; + + + public List QuestionList { get; set; } = new List(); + + } + + public class GetOncologyReadingInfoOutDto + { + public Guid OncologyTaskId { get; set; } + + /// + /// 评估结果 + /// + public string TrialEvaluationResult { get; set; } = string.Empty; + + /// + /// 评估原因 + /// + public string TrialEvaluationReason { get; set; } = string.Empty; + + public List OncologyVisits { get; set; } = new List(); } public class GetOncologyReadingInfoInDto diff --git a/IRaCIS.Core.Application/Service/Reading/Interface/IReadingImageTaskService.cs b/IRaCIS.Core.Application/Service/Reading/Interface/IReadingImageTaskService.cs index 8115ce6a4..2571865bf 100644 --- a/IRaCIS.Core.Application/Service/Reading/Interface/IReadingImageTaskService.cs +++ b/IRaCIS.Core.Application/Service/Reading/Interface/IReadingImageTaskService.cs @@ -19,5 +19,7 @@ namespace IRaCIS.Core.Application.Contracts void FindChildQuestion(GetTrialReadingQuestionOutDto trialReadingQuestion, List questionlists); Task SubmitGlobalReadingInfo(SubmitGlobalReadingInfoInDto inDto); + + Task SetOncologyReadingInfo(SetOncologyReadingInfoInDto inDto); } } \ No newline at end of file diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingImageTaskService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingImageTaskService.cs index a9be32940..30956ba51 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingImageTaskService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingImageTaskService.cs @@ -30,6 +30,7 @@ namespace IRaCIS.Application.Services private readonly IRepository _noneDicomStudyRepository; private readonly IRepository _visitTaskRepository; private readonly IRepository _trialRepository; + private readonly IRepository _readingOncologyTaskInfoRepository; private readonly IVisitTaskHelpeService _visitTaskHelpeService; private readonly IVisitTaskService _visitTaskService; private readonly IReadingClinicalDataService _readingClinicalDataService; @@ -51,6 +52,7 @@ namespace IRaCIS.Application.Services IRepository noneDicomStudyRepository, IRepository visitTaskRepository, IRepository TrialRepository, + IRepository ReadingOncologyTaskInfoRepository, IVisitTaskHelpeService visitTaskHelpeService, IVisitTaskService visitTaskService, IReadingClinicalDataService readingClinicalDataService, @@ -71,6 +73,7 @@ namespace IRaCIS.Application.Services this._noneDicomStudyRepository = noneDicomStudyRepository; this._visitTaskRepository = visitTaskRepository; this._trialRepository = TrialRepository; + this._readingOncologyTaskInfoRepository = ReadingOncologyTaskInfoRepository; this._visitTaskHelpeService = visitTaskHelpeService; this._visitTaskService = visitTaskService; this._readingClinicalDataService = readingClinicalDataService; @@ -88,16 +91,135 @@ namespace IRaCIS.Application.Services } #region 肿瘤学阅片相关 - //public async Task GetOncologyReadingInfo(GetOncologyReadingInfoInDto inDto) - //{ - // var taskInfo= await _visitTaskRepository.Where(x=>x.) - // var trialCriterion = await _readingQuestionCriterionTrialRepository.Where(x => x.TrialId == inDto.TrialId && x.IsConfirm).FirstOrDefaultAsync(); - // if (trialCriterion == null) - // { - // throw new BusinessValidationFailedException("请先确认一个项目标准。"); - // } - //} + /// + /// 获取肿瘤学任务信息 + /// + /// + /// + /// + [HttpPost] + public async Task GetOncologyReadingInfo(GetOncologyReadingInfoInDto inDto) + { + var taskInfo = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).FirstNotNullAsync(); + + if (taskInfo.ReadingCategory != ReadingCategory.Oncology) + { + throw new BusinessValidationFailedException("当前任务不是肿瘤学任务"); + } + + var trialCriterion = await _readingQuestionCriterionTrialRepository.Where(x => x.TrialId == taskInfo.TrialId && x.IsConfirm).FirstOrDefaultAsync(); + if (trialCriterion == null) + { + throw new BusinessValidationFailedException("请先确认一个项目标准。"); + } + + GetOncologyReadingInfoOutDto result = new GetOncologyReadingInfoOutDto() { + TrialEvaluationResult= trialCriterion.EvaluationResult, + TrialEvaluationReason = trialCriterion.EvaluationReason, + OncologyTaskId = inDto.VisitTaskId, + }; + + // 先找到是R1还是R2的阅片 先找到全局阅片 + + var globalTaskInfo= await _visitTaskRepository + .Where(x => x.SubjectId == taskInfo.SubjectId&& + x.TaskState== TaskState.Effect&& + x.ReadingCategory== ReadingCategory.Global&& + x.VisitTaskNum< taskInfo.VisitTaskNum + ).OrderByDescending(x=>x.VisitTaskNum) + .FirstNotNullAsync(); + + + // 最后取哪组的数据 + VisitTask visitTask = new VisitTask(); + + // 判断是否产生裁判 + + if (globalTaskInfo.JudgeVisitTaskId == null) + { + visitTask = globalTaskInfo; + } + else + { + var judgeResultTaskId = await _visitTaskRepository.Where(x => x.Id == globalTaskInfo.JudgeVisitTaskId).Select(x => x.JudgeResultTaskId).FirstOrDefaultAsync(); + if (judgeResultTaskId == null) + { + throw new BusinessValidationFailedException("异常,裁判结果为null"); + } + visitTask = await _visitTaskRepository.Where(x=>x.Id== judgeResultTaskId).FirstOrDefaultAsync(); + } + + + // 找到对应的访视 + + List oncologyVisits = await _visitTaskRepository.Where(x => x.ReadingCategory == ReadingCategory.Visit && + x.SubjectId == visitTask.SubjectId && x.IsAnalysisCreate == visitTask.IsAnalysisCreate && x.TaskState == TaskState.Effect && x.VisitTaskNum < visitTask.VisitTaskNum) + .WhereIf(visitTask.ArmEnum == Arm.GroupConsistentArm, x => x.DoctorUserId == visitTask.DoctorUserId) + .WhereIf(visitTask.ArmEnum != Arm.GroupConsistentArm, x => x.ArmEnum == visitTask.ArmEnum) + .OrderBy(x => x.VisitTaskNum).Select(x => new OncologyVisitTaskInfo() + { + VisitName = x.SourceSubjectVisit.VisitName, + VisitTaskId = x.Id, + QuestionList = x.ReadingTaskQuestionAnswerList.Where(y => y.ReadingQuestionTrial.IsJudgeQuestion).OrderBy(y => y.ReadingQuestionTrial.ShowOrder) + .Select(y => new OncologyQuestion() + { + QuestionId = y.ReadingQuestionTrialId, + QuestionName = y.ReadingQuestionTrial.QuestionName, + Answer = y.Answer + }).ToList() + }).ToListAsync(); + + var oncologyReadingQuestions = await _readingOncologyTaskInfoRepository.Where(x => x.OncologyTaskId == inDto.VisitTaskId).ToListAsync(); + + oncologyVisits.ForEach(x => + { + var oncologyData = oncologyReadingQuestions.Where(y => y.VisitTaskId == x.VisitTaskId).FirstOrDefault(); + + if (oncologyData != null) + { + x.EvaluationResult = oncologyData.EvaluationResult; + x.EvaluationReason = oncologyData.EvaluationReason; + } + + + }); + + result.OncologyVisits = oncologyVisits; + return result; + + } + + /// + /// 修改全局阅片信息 + /// + /// + /// + [HttpPost] + public async Task SetOncologyReadingInfo(SetOncologyReadingInfoInDto inDto) + { + await _readingOncologyTaskInfoRepository.BatchDeleteNoTrackingAsync(x => x.OncologyTaskId == inDto.OncologyTaskId); + + var taskInfo = await _visitTaskRepository.Where(x => x.Id == inDto.OncologyTaskId).FirstNotNullAsync(); + + List readingOncologies = inDto.OncologyQuestionList.Select(x => new ReadingOncologyTaskInfo() + { + EvaluationReason = x.EvaluationReason, + SubjectId = taskInfo.SubjectId, + EvaluationResult = x.EvaluationResult, + OncologyTaskId = inDto.OncologyTaskId, + TrialId = taskInfo.TrialId, + VisitTaskId = x.VisitTaskId + }).ToList(); + + await _readingOncologyTaskInfoRepository.AddRangeAsync(readingOncologies); + + var result = await _readingOncologyTaskInfoRepository.SaveChangesAsync(); + + return ResponseOutput.Ok(result); + + + } #endregion #region 全局阅片相关 diff --git a/IRaCIS.Core.Domain/Reading/ReadingOncologyTaskInfo.cs b/IRaCIS.Core.Domain/Reading/ReadingOncologyTaskInfo.cs index 69f427d0a..60adb3f0b 100644 --- a/IRaCIS.Core.Domain/Reading/ReadingOncologyTaskInfo.cs +++ b/IRaCIS.Core.Domain/Reading/ReadingOncologyTaskInfo.cs @@ -24,7 +24,7 @@ namespace IRaCIS.Core.Domain.Models /// /// 访视任务Id /// - public Guid TaskId { get; set; } + public Guid VisitTaskId { get; set; } /// /// 结果 diff --git a/IRaCIS.Core.Domain/Reading/ReadingQuestionCriterionTrial.cs b/IRaCIS.Core.Domain/Reading/ReadingQuestionCriterionTrial.cs index c81873101..0666d5915 100644 --- a/IRaCIS.Core.Domain/Reading/ReadingQuestionCriterionTrial.cs +++ b/IRaCIS.Core.Domain/Reading/ReadingQuestionCriterionTrial.cs @@ -79,7 +79,7 @@ namespace IRaCIS.Core.Domain.Models /// /// 评估原因 /// - public string EvaluationReason { get; set; } = string.Empty; + public string EvaluationReason { get; set; } = "肿瘤学阅片评估原因请依据临床数据填写,在与影像学结果不一致时必填。"; /// /// 项目