Uat_Study
he 2022-08-01 16:45:58 +08:00
parent 435384cf92
commit 00427897a6
7 changed files with 289 additions and 12 deletions

View File

@ -106,6 +106,20 @@ namespace IRaCIS.Core.API.Controllers
}
#endregion
/// <summary>
/// 提交肿瘤学阅片任务
/// </summary>
/// <param name="opt"></param>
/// <returns></returns>
[HttpPost, Route("Inspection/ReadingImageTask/SetOncologyReadingInfo")]
[UnitOfWork]
public async Task<IResponseOutput> SetOncologyReadingInfo(DataInspectionDto<SetOncologyReadingInfoInDto> opt)
{
var singid = await _inspectionService.RecordSing(opt.SignInfo);
var result = await _iReadingImageTaskService.SetOncologyReadingInfo(opt.Data);
await _inspectionService.CompletedSign(singid, result);
return result;
}
/// <summary>
/// 提交全局阅片任务

View File

@ -1507,6 +1507,36 @@
文件路径
</summary>
</member>
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.SetOncologyQuestion.EvaluationResult">
<summary>
评估结果
</summary>
</member>
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.SetOncologyQuestion.EvaluationReason">
<summary>
评估原因
</summary>
</member>
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.OncologyVisitTaskInfo.EvaluationResult">
<summary>
评估结果
</summary>
</member>
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.OncologyVisitTaskInfo.EvaluationReason">
<summary>
评估原因
</summary>
</member>
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.GetOncologyReadingInfoOutDto.TrialEvaluationResult">
<summary>
评估结果
</summary>
</member>
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.GetOncologyReadingInfoOutDto.TrialEvaluationReason">
<summary>
评估原因
</summary>
</member>
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.GetGlobalReadingInfoInDto.UsingOriginalData">
<summary>
当新答案为空的时候 是否是有原数据
@ -4235,6 +4265,31 @@
项目问题集合
</summary>
</member>
<member name="P:IRaCIS.Core.Application.Contracts.SetOncologySetInDto.TrialId">
<summary>
项目ID
</summary>
</member>
<member name="P:IRaCIS.Core.Application.Contracts.SetOncologySetInDto.EvaluationResult">
<summary>
评估结果
</summary>
</member>
<member name="P:IRaCIS.Core.Application.Contracts.SetOncologySetInDto.EvaluationReason">
<summary>
评估原因
</summary>
</member>
<member name="P:IRaCIS.Core.Application.Contracts.GetOncologySetOutDto.EvaluationResult">
<summary>
评估结果
</summary>
</member>
<member name="P:IRaCIS.Core.Application.Contracts.GetOncologySetOutDto.EvaluationReason">
<summary>
评估原因
</summary>
</member>
<member name="P:IRaCIS.Core.Application.Contracts.SetTrialReadingCriterionInDto.FormType">
<summary>
表单类型
@ -4876,6 +4931,20 @@
<param name="inDto"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.TrialConfigService.GetOncologySet(IRaCIS.Core.Application.Contracts.GetOncologySetInDto)">
<summary>
获取项目肿瘤学配置
</summary>
<param name="inDto"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.TrialConfigService.SetOncologySet(IRaCIS.Core.Application.Contracts.SetOncologySetInDto)">
<summary>
设置项目肿瘤学配置
</summary>
<param name="inDto"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.TrialConfigService.GetTrialReadingJudgeList(IRaCIS.Core.Application.Contracts.GetTrialReadingInfoInDto)">
<summary>
获取项目裁判信息
@ -5781,6 +5850,21 @@
IR影像阅片
</summary>
</member>
<member name="M:IRaCIS.Application.Services.ReadingImageTaskService.GetOncologyReadingInfo(IRaCIS.Core.Application.Service.Reading.Dto.GetOncologyReadingInfoInDto)">
<summary>
获取肿瘤学任务信息
</summary>
<param name="inDto"></param>
<returns></returns>
<exception cref="T:IRaCIS.Core.Infrastructure.BusinessValidationFailedException"></exception>
</member>
<member name="M:IRaCIS.Application.Services.ReadingImageTaskService.SetOncologyReadingInfo(IRaCIS.Core.Application.Service.Reading.Dto.SetOncologyReadingInfoInDto)">
<summary>
修改全局阅片信息
</summary>
<param name="inDto"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Application.Services.ReadingImageTaskService.SaveGlobalReadingInfo(IRaCIS.Core.Application.Service.Reading.Dto.SaveGlobalReadingInfoInDto)">
<summary>
保存全局阅片结果

