肿瘤学阅片

IRC_NewDev
he 2024-01-17 10:07:58 +08:00
parent 4bbfacd7de
commit 35687c01ec
2 changed files with 84 additions and 15 deletions

View File

@ -40,6 +40,7 @@ namespace IRaCIS.Core.Application.Service
private readonly IRepository<ReadingTaskQuestionAnswer> _readingTaskQuestionAnswerRepository; private readonly IRepository<ReadingTaskQuestionAnswer> _readingTaskQuestionAnswerRepository;
private readonly IRepository<ReadingTableAnswerRowInfo> _readingTableAnswerRowInfoRepository; private readonly IRepository<ReadingTableAnswerRowInfo> _readingTableAnswerRowInfoRepository;
private readonly IRepository<ReadingTableQuestionAnswer> _readingTableQuestionAnswerRepository; private readonly IRepository<ReadingTableQuestionAnswer> _readingTableQuestionAnswerRepository;
private readonly IRepository<ReadingOncologyTaskInfo> _readingOncologyTaskInfoRepository;
private readonly IRepository<ReadingTableQuestionTrial> _readingTableQuestionTrialRepository; private readonly IRepository<ReadingTableQuestionTrial> _readingTableQuestionTrialRepository;
private readonly IRepository<ReadingQuestionTrial> _readingQuestionTrialRepository; private readonly IRepository<ReadingQuestionTrial> _readingQuestionTrialRepository;
private readonly IMapper _mapper; private readonly IMapper _mapper;
@ -60,6 +61,7 @@ namespace IRaCIS.Core.Application.Service
IRepository<ReadingTaskQuestionAnswer> readingTaskQuestionAnswerRepository, IRepository<ReadingTaskQuestionAnswer> readingTaskQuestionAnswerRepository,
IRepository<ReadingTableAnswerRowInfo> readingTableAnswerRowInfoRepository, IRepository<ReadingTableAnswerRowInfo> readingTableAnswerRowInfoRepository,
IRepository<ReadingTableQuestionAnswer> readingTableQuestionAnswerRepository, IRepository<ReadingTableQuestionAnswer> readingTableQuestionAnswerRepository,
IRepository<ReadingOncologyTaskInfo> ReadingOncologyTaskInfoRepository,
IRepository<ReadingTableQuestionTrial> readingTableQuestionTrialRepository, IRepository<ReadingTableQuestionTrial> readingTableQuestionTrialRepository,
IRepository<ReadingQuestionTrial> readingQuestionTrialRepository, IRepository<ReadingQuestionTrial> readingQuestionTrialRepository,
IRepository<ReadingJudgeInfo> readingJudgeInfoRepository, IRepository<ReadingJudgeInfo> readingJudgeInfoRepository,
@ -76,6 +78,7 @@ namespace IRaCIS.Core.Application.Service
this._readingTaskQuestionAnswerRepository = readingTaskQuestionAnswerRepository; this._readingTaskQuestionAnswerRepository = readingTaskQuestionAnswerRepository;
this._readingTableAnswerRowInfoRepository = readingTableAnswerRowInfoRepository; this._readingTableAnswerRowInfoRepository = readingTableAnswerRowInfoRepository;
this._readingTableQuestionAnswerRepository = readingTableQuestionAnswerRepository; this._readingTableQuestionAnswerRepository = readingTableQuestionAnswerRepository;
_readingOncologyTaskInfoRepository = ReadingOncologyTaskInfoRepository;
this._readingTableQuestionTrialRepository = readingTableQuestionTrialRepository; this._readingTableQuestionTrialRepository = readingTableQuestionTrialRepository;
this._readingQuestionTrialRepository = readingQuestionTrialRepository; this._readingQuestionTrialRepository = readingQuestionTrialRepository;
_provider = provider; _provider = provider;
@ -1606,10 +1609,11 @@ namespace IRaCIS.Core.Application.Service
var oncologySubjectUser = await _subjectUserRepository.Where(x => x.SubjectId == item.SubjectId && x.ArmEnum == Arm.TumorArm && x.IsConfirmed && x.TrialReadingCriterionId == originalTaskInfo.TrialReadingCriterionId).FirstOrDefaultAsync(); var oncologySubjectUser = await _subjectUserRepository.Where(x => x.SubjectId == item.SubjectId && x.ArmEnum == Arm.TumorArm && x.IsConfirmed && x.TrialReadingCriterionId == originalTaskInfo.TrialReadingCriterionId).FirstOrDefaultAsync();
item.VisitNum = await _readModuleRepository.Where(x => x.Id == item.ReadModuleId).Select(x => x.SubjectVisit.VisitNum).FirstOrDefaultAsync(); item.VisitNum = await _readModuleRepository.Where(x => x.Id == item.ReadModuleId).Select(x => x.SubjectVisit.VisitNum).FirstOrDefaultAsync();
var id= NewId.NextGuid();
var singleTask = await _visitTaskRepository.AddAsync(new VisitTask() var singleTask = await _visitTaskRepository.AddAsync(new VisitTask()
{ {
Id= id,
TrialId = trialId, TrialId = trialId,
SubjectId = item.SubjectId, SubjectId = item.SubjectId,
IsUrgent = originalTaskInfo.IsUrgent, IsUrgent = originalTaskInfo.IsUrgent,
@ -1641,6 +1645,19 @@ namespace IRaCIS.Core.Application.Service
currentMaxCodeInt = currentMaxCodeInt + 1; currentMaxCodeInt = currentMaxCodeInt + 1;
// 生成肿瘤学需要 肿瘤学阅片结果中基线统一显示为NA
// 找到基线任务ID
var baseLineTaskId = await _visitTaskRepository.Where(x => x.TaskState == TaskState.Effect
&& x.ArmEnum == originalTaskInfo.ArmEnum && x.VisitTaskNum == 0 && x.ReadingTaskState == ReadingTaskState.HaveSigned && x.TrialReadingCriterionId == originalTaskInfo.TrialReadingCriterionId).Select(x => x.Id).FirstNotNullAsync();
await _readingOncologyTaskInfoRepository.AddAsync(new ReadingOncologyTaskInfo()
{
EvaluationResult = "-1",
OncologyTaskId = id,
VisitTaskId = baseLineTaskId,
SubjectId = originalTaskInfo.SubjectId,
TrialId = originalTaskInfo.TrialId
});
_provider.Set<int>($"{trialId}_{StaticData.CacheKey.TaskMaxCode}", currentMaxCodeInt, TimeSpan.FromMinutes(30)); _provider.Set<int>($"{trialId}_{StaticData.CacheKey.TaskMaxCode}", currentMaxCodeInt, TimeSpan.FromMinutes(30));
} }
break; break;

View File

@ -151,17 +151,54 @@ namespace IRaCIS.Application.Services
var oncologyReadingQuestions = await _readingOncologyTaskInfoRepository.Where(x => x.OncologyTaskId == inDto.VisitTaskId).ToListAsync(); var oncologyReadingQuestions = await _readingOncologyTaskInfoRepository.Where(x => x.OncologyTaskId == inDto.VisitTaskId).ToListAsync();
// 上一次肿瘤学阅片 // 上一次肿瘤学阅片
var lastOncologyTask = await _visitTaskRepository.Where(x =>
x.ReadingCategory == ReadingCategory.Oncology
&& x.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId
&& x.TaskState == TaskState.Effect
&& x.ReadingTaskState == ReadingTaskState.HaveSigned
&& x.IsAnalysisCreate == taskInfo.IsAnalysisCreate
&& x.VisitTaskNum < taskInfo.VisitTaskNum
).OrderByDescending(x => x.VisitTaskNum).FirstOrDefaultAsync();
List<ReadingOncologyTaskInfo> lastOncologyAnswerList= new List<ReadingOncologyTaskInfo>();
if (lastOncologyTask != null)
{
lastOncologyAnswerList= await _readingOncologyTaskInfoRepository.Where(x => x.OncologyTaskId == lastOncologyTask.Id).ToListAsync();
}
oncologyVisits.ForEach(x => oncologyVisits.ForEach(x =>
{ {
var oncologyData = oncologyReadingQuestions.Where(y => y.VisitTaskId == x.VisitTaskId).FirstOrDefault(); var oncologyData = oncologyReadingQuestions.Where(y => y.VisitTaskId == x.VisitTaskId).FirstOrDefault();
var lastOncologyData = lastOncologyAnswerList.Where(y => y.VisitTaskId == x.VisitTaskId).FirstOrDefault();
if (oncologyData != null) var evaluationResult = string.Empty;
var evaluationReason = string.Empty;
if (oncologyData != null && !oncologyData.EvaluationResult.IsNullOrEmpty())
{ {
x.EvaluationResult = oncologyData.EvaluationResult; evaluationResult = oncologyData.EvaluationResult;
x.EvaluationReason = oncologyData.EvaluationReason;
} }
else if (lastOncologyData != null && !lastOncologyData.EvaluationResult.IsNullOrEmpty())
{
evaluationResult = lastOncologyData.EvaluationResult;
}
if (oncologyData != null && !oncologyData.EvaluationReason.IsNullOrEmpty())
{
evaluationReason = oncologyData.EvaluationReason;
}
else if (lastOncologyData != null && !lastOncologyData.EvaluationReason.IsNullOrEmpty())
{
evaluationReason = lastOncologyData.EvaluationReason;
}
x.EvaluationResult = evaluationResult;
x.EvaluationReason = evaluationReason;
x.QuestionList = globalTaskReadingInfo.TaskList.Where(y => x.VisitTaskId == y.VisitTaskId).SelectMany(y => y.AfterQuestionList).Where(x => x.GlobalAnswerType == GlobalAnswerType.Question) x.QuestionList = globalTaskReadingInfo.TaskList.Where(y => x.VisitTaskId == y.VisitTaskId).SelectMany(y => y.AfterQuestionList).Where(x => x.GlobalAnswerType == GlobalAnswerType.Question)
.Select(y => new OncologyQuestion .Select(y => new OncologyQuestion
{ {
@ -295,7 +332,7 @@ namespace IRaCIS.Application.Services
finishReading = true; finishReading = true;
} }
else if (judgeVisitTaskId != null && (await _visitTaskRepository.AnyAsync(x => x.Id == judgeVisitTaskId.Value && x.ReadingTaskState == ReadingTaskState.HaveSigned))) else if (judgeVisitTaskId != null && (await _visitTaskRepository.AnyAsync(x => x.Id == judgeVisitTaskId.Value&&x.JudgeResultTaskId!=null && x.ReadingTaskState == ReadingTaskState.HaveSigned)))
{ {
finishReading = true; finishReading = true;
} }
@ -328,9 +365,24 @@ namespace IRaCIS.Application.Services
ReadingCategory = ReadingCategory.Oncology, ReadingCategory = ReadingCategory.Oncology,
}); });
var originalVisitId = await _visitTaskRepository.Where(x => x.SouceReadModuleId == globalreadModuleId && x.TaskState == TaskState.Effect && x.ReadingCategory == ReadingCategory.Global var originalVisit = await _visitTaskRepository.Where(x => x.SouceReadModuleId == globalreadModuleId && x.TaskState == TaskState.Effect && x.ReadingCategory == ReadingCategory.Global
&& x.ReadingTaskState == ReadingTaskState.HaveSigned && !x.IsAnalysisCreate && x.TrialReadingCriterionId == readModuleInfo.TrialReadingCriterionId && x.ReadingTaskState == ReadingTaskState.HaveSigned && !x.IsAnalysisCreate && x.TrialReadingCriterionId == readModuleInfo.TrialReadingCriterionId
).Select(x => x.Id).FirstOrDefaultAsync(); ).OrderByDescending(x => x.VisitTaskNum).ThenBy(x => x.ArmEnum).FirstNotNullAsync();
var originalVisitId = default(Guid);
if (originalVisit.JudgeVisitTaskId != null)
{
originalVisitId = (await _visitTaskRepository.Where(x => x.Id == originalVisit.JudgeVisitTaskId).Select(x => x.JudgeResultTaskId).FirstOrDefaultAsync()) ?? originalVisit.Id;
}
else
{
originalVisitId = originalVisit.Id;
}
await _visitTaskHelpeService.AddTaskAsync(new GenerateTaskCommand() await _visitTaskHelpeService.AddTaskAsync(new GenerateTaskCommand()
{ {
OriginalVisitId= originalVisitId, OriginalVisitId= originalVisitId,