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; } = "肿瘤学阅片评估原因请依据临床数据填写,在与影像学结果不一致时必填。";
///
/// 项目