View File

@ -29,6 +29,28 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public Guid GlobalTaskId { get; set; }
}
public class SetOncologyQuestion
{
public Guid VisitTaskId { get; set; }
/// <summary>
/// 评估结果
/// </summary>
public string EvaluationResult { get; set; } = string.Empty;
/// <summary>
/// 评估原因
/// </summary>
public string EvaluationReason { get; set; } = string.Empty;
}
public class SetOncologyReadingInfoInDto
{
public Guid OncologyTaskId { get; set; }
public List<SetOncologyQuestion> 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; }
/// <summary>
/// 评估结果
/// </summary>
@ -64,6 +98,27 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
/// 评估原因
/// </summary>
public string EvaluationReason { get; set; } = string.Empty;
public List<OncologyQuestion> QuestionList { get; set; } = new List<OncologyQuestion>();
}
public class GetOncologyReadingInfoOutDto
{
public Guid OncologyTaskId { get; set; }
/// <summary>
/// 评估结果
/// </summary>
public string TrialEvaluationResult { get; set; } = string.Empty;
/// <summary>
/// 评估原因
/// </summary>
public string TrialEvaluationReason { get; set; } = string.Empty;
public List<OncologyVisitTaskInfo> OncologyVisits { get; set; } = new List<OncologyVisitTaskInfo>();
}
public class GetOncologyReadingInfoInDto

View File

@ -19,5 +19,7 @@ namespace IRaCIS.Core.Application.Contracts
void FindChildQuestion(GetTrialReadingQuestionOutDto trialReadingQuestion, List<GetTrialReadingQuestionOutDto> questionlists);
Task<IResponseOutput> SubmitGlobalReadingInfo(SubmitGlobalReadingInfoInDto inDto);
Task<IResponseOutput> SetOncologyReadingInfo(SetOncologyReadingInfoInDto inDto);
}
}

View File

@ -30,6 +30,7 @@ namespace IRaCIS.Application.Services
private readonly IRepository<NoneDicomStudy> _noneDicomStudyRepository;
private readonly IRepository<VisitTask> _visitTaskRepository;
private readonly IRepository<Trial> _trialRepository;
private readonly IRepository<ReadingOncologyTaskInfo> _readingOncologyTaskInfoRepository;
private readonly IVisitTaskHelpeService _visitTaskHelpeService;
private readonly IVisitTaskService _visitTaskService;
private readonly IReadingClinicalDataService _readingClinicalDataService;
@ -51,6 +52,7 @@ namespace IRaCIS.Application.Services
IRepository<NoneDicomStudy> noneDicomStudyRepository,
IRepository<VisitTask> visitTaskRepository,
IRepository<Trial> TrialRepository,
IRepository<ReadingOncologyTaskInfo> 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<GetOncologyReadingInfoOutDto> 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("请先确认一个项目标准。");
// }
//}
/// <summary>
/// 获取肿瘤学任务信息
/// </summary>
/// <param name="inDto"></param>
/// <returns></returns>
/// <exception cref="BusinessValidationFailedException"></exception>
[HttpPost]
public async Task<GetOncologyReadingInfoOutDto> 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<OncologyVisitTaskInfo> 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;
}
/// <summary>
/// 修改全局阅片信息
/// </summary>
/// <param name="inDto"></param>
/// <returns></returns>
[HttpPost]
public async Task<IResponseOutput> SetOncologyReadingInfo(SetOncologyReadingInfoInDto inDto)
{
await _readingOncologyTaskInfoRepository.BatchDeleteNoTrackingAsync(x => x.OncologyTaskId == inDto.OncologyTaskId);
var taskInfo = await _visitTaskRepository.Where(x => x.Id == inDto.OncologyTaskId).FirstNotNullAsync();
List<ReadingOncologyTaskInfo> 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 全局阅片相关

View File

@ -24,7 +24,7 @@ namespace IRaCIS.Core.Domain.Models
/// <summary>
/// 访视任务Id
/// </summary>
public Guid TaskId { get; set; }
public Guid VisitTaskId { get; set; }
/// <summary>
/// 结果

View File

@ -79,7 +79,7 @@ namespace IRaCIS.Core.Domain.Models
/// <summary>
/// 评估原因
/// </summary>
public string EvaluationReason { get; set; } = string.Empty;
public string EvaluationReason { get; set; } = "肿瘤学阅片评估原因请依据临床数据填写,在与影像学结果不一致时必填。";
/// <summary>
/// 项目