From 6061cf5d93bdd6eed2faf44169b6dab0c26b7593 Mon Sep 17 00:00:00 2001 From: he <109787524@qq.com> Date: Thu, 11 Apr 2024 10:41:13 +0800 Subject: [PATCH] =?UTF-8?q?=E8=87=AA=E5=8A=A8=E8=AE=A1=E7=AE=97=E8=A7=A6?= =?UTF-8?q?=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../IRaCIS.Core.Application.xml | 17 +- .../Reading/Dto/ReadingCalculateViewModel.cs | 4 +- .../Reading/Dto/ReadingImageTaskViewModel.cs | 7 +- .../ReadingImageTaskService.cs | 33 ++- .../General/ReadingCalculateService.cs | 4 +- .../LuganoCalculateService.cs | 212 ++++++++++++++---- IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs | 88 ++++++-- 7 files changed, 288 insertions(+), 77 deletions(-) diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml index 17f465189..8acab0990 100644 --- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml +++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml @@ -2038,6 +2038,13 @@ + + + 获取脾脏垂直径 + + + + 与基线相比SPD变化的百分比 @@ -2095,6 +2102,13 @@ + + + 获取脾脏状态 + + + + 获取脾脏评估 @@ -13771,6 +13785,7 @@ 保存任务问题 带动态稽查参数 + 请求类型 @@ -13789,7 +13804,7 @@ - 提交表格问题答案 提交病灶 + 提交表格问题答案 提交病灶 保存病灶 diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingCalculateViewModel.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingCalculateViewModel.cs index 0d6644494..3a6f6edcd 100644 --- a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingCalculateViewModel.cs +++ b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingCalculateViewModel.cs @@ -222,7 +222,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto public Arm ArmEnum { get; set; } - public ComputationTrigger ComputationTrigger { get; set; } = ComputationTrigger.Lesion; + public ComputationTrigger ComputationTrigger { get; set; } /// /// 是否修改其他任务 @@ -353,7 +353,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto public QuestionType QuestionType { get; set; } - public ComputationTrigger? ComputationTrigger { get; set; } + public List ComputationTriggerList { get; set; }=new List(); public Func> GetDecimalFun { get; set; } diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs index a8b548954..f4f835247 100644 --- a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs +++ b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs @@ -588,8 +588,9 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto { public Guid VisitTaskId { get; set; } + public ComputationTrigger ComputationTrigger { get; set; } - public bool UpdateMark { get; set; } = false; + public bool UpdateMark { get; set; } = false; public List Answers { get; set; } @@ -2086,7 +2087,9 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto { public Guid QuestionId { get; set; } - public Guid? OrganInfoId { get; set; } + public ComputationTrigger ComputationTrigger { get; set; } = ComputationTrigger.CTSave; + + public Guid? OrganInfoId { get; set; } public int? NumberOfFrames { get; set; } diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs index 1f5bc9ce0..e6761b1d1 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs @@ -1637,7 +1637,7 @@ namespace IRaCIS.Application.Services { IsChangeOtherTask = false, VisitTaskId = inDto.VisitTaskId, - ComputationTrigger = ComputationTrigger.Lesion, + ComputationTrigger = ComputationTrigger.MergeLesion, }); // 保存完了计算疾病进展 @@ -1746,19 +1746,32 @@ namespace IRaCIS.Application.Services /// 保存任务问题 带动态稽查参数 /// /// + /// 请求类型 /// [Route("/SaveTaskQuestion/{param}")] [HttpPost] public async Task SaveTaskQuestion(ChangeDicomReadingQuestionAnswerInDto inDto, string param) { var taskinfo = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).Include(x => x.TrialReadingCriterion).FirstNotNullAsync(); - var result = await this.SaveImageQuality(inDto); - // 保存脾尖或者脾底进行计算 - if (taskinfo.TrialReadingCriterion.CriterionType == CriterionType.Lugano2014 && (param == "4" || param == "5")) - { - await _luganoCalculateService.SaveSplenicCalculate(inDto.VisitTaskId); - } + try + { + param = param == string.Empty ? "0" : param; + inDto.ComputationTrigger = (ComputationTrigger)int.Parse(param); + } + catch (Exception) + { + + } + var result = await this.SaveImageQuality(inDto); + + // 自动计算 + await this._readingCalculateService.CalculateTask(new CalculateTaskInDto() + { + IsChangeOtherTask = false, + VisitTaskId = inDto.VisitTaskId, + ComputationTrigger = inDto.ComputationTrigger, + }); return result; } @@ -2055,7 +2068,7 @@ namespace IRaCIS.Application.Services { IsChangeOtherTask = false, VisitTaskId = inDto.VisitTaskId, - ComputationTrigger=ComputationTrigger.Lesion, + ComputationTrigger=ComputationTrigger.RemoveLesion, }); @@ -2078,7 +2091,7 @@ namespace IRaCIS.Application.Services /// - /// 提交表格问题答案 提交病灶 + /// 提交表格问题答案 提交病灶 保存病灶 /// /// /// @@ -2453,7 +2466,7 @@ namespace IRaCIS.Application.Services { IsChangeOtherTask = false, VisitTaskId = inDto.VisitTaskId, - ComputationTrigger = ComputationTrigger.Lesion, + ComputationTrigger = inDto.ComputationTrigger, }); // 保存完了计算疾病进展 diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/General/ReadingCalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/General/ReadingCalculateService.cs index 9939c4886..348d0815e 100644 --- a/IRaCIS.Core.Application/Service/ReadingCalculate/General/ReadingCalculateService.cs +++ b/IRaCIS.Core.Application/Service/ReadingCalculate/General/ReadingCalculateService.cs @@ -154,7 +154,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate { IsChangeOtherTask = false, VisitTaskId = inDto.VisitTaskId, - ComputationTrigger = ComputationTrigger.Report, + ComputationTrigger = ComputationTrigger.InitialCalculation, }); } } @@ -209,7 +209,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate { await service.CalculateTask(new CalculateTaskInDto() { - ComputationTrigger= ComputationTrigger.Report, + ComputationTrigger= ComputationTrigger.InitialCalculation, VisitTaskId = inDto.VisitTaskId }); } diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs index 42424c3dc..921d1f8a8 100644 --- a/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs +++ b/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs @@ -513,88 +513,81 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate List calculateList = new List() { - /* - * 保存影像质量问题 - * 如果:不正常:PET-CT不能融合, FDG-PET的评估设置为NE - * - * 保存二维页面病灶 - * - * 保存 - * - * - * - */ - // 是否存在Pet - new ReadingCalculateData (){QuestionType=QuestionType.ExistPET,GetStringFun=GetExistPET}, + new ReadingCalculateData (){QuestionType=QuestionType.ExistPET,GetStringFun=GetExistPET ,ComputationTriggerList=new List(){ ComputationTrigger.InitialCalculation, } }, //垂直径乘积之和(SPD) - new ReadingCalculateData (){QuestionType=QuestionType.SPD,GetDecimalFun=GetSPD}, + new ReadingCalculateData (){QuestionType=QuestionType.SPD,GetDecimalFun=GetSPD,ComputationTriggerList=new List(){ ComputationTrigger.InitialCalculation, ComputationTrigger.CTSave,ComputationTrigger.RemoveLesion,}}, // 与基线相比SPD变化的百分比 - new ReadingCalculateData (){QuestionType=QuestionType.SPDChange,GetStringFun=CompareBaselineSPD}, + new ReadingCalculateData (){QuestionType=QuestionType.SPDChange,GetStringFun=CompareBaselineSPD,ComputationTriggerList=new List(){ ComputationTrigger.InitialCalculation, ComputationTrigger.CTSave,ComputationTrigger.RemoveLesion,}}, + + // 脾脏垂直径 + new ReadingCalculateData (){QuestionType=QuestionType.SpleenLength,GetDecimalNullFun=GetSpleenLength,ComputationTriggerList=new List(){ ComputationTrigger.SplenicApexPosition,ComputationTrigger.PositionSpleenFloor,}}, // 与基线相比脾肿大增加的百分比 - new ReadingCalculateData (){QuestionType=QuestionType.SplenoncusChange,GetStringFun=GetSplenoncusChange}, + new ReadingCalculateData (){QuestionType=QuestionType.SplenoncusChange,GetStringFun=GetSplenoncusChange,ComputationTriggerList=new List(){ ComputationTrigger.InitialCalculation, ComputationTrigger.SplenicApexPosition,ComputationTrigger.PositionSpleenFloor,}}, // 与最低点相比脾脏垂直径长度的增加值 - new ReadingCalculateData (){QuestionType=QuestionType.SplenoncusAdd,GetStringFun=GetSplenoncusAdd}, + new ReadingCalculateData (){QuestionType=QuestionType.SplenoncusAdd,GetStringFun=GetSplenoncusAdd,ComputationTriggerList=new List(){ ComputationTrigger.InitialCalculation, ComputationTrigger.SplenicApexPosition,ComputationTrigger.PositionSpleenFloor,}}, // 与基线相比脾垂直径变化值 - new ReadingCalculateData (){QuestionType=QuestionType.SplenoncusDiameterChange,GetStringFun=GetSplenoncusDiameterChange}, + new ReadingCalculateData (){QuestionType=QuestionType.SplenoncusDiameterChange,GetStringFun=GetSplenoncusDiameterChange,ComputationTriggerList=new List(){ ComputationTrigger.InitialCalculation, ComputationTrigger.SplenicApexPosition,ComputationTrigger.PositionSpleenFloor,}}, // 脾肿垂直径最低点访视 - new ReadingCalculateData (){QuestionType=QuestionType.LowestSplenoncusVisit,GetStringFun=GetLowestSplenoncusVisit}, + new ReadingCalculateData (){QuestionType=QuestionType.LowestSplenoncusVisit,GetStringFun=GetLowestSplenoncusVisit,ComputationTriggerList=new List(){ ComputationTrigger.InitialCalculation, ComputationTrigger.SplenicApexPosition,ComputationTrigger.PositionSpleenFloor,}}, + + // 获取脾脏状态 + new ReadingCalculateData (){QuestionType=QuestionType.SplenicStatus,GetStringFun=GetSplenicStatus,ComputationTriggerList=new List(){ ComputationTrigger.SplenicApexPosition,ComputationTrigger.PositionSpleenFloor,}}, // 获取脾脏评估 - new ReadingCalculateData (){QuestionType=QuestionType.SplenicEvaluation,GetStringFun=GetSplenicEvaluation}, + new ReadingCalculateData (){QuestionType=QuestionType.SplenicEvaluation,GetStringFun=GetSplenicEvaluation,ComputationTriggerList=new List(){ ComputationTrigger.InitialCalculation, ComputationTrigger.SplenicApexPosition,ComputationTrigger.PositionSpleenFloor,ComputationTrigger.SplenicEvaluation,}}, //靶病灶评估 - new ReadingCalculateData (){QuestionType=QuestionType.TargetLesion,GetStringFun=GetTargetLesionEvaluate}, + new ReadingCalculateData (){QuestionType=QuestionType.TargetLesion,GetStringFun=GetTargetLesionEvaluate,ComputationTriggerList=new List(){ ComputationTrigger.InitialCalculation, ComputationTrigger.CTSave,ComputationTrigger.MergeSave,ComputationTrigger.RemoveLesion,ComputationTrigger.MergeLesion,}}, //非靶病灶评估 - new ReadingCalculateData (){QuestionType=QuestionType.NoTargetLesion,GetStringFun=GetNoTargetLesionEvaluate}, + new ReadingCalculateData (){QuestionType=QuestionType.NoTargetLesion,GetStringFun=GetNoTargetLesionEvaluate,ComputationTriggerList=new List(){ ComputationTrigger.InitialCalculation, ComputationTrigger.CTSave,ComputationTrigger.MergeSave,ComputationTrigger.RemoveLesion,}}, //新病灶评估 - new ReadingCalculateData (){QuestionType=QuestionType.NewLesionEvaluation,GetStringFun=GetNewLesionEvaluate}, + new ReadingCalculateData (){QuestionType=QuestionType.NewLesionEvaluation,GetStringFun=GetNewLesionEvaluate,ComputationTriggerList=new List(){ ComputationTrigger.InitialCalculation, ComputationTrigger.CTSave,ComputationTrigger.MergeSave,ComputationTrigger.RemoveLesion,}}, //获取肝脏评估 - new ReadingCalculateData (){QuestionType=QuestionType.LiverAssessment,GetStringFun=GetLiverAssessment}, + new ReadingCalculateData (){QuestionType=QuestionType.LiverAssessment,GetStringFun=GetLiverAssessment,ComputationTriggerList=new List(){ ComputationTrigger.InitialCalculation, ComputationTrigger.LiverStatus,}}, - // // 骨髓中是否存在局灶性 FDG亲和病灶的证据 - //new ReadingCalculateData (){QuestionType=QuestionType.EvidenceFocalFDG,GetStringFun=GetEvidenceFocalFDG,ComputationTrigger=ComputationTrigger.Lesion}, + // 骨髓中是否存在局灶性 FDG亲和病灶的证据 + new ReadingCalculateData (){QuestionType=QuestionType.EvidenceFocalFDG,GetStringFun=GetEvidenceFocalFDG,ComputationTriggerList=new List(){ }}, //CT/MRI - new ReadingCalculateData (){QuestionType=QuestionType.CTandMRI,GetStringFun=CTMRIEvaluation}, + new ReadingCalculateData (){QuestionType=QuestionType.CTandMRI,GetStringFun=CTMRIEvaluation,ComputationTriggerList=new List(){ ComputationTrigger.InitialCalculation, ComputationTrigger.LiverStatus,ComputationTrigger.SplenicApexPosition,ComputationTrigger.PositionSpleenFloor,ComputationTrigger.SplenicEvaluation,ComputationTrigger.CTSave,ComputationTrigger.MergeSave,ComputationTrigger.RemoveLesion,ComputationTrigger.MergeLesion,}}, // PET 5PS评分 - new ReadingCalculateData (){QuestionType=QuestionType.PET5PS,GetStringFun=GetPET5PS,ComputationTrigger=ComputationTrigger.Lesion}, + new ReadingCalculateData (){QuestionType=QuestionType.PET5PS,GetStringFun=GetPET5PS,ComputationTriggerList=new List(){ ComputationTrigger.ImageQuality, ComputationTrigger.LiverBloodPool,ComputationTrigger.MediastinalPool,ComputationTrigger.MergeSave,ComputationTrigger.RemoveLesion,} }, // 修改PET 5PS评分备注 - new ReadingCalculateData (){QuestionType=QuestionType.PSScoreRemarks,GetStringFun=GetPET5PSRemark,ComputationTrigger=ComputationTrigger.Lesion}, + new ReadingCalculateData (){QuestionType=QuestionType.PSScoreRemarks,GetStringFun=GetPET5PSRemark,ComputationTriggerList=new List(){ ComputationTrigger.LiverBloodPool,ComputationTrigger.MediastinalPool,ComputationTrigger.MergeSave,ComputationTrigger.RemoveLesion,}}, //与基线相比摄取值变化 - new ReadingCalculateData (){QuestionType=QuestionType.UptakeChange,GetStringFun=GetUptakeChange,ComputationTrigger=ComputationTrigger.Lesion}, + new ReadingCalculateData (){QuestionType=QuestionType.UptakeChange,GetStringFun=GetUptakeChange,ComputationTriggerList=new List(){ ComputationTrigger.LiverBloodPool,ComputationTrigger.MediastinalPool,ComputationTrigger.MergeSave,ComputationTrigger.RemoveLesion,}}, // FDG-PET 评估结果 - new ReadingCalculateData (){QuestionType=QuestionType.FDGPET,GetStringFun=GetFDGPETOverallAssessment}, + new ReadingCalculateData (){QuestionType=QuestionType.FDGPET,GetStringFun=GetFDGPETOverallAssessment,ComputationTriggerList=new List(){ ComputationTrigger.InitialCalculation, ComputationTrigger.ImageQuality, ComputationTrigger.LiverBloodPool,ComputationTrigger.MediastinalPool,ComputationTrigger.MergeSave,ComputationTrigger.RemoveLesion,ComputationTrigger.PDGPET,}}, // 上一次 FDG-PET 评估结果 - new ReadingCalculateData (){QuestionType=QuestionType.LastFDGPET,GetStringFun=GetLastFDGPETOverallAssessment}, + new ReadingCalculateData (){QuestionType=QuestionType.LastFDGPET,GetStringFun=GetLastFDGPETOverallAssessment,ComputationTriggerList=new List(){ ComputationTrigger.InitialCalculation, ComputationTrigger.MergeSave,ComputationTrigger.RemoveLesion,}}, // 影像学整体肿瘤评估 - new ReadingCalculateData (){QuestionType=QuestionType.ImgOncology,GetStringFun=GetImgOncology}, + new ReadingCalculateData (){QuestionType=QuestionType.ImgOncology,GetStringFun=GetImgOncology,ComputationTriggerList=new List(){ ComputationTrigger.InitialCalculation, ComputationTrigger.LiverStatus,ComputationTrigger.SplenicApexPosition,ComputationTrigger.PositionSpleenFloor,ComputationTrigger.SplenicEvaluation,ComputationTrigger.LiverBloodPool,ComputationTrigger.MediastinalPool,ComputationTrigger.CTSave,ComputationTrigger.MergeSave,ComputationTrigger.RemoveLesion,ComputationTrigger.PDGPET,ComputationTrigger.MergeLesion,}}, - //SUVmax - new ReadingCalculateData (){QuestionType=QuestionType.SUVmax,GetDecimalNullFun=GetSuvMax}, + new ReadingCalculateData (){QuestionType=QuestionType.SUVmax,GetDecimalNullFun=GetSuvMax,ComputationTriggerList=new List(){ ComputationTrigger.MergeSave,ComputationTrigger.RemoveLesion,}}, // SUVmax所在病灶 - new ReadingCalculateData (){QuestionType=QuestionType.SUVmaxLesion,GetStringFun=GetSuvMaxFocus}, + new ReadingCalculateData (){QuestionType=QuestionType.SUVmaxLesion,GetStringFun=GetSuvMaxFocus,ComputationTriggerList=new List(){ ComputationTrigger.MergeSave,ComputationTrigger.RemoveLesion,}}, //是否存在疾病 - new ReadingCalculateData (){QuestionType=QuestionType.ExistDisease,GetStringFun=GetIsExistDisease}, + new ReadingCalculateData (){QuestionType=QuestionType.ExistDisease,GetStringFun=GetIsExistDisease,ComputationTriggerList=new List(){ ComputationTrigger.InitialCalculation, ComputationTrigger.CTSave,ComputationTrigger.MergeSave,ComputationTrigger.RemoveLesion,}}, @@ -681,7 +674,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate } - calculateList = calculateList.Where(x => x.ComputationTrigger == null || x.ComputationTrigger == inDto.ComputationTrigger).ToList(); + calculateList = calculateList.Where(x =>x.ComputationTriggerList.Contains(inDto.ComputationTrigger)).ToList(); var typeNAList = new List { QuestionType.SODChange, @@ -2046,13 +2039,42 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate #endregion - #region 与基线相比SPD变化的百分比 + #region 脾脏垂直径 /// - /// 与基线相比SPD变化的百分比 + /// 获取脾脏垂直径 /// /// /// - public async Task CompareBaselineSPD(ReadingCalculateDto inDto) + 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(); + + decimal? spleenLength=null; + if (splenicTopAnswer != null && splenicBottomAnswer != null) + { + spleenLength = splenicTopAnswer.IsNullOrEmptyReturn0() - splenicBottomAnswer.IsNullOrEmptyReturn0(); + if (spleenLength < 0) + { + spleenLength = 0 - spleenLength; + } + return spleenLength; + } + + return spleenLength; + } + #endregion + + #region 与基线相比SPD变化的百分比 + /// + /// 与基线相比SPD变化的百分比 + /// + /// + /// + public async Task CompareBaselineSPD(ReadingCalculateDto inDto) { if (inDto.IsBaseLine) { @@ -2400,6 +2422,23 @@ 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(); + if (spleenLength == string.Empty) + { + return string.Empty; + } + else + { + return await GetSplenicState(inDto.VisitTaskId, spleenLength.IsNullOrEmptyReturn0()); + } + } #region 获取脾脏评估 @@ -2488,12 +2527,52 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate /// public async Task GetPET5PS(ReadingCalculateDto inDto) { - //病灶最大SUVmax、肝脏血池、纵膈血池SUVmax未发生改变时,不用计算 + + // 如果是保存影像进来 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, + }; + + 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没变 就不重新计算 + 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())) { return PET5PSScore.NE.GetEnumInt(); @@ -2577,8 +2656,33 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate /// public async Task GetUptakeChange(ReadingCalculateDto inDto) { - //PET5ps评分改变时,才计算 - if (inDto.IsBaseLine) + //PET5ps评分改变时,才计算 + + 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(); ; + + + // 数据库中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(); + + } + + + if (inDto.IsBaseLine) { return SUVChangeVSBaseline.NA.GetEnumInt(); } @@ -2658,7 +2762,23 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate public async Task GetFDGPETOverallAssessment(ReadingCalculateDto inDto) { - if (inDto.IsBaseLine) + // 如果是保存影像进来 PET-CT不能融合 就是NE + if (inDto.ComputationTrigger == ComputationTrigger.ImageQuality) + { + if (await ImageQualityIsUnableFuse(inDto)) + { + if (inDto.IsBaseLine) + { + return FDGPETOverallAssessment.NA.GetEnumInt(); + } + else + { + return FDGPETOverallAssessment.NE.GetEnumInt(); + } + } + } + + if (inDto.IsBaseLine) { return FDGPETOverallAssessment.NA.GetEnumInt(); } diff --git a/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs b/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs index 396877ef7..9e24174f9 100644 --- a/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs +++ b/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs @@ -2405,21 +2405,81 @@ public enum PET5PSScore } - /// - /// 计算触发 - /// - public enum ComputationTrigger - { - /// - /// 病灶 - /// - Lesion=0, + /// + /// 计算触发 // 用的是SaveQuestionType 这个字典 + /// + public enum ComputationTrigger //SaveQuestionType + { + /// + /// 分裂病灶 + /// + SplitLesions = -6, - /// - /// 报告 - /// - Report=1, - } + /// + /// 融合病灶 + /// + MergeLesion = -5, + + /// + /// 删除病灶 + /// + RemoveLesion = -4, + + /// + /// 融合保存病灶 + /// + MergeSave = -3, + + /// + /// CT保存病灶 + /// + CTSave = -2, + + /// + /// 初始计算 + /// + InitialCalculation = -1, + + /// + /// 保存影像质量 + /// + ImageQuality = 0, + + /// + /// 保存PDG-PET + /// + PDGPET = 1, + + /// + /// 测量肝脏血池 + /// + LiverBloodPool = 2, + + /// + /// 测量纵膈血池 + /// + MediastinalPool = 3, + + /// + /// 标注脾尖位置 + /// + SplenicApexPosition = 4, + + /// + /// 标注脾底位置 + /// + PositionSpleenFloor = 5, + + /// + /// 保存肝脏状态 + /// + LiverStatus = 6, + + /// + /// 保存脾脏评估 + /// + SplenicEvaluation = 7, + } /// /// 新靶病灶评估