diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
index 1accf30d6..ea0d004b3 100644
--- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
+++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
@@ -1317,6 +1317,13 @@
+
+
+ 计算靶病灶融合后状态
+
+
+
+
获取Sod的值
@@ -5314,6 +5321,11 @@
是否显示详情
+
+
+ 任务类型
+
+
是否是转变的任务(转为IRECIST)
diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs
index c7b532d2f..4c84b1ec5 100644
--- a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs
+++ b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs
@@ -1293,9 +1293,15 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
//任务阅片状态
public ReadingTaskState ReadingTaskState { get; set; }
- public Guid GlobalTaskId { get; set; }
+ public Guid GlobalOrVisitTaskId { get; set; }
- public Guid RelatedTaskId { get; set; }
+ ///
+ /// 任务类型
+ ///
+ public ReadingCategory ReadingCategory { get; set; }
+
+
+ public Guid RelatedTaskId { get; set; }
public Guid SubjectId { get; set; }
diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs
index 620042d14..b7f47b1d8 100644
--- a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs
+++ b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs
@@ -2978,8 +2978,7 @@ namespace IRaCIS.Application.Services
case ReadingCategory.Visit:
needReadList = await _readModuleRepository.Where(x => x.SubjectVisitId == taskInfo.SourceSubjectVisitId &&
- x.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId &&
- x.ReadingSetType == ReadingSetType.ImageReading)
+ x.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId )
.Select(x => new ReadingGenerataTaskDTO
{
IsUrgent = x.IsUrgent ?? false,
@@ -2992,16 +2991,25 @@ namespace IRaCIS.Application.Services
if (needReadList.Any(x => x.ReadingCategory == ReadingCategory.Global))
{
needReadList = needReadList.Where(x => x.ReadingCategory != ReadingCategory.Oncology).ToList();
- }
- //needReadList = needReadList.Where(x => _visitTaskRepository.Where(y => y.SouceReadModuleId == x.ReadModuleId).Count() == 0).ToList();
- await _visitTaskHelpeService.AddTaskAsync(new GenerateTaskCommand()
- {
- OriginalVisitId = visitTaskId,
- ReadingCategory = GenerateTaskCategory.Global,
- TrialId = taskInfo.TrialId,
+ await _visitTaskHelpeService.AddTaskAsync(new GenerateTaskCommand()
+ {
+ OriginalVisitId = visitTaskId,
+ ReadingCategory = GenerateTaskCategory.Global,
+ TrialId = taskInfo.TrialId,
- ReadingGenerataTaskList = needReadList
- });
+ ReadingGenerataTaskList = needReadList
+ });
+ }
+ else if (needReadList.Any(x => x.ReadingCategory == ReadingCategory.Oncology))
+ {
+ // 添加肿瘤学
+ if (await _visitTaskRepository.AnyAsync(x => x.Id == visitTaskId && x.JudgeVisitTaskId == null))
+ {
+ await AddOncologyTask(needReadList.First().ReadModuleId);
+ }
+ }
+ //needReadList = needReadList.Where(x => _visitTaskRepository.Where(y => y.SouceReadModuleId == x.ReadModuleId).Count() == 0).ToList();
+
break;
// 肿瘤学
case ReadingCategory.Global:
diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingJudgeTaskService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingJudgeTaskService.cs
index 8d304da7d..907d14663 100644
--- a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingJudgeTaskService.cs
+++ b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingJudgeTaskService.cs
@@ -429,7 +429,18 @@ namespace IRaCIS.Application.Services
await _visitTaskRepository.SaveChangesAsync();
// 需要判断是否添加肿瘤学任务
var taskInfo = await _visitTaskRepository.Where(x => x.JudgeVisitTaskId == inDto.VisitTaskId).FirstNotNullAsync();
- if (taskInfo.ReadingCategory == ReadingCategory.Global)
+
+ if (taskInfo.ReadingCategory == ReadingCategory.Visit)
+ {
+ var oncologModule = await _readModuleRepository
+ .Where(x => x.SubjectVisitId == taskInfo.SourceSubjectVisitId &&x.TrialReadingCriterionId==taskInfo.TrialReadingCriterionId&& x.ModuleType == ModuleTypeEnum.Oncology).FirstOrDefaultAsync();
+ if (oncologModule != null)
+ {
+ await AddOncologyTask(oncologModule.Id);
+ }
+ }
+
+ else if (taskInfo.ReadingCategory == ReadingCategory.Global)
{
if (taskInfo.SouceReadModuleId == null)
{
@@ -438,13 +449,16 @@ namespace IRaCIS.Application.Services
var visitId = await _readModuleRepository.Where(x => x.Id == taskInfo.SouceReadModuleId).Select(x => x.SubjectVisitId).FirstOrDefaultAsync();
- var oncologModuleId = await _readModuleRepository.Where(x => x.SubjectVisitId == visitId && x.ModuleType == ModuleTypeEnum.Oncology
+ var oncologModule = await _readModuleRepository.Where(x => x.SubjectVisitId == visitId && x.ModuleType == ModuleTypeEnum.Oncology
&&x.TrialReadingCriterionId== taskInfo.TrialReadingCriterionId
- ).Select(x => x.Id).FirstOrDefaultAsync();
+ ).FirstOrDefaultAsync();
- await AddOncologyTask(oncologModuleId);
+ if (oncologModule != null)
+ {
+ await AddOncologyTask(oncologModule.Id);
+ }
- }
+ }
var result = await _visitTaskRepository.SaveChangesAsync();
diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingOncologyTaskService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingOncologyTaskService.cs
index f1cf57440..b361b0155 100644
--- a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingOncologyTaskService.cs
+++ b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingOncologyTaskService.cs
@@ -11,6 +11,7 @@ using Newtonsoft.Json;
using IRaCIS.Core.Application.Service;
using IRaCIS.Core.Application.ViewModel;
using IRaCIS.Core.Application.Filter;
+using IRaCIS.Core.Domain.Models;
namespace IRaCIS.Application.Services
{
@@ -45,14 +46,14 @@ namespace IRaCIS.Application.Services
{
//TrialEvaluationResult = trialCriterion.EvaluationResult,
IsShowDetail = trialCriterion.IsShowDetail,
- TrialEvaluationReason = trialCriterion.EvaluationReason.IsNullOrEmpty() ? ReadingCommon.EvaluationReason : trialCriterion.EvaluationReason,
+ TrialEvaluationReason = trialCriterion.EvaluationReason,
OncologyTaskId = inDto.VisitTaskId,
ReadingTaskState = taskInfo.ReadingTaskState,
};
// 先找到是R1还是R2的阅片 先找到全局阅片
- VisitTask? globalTaskInfo = null;
+ VisitTask? globalOrVisitTaskInfo = null;
var relatedVisitTaskIdList = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).Select(x => x.RelatedVisitTaskIdList).FirstNotNullAsync();
Guid? judgeResultTaskId = null;
if (taskInfo.ReadingTaskState == ReadingTaskState.HaveSigned && relatedVisitTaskIdList.Count() > 0)
@@ -62,25 +63,32 @@ namespace IRaCIS.Application.Services
// 说明是裁判 取裁判结果
if (judgeResultTaskId != null)
{
- globalTaskInfo = await _visitTaskRepository.Where(x =>x.Id== judgeResultTaskId).FirstNotNullAsync();
+ globalOrVisitTaskInfo = await _visitTaskRepository.Where(x =>x.Id== judgeResultTaskId).FirstNotNullAsync();
}
else
{
- globalTaskInfo = await _visitTaskRepository.Where(x => x.Id == relatedVisitTaskIdList[0]).FirstNotNullAsync();
+ globalOrVisitTaskInfo = await _visitTaskRepository.Where(x => x.Id == relatedVisitTaskIdList[0]).FirstNotNullAsync();
}
}
else
{
+ var taskNums = new List() {
+ // 全局
+ (decimal) (taskInfo.VisitTaskNum - ReadingCommon.TaskNumDic[ReadingCategory.Oncology] + ReadingCommon.TaskNumDic[ReadingCategory.Global]),
- var taskNum = taskInfo.VisitTaskNum - ReadingCommon.TaskNumDic[ReadingCategory.Oncology] + ReadingCommon.TaskNumDic[ReadingCategory.Global];
+ // 访视
+ (decimal)(taskInfo.VisitTaskNum - ReadingCommon.TaskNumDic[ReadingCategory.Oncology])
+ };
- globalTaskInfo = await _visitTaskRepository
+
+
+ globalOrVisitTaskInfo = await _visitTaskRepository
.Where(x => x.SubjectId == taskInfo.SubjectId &&
x.TaskState == TaskState.Effect &&
x.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId &&
- x.VisitTaskNum== taskNum &&
+ taskNums.Contains(x.VisitTaskNum) &&
x.ReadingCategory == ReadingCategory.Global &&
x.IsAnalysisCreate == taskInfo.IsAnalysisCreate &&
x.IsSelfAnalysis == taskInfo.IsSelfAnalysis &&
@@ -93,44 +101,111 @@ namespace IRaCIS.Application.Services
// 最后取哪组的数据
- VisitTask visitTask = new VisitTask();
+ //VisitTask visitTask = new VisitTask();
List visitTaskIdList = new List();
// 判断是否产生裁判
- if (globalTaskInfo!.JudgeVisitTaskId == null)
+ if (globalOrVisitTaskInfo!.JudgeVisitTaskId == null)
{
- visitTask = globalTaskInfo;
+ //visitTask = globalTaskInfo;
// 全局的关联访视
- visitTaskIdList = await _visitTaskRepository.Where(x => x.Id == visitTask.Id).Select(x => x.RelatedVisitTaskIdList).FirstNotNullAsync();
+ visitTaskIdList = await _visitTaskRepository.Where(x => x.Id == globalOrVisitTaskInfo.Id).Select(x => x.RelatedVisitTaskIdList).FirstNotNullAsync();
}
else
{
if (judgeResultTaskId == null)
{
- judgeResultTaskId = await _visitTaskRepository.Where(x => x.Id == globalTaskInfo.JudgeVisitTaskId).Select(x => x.JudgeResultTaskId).FirstOrDefaultAsync();
+ judgeResultTaskId = await _visitTaskRepository.Where(x => x.Id == globalOrVisitTaskInfo.JudgeVisitTaskId).Select(x => x.JudgeResultTaskId).FirstOrDefaultAsync();
if (judgeResultTaskId == null)
{
throw new BusinessValidationFailedException(_localizer["ReadingOncology_Abnormal"]);
}
}
- visitTask = await _visitTaskRepository.Where(x => x.Id == judgeResultTaskId).FirstNotNullAsync();
+ //visitTask = await _visitTaskRepository.Where(x => x.Id == judgeResultTaskId).FirstNotNullAsync();
visitTaskIdList= await _visitTaskRepository.Where(x => x.Id == judgeResultTaskId).Select(x=>x.RelatedVisitTaskIdList).FirstNotNullAsync();
}
- result.RelatedTaskId = globalTaskInfo!.JudgeVisitTaskId ?? globalTaskInfo.Id;
- result.GlobalTaskId = visitTask.Id;
- result.SubjectId = visitTask.SubjectId;
- // 获取全局阅片信息
- var globalTaskReadingInfo = await this.GetGlobalReadingInfo(new GetGlobalReadingInfoInDto()
+
+ result.RelatedTaskId = globalOrVisitTaskInfo!.JudgeVisitTaskId ?? globalOrVisitTaskInfo.Id;
+ result.ReadingCategory = globalOrVisitTaskInfo.ReadingCategory;
+
+ result.GlobalOrVisitTaskId = globalOrVisitTaskInfo.Id;
+ result.SubjectId = globalOrVisitTaskInfo.SubjectId;
+
+
+ List globalVisits=new List();
+
+ if (result.ReadingCategory == ReadingCategory.Global)
{
- UsingOriginalData = true,
- VisitTaskId = visitTask.Id
- });
+ globalVisits = (await this.GetGlobalReadingInfo(new GetGlobalReadingInfoInDto()
+ {
+ UsingOriginalData = true,
+ VisitTaskId = result.GlobalOrVisitTaskId
+ })).TaskList;
+ }
+ else
+ {
+ // 按照全局那边的查询法
+ globalVisits =await _visitTaskRepository.Where(x =>
+ x.TrialId == taskInfo.TrialId &&
+ x.SubjectId == taskInfo.SubjectId &&
+ x.ReadingCategory == ReadingCategory.Visit &&
+ x.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId &&
+ x.ReadingTaskState == ReadingTaskState.HaveSigned &&
+ x.IsAnalysisCreate == taskInfo.IsAnalysisCreate &&
+ x.ArmEnum == taskInfo.ArmEnum &&
+ x.IsSelfAnalysis == taskInfo.IsSelfAnalysis &&
+ x.DoctorUserId == taskInfo.DoctorUserId &&
+ x.TaskState == TaskState.Effect &&
+ x.VisitTaskNum < globalOrVisitTaskInfo.VisitTaskNum)
+ .OrderBy(x => x.VisitTaskNum).Select(x => new GlobalVisitInfo()
+ {
+ VisitName = x.TaskName,
+ BlindName = x.TaskBlindName,
+ VisitTaskId = x.Id,
+ IsConvertedTask = x.IsConvertedTask,
+ IsFirstChangeTask = x.IsConvertedTask && x.BeforeConvertedTaskId != null,
+ ArmEnum = taskInfo.ArmEnum,
+ VisitNum = x.SourceSubjectVisit.VisitNum,
+ IsBaseLine = x.SourceSubjectVisit.IsBaseLine,
+ VisitId = x.SourceSubjectVisitId!.Value,
+ LesionCountList = x.LesionList.GroupBy(y => y.ReadingQuestionTrial.LesionType).Select(x => new LesionDto
+ {
+ LesionType = x.Key!.Value,
+ Count = x.ToList().Count()
+ }).ToList(),
+ //CrterionDictionaryGroup= x.CrterionDictionaryGroup,
+ BeforeQuestionList = x.ReadingTaskQuestionAnswerList.Where(y => y.ReadingQuestionTrial.GlobalReadingShowType != GlobalReadingShowType.NotShow).OrderBy(y => y.ReadingQuestionTrial.ShowOrder)
+ .Select(y => new GlobalQuestionInfo()
+ {
+
+ QuestionId = y.ReadingQuestionTrialId,
+ QuestionName = y.ReadingQuestionTrial.QuestionName.LanguageName(y.ReadingQuestionTrial.QuestionEnName, _userInfo.IsEn_Us),
+ QuestionEnName = y.ReadingQuestionTrial.QuestionEnName,
+ AnswerGroup = y.ReadingQuestionTrial.AnswerGroup,
+ QuestionType = y.ReadingQuestionTrial.QuestionType,
+ LimitEdit = y.ReadingQuestionTrial.LimitEdit,
+ MaxAnswerLength = y.ReadingQuestionTrial.MaxAnswerLength,
+ FileType = y.ReadingQuestionTrial.FileType,
+ QuestionGenre = y.ReadingQuestionTrial.QuestionGenre,
+ DictionaryCode = y.ReadingQuestionTrial.DictionaryCode,
+ GlobalReadingShowType = y.ReadingQuestionTrial.GlobalReadingShowType,
+ AnswerCombination = y.ReadingQuestionTrial.AnswerCombination,
+ JudgeType = y.ReadingQuestionTrial.JudgeType,
+ ShowOrder = y.ReadingQuestionTrial.ShowOrder,
+ Type = y.ReadingQuestionTrial.Type,
+ TypeValue = y.ReadingQuestionTrial.TypeValue,
+ ValueType = y.ReadingQuestionTrial.ValueType,
+ IsJudgeQuestion = y.ReadingQuestionTrial.IsJudgeQuestion,
+ Answer = y.Answer,
+ }).ToList()
+ }).ToListAsync();
+ }
// 找到对应的访视
List oncologyVisits = await _visitTaskRepository.Where(x => visitTaskIdList.Contains(x.Id))
@@ -199,7 +274,7 @@ namespace IRaCIS.Application.Services
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 = globalVisits.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),
@@ -208,8 +283,8 @@ namespace IRaCIS.Application.Services
DictionaryCode=y.DictionaryCode,
Answer = y.Answer
}).ToList();
- x.IsHaveChange = globalTaskReadingInfo.TaskList.Where(y => x.VisitTaskId == y.VisitTaskId).SelectMany(y => y.AfterQuestionList).Any(y => y.IsHaveChange);
- x.VisitRemark = globalTaskReadingInfo.TaskList.Where(y => x.VisitTaskId == y.VisitTaskId).SelectMany(y => y.AfterQuestionList).Where(y => y.GlobalAnswerType == GlobalAnswerType.Reason).Select(x => x.Answer).FirstOrDefault() ?? string.Empty;
+ x.IsHaveChange = result.ReadingCategory == ReadingCategory.Visit?false: globalVisits.Where(y => x.VisitTaskId == y.VisitTaskId).SelectMany(y => y.AfterQuestionList).Any(y => y.IsHaveChange);
+ x.VisitRemark = result.ReadingCategory == ReadingCategory.Visit ? string.Empty : globalVisits.Where(y => x.VisitTaskId == y.VisitTaskId).SelectMany(y => y.AfterQuestionList).Where(y => y.GlobalAnswerType == GlobalAnswerType.Reason).Select(x => x.Answer).FirstOrDefault() ?? string.Empty;
});
diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingPeriod/ReadModuleService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingPeriod/ReadModuleService.cs
index 6174c5b50..1d402a924 100644
--- a/IRaCIS.Core.Application/Service/Reading/ReadingPeriod/ReadModuleService.cs
+++ b/IRaCIS.Core.Application/Service/Reading/ReadingPeriod/ReadModuleService.cs
@@ -303,7 +303,7 @@ namespace IRaCIS.Application.Services
var readModulequery = _readModuleRepository.AsQueryable().Where(x=>x.TrialReadingCriterionId == inDto.TrialReadingCriterionId);
var resultlist= await visitQuery.WhereIf(finalVisitNum!=0, x => x.VisitNum <= finalVisitNum)
- .WhereIf(inDto.ReadingSetType== ReadingSetType.TumorReading, x => readModulequery.Where(y => y.SubjectVisitId == x.Id&&y.TrialReadingCriterionId== inDto.TrialReadingCriterionId && y.ReadingSetType == ReadingSetType.ImageReading).Count() > 0)
+ // .WhereIf(inDto.ReadingSetType== ReadingSetType.TumorReading, x => readModulequery.Where(y => y.SubjectVisitId == x.Id&&y.TrialReadingCriterionId== inDto.TrialReadingCriterionId && y.ReadingSetType == ReadingSetType.ImageReading).Count() > 0)
.Where(x=>x.VisitNum> maxReadVisitNum)
.Where(x=>!x.IsBaseLine) // 排除基线
.Where(x => readModulequery.Where(y => y.SubjectVisitId == x.Id&& y.TrialReadingCriterionId == inDto.TrialReadingCriterionId && y.ReadingSetType == inDto.ReadingSetType).Count() == 0).OrderBy(x => finalVisitNum)
diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs
index 42c162eaa..88ea0f4ca 100644
--- a/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs
+++ b/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs
@@ -935,7 +935,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
//(当前融合靶病灶的ppd-最低点PPD)/最低点PPD ≥50 %
if (majorAxis >= 15 &&
- (pPdAnswer - lowPPDInfo.NadirPPD) * 100 / lowPPDInfo.NadirPPD >= 50
+ (pPdAnswer - lowPPDInfo.NadirPPD) * 100 / lowPPDInfo.NadirPPD >= 50)
{
accord = true;
}