diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/IVUSCalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/IVUSCalculateService.cs index 0979886aa..bcd214473 100644 --- a/IRaCIS.Core.Application/Service/ReadingCalculate/IVUSCalculateService.cs +++ b/IRaCIS.Core.Application/Service/ReadingCalculate/IVUSCalculateService.cs @@ -397,7 +397,6 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate { //_logger.LogError("测试计算"); ReadingCalculateDto readingData = await _generalCalculateService.GetReadingCalculateDto(visitTaskId); - // await _generalCalculateService.LogRecord(readingData, "其他既往新病灶", LesionType.OtherPreviousNewLesion); if (type == null) { await ReadingCalculate(readingData); @@ -456,56 +455,32 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate List calculateList = new List() { - ////靶病灶径线之和(SOD) - //new ReadingCalculateData (){QuestionType=QuestionType.SOD,GetDecimalNullFun=GetSODData}, + // EEM求和 + new ReadingCalculateData (){QuestionType=QuestionType.EEMSun,GetDecimalNullFun=GetEEM}, + + // (EEM-Lumen)求和 + new ReadingCalculateData (){QuestionType=QuestionType.EEMLumenSum,GetDecimalNullFun=GetEEMLumenSum}, + + // 计算NTAV的(EEM-Lumen)求和/回撤中的图像数 + new ReadingCalculateData (){QuestionType=QuestionType.NTAVEEMLumenSumOrRetraceImageCount,GetDecimalNullFun=GetNTAVEEMLumenSumOrRetraceImageCount}, + + // 冠状动脉粥样硬化体积百分比(PAV) + new ReadingCalculateData (){QuestionType=QuestionType.PAV,GetDecimalNullFun=GetPAV}, + + // 总动脉粥样硬化体积(NTAV) + new ReadingCalculateData (){QuestionType=QuestionType.NTAV,GetDecimalNullFun=GetNTAV}, + + + }; - // 没有靶病灶只计算最后几个 - if (inDto.QuestionInfo.Where(x => x.LesionType == LesionType.TargetLesion).Sum(x => x.TableRowInfoList.Count()) == 0) - { - - List questionTypes = new List() - { - QuestionType.TargetLesion, - QuestionType.NoTargetLesion, - QuestionType.NewLesions, - QuestionType.Tumor, - QuestionType.ExistDisease, - }; - - // 没有靶病灶就删除其他几个答案的值 - var isNeedDeleteTypes = calculateList.Where(x => !questionTypes.Contains(x.QuestionType)).Select(x => x.QuestionType).ToList(); - - - var isNeedDeleteIds = inDto.QuestionInfo.Where(x => x.QuestionType != null && isNeedDeleteTypes.Contains(x.QuestionType.Value)).Select(x => x.QuestionId).ToList(); - - await _readingTaskQuestionAnswerRepository.BatchUpdateNoTrackingAsync(x => x.VisitTaskId == inDto.VisitTaskId && isNeedDeleteIds.Contains(x.ReadingQuestionTrialId), x => new ReadingTaskQuestionAnswer - { - Answer = string.Empty - }); - - - - calculateList = calculateList.Where(x => questionTypes.Contains(x.QuestionType)).ToList(); - - - - - - } if (calculateType != null) { calculateList = calculateList.Where(x => calculateType.Contains(x.QuestionType)).ToList(); } - var typeNAList = new List - { - QuestionType.SODChange, - QuestionType.SODPercent, - QuestionType.LowestIncrease, - QuestionType.LowPercent, - }; + foreach (var calculate in calculateList) { @@ -514,8 +489,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate if (item != null) { //计算答案 - if (inDto.IsOnlyChangeAllTask == false) - { + #region 计算答案 if (calculate.GetDecimalFun != null) @@ -526,25 +500,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate else if (calculate.GetDecimalNullFun != null) { var value = await calculate.GetDecimalNullFun(inDto); - if (value == null) - { - if (typeNAList.Contains(item.QuestionType ?? QuestionType.SOD)) - { - item.Answer = nameof(YesOrNoOrNa.NA); - - } - else - { - item.Answer = this.nAString; - - } - - } - else - - { - item.Answer = value == null ? string.Empty : value.Value.ToString(); - } + item.Answer = value == null ? string.Empty : value.Value.ToString(); } else if (calculate.GetStringFun != null) { @@ -583,19 +539,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate Answer = item.Answer, ReadingQuestionTrialId = item.QuestionId, }); - } - - // 修改全局 - if (inDto.IsChangeOtherTask && calculate.ChangeAllTaskFun != null) - { - await calculate.ChangeAllTaskFun(new ChangeAllTaskDto() - { - calculateDto = inDto, - QuestionId = item.QuestionId, - }); - } - - } + } } @@ -634,16 +578,91 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate } - ///// - ///// 计算NTAV的EEM - ///// - ///// - ///// - //public async Task GetEEM(ReadingCalculateDto inDto) - //{ - // var tableQuestion = inDto.QuestionInfo.Where(x => x.LesionType == LesionType.TargetLesion).SelectMany(x => x.TableRowInfoList).ToList(); - //} + /// + /// 计算NTAV的EEM + /// + /// + /// + public async Task GetEEM(ReadingCalculateDto inDto) + { + return inDto.QuestionInfo.Where(x => x.LesionType == LesionType.MatchValues).SelectMany(x => x.TableRowInfoList).SelectMany(x => x.TableQuestionList) + .Where(x => x.QuestionMark == QuestionMark.ElasticAreaDiffValue).Select(x => x.Answer.IsNullOrEmptyReturn0()).Sum(); + } + + /// + /// 获取(EEM-Lumen)求和 + /// + /// + /// + public async Task GetEEMLumenSum(ReadingCalculateDto inDto) + { + var eMM= await GetEEM(inDto); + var lumenAreaSum = inDto.QuestionInfo.Where(x => x.LesionType == LesionType.MatchValues).SelectMany(x => x.TableRowInfoList).SelectMany(x => x.TableQuestionList) + .Where(x => x.QuestionMark == QuestionMark.LumenArea).Select(x => x.Answer.IsNullOrEmptyReturn0()).Sum(); + if (eMM == 0 || lumenAreaSum == 0) + { + return null; + } + return eMM / lumenAreaSum; + + } + + /// + /// 计算NTAV的(EEM-Lumen)求和/回撤中的图像数 + /// + /// + /// + public async Task GetNTAVEEMLumenSumOrRetraceImageCount(ReadingCalculateDto inDto) + { + var eEMLumenSum = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.EEMLumenSum).Select(x => x.Answer).FirstOrDefault().IsNullOrEmptyReturn0(); + var retracedFramesNumber = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.RetracedFramesNumber).Select(x => x.Answer).FirstOrDefault().IsNullOrEmptyReturn0(); + + if (eEMLumenSum == 0 || retracedFramesNumber == 0) + { + return null; + } + return eEMLumenSum / retracedFramesNumber; + + } + + + /// + /// 冠状动脉粥样硬化体积百分比(PAV) + /// + /// + /// + public async Task GetPAV(ReadingCalculateDto inDto) + { + var result =await GetEEMLumenSum(inDto); + if (result == null) + { + return null; + } + else + { + return result.Value * 200; + } + } + + /// + /// 总动脉粥样硬化体积(NTAV) + /// + /// + /// + public async Task GetNTAV(ReadingCalculateDto inDto) + { + var result = await GetNTAVEEMLumenSumOrRetraceImageCount(inDto); + var medianFrame= inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.MedianFrame).Select(x => x.Answer).FirstOrDefault().IsNullOrEmptyReturn0(); + if (result == null|| medianFrame==0) + { + return null; + } + else + { + return result.Value * medianFrame; + } + } #region 将上一次的访视病灶添加到这一次 diff --git a/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs b/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs index 314c82ef0..a93962b57 100644 --- a/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs +++ b/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs @@ -1772,7 +1772,17 @@ public enum SUVChangeVSBaseline /// /// 触发iRECSIT后的新病灶 /// - TriggeringIRECSIT = 8 + TriggeringIRECSIT = 8, + + /// + /// FCT + /// + FCT = 101, + + /// + /// 各匹配片段测量值 + /// + MatchValues = 102, } @@ -2032,7 +2042,47 @@ public enum SUVChangeVSBaseline /// /// SUVmax /// - SUVmax = 20 + SUVmax = 20, + + /// + /// 外弹力膜面积 + /// + ElasticArea = 1001, + + /// + /// 管腔面积 + /// + LumenArea = 1002, + + /// + /// 外弹力膜与管腔面积差值 + /// + ElasticAreaDiffValue = 1003, + + /// + /// FCT第一次测量值 + /// + FirstFCT = 1011, + + /// + /// FCT第二次测量值 + /// + SecondFCT = 1012, + + /// + /// FCT第三次测量值 + /// + ThirdFCT = 1013, + + /// + /// FCT三次测量最小值 + /// + MinFCT = 1014, + + /// + /// FCT三次测量平均值 + /// + AvgMin=1015, } @@ -2394,7 +2444,52 @@ public enum SUVChangeVSBaseline /// 影像质量问题 /// ImageQualityProblem = 67, - } + + /// + /// 回撤中的图像帧数 + /// + RetracedFramesNumber = 1003, + + /// + /// 队列分析图像帧数的中位数 + /// + MedianFrame = 1004, + + /// + /// EEM求和 + /// + EEMSun = 1005, + + /// + /// (EEM-Lumen)求和 + /// + EEMLumenSum = 1006, + + /// + /// 计算NTAV的(EEM-Lumen)求和/回撤中的图像数 + /// + NTAVEEMLumenSumOrRetraceImageCount = 1007, + + /// + /// 冠状动脉粥样硬化体积百分比(PAV) + /// + PAV = 1008, + + /// + /// 总动脉粥样硬化体积(NTAV) + /// + NTAV = 1009, + + /// + /// 匹配动脉段最小的FCT + /// + MinFCT = 1010, + + /// + /// 平均最小FCT + /// + AverageMinFCT = 1011, + }