diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
index a2a3b22c0..bb2c876f0 100644
--- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
+++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
@@ -13963,6 +13963,12 @@
+
+
+ 维护OSS 影像数据
+
+
+
Reviewer 列表查询参数
diff --git a/IRaCIS.Core.Application/Service/Allocation/VisitTaskHelpeService.cs b/IRaCIS.Core.Application/Service/Allocation/VisitTaskHelpeService.cs
index 527b89236..76bb7d6ea 100644
--- a/IRaCIS.Core.Application/Service/Allocation/VisitTaskHelpeService.cs
+++ b/IRaCIS.Core.Application/Service/Allocation/VisitTaskHelpeService.cs
@@ -40,7 +40,8 @@ namespace IRaCIS.Core.Application.Service
private readonly IRepository _readingTaskQuestionAnswerRepository;
private readonly IRepository _readingTableAnswerRowInfoRepository;
private readonly IRepository _readingTableQuestionAnswerRepository;
- private readonly IRepository _readingTableQuestionTrialRepository;
+ private readonly IRepository _readingOncologyTaskInfoRepository;
+ private readonly IRepository _readingTableQuestionTrialRepository;
private readonly IRepository _readingQuestionTrialRepository;
private readonly IMapper _mapper;
private readonly IUserInfo _userInfo;
@@ -60,7 +61,8 @@ namespace IRaCIS.Core.Application.Service
IRepository readingTaskQuestionAnswerRepository,
IRepository readingTableAnswerRowInfoRepository,
IRepository readingTableQuestionAnswerRepository,
- IRepository readingTableQuestionTrialRepository,
+ IRepository ReadingOncologyTaskInfoRepository,
+ IRepository readingTableQuestionTrialRepository,
IRepository readingQuestionTrialRepository,
IRepository readingJudgeInfoRepository,
IRepository taskAllocationRuleRepository, IMapper mapper, IUserInfo userInfo, IRepository visitTaskReReadingRepository,
@@ -76,7 +78,8 @@ namespace IRaCIS.Core.Application.Service
this._readingTaskQuestionAnswerRepository = readingTaskQuestionAnswerRepository;
this._readingTableAnswerRowInfoRepository = readingTableAnswerRowInfoRepository;
this._readingTableQuestionAnswerRepository = readingTableQuestionAnswerRepository;
- this._readingTableQuestionTrialRepository = readingTableQuestionTrialRepository;
+ _readingOncologyTaskInfoRepository = ReadingOncologyTaskInfoRepository;
+ this._readingTableQuestionTrialRepository = readingTableQuestionTrialRepository;
this._readingQuestionTrialRepository = readingQuestionTrialRepository;
_provider = provider;
_subjectVisitRepository = subjectVisitRepository;
@@ -1606,11 +1609,12 @@ 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();
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()
{
- TrialId = trialId,
+ Id= id,
+ TrialId = trialId,
SubjectId = item.SubjectId,
IsUrgent = originalTaskInfo.IsUrgent,
TaskName = item.ReadingName,
@@ -1641,7 +1645,23 @@ namespace IRaCIS.Core.Application.Service
currentMaxCodeInt = currentMaxCodeInt + 1;
- _provider.Set($"{trialId}_{StaticData.CacheKey.TaskMaxCode}", currentMaxCodeInt, TimeSpan.FromMinutes(30));
+ // 生成肿瘤学需要 肿瘤学阅片结果中基线,统一显示为NA
+ // 找到基线任务ID
+ var baseLineTaskId = await _visitTaskRepository.Where(x => x.TaskState == TaskState.Effect
+ && x.ArmEnum == originalTaskInfo.ArmEnum && x.VisitTaskNum == 0
+ && x.SubjectId== originalTaskInfo.SubjectId
+ && x.ReadingTaskState == ReadingTaskState.HaveSigned && x.TrialReadingCriterionId == originalTaskInfo.TrialReadingCriterionId).Select(x => x.Id).FirstNotNullAsync();
+ await _readingOncologyTaskInfoRepository.AddAsync(new ReadingOncologyTaskInfo()
+ {
+ EvaluationResult = "-1",
+ EvaluationReason=string.Empty,
+ OncologyTaskId = id,
+ VisitTaskId = baseLineTaskId,
+ SubjectId = originalTaskInfo.SubjectId,
+ TrialId = originalTaskInfo.TrialId
+ });
+
+ _provider.Set($"{trialId}_{StaticData.CacheKey.TaskMaxCode}", currentMaxCodeInt, TimeSpan.FromMinutes(30));
}
break;
}
diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingOncologyTaskService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingOncologyTaskService.cs
index a4ad78707..31359eadc 100644
--- a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingOncologyTaskService.cs
+++ b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingOncologyTaskService.cs
@@ -151,18 +151,55 @@ namespace IRaCIS.Application.Services
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 lastOncologyAnswerList= new List();
+
+ 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 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;
- x.EvaluationReason = oncologyData.EvaluationReason;
+ evaluationResult = oncologyData.EvaluationResult;
}
- x.QuestionList = globalTaskReadingInfo.TaskList.Where(y => x.VisitTaskId == y.VisitTaskId).SelectMany(y => y.AfterQuestionList).Where(x => x.GlobalAnswerType == GlobalAnswerType.Question)
+ 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)
.Select(y => new OncologyQuestion
{
QuestionId = y.QuestionId ?? default(Guid),
@@ -295,7 +332,7 @@ namespace IRaCIS.Application.Services
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;
}
@@ -328,9 +365,24 @@ namespace IRaCIS.Application.Services
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
- ).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()
{
OriginalVisitId= originalVisitId,