diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs index f21b84499..011670658 100644 --- a/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs +++ b/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs @@ -23,15 +23,15 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate [ApiExplorerSettings(GroupName = "Reading")] public class LuganoCalculateService : BaseService, ICriterionCalculateService, ILuganoCalculateService - { + { private readonly IRepository _readingTableQuestionAnswerRepository; private readonly IRepository _visitTaskRepository; private readonly IRepository _readingQuestionCriterionTrialRepository; private readonly IRepository _readingTableQuestionTrialRepository; private readonly IRepository _readingTaskQuestionMarkRepository; private readonly IRepository _readingTableAnswerRowInfoRepository; - private readonly IRepository _readingGlobalTaskInfoRepository; - private readonly IRepository _readingQuestionTrialRepository; + private readonly IRepository _readingGlobalTaskInfoRepository; + private readonly IRepository _readingQuestionTrialRepository; private readonly IRepository _organInfoRepository; private readonly IRepository _subjectVisitRepository; private readonly IRepository _dicomStudyRepository; @@ -47,8 +47,8 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate IRepository readingTableQuestionTrialRepository, IRepository readingTaskQuestionMarkRepository, IRepository readingTableAnswerRowInfoRepository, - IRepository readingGlobalTaskInfoRepository, - IRepository readingQuestionTrialRepository, + IRepository readingGlobalTaskInfoRepository, + IRepository readingQuestionTrialRepository, IRepository organInfoRepository, IRepository subjectVisitRepository, IRepository dicomStudyRepository, @@ -64,8 +64,8 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate this._readingTableQuestionTrialRepository = readingTableQuestionTrialRepository; this._readingTaskQuestionMarkRepository = readingTaskQuestionMarkRepository; this._readingTableAnswerRowInfoRepository = readingTableAnswerRowInfoRepository; - this._readingGlobalTaskInfoRepository = readingGlobalTaskInfoRepository; - this._readingQuestionTrialRepository = readingQuestionTrialRepository; + this._readingGlobalTaskInfoRepository = readingGlobalTaskInfoRepository; + this._readingQuestionTrialRepository = readingQuestionTrialRepository; this._organInfoRepository = organInfoRepository; this._subjectVisitRepository = subjectVisitRepository; this._dicomStudyRepository = dicomStudyRepository; @@ -75,31 +75,31 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate this._readingTaskQuestionAnswerRepository = readingTaskQuestionAnswerRepository; } - /// - /// 获取阅片的计算数据 - /// - /// - /// - public async Task GetReadingCalculationData(GetReadingCalculationDataInDto inDto) - { - ReadingCalculateDto readingData = await _generalCalculateService.GetReadingCalculateDto(inDto.VisitTaskId); + /// + /// 获取阅片的计算数据 + /// + /// + /// + public async Task GetReadingCalculationData(GetReadingCalculationDataInDto inDto) + { + ReadingCalculateDto readingData = await _generalCalculateService.GetReadingCalculateDto(inDto.VisitTaskId); var baseLinePET5PS = 0m; - if (!readingData.IsBaseLine) - { - var baseLineTaskId = await GetBaseLineTaskId(readingData); - baseLinePET5PS = (await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == baseLineTaskId && x.ReadingQuestionTrial.QuestionType == QuestionType.PET5PS).Select(x => x.Answer).FirstOrDefaultAsync()).IsNullOrEmptyReturn0(); - - } - return new + if (!readingData.IsBaseLine) { - BaseLinePET5PS= baseLinePET5PS, + var baseLineTaskId = await GetBaseLineTaskId(readingData); + baseLinePET5PS = (await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == baseLineTaskId && x.ReadingQuestionTrial.QuestionType == QuestionType.PET5PS).Select(x => x.Answer).FirstOrDefaultAsync()).IsNullOrEmptyReturn0(); - }; - } + } + return new + { + BaseLinePET5PS = baseLinePET5PS, - #region 临时对象 单个请求的生命周期 避免重复查询数据库 + }; + } - private List visitTaskAnswerList; + #region 临时对象 单个请求的生命周期 避免重复查询数据库 + + private List visitTaskAnswerList; /// /// 获取Sod的值 @@ -117,7 +117,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate private bool? isUnableFuse; - private string nAString = "NA"; + private string nAString = "NA"; #endregion #region 删除病灶获取起始病灶序号 @@ -169,7 +169,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate var answers = await _readingTaskQuestionAnswerRepository.Where(x => visitTaskIds.Contains(x.VisitTaskId)).ToListAsync(); var tableAnswers = await _readingTableQuestionAnswerRepository.Where(x => visitTaskIds.Contains(x.VisitTaskId)).ToListAsync(); - var globalanswerList = await _readingGlobalTaskInfoRepository.Where(x => visitTaskIds.Contains(x.TaskId)&&x.GlobalVisitTask.TaskState== TaskState.Effect&&x.Answer!=string.Empty).Select(x => new + var globalanswerList = await _readingGlobalTaskInfoRepository.Where(x => visitTaskIds.Contains(x.TaskId) && x.GlobalVisitTask.TaskState == TaskState.Effect && x.Answer != string.Empty).Select(x => new { x.TaskId, x.GlobalVisitTask.VisitTaskNum, @@ -177,7 +177,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate x.Answer }).ToListAsync(); - var alltableAnsweRowInfos = await _readingTableAnswerRowInfoRepository.Where(x => visitTaskIds.Contains(x.VisitTaskId)).ToListAsync(); + var alltableAnsweRowInfos = await _readingTableAnswerRowInfoRepository.Where(x => visitTaskIds.Contains(x.VisitTaskId)).ToListAsync(); var organIds = alltableAnsweRowInfos.Where(x => x.OrganInfoId != null).Select(x => x.OrganInfoId).Distinct().ToList(); var organInfos = await _organInfoRepository.Where(x => organIds.Contains(x.Id)).ToListAsync(); @@ -407,13 +407,13 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate [HttpPost] public async Task GetIsSuvMaxLesion(GetIsSuvMaxLesionInDto inDto) { - ReadingCalculateDto readingData = await _generalCalculateService.GetReadingCalculateDto(inDto.VisitTaskId); + ReadingCalculateDto readingData = await _generalCalculateService.GetReadingCalculateDto(inDto.VisitTaskId); - var maxSuv = await GetSuvMax(readingData); - var rowInfo = readingData.QuestionInfo.SelectMany(x => x.TableRowInfoList).ToList(); - var tableQuestions = rowInfo.SelectMany(x => x.TableQuestionList).Where(x=>x.RowId==inDto.RowId).ToList(); + var maxSuv = await GetSuvMax(readingData); + var rowInfo = readingData.QuestionInfo.SelectMany(x => x.TableRowInfoList).ToList(); + var tableQuestions = rowInfo.SelectMany(x => x.TableQuestionList).Where(x => x.RowId == inDto.RowId).ToList(); - var lesionMaxSuv = tableQuestions.Where(x => x.QuestionMark == QuestionMark.SUVmax).Select(x => x.Answer.IsNullOrEmptyReturn0()).MaxOrDefault(); + var lesionMaxSuv = tableQuestions.Where(x => x.QuestionMark == QuestionMark.SUVmax).Select(x => x.Answer.IsNullOrEmptyReturn0()).MaxOrDefault(); return new GetIsSuvMaxLesionOutDto() @@ -422,7 +422,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate }; - } + } /// /// 获取是否可选择不能融合影像 @@ -432,7 +432,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate [HttpPost] public async Task GetCanChooseNotMerge(GetCanChooseNotMergeInDto inDto) { - ReadingCalculateDto readingData = await _generalCalculateService.GetReadingCalculateDto(inDto.VisitTaskId); + ReadingCalculateDto readingData = await _generalCalculateService.GetReadingCalculateDto(inDto.VisitTaskId); List questionTypes = new List() { QuestionType.LiverSUVmax, @@ -449,17 +449,17 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate IsCanChooseNotMerge = !readingData.QuestionInfo.Any(x => questionTypes.Contains(x.QuestionType) && x.Answer != string.Empty) - }; + }; return getCanChooseNotMergeOutDto; - } + } - /// - /// 测试计算 - /// - /// - /// - /// - [HttpPost] + /// + /// 测试计算 + /// + /// + /// + /// + [HttpPost] public async Task TestCalculate(Guid visitTaskId, QuestionType type) { ReadingCalculateDto readingData = await _generalCalculateService.GetReadingCalculateDto(visitTaskId); @@ -729,7 +729,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate } - calculateList = calculateList.Where(x =>x.ComputationTriggerList.Contains(inDto.ComputationTrigger)).ToList(); + calculateList = calculateList.Where(x => x.ComputationTriggerList.Contains(inDto.ComputationTrigger)).ToList(); var typeNAList = new List { QuestionType.SODChange, @@ -833,32 +833,32 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate } - /// - /// 获取影像是否无法融合 - /// - /// - /// - public async Task ImageQualityIsUnableFuse(ReadingCalculateDto inDto) - { - if (isUnableFuse != null) - { - return isUnableFuse.Value; - } - else - { - var imageQualityProblem = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.ImageQualityProblem).Select(x => x.Answer).FirstOrDefault(); - isUnableFuse = imageQualityProblem == ((int)ImageQualityIssues.PETCTFailureFuse).ToString(); - return isUnableFuse.Value; - } + /// + /// 获取影像是否无法融合 + /// + /// + /// + public async Task ImageQualityIsUnableFuse(ReadingCalculateDto inDto) + { + if (isUnableFuse != null) + { + return isUnableFuse.Value; + } + else + { + var imageQualityProblem = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.ImageQualityProblem).Select(x => x.Answer).FirstOrDefault(); + isUnableFuse = imageQualityProblem == ((int)ImageQualityIssues.PETCTFailureFuse).ToString(); + return isUnableFuse.Value; + } - } + } - /// - /// 获取报告整体整体评估 - /// - /// - /// - public async Task GetReportTumor(Guid visitTaskId) + /// + /// 获取报告整体整体评估 + /// + /// + /// + public async Task GetReportTumor(Guid visitTaskId) { return await GetTumor(await _generalCalculateService.GetReadingCalculateDto(visitTaskId)); } @@ -916,7 +916,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate var unableEvaluateRowIds = await _readingTableQuestionAnswerRepository.Where(x => x.VisitTaskId == inDto.VisitTaskId && - (x.Answer == TargetState.UnableEvaluate.GetEnumInt()|| x.Answer == TargetState.Loss.GetEnumInt()) + (x.Answer == TargetState.UnableEvaluate.GetEnumInt() || x.Answer == TargetState.Loss.GetEnumInt()) && x.ReadingTableQuestionTrial.QuestionMark == QuestionMark.State ) .Select(x => x.RowId).Distinct().ToListAsync(); @@ -996,111 +996,111 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate /// public async Task CalculateMergeTargetLesionStatus(CalculateTargetLesionStatusInDto inDto) { - var taskInfo = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).FirstNotNullAsync(); + var taskInfo = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).FirstNotNullAsync(); - // 找到靶病灶问题 - var targetQuestion = await _readingQuestionTrialRepository.Where(x => x.ReadingQuestionCriterionTrialId == taskInfo.TrialReadingCriterionId && x.LesionType == LesionType.TargetLesion).FirstOrDefaultAsync(); - if (targetQuestion != null) - { - // 找到状态问题 - var stateQuestion = await _readingTableQuestionTrialRepository.Where(x => x.ReadingQuestionId == targetQuestion.Id && x.QuestionMark == QuestionMark.State).FirstOrDefaultAsync(); - if (stateQuestion != null) - { + // 找到靶病灶问题 + var targetQuestion = await _readingQuestionTrialRepository.Where(x => x.ReadingQuestionCriterionTrialId == taskInfo.TrialReadingCriterionId && x.LesionType == LesionType.TargetLesion).FirstOrDefaultAsync(); + if (targetQuestion != null) + { + // 找到状态问题 + var stateQuestion = await _readingTableQuestionTrialRepository.Where(x => x.ReadingQuestionId == targetQuestion.Id && x.QuestionMark == QuestionMark.State).FirstOrDefaultAsync(); + if (stateQuestion != null) + { - //// 找到主病灶的状态 - //var state = await _readingTableQuestionAnswerRepository.Where(x => x.VisitTaskId == inDto.VisitTaskId && x.RowIndex == (int)Math.Floor(inDto.RowNumber) && x.TableQuestionId == stateQuestion.Id).Select(x => x.Answer).FirstOrDefaultAsync(); + //// 找到主病灶的状态 + //var state = await _readingTableQuestionAnswerRepository.Where(x => x.VisitTaskId == inDto.VisitTaskId && x.RowIndex == (int)Math.Floor(inDto.RowNumber) && x.TableQuestionId == stateQuestion.Id).Select(x => x.Answer).FirstOrDefaultAsync(); - // 长径 - var majorAxis = (await _readingTableQuestionAnswerRepository.Where(x => - x.VisitTaskId == inDto.VisitTaskId && - x.RowIndex == inDto.RowNumber && - x.ReadingTableQuestionTrial.QuestionMark == QuestionMark.MajorAxis && - x.QuestionId == targetQuestion.Id - ).Select(x => x.Answer).FirstOrDefaultAsync()).IsNullOrEmptyReturn0(); + // 长径 + var majorAxis = (await _readingTableQuestionAnswerRepository.Where(x => + x.VisitTaskId == inDto.VisitTaskId && + x.RowIndex == inDto.RowNumber && + x.ReadingTableQuestionTrial.QuestionMark == QuestionMark.MajorAxis && + x.QuestionId == targetQuestion.Id + ).Select(x => x.Answer).FirstOrDefaultAsync()).IsNullOrEmptyReturn0(); - // 短径 - var shortAxis = (await _readingTableQuestionAnswerRepository.Where(x => - x.VisitTaskId == inDto.VisitTaskId && - x.RowIndex == inDto.RowNumber && - x.ReadingTableQuestionTrial.QuestionMark == QuestionMark.ShortAxis && - x.QuestionId == targetQuestion.Id - ).Select(x => x.Answer).FirstOrDefaultAsync()).IsNullOrEmptyReturn0(); + // 短径 + var shortAxis = (await _readingTableQuestionAnswerRepository.Where(x => + x.VisitTaskId == inDto.VisitTaskId && + x.RowIndex == inDto.RowNumber && + x.ReadingTableQuestionTrial.QuestionMark == QuestionMark.ShortAxis && + x.QuestionId == targetQuestion.Id + ).Select(x => x.Answer).FirstOrDefaultAsync()).IsNullOrEmptyReturn0(); - // 找到ppd问题 - var ppdQuestion = await _readingTableQuestionTrialRepository.Where(x => x.ReadingQuestionId == targetQuestion.Id && x.QuestionMark == QuestionMark.PPD).FirstOrDefaultAsync(); + // 找到ppd问题 + var ppdQuestion = await _readingTableQuestionTrialRepository.Where(x => x.ReadingQuestionId == targetQuestion.Id && x.QuestionMark == QuestionMark.PPD).FirstOrDefaultAsync(); - if (ppdQuestion != null) - { - var pPdAnswer = (await _readingTableQuestionAnswerRepository.Where(x => - x.VisitTaskId == inDto.VisitTaskId && - x.ReadingTableQuestionTrial.QuestionMark == QuestionMark.PPD && - x.QuestionId == targetQuestion.Id && - x.RowIndex == inDto.RowNumber - ).Select(x => x.Answer).FirstOrDefaultAsync()).IsNullOrEmptyReturn0(); + if (ppdQuestion != null) + { + var pPdAnswer = (await _readingTableQuestionAnswerRepository.Where(x => + x.VisitTaskId == inDto.VisitTaskId && + x.ReadingTableQuestionTrial.QuestionMark == QuestionMark.PPD && + x.QuestionId == targetQuestion.Id && + x.RowIndex == inDto.RowNumber + ).Select(x => x.Answer).FirstOrDefaultAsync()).IsNullOrEmptyReturn0(); - // 是否符合疾病进展 - var accord = false; + // 是否符合疾病进展 + var accord = false; - var lowPPDInfo = await GetLowPPDInfo(new GetPPDInfoInDto() - { - RowIndex = inDto.RowNumber, - VisitTaskId = inDto.VisitTaskId, - QuestionId = inDto.QuestionId, - }); + var lowPPDInfo = await GetLowPPDInfo(new GetPPDInfoInDto() + { + RowIndex = inDto.RowNumber, + VisitTaskId = inDto.VisitTaskId, + QuestionId = inDto.QuestionId, + }); - if (lowPPDInfo.NadirPPD != 0) - { - //当前融合靶病灶LDi>15 mm && - //(当前融合靶病灶的ppd-最低点PPD)/最低点PPD ≥50 % + if (lowPPDInfo.NadirPPD != 0) + { + //当前融合靶病灶LDi>15 mm && + //(当前融合靶病灶的ppd-最低点PPD)/最低点PPD ≥50 % - if (majorAxis >= 15 && - (pPdAnswer - lowPPDInfo.NadirPPD) * 100 / lowPPDInfo.NadirPPD >= 50) - { - accord = true; - } - } + if (majorAxis >= 15 && + (pPdAnswer - lowPPDInfo.NadirPPD) * 100 / lowPPDInfo.NadirPPD >= 50) + { + accord = true; + } + } - // 符合疾病进展 - if (accord) - { - await _readingTableQuestionAnswerRepository.UpdatePartialFromQueryAsync(x => - x.VisitTaskId == inDto.VisitTaskId && - x.RowIndex == inDto.RowNumber && - x.ReadingTableQuestionTrial.QuestionMark == QuestionMark.State && - x.QuestionId == targetQuestion.Id, x => new ReadingTableQuestionAnswer() - { - Answer = TargetState.DiseaseProgression.GetEnumInt() - } - ); - } - //else if (state == TargetState.DiseaseProgression.GetEnumInt()) - //{ - // //await _readingTableQuestionAnswerRepository.UpdatePartialFromQueryAsync(x => - // // x.VisitTaskId == inDto.VisitTaskId && - // // x.RowIndex == inDto.RowNumber && - // // x.ReadingTableQuestionTrial.QuestionMark == QuestionMark.State && - // // x.QuestionId == targetQuestion.Id, x => new ReadingTableQuestionAnswer() - // // { - // // Answer = TargetState.Exist.GetEnumInt() - // // } - // // ); - //} + // 符合疾病进展 + if (accord) + { + await _readingTableQuestionAnswerRepository.UpdatePartialFromQueryAsync(x => + x.VisitTaskId == inDto.VisitTaskId && + x.RowIndex == inDto.RowNumber && + x.ReadingTableQuestionTrial.QuestionMark == QuestionMark.State && + x.QuestionId == targetQuestion.Id, x => new ReadingTableQuestionAnswer() + { + Answer = TargetState.DiseaseProgression.GetEnumInt() + } + ); + } + //else if (state == TargetState.DiseaseProgression.GetEnumInt()) + //{ + // //await _readingTableQuestionAnswerRepository.UpdatePartialFromQueryAsync(x => + // // x.VisitTaskId == inDto.VisitTaskId && + // // x.RowIndex == inDto.RowNumber && + // // x.ReadingTableQuestionTrial.QuestionMark == QuestionMark.State && + // // x.QuestionId == targetQuestion.Id, x => new ReadingTableQuestionAnswer() + // // { + // // Answer = TargetState.Exist.GetEnumInt() + // // } + // // ); + //} - } - } + } + } - } - } + } + } - /// - /// 计算分裂靶病灶状态 - /// - /// - /// - public async Task CalculateTargetLesionStatus(CalculateTargetLesionStatusInDto inDto) + /// + /// 计算分裂靶病灶状态 + /// + /// + /// + public async Task CalculateTargetLesionStatus(CalculateTargetLesionStatusInDto inDto) { if (inDto.RowNumber % 1 != 0) { @@ -1108,43 +1108,43 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate // 找到靶病灶问题 var targetQuestion = await _readingQuestionTrialRepository.Where(x => x.ReadingQuestionCriterionTrialId == taskInfo.TrialReadingCriterionId && x.LesionType == LesionType.TargetLesion).FirstOrDefaultAsync(); - if(targetQuestion!=null) + if (targetQuestion != null) { // 找到状态问题 var stateQuestion = await _readingTableQuestionTrialRepository.Where(x => x.ReadingQuestionId == targetQuestion.Id && x.QuestionMark == QuestionMark.State).FirstOrDefaultAsync(); if (stateQuestion != null) - { + { // 找到主病灶的状态 - var state =await _readingTableQuestionAnswerRepository.Where(x=>x.VisitTaskId==inDto.VisitTaskId&&x.RowIndex== (int)Math.Floor(inDto.RowNumber)&&x.TableQuestionId== stateQuestion.Id).Select(x=>x.Answer).FirstOrDefaultAsync(); + var state = await _readingTableQuestionAnswerRepository.Where(x => x.VisitTaskId == inDto.VisitTaskId && x.RowIndex == (int)Math.Floor(inDto.RowNumber) && x.TableQuestionId == stateQuestion.Id).Select(x => x.Answer).FirstOrDefaultAsync(); // 长径 - var majorAxis = (await _readingTableQuestionAnswerRepository.Where(x => + var majorAxis = (await _readingTableQuestionAnswerRepository.Where(x => x.VisitTaskId == inDto.VisitTaskId && - x.RowIndex >= (int)Math.Floor(inDto.RowNumber) && x.RowIndex < ((int)Math.Floor(inDto.RowNumber) + 1) && - x.ReadingTableQuestionTrial.QuestionMark == QuestionMark.MajorAxis && - x.QuestionId== targetQuestion.Id - ).Select(x => x.Answer).ToListAsync()).Select(x => x.IsNullOrEmptyReturn0()).Sum(); + x.RowIndex >= (int)Math.Floor(inDto.RowNumber) && x.RowIndex < ((int)Math.Floor(inDto.RowNumber) + 1) && + x.ReadingTableQuestionTrial.QuestionMark == QuestionMark.MajorAxis && + x.QuestionId == targetQuestion.Id + ).Select(x => x.Answer).ToListAsync()).Select(x => x.IsNullOrEmptyReturn0()).Sum(); - // 短径 - var shortAxis = (await _readingTableQuestionAnswerRepository.Where(x => - x.VisitTaskId == inDto.VisitTaskId && - x.RowIndex >= (int)Math.Floor(inDto.RowNumber) && x.RowIndex < ((int)Math.Floor(inDto.RowNumber) + 1) && - x.ReadingTableQuestionTrial.QuestionMark == QuestionMark.ShortAxis && - x.QuestionId == targetQuestion.Id - ).Select(x => x.Answer).ToListAsync()).Select(x => x.IsNullOrEmptyReturn0()).Sum(); + // 短径 + var shortAxis = (await _readingTableQuestionAnswerRepository.Where(x => + x.VisitTaskId == inDto.VisitTaskId && + x.RowIndex >= (int)Math.Floor(inDto.RowNumber) && x.RowIndex < ((int)Math.Floor(inDto.RowNumber) + 1) && + x.ReadingTableQuestionTrial.QuestionMark == QuestionMark.ShortAxis && + x.QuestionId == targetQuestion.Id + ).Select(x => x.Answer).ToListAsync()).Select(x => x.IsNullOrEmptyReturn0()).Sum(); - // 找到ppd问题 - var ppdQuestion = await _readingTableQuestionTrialRepository.Where(x => x.ReadingQuestionId == targetQuestion.Id && x.QuestionMark == QuestionMark.PPD).FirstOrDefaultAsync(); + // 找到ppd问题 + var ppdQuestion = await _readingTableQuestionTrialRepository.Where(x => x.ReadingQuestionId == targetQuestion.Id && x.QuestionMark == QuestionMark.PPD).FirstOrDefaultAsync(); - if(ppdQuestion!=null) + if (ppdQuestion != null) { - var ppdAnswerList= await _readingTableQuestionAnswerRepository.Where(x => + var ppdAnswerList = await _readingTableQuestionAnswerRepository.Where(x => x.VisitTaskId == inDto.VisitTaskId && - x.ReadingTableQuestionTrial.QuestionMark == QuestionMark.PPD && - x.QuestionId == targetQuestion.Id && - x.RowIndex >= (int)Math.Floor(inDto.RowNumber) && x.RowIndex < ((int)Math.Floor(inDto.RowNumber) + 1) - ).Select(x => x.Answer).ToListAsync(); + x.ReadingTableQuestionTrial.QuestionMark == QuestionMark.PPD && + x.QuestionId == targetQuestion.Id && + x.RowIndex >= (int)Math.Floor(inDto.RowNumber) && x.RowIndex < ((int)Math.Floor(inDto.RowNumber) + 1) + ).Select(x => x.Answer).ToListAsync(); var allPPd = ppdAnswerList.Select(x => x.IsNullOrEmptyReturn0()).Sum(); @@ -1158,7 +1158,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate QuestionId = inDto.QuestionId, }); - + if (lowPPDInfo.NadirPPD != 0) { //15mm < 当前靶病灶LDi≤20mm && @@ -1172,22 +1172,22 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate ) { accord = true; - } + } - //当前靶病灶LDi>20 mm - //相比最低点PPD增加百分比 ≥50% - // (相比PPD最低点LDi增加值 ≥10 mm - // 或者相比PPD最低点SDi增加值Sdi ≥10 mm) - if ( majorAxis > 20 && - (allPPd - lowPPDInfo.NadirPPD) * 100 / lowPPDInfo.NadirPPD >= 50 && - (majorAxis - lowPPDInfo.LowPPDLDi >= 10 || - shortAxis - lowPPDInfo.LowPPDSDi >= 10) - ) - { - accord = true; - } + //当前靶病灶LDi>20 mm + //相比最低点PPD增加百分比 ≥50% + // (相比PPD最低点LDi增加值 ≥10 mm + // 或者相比PPD最低点SDi增加值Sdi ≥10 mm) + if (majorAxis > 20 && + (allPPd - lowPPDInfo.NadirPPD) * 100 / lowPPDInfo.NadirPPD >= 50 && + (majorAxis - lowPPDInfo.LowPPDLDi >= 10 || + shortAxis - lowPPDInfo.LowPPDSDi >= 10) + ) + { + accord = true; + } - } + } // 符合疾病进展 if (accord) @@ -1204,32 +1204,32 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate } else if (state == TargetState.DiseaseProgression.GetEnumInt()) { - await _readingTableQuestionAnswerRepository.BatchUpdateNoTrackingAsync(x => - x.VisitTaskId == inDto.VisitTaskId && - x.RowIndex == (int)Math.Floor(inDto.RowNumber) && - x.ReadingTableQuestionTrial.QuestionMark == QuestionMark.State && - x.QuestionId == targetQuestion.Id, x => new ReadingTableQuestionAnswer() - { - Answer = TargetState.Exist.GetEnumInt() - } - ); - } + await _readingTableQuestionAnswerRepository.BatchUpdateNoTrackingAsync(x => + x.VisitTaskId == inDto.VisitTaskId && + x.RowIndex == (int)Math.Floor(inDto.RowNumber) && + x.ReadingTableQuestionTrial.QuestionMark == QuestionMark.State && + x.QuestionId == targetQuestion.Id, x => new ReadingTableQuestionAnswer() + { + Answer = TargetState.Exist.GetEnumInt() + } + ); + } await _readingTableQuestionAnswerRepository.SaveChangesAsync(); - } - } + } + } } - } + } } - - + + /// /// 获取分裂病灶的PPd之和 不包括当前的主病灶 @@ -1239,50 +1239,50 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate public async Task> GetSplitPPdSum(GetSplitPPdInDto inDto) { List result = new List(); - var taskInfo = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).FirstNotNullAsync(); - var targetQuestion = await _readingQuestionTrialRepository.Where(x => x.ReadingQuestionCriterionTrialId == taskInfo.TrialReadingCriterionId && x.LesionType == LesionType.TargetLesion).FirstOrDefaultAsync(); - if (targetQuestion != null) - { - var ppdAnswerList = await _readingTableQuestionAnswerRepository.Where(x => - x.VisitTaskId == inDto.VisitTaskId && - //x.ReadingTableQuestionTrial.QuestionMark == QuestionMark.PPD && - x.QuestionId == targetQuestion.Id) - .Select(x => new { - x.RowId, - x.RowIndex, - x.Answer, - x.ReadingTableQuestionTrial.QuestionMark, - }).ToListAsync(); - var answerList = ppdAnswerList.Select(x => new { - x.RowId, - x.RowIndex, - Answer = x.Answer.IsNullOrEmptyReturn0(), + var taskInfo = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).FirstNotNullAsync(); + var targetQuestion = await _readingQuestionTrialRepository.Where(x => x.ReadingQuestionCriterionTrialId == taskInfo.TrialReadingCriterionId && x.LesionType == LesionType.TargetLesion).FirstOrDefaultAsync(); + if (targetQuestion != null) + { + var ppdAnswerList = await _readingTableQuestionAnswerRepository.Where(x => + x.VisitTaskId == inDto.VisitTaskId && + //x.ReadingTableQuestionTrial.QuestionMark == QuestionMark.PPD && + x.QuestionId == targetQuestion.Id) + .Select(x => new { + x.RowId, + x.RowIndex, + x.Answer, + x.ReadingTableQuestionTrial.QuestionMark, + }).ToListAsync(); + var answerList = ppdAnswerList.Select(x => new { + x.RowId, + x.RowIndex, + Answer = x.Answer.IsNullOrEmptyReturn0(), x.QuestionMark, - }).ToList(); - var maxRowIndex = answerList.MaxOrDefault(x => x.RowIndex); - for (int i = 1; i < maxRowIndex; i++) - { - result.Add(new GetSplitPPdOutDto() - { - RowId = answerList.Where(x => x.RowIndex == i).Select(x => x.RowId).FirstOrDefault(), + }).ToList(); + var maxRowIndex = answerList.MaxOrDefault(x => x.RowIndex); + for (int i = 1; i < maxRowIndex; i++) + { + result.Add(new GetSplitPPdOutDto() + { + RowId = answerList.Where(x => x.RowIndex == i).Select(x => x.RowId).FirstOrDefault(), RowIndex = answerList.Where(x => x.RowIndex == i).Select(x => x.RowIndex).FirstOrDefault().ToString(), - AllPPD = answerList.Where(x=>x.QuestionMark== QuestionMark.PPD).Where(x => x.RowIndex > i && x.RowIndex < (i + 1)).Sum(x => x.Answer), - AllLDi = answerList.Where(x => x.QuestionMark == QuestionMark.MajorAxis).Where(x => x.RowIndex > i && x.RowIndex < (i + 1)).Sum(x => x.Answer), - AllSDi = answerList.Where(x => x.QuestionMark == QuestionMark.ShortAxis).Where(x => x.RowIndex > i && x.RowIndex < (i + 1)).Sum(x => x.Answer), - }); - } - } - return result; - } + AllPPD = answerList.Where(x => x.QuestionMark == QuestionMark.PPD).Where(x => x.RowIndex > i && x.RowIndex < (i + 1)).Sum(x => x.Answer), + AllLDi = answerList.Where(x => x.QuestionMark == QuestionMark.MajorAxis).Where(x => x.RowIndex > i && x.RowIndex < (i + 1)).Sum(x => x.Answer), + AllSDi = answerList.Where(x => x.QuestionMark == QuestionMark.ShortAxis).Where(x => x.RowIndex > i && x.RowIndex < (i + 1)).Sum(x => x.Answer), + }); + } + } + return result; + } - #region 将上一次的访视病灶添加到这一次 + #region 将上一次的访视病灶添加到这一次 - /// - /// 将上一次的访视病灶添加到这一次 - /// - /// - /// - public async Task AddTaskLesionAnswerFromLastTask(AddTaskLesionAnswerFromLastTaskInDto inDto) + /// + /// 将上一次的访视病灶添加到这一次 + /// + /// + /// + public async Task AddTaskLesionAnswerFromLastTask(AddTaskLesionAnswerFromLastTaskInDto inDto) { var visitTaskId = inDto.VisitTaskId; @@ -1324,7 +1324,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate TrialId = x.TrialId }).ToListAsync(); - var tableRowAnswers = await _readingTableAnswerRowInfoRepository.Where(x => x.VisitTaskId == LastVisitTaskId).OrderBy(x=>x.RowIndex).ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); + var tableRowAnswers = await _readingTableAnswerRowInfoRepository.Where(x => x.VisitTaskId == LastVisitTaskId).OrderBy(x => x.RowIndex).ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); tableRowAnswers.ForEach(x => @@ -1333,17 +1333,17 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate switch (x.SplitOrMergeType) { case SplitOrMergeType.Merge: - case SplitOrMergeType.Merged: + case SplitOrMergeType.Merged: x.SplitOrMergeType = SplitOrMergeType.Merged; break; - case SplitOrMergeType.MergeMain: - case SplitOrMergeType.MergeMained: - x.SplitOrMergeType = SplitOrMergeType.MergeMained; - break; + case SplitOrMergeType.MergeMain: + case SplitOrMergeType.MergeMained: + x.SplitOrMergeType = SplitOrMergeType.MergeMained; + break; default: x.SplitOrMergeType = null; break; - } + } x.VisitTaskId = visitTaskId; x.IsCurrentTaskAdd = false; x.Id = NewId.NextGuid(); @@ -1353,7 +1353,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate x.PicturePath = string.Empty; - }); + }); tableRowAnswers.ForEach(x => { @@ -1381,15 +1381,15 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate var rowIndexList = copyTableAnswers.Select(x => x.RowIndex).Distinct().ToList(); // 找到靶病灶问题Id - var questionId=await _readingQuestionTrialRepository.Where(x => x.ReadingQuestionCriterionTrialId == taskinfo.TrialReadingCriterionId && x.LesionType == LesionType.TargetLesion).Select(x => x.Id).FirstNotNullAsync(); + var questionId = await _readingQuestionTrialRepository.Where(x => x.ReadingQuestionCriterionTrialId == taskinfo.TrialReadingCriterionId && x.LesionType == LesionType.TargetLesion).Select(x => x.Id).FirstNotNullAsync(); foreach (var item in rowIndexList) { - var lowPPD =await this.GetLowPPDInfo(new GetPPDInfoInDto() { - - VisitTaskId= visitTaskId, - QuestionId= questionId, - RowIndex=item + var lowPPD = await this.GetLowPPDInfo(new GetPPDInfoInDto() { + + VisitTaskId = visitTaskId, + QuestionId = questionId, + RowIndex = item }); copyTableAnswers.Where(x => x.RowIndex == item).ForEach(x => @@ -1399,7 +1399,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate switch (x.QuestionMark) { case QuestionMark.LowPPDLDi: - x.Answer = lowPPD.LowPPDLDi==null?string.Empty: lowPPD.LowPPDLDi.Value.ToString(); + x.Answer = lowPPD.LowPPDLDi == null ? string.Empty : lowPPD.LowPPDLDi.Value.ToString(); break; case QuestionMark.LowPPDSDi: x.Answer = lowPPD.LowPPDSDi == null ? string.Empty : lowPPD.LowPPDSDi.Value.ToString(); @@ -1419,9 +1419,9 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate } var tableAnswers = new List(); - // 处理状态 + // 处理状态 - var mergedRowIds = tableRowAnswers.Where(x => x.SplitOrMergeType == SplitOrMergeType.Merged).Select(x => x.Id).ToList(); + var mergedRowIds = tableRowAnswers.Where(x => x.SplitOrMergeType == SplitOrMergeType.Merged).Select(x => x.Id).ToList(); copyTableAnswers.ForEach(x => { var tableAnswer = new ReadingTableQuestionAnswer() @@ -1443,13 +1443,13 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate tableAnswers.Add(tableAnswer); }); - var questionMarkList = await _readingTaskQuestionMarkRepository.Where(x => x.VisitTaskId == LastVisitTaskId).Select(x => new ReadingTaskQuestionMark() + var questionMarkList = await _readingTaskQuestionMarkRepository.Where(x => x.VisitTaskId == LastVisitTaskId).Select(x => new ReadingTaskQuestionMark() { - VisitTaskId= visitTaskId, - FirstAddTaskId=x.FirstAddTaskId, - QuestionId=x.QuestionId, - QuestionType=x.QuestionType, - OrderMarkName=x.OrderMarkName, + VisitTaskId = visitTaskId, + FirstAddTaskId = x.FirstAddTaskId, + QuestionId = x.QuestionId, + QuestionType = x.QuestionType, + OrderMarkName = x.OrderMarkName, }).ToListAsync(); questionMarkList.ForEach(x => { @@ -1457,25 +1457,25 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate }); - var addList = _mapper.Map>(tableRowAnswers).OrderBy(x => x.RowIndex).ToList(); + var addList = _mapper.Map>(tableRowAnswers).OrderBy(x => x.RowIndex).ToList(); foreach (var item in addList) { - await _readingTableAnswerRowInfoRepository.AddAsync(item); - await _readingTableQuestionAnswerRepository.SaveChangesAsync(); - } - await _readingTaskQuestionMarkRepository.AddRangeAsync(questionMarkList); - //await _readingTableAnswerRowInfoRepository.AddRangeAsync(addList); - await _readingTableQuestionAnswerRepository.AddRangeAsync(tableAnswers); + await _readingTableAnswerRowInfoRepository.AddAsync(item); + await _readingTableQuestionAnswerRepository.SaveChangesAsync(); + } + await _readingTaskQuestionMarkRepository.AddRangeAsync(questionMarkList); + //await _readingTableAnswerRowInfoRepository.AddRangeAsync(addList); + await _readingTableQuestionAnswerRepository.AddRangeAsync(tableAnswers); //addList.ForEach(x => //{ // x.MergeRow = null; // x.SplitRow = null; //}); - await _readingTableQuestionAnswerRepository.SaveChangesAsync(); + await _readingTableQuestionAnswerRepository.SaveChangesAsync(); - } + } } return new AddTaskLesionAnswerFromLastTaskOutDto() @@ -2103,33 +2103,33 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate public async Task GetSpleenLength(ReadingCalculateDto inDto) { - // 脾尖答案 - var splenicTopAnswer = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.SplenicTopPosition).Select(x => x.Answer).FirstOrDefault(); - // 脾底答案 - var splenicBottomAnswer = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.SplenicBottomPosition).Select(x => x.Answer).FirstOrDefault(); + // 脾尖答案 + var splenicTopAnswer = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.SplenicTopPosition).Select(x => x.Answer).FirstOrDefault(); + // 脾底答案 + var splenicBottomAnswer = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.SplenicBottomPosition).Select(x => x.Answer).FirstOrDefault(); - decimal? spleenLength=null; - if (splenicTopAnswer != null && splenicBottomAnswer != null) - { - spleenLength = splenicTopAnswer.IsNullOrEmptyReturn0() - splenicBottomAnswer.IsNullOrEmptyReturn0(); - if (spleenLength < 0) - { - spleenLength = 0 - spleenLength; - } + decimal? spleenLength = null; + if (splenicTopAnswer != null && splenicBottomAnswer != null) + { + spleenLength = splenicTopAnswer.IsNullOrEmptyReturn0() - splenicBottomAnswer.IsNullOrEmptyReturn0(); + if (spleenLength < 0) + { + spleenLength = 0 - spleenLength; + } return spleenLength; - } + } return spleenLength; - } - #endregion + } + #endregion - #region 与基线相比SPD变化的百分比 - /// - /// 与基线相比SPD变化的百分比 - /// - /// - /// - public async Task CompareBaselineSPD(ReadingCalculateDto inDto) + #region 与基线相比SPD变化的百分比 + /// + /// 与基线相比SPD变化的百分比 + /// + /// + /// + public async Task CompareBaselineSPD(ReadingCalculateDto inDto) { if (inDto.IsBaseLine) { @@ -2142,7 +2142,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate var presentSpd = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.SPD).Select(x => x.Answer).FirstOrDefault().IsNullOrEmptyReturn0(); if (baseLineSpd != 0) { - return ReserveDecimal((presentSpd - baseLineSpd)*100 / baseLineSpd,inDto.DigitPlaces); + return ReserveDecimal((presentSpd - baseLineSpd) * 100 / baseLineSpd, inDto.DigitPlaces); } else { @@ -2164,14 +2164,14 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate { return "NA"; } - - var baseLineSpleenLength = await GetBaseLineSpleenLength(inDto); + + var baseLineSpleenLength = await GetBaseLineSpleenLength(inDto); var presentSpleenLength = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.SpleenLength).Select(x => x.Answer).FirstOrDefault().IsNullOrEmptyReturn0(); - if (baseLineSpleenLength - 130 > 0&& presentSpleenLength>130) + if (baseLineSpleenLength - 130 > 0 && presentSpleenLength > 130) { - return ReserveDecimal((presentSpleenLength - 130 - (baseLineSpleenLength - 130))*100 / (baseLineSpleenLength - 130), inDto.DigitPlaces); + return ReserveDecimal((presentSpleenLength - 130 - (baseLineSpleenLength - 130)) * 100 / (baseLineSpleenLength - 130), inDto.DigitPlaces); } else { @@ -2196,8 +2196,8 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate } if (TaskAnswer.Count() == 0) { - return "0"; - } + return "0"; + } var presentSpd = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.SpleenLength).Select(x => x.Answer).FirstOrDefault().IsNullOrEmptyReturn0(); var lowSplenoncus = TaskAnswer.OrderBy(x => x.SpleenLength).Select(x => x.SpleenLength).FirstOrDefault(); return (presentSpd - lowSplenoncus).ToString(); @@ -2223,8 +2223,8 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate } if (taskAnswer.Count() == 0) { - return "NA"; - } + return "NA"; + } var lowSplenoncus = taskAnswer.OrderBy(x => x.SpleenLength).FirstOrDefault(); return lowSplenoncus.BlindName; @@ -2233,40 +2233,40 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate } #endregion - #region 获取脾脏状态 + #region 获取脾脏状态 - /// - /// 获取脾脏状态 - /// - /// - /// - /// - [HttpPost] - public async Task GetSplenicState(Guid visitTaskId,decimal spleenLength) + /// + /// 获取脾脏状态 + /// + /// + /// + /// + [HttpPost] + public async Task GetSplenicState(Guid visitTaskId, decimal spleenLength) { var taskinfo = await _visitTaskRepository.Where(x => x.Id == visitTaskId).FirstNotNullAsync(); ReadingCalculateDto inDto = await _generalCalculateService.GetReadingCalculateDto(visitTaskId); - var result = SpleenAssessment.NotEvaluable; + var result = SpleenAssessment.NotEvaluable; if (spleenLength < 0) { return SpleenAssessment.NotEvaluable.GetEnumInt(); } else if (0 < spleenLength && spleenLength <= 130) { - return SpleenAssessment.Normal.GetEnumInt(); + return SpleenAssessment.Normal.GetEnumInt(); - } + } else if (inDto.IsBaseLine) { - return SpleenAssessment.Swelling.GetEnumInt(); - } + return SpleenAssessment.Swelling.GetEnumInt(); + } - var lowSpleenLength = await this.GetLowSpleenLength(taskinfo); + var lowSpleenLength = await this.GetLowSpleenLength(taskinfo); + - var presentSpd = spleenLength; @@ -2279,25 +2279,25 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate var differenceValue = presentSpd - baseLineSpleenLength; var differenceLowValue = presentSpd - lowSpleenLength; - - decimal getPercentage() + + decimal getPercentage() { - decimal percentage = 0; - if (baseLineSpleenLength != 0) - { - percentage = differenceValue * 100 / (baseLineSpleenLength - 130); - } + decimal percentage = 0; + if (baseLineSpleenLength != 0) + { + percentage = differenceValue * 100 / (baseLineSpleenLength - 130); + } return percentage; - } + } - // 1、基线 垂直径> 130 mm - //2、与基线相比脾垂直径变化值≥10 mm - // 当前垂直径>130 mm - //与基线相比脾肿大增加的百分比 > 50% - if (baseLineSpleenLength > 130 && differenceValue >= 10 && spleenLength>130 && getPercentage() > 50) + // 1、基线 垂直径> 130 mm + //2、与基线相比脾垂直径变化值≥10 mm + // 当前垂直径>130 mm + //与基线相比脾肿大增加的百分比 > 50% + if (baseLineSpleenLength > 130 && differenceValue >= 10 && spleenLength > 130 && getPercentage() > 50) { result = SpleenAssessment.Increase; } @@ -2321,10 +2321,10 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate { result = SpleenAssessment.Normal; } - //1、基线期 状态为“肿大” - // 当前垂直径>130 mm - //与基线相比脾肿大增加的百分比 < -50% - else if (baseLineState.EqEnum(SpleenAssessment.Swelling) && spleenLength > 130 && getPercentage() < -50) + //1、基线期 状态为“肿大” + // 当前垂直径>130 mm + //与基线相比脾肿大增加的百分比 < -50% + else if (baseLineState.EqEnum(SpleenAssessment.Swelling) && spleenLength > 130 && getPercentage() < -50) { result = SpleenAssessment.Remission; } @@ -2335,39 +2335,39 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate return result.GetEnumInt(); } #endregion - + /// /// 获取最低垂直径 /// /// private async Task GetLowSpleenLength(VisitTask taskinfo) { - var visitTaskIds = await _visitTaskRepository.Where(x => x.ReadingCategory == ReadingCategory.Visit && - x.TrialReadingCriterionId == taskinfo.TrialReadingCriterionId && - x.IsAnalysisCreate == taskinfo.IsAnalysisCreate && - x.DoctorUserId == taskinfo.DoctorUserId && - x.IsSelfAnalysis == taskinfo.IsSelfAnalysis && - x.SubjectId == taskinfo.SubjectId && x.ReadingTaskState == ReadingTaskState.HaveSigned && x.ArmEnum == taskinfo.ArmEnum - && x.VisitTaskNum < taskinfo.VisitTaskNum && x.TaskState == TaskState.Effect - ).OrderByDescending(x => x.VisitTaskNum).Select(x => x.Id).ToListAsync(); + var visitTaskIds = await _visitTaskRepository.Where(x => x.ReadingCategory == ReadingCategory.Visit && + x.TrialReadingCriterionId == taskinfo.TrialReadingCriterionId && + x.IsAnalysisCreate == taskinfo.IsAnalysisCreate && + x.DoctorUserId == taskinfo.DoctorUserId && + x.IsSelfAnalysis == taskinfo.IsSelfAnalysis && + x.SubjectId == taskinfo.SubjectId && x.ReadingTaskState == ReadingTaskState.HaveSigned && x.ArmEnum == taskinfo.ArmEnum + && x.VisitTaskNum < taskinfo.VisitTaskNum && x.TaskState == TaskState.Effect + ).OrderByDescending(x => x.VisitTaskNum).Select(x => x.Id).ToListAsync(); - var questionId = await _readingQuestionTrialRepository.Where(x => x.ReadingQuestionCriterionTrialId == taskinfo.TrialReadingCriterionId && x.QuestionType == QuestionType.SpleenLength).Select(x => x.Id).FirstNotNullAsync(); - var answerList = await _readingTaskQuestionAnswerRepository.Where(x => visitTaskIds.Contains(x.VisitTaskId) - && x.ReadingQuestionTrialId == questionId) - .Select(x => new - { - x.Answer, - x.VisitTaskId, - }).ToListAsync(); + var questionId = await _readingQuestionTrialRepository.Where(x => x.ReadingQuestionCriterionTrialId == taskinfo.TrialReadingCriterionId && x.QuestionType == QuestionType.SpleenLength).Select(x => x.Id).FirstNotNullAsync(); + var answerList = await _readingTaskQuestionAnswerRepository.Where(x => visitTaskIds.Contains(x.VisitTaskId) + && x.ReadingQuestionTrialId == questionId) + .Select(x => new + { + x.Answer, + x.VisitTaskId, + }).ToListAsync(); - var lowSpleenLength = answerList.Select(x => new - { - Answer = x.Answer.IsNullOrEmptyReturn0(), - x.VisitTaskId - }).OrderBy(x => x.Answer).Select(x => x.Answer).FirstOrDefault(); + var lowSpleenLength = answerList.Select(x => new + { + Answer = x.Answer.IsNullOrEmptyReturn0(), + x.VisitTaskId + }).OrderBy(x => x.Answer).Select(x => x.Answer).FirstOrDefault(); return lowSpleenLength; - } + } /// /// 获取脾脏验证 @@ -2375,23 +2375,23 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate /// /// [HttpPost] - public async Task GetSplenicVerify(Guid visitTaskId) + public async Task GetSplenicVerify(Guid visitTaskId) { - - ReadingCalculateDto inDto = await _generalCalculateService.GetReadingCalculateDto(visitTaskId); - // 基线垂直径 - var baseLineSpleenLength = await GetBaseLineSpleenLength(inDto); + ReadingCalculateDto inDto = await _generalCalculateService.GetReadingCalculateDto(visitTaskId); - var taskinfo = await _visitTaskRepository.Where(x => x.Id == visitTaskId).FirstNotNullAsync(); + // 基线垂直径 + var baseLineSpleenLength = await GetBaseLineSpleenLength(inDto); - var baseLineTaskId = await GetBaseLineTaskId(inDto); + var taskinfo = await _visitTaskRepository.Where(x => x.Id == visitTaskId).FirstNotNullAsync(); - // 最低垂直经 - var lowSpleenLength= await this.GetLowSpleenLength(taskinfo); + var baseLineTaskId = await GetBaseLineTaskId(inDto); + + // 最低垂直经 + var lowSpleenLength = await this.GetLowSpleenLength(taskinfo); // 基线状态 - var baseLineState = await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == baseLineTaskId && x.ReadingQuestionTrial.QuestionType == QuestionType.SplenicStatus).Select(x => x.Answer).FirstOrDefaultAsync(); + var baseLineState = await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == baseLineTaskId && x.ReadingQuestionTrial.QuestionType == QuestionType.SplenicStatus).Select(x => x.Answer).FirstOrDefaultAsync(); return new { @@ -2403,7 +2403,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate // 基线状态 BaseLineState = baseLineState, }; - + } /// @@ -2413,28 +2413,28 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate /// public async Task GetSplenicStatus(ReadingCalculateDto inDto) { - var spleenLength= inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.SpleenLength).Select(x => x.Answer).FirstOrDefault(); + var spleenLength = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.SpleenLength).Select(x => x.Answer).FirstOrDefault(); if (spleenLength == string.Empty) { return string.Empty; } else { - return await GetSplenicState(inDto.VisitTaskId, spleenLength.IsNullOrEmptyReturn0()); - } - } + return await GetSplenicState(inDto.VisitTaskId, spleenLength.IsNullOrEmptyReturn0()); + } + } - #region 获取脾脏评估 + #region 获取脾脏评估 - /// - /// 获取脾脏评估 - /// - /// - /// - public async Task GetSplenicEvaluation(ReadingCalculateDto inDto) + /// + /// 获取脾脏评估 + /// + /// + /// + public async Task GetSplenicEvaluation(ReadingCalculateDto inDto) { - return inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.SplenicStatus).Select(x => x.Answer).FirstIsNullReturnEmpty(); + return inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.SplenicStatus).Select(x => x.Answer).FirstIsNullReturnEmpty(); //if (inDto.IsBaseLine) //{ @@ -2512,52 +2512,52 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate public async Task GetPET5PS(ReadingCalculateDto inDto) { - // 如果是保存影像进来 PET-CT不能融合 就是NE - if (inDto.ComputationTrigger == ComputationTrigger.ImageQuality) + // 如果是保存影像进来 PET-CT不能融合 就是NE + if (inDto.ComputationTrigger == ComputationTrigger.ImageQuality) { if (await ImageQualityIsUnableFuse(inDto)) { return PET5PSScore.NE.GetEnumInt(); - } + } } // 如果不是保存肝脏血池和纵隔血池 if (inDto.ComputationTrigger != ComputationTrigger.LiverBloodPool && inDto.ComputationTrigger != ComputationTrigger.MediastinalPool) { - // 先在数据库查这几个值 - List needSearchTypes = new List() - { - QuestionType.SUVmax, - QuestionType.PET5PS, - }; + // 先在数据库查这几个值 + List needSearchTypes = new List() + { + QuestionType.SUVmax, + QuestionType.PET5PS, + }; - var dataBaseDataList = await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == inDto.VisitTaskId && needSearchTypes.Contains(x.ReadingQuestionTrial.QuestionType)).Select(x => new - { - x.Answer, - x.ReadingQuestionTrial.QuestionType - }).ToListAsync(); ; + var dataBaseDataList = await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == inDto.VisitTaskId && needSearchTypes.Contains(x.ReadingQuestionTrial.QuestionType)).Select(x => new + { + x.Answer, + x.ReadingQuestionTrial.QuestionType + }).ToListAsync(); ; - // 数据库中最大SUVmax - var dataBaseSUVmax = dataBaseDataList.Where(x => x.QuestionType == QuestionType.SUVmax).Select(x => x.Answer).FirstIsNullReturnEmpty(); + // 数据库中最大SUVmax + var dataBaseSUVmax = dataBaseDataList.Where(x => x.QuestionType == QuestionType.SUVmax).Select(x => x.Answer).FirstIsNullReturnEmpty(); - // 如果SUVmax没变 就不重新计算 - if (dataBaseSUVmax == (await GetSuvMax(inDto)).ToString()) + // 如果SUVmax没变 就不重新计算 + if (dataBaseSUVmax == (await GetSuvMax(inDto)).ToString()) { return dataBaseDataList.Where(x => x.QuestionType == QuestionType.PET5PS).Select(x => x.Answer).FirstIsNullReturnEmpty(); - } + } - } - + } - //if (inDto.IsBaseLine) - //{ - // return SpleenAssessment.Stabilization.GetEnumInt(); - //} - if (inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.ExistPET && x.Answer == ReadingYesOrNo.No.GetEnumInt())) + //if (inDto.IsBaseLine) + //{ + // return SpleenAssessment.Stabilization.GetEnumInt(); + //} + + if (inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.ExistPET && x.Answer == ReadingYesOrNo.No.GetEnumInt())) { return PET5PSScore.NE.GetEnumInt(); } @@ -2581,14 +2581,14 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate // 纵膈血池 var MediastinumSUVmax = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.MediastinumSUVmax).Select(x => x.Answer).FirstOrDefault().IsNullOrEmptyReturn0(); - + if (existPET.EqEnum(ReadingYesOrNo.No)) { result = PET5PSScore.NE; } - // 本访视病灶的 max SUVmax(所有病灶中最大的)> 2 * 肝脏血池SUVmax - else if (maxSUVmax >2* LiverSUVmax&& LiverSUVmax != 0m) + // 本访视病灶的 max SUVmax(所有病灶中最大的)> 2 * 肝脏血池SUVmax + else if (maxSUVmax > 2 * LiverSUVmax && LiverSUVmax != 0m) { result = PET5PSScore.Five; } @@ -2598,7 +2598,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate result = PET5PSScore.Four; } //纵隔血池SUVmax<本访视点病灶的max SUVmax(所有病灶中最大的)≤1*肝脏血池SUVmax - else if (MediastinumSUVmax < maxSUVmax&& maxSUVmax <= LiverSUVmax&& MediastinumSUVmax != 0) + else if (MediastinumSUVmax < maxSUVmax && maxSUVmax <= LiverSUVmax && MediastinumSUVmax != 0) { result = PET5PSScore.Three; } @@ -2610,89 +2610,89 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate //无需标记,自主选择 else { - return string.Empty; + return string.Empty; } - return result.GetEnumInt(); + return result.GetEnumInt(); } - #endregion + #endregion - #region 修改PET 5PS评分备注 + #region 修改PET 5PS评分备注 - /// - /// 获取PET5PS评分备注 - /// - /// - /// - public async Task GetPET5PSRemark(ReadingCalculateDto inDto) - { - List needSearchTypes = new List() - { - QuestionType.PET5PS, - QuestionType.PSScoreRemarks, - }; + /// + /// 获取PET5PS评分备注 + /// + /// + /// + public async Task GetPET5PSRemark(ReadingCalculateDto inDto) + { + List needSearchTypes = new List() + { + QuestionType.PET5PS, + QuestionType.PSScoreRemarks, + }; - var dataBaseDataList = await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == inDto.VisitTaskId && needSearchTypes.Contains(x.ReadingQuestionTrial.QuestionType)).Select(x => new - { - x.Answer, - x.ReadingQuestionTrial.QuestionType - }).ToListAsync(); ; + var dataBaseDataList = await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == inDto.VisitTaskId && needSearchTypes.Contains(x.ReadingQuestionTrial.QuestionType)).Select(x => new + { + x.Answer, + x.ReadingQuestionTrial.QuestionType + }).ToListAsync(); ; - // 数据库中PET5PS - var pET5PS = dataBaseDataList.Where(x => x.QuestionType == QuestionType.PET5PS).Select(x => x.Answer).FirstIsNullReturnEmpty(); + // 数据库中PET5PS + var pET5PS = dataBaseDataList.Where(x => x.QuestionType == QuestionType.PET5PS).Select(x => x.Answer).FirstIsNullReturnEmpty(); - // 如果PET5PS没变 就不重新计算 - if (pET5PS == (await GetPET5PS(inDto)).ToString()) + // 如果PET5PS没变 就不重新计算 + if (pET5PS == (await GetPET5PS(inDto)).ToString()) { return dataBaseDataList.Where(x => x.QuestionType == QuestionType.PSScoreRemarks).Select(x => x.Answer).FirstIsNullReturnEmpty(); } - else + else { - return string.Empty; - } - - } - #endregion + return string.Empty; + } + + } + #endregion - #region 与基线相比摄取值变化 + #region 与基线相比摄取值变化 - /// - /// 与基线相比摄取值变化 - /// - /// - /// - public async Task GetUptakeChange(ReadingCalculateDto inDto) + /// + /// 与基线相比摄取值变化 + /// + /// + /// + public async Task GetUptakeChange(ReadingCalculateDto inDto) { - //PET5ps评分改变时,才计算 + //PET5ps评分改变时,才计算 - List needSearchTypes = new List() - { - QuestionType.PET5PS, - QuestionType.UptakeChange, - }; + List needSearchTypes = new List() + { + QuestionType.PET5PS, + QuestionType.UptakeChange, + }; - var dataBaseDataList = await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == inDto.VisitTaskId && needSearchTypes.Contains(x.ReadingQuestionTrial.QuestionType)).Select(x => new - { - x.Answer, - x.ReadingQuestionTrial.QuestionType - }).ToListAsync(); ; + var dataBaseDataList = await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == inDto.VisitTaskId && needSearchTypes.Contains(x.ReadingQuestionTrial.QuestionType)).Select(x => new + { + x.Answer, + x.ReadingQuestionTrial.QuestionType + }).ToListAsync(); ; - // 数据库中PET5ps评分 - var dataBasePET5ps = dataBaseDataList.Where(x => x.QuestionType == QuestionType.PET5PS).Select(x => x.Answer).FirstIsNullReturnEmpty(); + // 数据库中PET5ps评分 + var dataBasePET5ps = dataBaseDataList.Where(x => x.QuestionType == QuestionType.PET5PS).Select(x => x.Answer).FirstIsNullReturnEmpty(); + - if (dataBasePET5ps == await GetPET5PS(inDto)) { - return dataBaseDataList.Where(x => x.QuestionType == QuestionType.UptakeChange).Select(x => x.Answer).FirstIsNullReturnEmpty(); + return dataBaseDataList.Where(x => x.QuestionType == QuestionType.UptakeChange).Select(x => x.Answer).FirstIsNullReturnEmpty(); - } + } - if (inDto.IsBaseLine) + if (inDto.IsBaseLine || (await ImageQualityIsUnableFuse(inDto))) { return SUVChangeVSBaseline.NA.GetEnumInt(); } @@ -2752,14 +2752,14 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate { if (inDto.IsBaseLine) { - return FDGPETOverallAssessment.NA.GetEnumInt(); + return FDGPETOverallAssessment.NA.GetEnumInt(); } var lastTaskId = await GetLastVisitTaskId(inDto); - var answer =await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == lastTaskId).Include(x => x.ReadingQuestionTrial).Where(x => x.ReadingQuestionTrial.QuestionType == QuestionType.FDGPET).Select(x => x.Answer).FirstOrDefaultAsync(); - return answer?? string.Empty; + var answer = await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == lastTaskId).Include(x => x.ReadingQuestionTrial).Where(x => x.ReadingQuestionTrial.QuestionType == QuestionType.FDGPET).Select(x => x.Answer).FirstOrDefaultAsync(); + return answer ?? string.Empty; } #region FDG-PET总体评估结果 @@ -2772,23 +2772,23 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate public async Task GetFDGPETOverallAssessment(ReadingCalculateDto inDto) { - // 如果是保存影像进来 PET-CT不能融合 就是NE - if (inDto.ComputationTrigger == ComputationTrigger.ImageQuality) - { - if (await ImageQualityIsUnableFuse(inDto)) - { + // 如果是保存影像进来 PET-CT不能融合 就是NE + if (inDto.ComputationTrigger == ComputationTrigger.ImageQuality) + { + if (await ImageQualityIsUnableFuse(inDto)) + { if (inDto.IsBaseLine) { return FDGPETOverallAssessment.NA.GetEnumInt(); } else { - return FDGPETOverallAssessment.NE.GetEnumInt(); - } - } - } + return FDGPETOverallAssessment.NE.GetEnumInt(); + } + } + } - if (inDto.IsBaseLine) + if (inDto.IsBaseLine) { return FDGPETOverallAssessment.NA.GetEnumInt(); } @@ -2796,8 +2796,8 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate var notExistPET = inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.ExistPET && x.Answer == ReadingYesOrNo.No.GetEnumInt()); - - if (notExistPET) + + if (notExistPET || (await ImageQualityIsUnableFuse(inDto))) { return FDGPETOverallAssessment.NE.GetEnumInt(); } @@ -2818,95 +2818,95 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate } - /// - /// 计算FDG-PET总体评估结果【测试】 - /// - /// PET5PS评分 - /// 与基线相比摄取值变化 - /// 骨髓中是否存在局灶性 FDG亲和病灶的证据 - /// - public string CalculationFDGPETOverallAssessment(string? pET5PS, string uptakeChange,string? evidenceFocalFDG) + /// + /// 计算FDG-PET总体评估结果【测试】 + /// + /// PET5PS评分 + /// 与基线相比摄取值变化 + /// 骨髓中是否存在局灶性 FDG亲和病灶的证据 + /// + public string CalculationFDGPETOverallAssessment(string? pET5PS, string uptakeChange, string? evidenceFocalFDG) { - List data = new List() { + List data = new List() { //NE NE NE NE new CalculationDto(){ - Column1=ReadingCommon.EnumToString(new List() { PET5PSScore.NE }), - Column2=ReadingCommon.EnumToString(new List() { SUVChangeVSBaseline.NotEvaluable }), - Column3=ReadingCommon.EnumToString(new List() { FDGAffinityFociInBM.NE}), - Column4=ReadingCommon.EnumToString(new List() { FDGPETOverallAssessment.NE }), - }, + Column1=ReadingCommon.EnumToString(new List() { PET5PSScore.NE }), + Column2=ReadingCommon.EnumToString(new List() { SUVChangeVSBaseline.NotEvaluable }), + Column3=ReadingCommon.EnumToString(new List() { FDGAffinityFociInBM.NE}), + Column4=ReadingCommon.EnumToString(new List() { FDGPETOverallAssessment.NE }), + }, //NE/5分/4分/3分/2分/1分/X NE/增大/减少/无明显变化 是,存在新的/复发的FDG高亲和性病灶 PMD new CalculationDto(){ - Column1=ReadingCommon.EnumToString(new List() { PET5PSScore.NE,PET5PSScore.Five,PET5PSScore.Four,PET5PSScore.Three,PET5PSScore.Two,PET5PSScore.One,PET5PSScore.X, }), - Column2=ReadingCommon.EnumToString(new List() { SUVChangeVSBaseline.NotEvaluable,SUVChangeVSBaseline.Increase,SUVChangeVSBaseline.Decrease,SUVChangeVSBaseline.DidNotChange, }), - Column3=ReadingCommon.EnumToString(new List() { FDGAffinityFociInBM.YesHaveNew,}), - Column4=ReadingCommon.EnumToString(new List() { FDGPETOverallAssessment.PMD }), - }, + Column1=ReadingCommon.EnumToString(new List() { PET5PSScore.NE,PET5PSScore.Five,PET5PSScore.Four,PET5PSScore.Three,PET5PSScore.Two,PET5PSScore.One,PET5PSScore.X, }), + Column2=ReadingCommon.EnumToString(new List() { SUVChangeVSBaseline.NotEvaluable,SUVChangeVSBaseline.Increase,SUVChangeVSBaseline.Decrease,SUVChangeVSBaseline.DidNotChange, }), + Column3=ReadingCommon.EnumToString(new List() { FDGAffinityFociInBM.YesHaveNew,}), + Column4=ReadingCommon.EnumToString(new List() { FDGPETOverallAssessment.PMD }), + }, //5分/4分 增大 NE/(是,存在新的/复发的FDG高亲和性病灶)/(是,存在持续的局灶性变化)/否 PMD new CalculationDto(){ - Column1=ReadingCommon.EnumToString(new List() { PET5PSScore.Five,PET5PSScore.Four, }), - Column2=ReadingCommon.EnumToString(new List() { SUVChangeVSBaseline.Increase }), - Column3=ReadingCommon.EnumToString(new List() { FDGAffinityFociInBM.NE, FDGAffinityFociInBM.YesHaveNew, FDGAffinityFociInBM.YesSustain, FDGAffinityFociInBM.No}), - Column4=ReadingCommon.EnumToString(new List() { FDGPETOverallAssessment.PMD }), - }, + Column1=ReadingCommon.EnumToString(new List() { PET5PSScore.Five,PET5PSScore.Four, }), + Column2=ReadingCommon.EnumToString(new List() { SUVChangeVSBaseline.Increase }), + Column3=ReadingCommon.EnumToString(new List() { FDGAffinityFociInBM.NE, FDGAffinityFociInBM.YesHaveNew, FDGAffinityFociInBM.YesSustain, FDGAffinityFociInBM.No}), + Column4=ReadingCommon.EnumToString(new List() { FDGPETOverallAssessment.PMD }), + }, //3分/2分/1分/X NE/增大/减少/无明显变化 否 CMR new CalculationDto(){ - Column1=ReadingCommon.EnumToString(new List() { PET5PSScore.Three,PET5PSScore.Two,PET5PSScore.One,PET5PSScore.X, }), - Column2=ReadingCommon.EnumToString(new List() { SUVChangeVSBaseline.NotEvaluable,SUVChangeVSBaseline.Increase,SUVChangeVSBaseline.Decrease,SUVChangeVSBaseline.DidNotChange, }), - Column3=ReadingCommon.EnumToString(new List() { FDGAffinityFociInBM.No}), - Column4=ReadingCommon.EnumToString(new List() { FDGPETOverallAssessment.CMR }), - }, + Column1=ReadingCommon.EnumToString(new List() { PET5PSScore.Three,PET5PSScore.Two,PET5PSScore.One,PET5PSScore.X, }), + Column2=ReadingCommon.EnumToString(new List() { SUVChangeVSBaseline.NotEvaluable,SUVChangeVSBaseline.Increase,SUVChangeVSBaseline.Decrease,SUVChangeVSBaseline.DidNotChange, }), + Column3=ReadingCommon.EnumToString(new List() { FDGAffinityFociInBM.No}), + Column4=ReadingCommon.EnumToString(new List() { FDGPETOverallAssessment.CMR }), + }, //3分/2分/1分/X NE/增大/减少/无明显变化 是,存在持续的局灶性变化 PMR new CalculationDto(){ - Column1=ReadingCommon.EnumToString(new List() { PET5PSScore.Three,PET5PSScore.Two,PET5PSScore.One,PET5PSScore.X, }), - Column2=ReadingCommon.EnumToString(new List() { SUVChangeVSBaseline.NotEvaluable,SUVChangeVSBaseline.Increase,SUVChangeVSBaseline.Decrease,SUVChangeVSBaseline.DidNotChange, }), - Column3=ReadingCommon.EnumToString(new List() { FDGAffinityFociInBM.YesSustain }), - Column4=ReadingCommon.EnumToString(new List() { FDGPETOverallAssessment.PMR }), - }, + Column1=ReadingCommon.EnumToString(new List() { PET5PSScore.Three,PET5PSScore.Two,PET5PSScore.One,PET5PSScore.X, }), + Column2=ReadingCommon.EnumToString(new List() { SUVChangeVSBaseline.NotEvaluable,SUVChangeVSBaseline.Increase,SUVChangeVSBaseline.Decrease,SUVChangeVSBaseline.DidNotChange, }), + Column3=ReadingCommon.EnumToString(new List() { FDGAffinityFociInBM.YesSustain }), + Column4=ReadingCommon.EnumToString(new List() { FDGPETOverallAssessment.PMR }), + }, //5分/4分 减少 否/是,存在持续的局灶性变化 PMR new CalculationDto(){ - Column1=ReadingCommon.EnumToString(new List() { PET5PSScore.Five,PET5PSScore.Four }), - Column2=ReadingCommon.EnumToString(new List() { SUVChangeVSBaseline.Decrease }), - Column3=ReadingCommon.EnumToString(new List() { FDGAffinityFociInBM.No, FDGAffinityFociInBM.YesSustain}), - Column4=ReadingCommon.EnumToString(new List() { FDGPETOverallAssessment.PMR }), - }, + Column1=ReadingCommon.EnumToString(new List() { PET5PSScore.Five,PET5PSScore.Four }), + Column2=ReadingCommon.EnumToString(new List() { SUVChangeVSBaseline.Decrease }), + Column3=ReadingCommon.EnumToString(new List() { FDGAffinityFociInBM.No, FDGAffinityFociInBM.YesSustain}), + Column4=ReadingCommon.EnumToString(new List() { FDGPETOverallAssessment.PMR }), + }, //5分/4分 无明显变化 否/是,存在持续的局灶性变化 NMR new CalculationDto(){ - Column1=ReadingCommon.EnumToString(new List() { PET5PSScore.Five,PET5PSScore.Four }), - Column2=ReadingCommon.EnumToString(new List() { SUVChangeVSBaseline.DidNotChange }), - Column3=ReadingCommon.EnumToString(new List() { FDGAffinityFociInBM.No, FDGAffinityFociInBM.YesSustain}), - Column4=ReadingCommon.EnumToString(new List() { FDGPETOverallAssessment.NMR }), - }, - }; + Column1=ReadingCommon.EnumToString(new List() { PET5PSScore.Five,PET5PSScore.Four }), + Column2=ReadingCommon.EnumToString(new List() { SUVChangeVSBaseline.DidNotChange }), + Column3=ReadingCommon.EnumToString(new List() { FDGAffinityFociInBM.No, FDGAffinityFociInBM.YesSustain}), + Column4=ReadingCommon.EnumToString(new List() { FDGPETOverallAssessment.NMR }), + }, + }; - var resultdata = data.Where(x => - (x.NotEq.Contains(1) ? !x.Column1.Contains(pET5PS) : x.Column1.Contains(pET5PS) || x.Column1.Count() == 0) && - (x.NotEq.Contains(2) ? !x.Column2.Contains(uptakeChange) : x.Column2.Contains(uptakeChange) || x.Column2.Count() == 0) && - (x.NotEq.Contains(3) ? !x.Column3.Contains(evidenceFocalFDG) : x.Column3.Contains(evidenceFocalFDG) || x.Column3.Count() == 0)) - .Select(x => x.Column4.FirstOrDefault()) - .FirstOrDefault(); - return resultdata ?? string.Empty; - } + var resultdata = data.Where(x => + (x.NotEq.Contains(1) ? !x.Column1.Contains(pET5PS) : x.Column1.Contains(pET5PS) || x.Column1.Count() == 0) && + (x.NotEq.Contains(2) ? !x.Column2.Contains(uptakeChange) : x.Column2.Contains(uptakeChange) || x.Column2.Count() == 0) && + (x.NotEq.Contains(3) ? !x.Column3.Contains(evidenceFocalFDG) : x.Column3.Contains(evidenceFocalFDG) || x.Column3.Count() == 0)) + .Select(x => x.Column4.FirstOrDefault()) + .FirstOrDefault(); + return resultdata ?? string.Empty; + } - #endregion - #region 骨髓中是否存在局灶性 FDG亲和病灶的证据 + #endregion + #region 骨髓中是否存在局灶性 FDG亲和病灶的证据 - /// - /// 骨髓中是否存在局灶性 FDG亲和病灶的证据 - /// - /// - /// - public async Task GetEvidenceFocalFDG(ReadingCalculateDto inDto) + /// + /// 骨髓中是否存在局灶性 FDG亲和病灶的证据 + /// + /// + /// + public async Task GetEvidenceFocalFDG(ReadingCalculateDto inDto) { - if (inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.ExistPET && x.Answer == ReadingYesOrNo.No.GetEnumInt())) + if (inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.ExistPET && x.Answer == ReadingYesOrNo.No.GetEnumInt()) || (await ImageQualityIsUnableFuse(inDto))) { return FDGAffinityFociInBM.NE.GetEnumInt(); }