Compare commits
No commits in common. "92e1a3f90be22023b86750875abd5e908113ebcf" and "91fa8e75e1953c61fda912eda5a39a77fa6473cf" have entirely different histories.
92e1a3f90b
...
91fa8e75e1
|
@ -2721,12 +2721,6 @@
|
||||||
<param name="calculateType"></param>
|
<param name="calculateType"></param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
<member name="M:IRaCIS.Core.Application.Service.ReadingCalculate.IVUSCalculateService.CalculatePatchDataStatisticsAndPVA(IRaCIS.Core.Application.Service.Reading.Dto.ReadingCalculateDto)">
|
|
||||||
<summary>
|
|
||||||
计算斑块数据统计和PVA数据
|
|
||||||
</summary>
|
|
||||||
<returns></returns>
|
|
||||||
</member>
|
|
||||||
<member name="M:IRaCIS.Core.Application.Service.ReadingCalculate.IVUSCalculateService.VerifyVisitTaskQuestions(IRaCIS.Core.Application.Service.Reading.Dto.VerifyVisitTaskQuestionsInDto)">
|
<member name="M:IRaCIS.Core.Application.Service.ReadingCalculate.IVUSCalculateService.VerifyVisitTaskQuestions(IRaCIS.Core.Application.Service.Reading.Dto.VerifyVisitTaskQuestionsInDto)">
|
||||||
<summary>
|
<summary>
|
||||||
验证访视提交
|
验证访视提交
|
||||||
|
@ -2734,23 +2728,40 @@
|
||||||
<param name="inDto"></param>
|
<param name="inDto"></param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
<member name="M:IRaCIS.Core.Application.Service.ReadingCalculate.IVUSCalculateService.GetPlaque1PVA(IRaCIS.Core.Application.Service.Reading.Dto.ReadingCalculateDto)">
|
<member name="M:IRaCIS.Core.Application.Service.ReadingCalculate.IVUSCalculateService.GetEEM(IRaCIS.Core.Application.Service.Reading.Dto.ReadingCalculateDto)">
|
||||||
<summary>
|
<summary>
|
||||||
获取斑块1-PAV
|
计算NTAV的EEM
|
||||||
</summary>
|
</summary>
|
||||||
<param name="inDto"></param>
|
<param name="inDto"></param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
<member name="M:IRaCIS.Core.Application.Service.ReadingCalculate.IVUSCalculateService.GetPlaque2PVA(IRaCIS.Core.Application.Service.Reading.Dto.ReadingCalculateDto)">
|
<member name="M:IRaCIS.Core.Application.Service.ReadingCalculate.IVUSCalculateService.GetEEMLumenSum(IRaCIS.Core.Application.Service.Reading.Dto.ReadingCalculateDto)">
|
||||||
<summary>
|
<summary>
|
||||||
获取斑块2-PAV
|
获取(EEM-Lumen)求和
|
||||||
</summary>
|
</summary>
|
||||||
<param name="inDto"></param>
|
<param name="inDto"></param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
<member name="M:IRaCIS.Core.Application.Service.ReadingCalculate.IVUSCalculateService.GetPlaque3PVA(IRaCIS.Core.Application.Service.Reading.Dto.ReadingCalculateDto)">
|
<member name="M:IRaCIS.Core.Application.Service.ReadingCalculate.IVUSCalculateService.GetNTAVEEMLumenSumOrRetraceImageCount(IRaCIS.Core.Application.Service.Reading.Dto.ReadingCalculateDto)">
|
||||||
<summary>
|
<summary>
|
||||||
获取斑块3-PAV
|
计算NTAV的(EEM-Lumen)求和/回撤中的图像数
|
||||||
|
</summary>
|
||||||
|
<param name="inDto"></param>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
|
<member name="M:IRaCIS.Core.Application.Service.ReadingCalculate.IVUSCalculateService.GetPAV(IRaCIS.Core.Application.Service.Reading.Dto.ReadingCalculateDto)">
|
||||||
|
<summary>
|
||||||
|
冠状动脉粥样硬化体积百分比(PAV)
|
||||||
|
</summary>
|
||||||
|
<remarks>
|
||||||
|
(EEM-Lumen)求和/EEM求和✖️100,单位%
|
||||||
|
</remarks>
|
||||||
|
<param name="inDto"></param>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
|
<member name="M:IRaCIS.Core.Application.Service.ReadingCalculate.IVUSCalculateService.GetNTAV(IRaCIS.Core.Application.Service.Reading.Dto.ReadingCalculateDto)">
|
||||||
|
<summary>
|
||||||
|
总动脉粥样硬化体积(NTAV)
|
||||||
</summary>
|
</summary>
|
||||||
<param name="inDto"></param>
|
<param name="inDto"></param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
|
|
|
@ -2,10 +2,8 @@
|
||||||
using IRaCIS.Core.Application.ViewModel;
|
using IRaCIS.Core.Application.ViewModel;
|
||||||
using IRaCIS.Core.Domain.Share;
|
using IRaCIS.Core.Domain.Share;
|
||||||
using IRaCIS.Core.Infra.EFCore.Common;
|
using IRaCIS.Core.Infra.EFCore.Common;
|
||||||
using MassTransit;
|
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using Microsoft.IdentityModel.Tokens;
|
|
||||||
|
|
||||||
namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
||||||
{
|
{
|
||||||
|
@ -451,20 +449,23 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
||||||
#region 计算 这里顺序非常重要 后面计算的值要依赖前面计算的结果
|
#region 计算 这里顺序非常重要 后面计算的值要依赖前面计算的结果
|
||||||
var needAddList = new List<ReadingTaskQuestionAnswer>();
|
var needAddList = new List<ReadingTaskQuestionAnswer>();
|
||||||
|
|
||||||
// 计算斑块数据统计和PVA数据
|
|
||||||
await this.CalculatePatchDataStatisticsAndPVA(inDto);
|
|
||||||
|
|
||||||
List<ReadingCalculateData> calculateList = new List<ReadingCalculateData>()
|
List<ReadingCalculateData> calculateList = new List<ReadingCalculateData>()
|
||||||
{
|
{
|
||||||
// 斑块1-PAV
|
// EEM求和
|
||||||
new ReadingCalculateData (){QuestionType=QuestionType.Plaque1PVA,GetDecimalNullFun=GetPlaque1PVA},
|
new ReadingCalculateData (){QuestionType=QuestionType.EEMSum,GetDecimalNullFun=GetEEM},
|
||||||
|
|
||||||
// 斑块2-PAV
|
// (EEM-Lumen)求和
|
||||||
new ReadingCalculateData (){QuestionType=QuestionType.Plaque2PVA,GetDecimalNullFun=GetPlaque2PVA},
|
new ReadingCalculateData (){QuestionType=QuestionType.EEMLumenSum,GetDecimalNullFun=GetEEMLumenSum},
|
||||||
|
|
||||||
// 斑块3-PAV
|
// 计算NTAV的(EEM-Lumen)求和/回撤中的图像数
|
||||||
new ReadingCalculateData (){QuestionType=QuestionType.Plaque3PVA,GetDecimalNullFun=GetPlaque3PVA},
|
new ReadingCalculateData (){QuestionType=QuestionType.NTAVEEMLumenSumOrRetraceImageCount,GetDecimalNullFun=GetNTAVEEMLumenSumOrRetraceImageCount},
|
||||||
|
|
||||||
|
// 冠状动脉粥样硬化体积百分比(PAV)
|
||||||
|
new ReadingCalculateData (){QuestionType=QuestionType.PAV,GetDecimalNullFun=GetPAV},
|
||||||
|
|
||||||
|
// 总动脉粥样硬化体积(NTAV)
|
||||||
|
new ReadingCalculateData (){QuestionType=QuestionType.NTAV,GetDecimalNullFun=GetNTAV},
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -561,177 +562,8 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 计算斑块数据统计和PVA数据
|
|
||||||
/// </summary>
|
|
||||||
/// <returns></returns>
|
|
||||||
public async Task CalculatePatchDataStatisticsAndPVA(ReadingCalculateDto inDto)
|
|
||||||
{
|
|
||||||
// 斑块的表格问题Id
|
|
||||||
var questionInfo = inDto.QuestionInfo.Where(x => x.LesionType == LesionType.PatchDataStatistics).FirstOrDefault();
|
|
||||||
|
|
||||||
// pAV 问题信息
|
|
||||||
var pAVquestionInfo = inDto.QuestionInfo.Where(x => x.LesionType == LesionType.PAV).FirstOrDefault();
|
|
||||||
|
|
||||||
|
|
||||||
// 测量值集合
|
|
||||||
var matchValuesAnswerList = inDto.QuestionInfo.Where(x => x.LesionType == LesionType.MatchValues).SelectMany(x => x.TableRowInfoList).ToList();
|
|
||||||
|
|
||||||
// 获取编号
|
|
||||||
var nums = matchValuesAnswerList.SelectMany(x => x.TableQuestionList).Where(x => x.QuestionMark == QuestionMark.PlaqueNumber).Select(x => int.Parse(x.Answer)).Distinct().OrderBy(x => x).ToList();
|
|
||||||
|
|
||||||
List<ReadingTableAnswerRowInfo> tableAnsweRowInfos = new List<ReadingTableAnswerRowInfo>();
|
|
||||||
List<ReadingTableQuestionAnswer> tableAnswers = new List<ReadingTableQuestionAnswer>();
|
|
||||||
|
|
||||||
foreach (var item in nums)
|
|
||||||
{
|
|
||||||
var newRowId = NewId.NextGuid();
|
|
||||||
|
|
||||||
var thisnumTableRows = inDto.QuestionInfo.Where(x => x.LesionType == LesionType.MatchValues).SelectMany(x => x.TableRowInfoList).Where(x => x.TableQuestionList.Any(y => y.QuestionMark == QuestionMark.PlaqueNumber && y.Answer == item.ToString())).ToList();
|
|
||||||
|
|
||||||
// 斑块数据统计
|
|
||||||
tableAnsweRowInfos.Add(new ReadingTableAnswerRowInfo()
|
|
||||||
{
|
|
||||||
Id = newRowId,
|
|
||||||
QuestionId = questionInfo!.QuestionId,
|
|
||||||
VisitTaskId = inDto.VisitTaskId,
|
|
||||||
TrialId = inDto.TrialId,
|
|
||||||
RowIndex = item,
|
|
||||||
IsCurrentTaskAdd = true,
|
|
||||||
BlindName = inDto.BlindName,
|
|
||||||
OrderMark = questionInfo.OrderMark,
|
|
||||||
FristAddTaskNum = inDto.VisitTaskNum,
|
|
||||||
FristAddTaskId = inDto.VisitTaskId,
|
|
||||||
RowMark = questionInfo.OrderMark + decimal.Parse(item.ToString()).GetLesionMark()
|
|
||||||
});
|
|
||||||
|
|
||||||
// 斑块
|
|
||||||
tableAnswers.Add(new ReadingTableQuestionAnswer()
|
|
||||||
{
|
|
||||||
Answer = item.ToString(),
|
|
||||||
Id = NewId.NextGuid(),
|
|
||||||
QuestionId = questionInfo!.QuestionId,
|
|
||||||
TrialId = inDto.TrialId,
|
|
||||||
VisitTaskId = inDto.VisitTaskId,
|
|
||||||
RowId = newRowId,
|
|
||||||
RowIndex = item,
|
|
||||||
TableQuestionId = await _readingTableQuestionTrialRepository.Where(x => x.ReadingQuestionId == questionInfo.QuestionId && x.QuestionMark == QuestionMark.PlaqueNumber).Select(x => x.Id).FirstOrDefaultAsync(),
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#region 数据计算
|
|
||||||
var emm = thisnumTableRows.SelectMany(x => x.TableQuestionList)
|
|
||||||
.Where(x => x.QuestionMark == QuestionMark.ElasticArea).Select(x => x.Answer.IsNullOrEmptyReturn0()).Sum().ToString();
|
|
||||||
|
|
||||||
var EEMLumen = thisnumTableRows.SelectMany(x => x.TableQuestionList)
|
|
||||||
.Where(x => x.QuestionMark == QuestionMark.ElasticAreaDiffValue).Select(x => x.Answer.IsNullOrEmptyReturn0()).Sum().ToString();
|
|
||||||
|
|
||||||
var pav = "";
|
|
||||||
|
|
||||||
if (emm != null && EEMLumen != null)
|
|
||||||
{
|
|
||||||
var emmNum = decimal.Round(decimal.Parse(emm ?? "0"));
|
|
||||||
var EEMLumenNum = decimal.Round(decimal.Parse(EEMLumen ?? "0"));
|
|
||||||
if (emmNum != 0)
|
|
||||||
{
|
|
||||||
pav = (EEMLumenNum * 100 / emmNum).ToString();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (inDto.DigitPlaces != -1)
|
|
||||||
{
|
|
||||||
emm = decimal.Round(decimal.Parse(emm ?? "0"), inDto.DigitPlaces).ToString("F" + inDto.DigitPlaces.ToString());
|
|
||||||
EEMLumen = decimal.Round(decimal.Parse(EEMLumen ?? "0"), inDto.DigitPlaces).ToString("F" + inDto.DigitPlaces.ToString());
|
|
||||||
pav = decimal.Round(decimal.Parse(pav ?? "0"), inDto.DigitPlaces).ToString("F" + inDto.DigitPlaces.ToString());
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region 冠状动脉粥样硬化体积百分比(PAV)
|
|
||||||
|
|
||||||
var newPAVRowId = NewId.NextGuid();
|
|
||||||
// 斑块数据统计
|
|
||||||
tableAnsweRowInfos.Add(new ReadingTableAnswerRowInfo()
|
|
||||||
{
|
|
||||||
Id = newPAVRowId,
|
|
||||||
QuestionId = pAVquestionInfo!.QuestionId,
|
|
||||||
VisitTaskId = inDto.VisitTaskId,
|
|
||||||
TrialId = inDto.TrialId,
|
|
||||||
RowIndex = item,
|
|
||||||
IsCurrentTaskAdd = true,
|
|
||||||
BlindName = inDto.BlindName,
|
|
||||||
OrderMark = pAVquestionInfo.OrderMark,
|
|
||||||
FristAddTaskNum = inDto.VisitTaskNum,
|
|
||||||
FristAddTaskId = inDto.VisitTaskId,
|
|
||||||
RowMark = pAVquestionInfo.OrderMark + decimal.Parse(item.ToString()).GetLesionMark()
|
|
||||||
});
|
|
||||||
|
|
||||||
// 斑块
|
|
||||||
tableAnswers.Add(new ReadingTableQuestionAnswer()
|
|
||||||
{
|
|
||||||
Answer = item.ToString(),
|
|
||||||
Id = NewId.NextGuid(),
|
|
||||||
QuestionId = pAVquestionInfo!.QuestionId,
|
|
||||||
TrialId = inDto.TrialId,
|
|
||||||
VisitTaskId = inDto.VisitTaskId,
|
|
||||||
RowId = newPAVRowId,
|
|
||||||
RowIndex = item,
|
|
||||||
TableQuestionId = await _readingTableQuestionTrialRepository.Where(x => x.ReadingQuestionId == pAVquestionInfo.QuestionId && x.QuestionMark == QuestionMark.PlaqueNumber).Select(x => x.Id).FirstOrDefaultAsync(),
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// PAV
|
|
||||||
tableAnswers.Add(new ReadingTableQuestionAnswer()
|
|
||||||
{
|
|
||||||
Answer = pav,
|
|
||||||
Id = NewId.NextGuid(),
|
|
||||||
QuestionId = pAVquestionInfo!.QuestionId,
|
|
||||||
TrialId = inDto.TrialId,
|
|
||||||
VisitTaskId = inDto.VisitTaskId,
|
|
||||||
RowId = newPAVRowId,
|
|
||||||
RowIndex = item,
|
|
||||||
TableQuestionId = await _readingTableQuestionTrialRepository.Where(x => x.ReadingQuestionId == pAVquestionInfo.QuestionId && x.QuestionMark == QuestionMark.PAV).Select(x => x.Id).FirstOrDefaultAsync(),
|
|
||||||
});
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
|
|
||||||
// EMM 求和
|
|
||||||
tableAnswers.Add(new ReadingTableQuestionAnswer()
|
|
||||||
{
|
|
||||||
Answer = emm,
|
|
||||||
QuestionId = questionInfo!.QuestionId,
|
|
||||||
TrialId = inDto.TrialId,
|
|
||||||
VisitTaskId = inDto.VisitTaskId,
|
|
||||||
RowId = newRowId,
|
|
||||||
RowIndex = item,
|
|
||||||
TableQuestionId = await _readingTableQuestionTrialRepository.Where(x => x.ReadingQuestionId == questionInfo.QuestionId && x.QuestionMark == QuestionMark.EEMSum).Select(x => x.Id).FirstOrDefaultAsync(),
|
|
||||||
});
|
|
||||||
|
|
||||||
// (EEM-Lumen)求和
|
|
||||||
tableAnswers.Add(new ReadingTableQuestionAnswer()
|
|
||||||
{
|
|
||||||
Answer = EEMLumen,
|
|
||||||
Id = NewId.NextGuid(),
|
|
||||||
QuestionId = questionInfo!.QuestionId,
|
|
||||||
TrialId = inDto.TrialId,
|
|
||||||
VisitTaskId = inDto.VisitTaskId,
|
|
||||||
RowId = newRowId,
|
|
||||||
RowIndex = item,
|
|
||||||
TableQuestionId = await _readingTableQuestionTrialRepository.Where(x => x.ReadingQuestionId == questionInfo.QuestionId && x.QuestionMark == QuestionMark.EEMSubtractLumenSum).Select(x => x.Id).FirstOrDefaultAsync(),
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
await _readingTableAnswerRowInfoRepository.BatchDeleteNoTrackingAsync(x => (x.QuestionId == questionInfo.QuestionId || x.QuestionId == pAVquestionInfo.QuestionId) && x.VisitTaskId == inDto.VisitTaskId);
|
|
||||||
await _readingTableQuestionAnswerRepository.BatchDeleteNoTrackingAsync(x => (x.QuestionId == questionInfo.QuestionId || x.QuestionId == pAVquestionInfo.QuestionId) && x.VisitTaskId == inDto.VisitTaskId);
|
|
||||||
await _readingTableAnswerRowInfoRepository.AddRangeAsync(tableAnsweRowInfos);
|
|
||||||
await _readingTableQuestionAnswerRepository.AddRangeAsync(tableAnswers);
|
|
||||||
await _readingTableQuestionAnswerRepository.SaveChangesAsync();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 验证访视提交
|
/// 验证访视提交
|
||||||
|
@ -744,132 +576,98 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取斑块1-PAV
|
/// 计算NTAV的EEM
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="inDto"></param>
|
/// <param name="inDto"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public async Task<decimal?> GetPlaque1PVA(ReadingCalculateDto inDto)
|
public async Task<decimal?> GetEEM(ReadingCalculateDto inDto)
|
||||||
{
|
{
|
||||||
return inDto.QuestionInfo.Where(x => x.LesionType == LesionType.PAV).SelectMany(x => x.TableRowInfoList).Where(x=>x.TableQuestionList.Any(y=>y.QuestionMark==QuestionMark.PlaqueNumber&&y.Answer.IsNullOrEmptyReturn0()==1)).SelectMany(x => x.TableQuestionList)
|
if (inDto.QuestionInfo.Where(x => x.LesionType == LesionType.MatchValues).SelectMany(x => x.TableRowInfoList).Count() == 0)
|
||||||
.Where(x => x.QuestionMark == QuestionMark.PAV).Select(x=>x.Answer).FirstIsNullReturnEmpty().IsNullOrEmptyReturn0();
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return inDto.QuestionInfo.Where(x => x.LesionType == LesionType.MatchValues).SelectMany(x => x.TableRowInfoList).SelectMany(x => x.TableQuestionList)
|
||||||
|
.Where(x => x.QuestionMark == QuestionMark.ElasticArea).Select(x => x.Answer.IsNullOrEmptyReturn0()).Sum();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取斑块2-PAV
|
/// 获取(EEM-Lumen)求和
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="inDto"></param>
|
/// <param name="inDto"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public async Task<decimal?> GetPlaque2PVA(ReadingCalculateDto inDto)
|
public async Task<decimal?> GetEEMLumenSum(ReadingCalculateDto inDto)
|
||||||
{
|
{
|
||||||
return inDto.QuestionInfo.Where(x => x.LesionType == LesionType.PAV).SelectMany(x => x.TableRowInfoList).Where(x => x.TableQuestionList.Any(y => y.QuestionMark == QuestionMark.PlaqueNumber && y.Answer.IsNullOrEmptyReturn0() == 2)).SelectMany(x => x.TableQuestionList)
|
if (inDto.QuestionInfo.Where(x => x.LesionType == LesionType.MatchValues).SelectMany(x => x.TableRowInfoList).Count() == 0)
|
||||||
.Where(x => x.QuestionMark == QuestionMark.PAV).Select(x => x.Answer).FirstIsNullReturnEmpty().IsNullOrEmptyReturn0();
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
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();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取斑块3-PAV
|
/// 计算NTAV的(EEM-Lumen)求和/回撤中的图像数
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="inDto"></param>
|
/// <param name="inDto"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public async Task<decimal?> GetPlaque3PVA(ReadingCalculateDto inDto)
|
public async Task<decimal?> GetNTAVEEMLumenSumOrRetraceImageCount(ReadingCalculateDto inDto)
|
||||||
{
|
{
|
||||||
return inDto.QuestionInfo.Where(x => x.LesionType == LesionType.PAV).SelectMany(x => x.TableRowInfoList).Where(x => x.TableQuestionList.Any(y => y.QuestionMark == QuestionMark.PlaqueNumber && y.Answer.IsNullOrEmptyReturn0() == 3)).SelectMany(x => x.TableQuestionList)
|
var eEMLumenSum = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.EEMLumenSum).Select(x => x.Answer).FirstOrDefault().IsNullOrEmptyReturn0();
|
||||||
.Where(x => x.QuestionMark == QuestionMark.PAV).Select(x => x.Answer).FirstIsNullReturnEmpty().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;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
///// <summary>
|
/// <summary>
|
||||||
///// 计算NTAV的EEM
|
/// 冠状动脉粥样硬化体积百分比(PAV)
|
||||||
///// </summary>
|
/// </summary>
|
||||||
///// <param name="inDto"></param>
|
/// <remarks>
|
||||||
///// <returns></returns>
|
/// (EEM-Lumen)求和/EEM求和✖️100,单位%
|
||||||
//public async Task<decimal?> GetEEM(ReadingCalculateDto inDto)
|
/// </remarks>
|
||||||
//{
|
/// <param name="inDto"></param>
|
||||||
// if (inDto.QuestionInfo.Where(x => x.LesionType == LesionType.MatchValues).SelectMany(x => x.TableRowInfoList).Count() == 0)
|
/// <returns></returns>
|
||||||
// {
|
public async Task<decimal?> GetPAV(ReadingCalculateDto inDto)
|
||||||
// return null;
|
{
|
||||||
// }
|
var eEMLumenSum = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.EEMLumenSum).Select(x => x.Answer).FirstOrDefault().IsNullOrEmptyReturn0();
|
||||||
// return inDto.QuestionInfo.Where(x => x.LesionType == LesionType.MatchValues).SelectMany(x => x.TableRowInfoList).SelectMany(x => x.TableQuestionList)
|
var eEMSum = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.EEMSum).Select(x => x.Answer).FirstOrDefault().IsNullOrEmptyReturn0();
|
||||||
// .Where(x => x.QuestionMark == QuestionMark.ElasticArea).Select(x => x.Answer.IsNullOrEmptyReturn0()).Sum();
|
|
||||||
|
|
||||||
//}
|
if (eEMSum == 0)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return eEMLumenSum / eEMSum * 100;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
///// <summary>
|
/// <summary>
|
||||||
///// 获取(EEM-Lumen)求和
|
/// 总动脉粥样硬化体积(NTAV)
|
||||||
///// </summary>
|
/// </summary>
|
||||||
///// <param name="inDto"></param>
|
/// <param name="inDto"></param>
|
||||||
///// <returns></returns>
|
/// <returns></returns>
|
||||||
//public async Task<decimal?> GetEEMLumenSum(ReadingCalculateDto inDto)
|
public async Task<decimal?> GetNTAV(ReadingCalculateDto inDto)
|
||||||
//{
|
{
|
||||||
// if (inDto.QuestionInfo.Where(x => x.LesionType == LesionType.MatchValues).SelectMany(x => x.TableRowInfoList).Count() == 0)
|
var result = await GetNTAVEEMLumenSumOrRetraceImageCount(inDto);
|
||||||
// {
|
|
||||||
// return null;
|
|
||||||
// }
|
|
||||||
// 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();
|
|
||||||
|
|
||||||
//}
|
var medianFrame = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.MedianFrame).Select(x => x.Answer).FirstOrDefault().IsNullOrEmptyReturn0();
|
||||||
|
if (result == null || medianFrame == 0)
|
||||||
///// <summary>
|
{
|
||||||
///// 计算NTAV的(EEM-Lumen)求和/回撤中的图像数
|
return null;
|
||||||
///// </summary>
|
}
|
||||||
///// <param name="inDto"></param>
|
else
|
||||||
///// <returns></returns>
|
{
|
||||||
//public async Task<decimal?> GetNTAVEEMLumenSumOrRetraceImageCount(ReadingCalculateDto inDto)
|
return result.Value * medianFrame;
|
||||||
//{
|
}
|
||||||
// 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;
|
|
||||||
|
|
||||||
//}
|
|
||||||
|
|
||||||
|
|
||||||
///// <summary>
|
|
||||||
///// 冠状动脉粥样硬化体积百分比(PAV)
|
|
||||||
///// </summary>
|
|
||||||
///// <remarks>
|
|
||||||
///// (EEM-Lumen)求和/EEM求和✖️100,单位%
|
|
||||||
///// </remarks>
|
|
||||||
///// <param name="inDto"></param>
|
|
||||||
///// <returns></returns>
|
|
||||||
//public async Task<decimal?> GetPAV(ReadingCalculateDto inDto)
|
|
||||||
//{
|
|
||||||
// var eEMLumenSum = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.EEMLumenSum).Select(x => x.Answer).FirstOrDefault().IsNullOrEmptyReturn0();
|
|
||||||
// var eEMSum = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.EEMSum).Select(x => x.Answer).FirstOrDefault().IsNullOrEmptyReturn0();
|
|
||||||
|
|
||||||
// if (eEMSum == 0)
|
|
||||||
// {
|
|
||||||
// return null;
|
|
||||||
// }
|
|
||||||
// else
|
|
||||||
// {
|
|
||||||
// return eEMLumenSum / eEMSum * 100;
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
|
|
||||||
///// <summary>
|
|
||||||
///// 总动脉粥样硬化体积(NTAV)
|
|
||||||
///// </summary>
|
|
||||||
///// <param name="inDto"></param>
|
|
||||||
///// <returns></returns>
|
|
||||||
//public async Task<decimal?> 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 将上一次的访视病灶添加到这一次
|
#region 将上一次的访视病灶添加到这一次
|
||||||
|
|
||||||
|
|
|
@ -449,17 +449,17 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
||||||
|
|
||||||
List<ReadingCalculateData> calculateList = new List<ReadingCalculateData>()
|
List<ReadingCalculateData> calculateList = new List<ReadingCalculateData>()
|
||||||
{
|
{
|
||||||
//// 匹配动脉段最小FCT
|
// 匹配动脉段最小FCT
|
||||||
//new ReadingCalculateData (){QuestionType=QuestionType.MinFCT,GetDecimalNullFun=GetAllMinFCT},
|
new ReadingCalculateData (){QuestionType=QuestionType.MinFCT,GetDecimalNullFun=GetAllMinFCT},
|
||||||
|
|
||||||
// // 平均最小FCT
|
// 平均最小FCT
|
||||||
// new ReadingCalculateData (){QuestionType=QuestionType.AverageMinFCT,GetDecimalNullFun=GetAvgMinFCT},
|
new ReadingCalculateData (){QuestionType=QuestionType.AverageMinFCT,GetDecimalNullFun=GetAvgMinFCT},
|
||||||
|
|
||||||
// // 脂质角度平均值
|
// 脂质角度平均值
|
||||||
// new ReadingCalculateData (){QuestionType=QuestionType.AvgLipidAngle,GetDecimalNullFun=GetAvgMinLipidAngle},
|
new ReadingCalculateData (){QuestionType=QuestionType.AvgLipidAngle,GetDecimalNullFun=GetAvgMinLipidAngle},
|
||||||
|
|
||||||
// // 脂质角度最大值
|
// 脂质角度最大值
|
||||||
// new ReadingCalculateData (){QuestionType=QuestionType.MaxLipidAngle,GetDecimalNullFun=GetAllMaxLipidAngle},
|
new ReadingCalculateData (){QuestionType=QuestionType.MaxLipidAngle,GetDecimalNullFun=GetAllMaxLipidAngle},
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1777,29 +1777,19 @@ public enum SUVChangeVSBaseline
|
||||||
TriggeringIRECSIT = 8,
|
TriggeringIRECSIT = 8,
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 斑块数据统计
|
/// FCT
|
||||||
/// </summary>
|
/// </summary>
|
||||||
PatchDataStatistics = 101,
|
FCT = 101,
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 各匹配片段测量值
|
/// 各匹配片段测量值
|
||||||
/// </summary>
|
/// </summary>
|
||||||
MatchValues = 102,
|
MatchValues = 102,
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 冠状动脉粥样硬化体积百分比(PAV)
|
|
||||||
/// </summary>
|
|
||||||
PAV = 103,
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 脂质角度
|
/// 脂质角度
|
||||||
/// </summary>
|
/// </summary>
|
||||||
LipidAngle =111,
|
LipidAngle = 103,
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// FCT
|
|
||||||
/// </summary>
|
|
||||||
FCT = 112,
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2076,26 +2066,6 @@ public enum SUVChangeVSBaseline
|
||||||
/// </summary>
|
/// </summary>
|
||||||
ElasticAreaDiffValue = 1003,
|
ElasticAreaDiffValue = 1003,
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 斑块编号
|
|
||||||
/// </summary>
|
|
||||||
PlaqueNumber = 1004,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// EEM求和
|
|
||||||
/// </summary>
|
|
||||||
EEMSum = 1005,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// (EEM-Lumen)求和
|
|
||||||
/// </summary>
|
|
||||||
EEMSubtractLumenSum = 1006,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 冠状动脉粥样硬化体积百分比(PAV)
|
|
||||||
/// </summary>
|
|
||||||
PAV = 1007,
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// FCT第一次测量值
|
/// FCT第一次测量值
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -2126,26 +2096,6 @@ public enum SUVChangeVSBaseline
|
||||||
/// </summary>
|
/// </summary>
|
||||||
LipidAngle = 1016,
|
LipidAngle = 1016,
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 匹配动脉段最小FCT
|
|
||||||
/// </summary>
|
|
||||||
MiniMumFCT = 1017,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 平均最小FCT
|
|
||||||
/// </summary>
|
|
||||||
AvgMinFCT=1018,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 脂质角度平均值
|
|
||||||
/// </summary>
|
|
||||||
AvgLipidAngle = 1019,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 脂质角度最大值
|
|
||||||
/// </summary>
|
|
||||||
MaxAvgLipidAngle = 1020,
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -2508,34 +2458,65 @@ public enum SUVChangeVSBaseline
|
||||||
ImageQualityProblem = 67,
|
ImageQualityProblem = 67,
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 斑块1-PAV
|
/// 回撤中的图像帧数
|
||||||
/// </summary>
|
/// </summary>
|
||||||
Plaque1PVA = 1003,
|
RetracedFramesNumber = 1003,
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 斑块2-PAV
|
/// 队列分析图像帧数的中位数
|
||||||
/// </summary>
|
/// </summary>
|
||||||
Plaque2PVA = 1004,
|
MedianFrame = 1004,
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 斑块3-PAV
|
/// EEM求和
|
||||||
/// </summary>
|
/// </summary>
|
||||||
Plaque3PVA = 1005,
|
EEMSum = 1005,
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 斑块1-匹配动脉段最小FCT
|
/// (EEM-Lumen)求和
|
||||||
/// </summary>
|
/// </summary>
|
||||||
Plaque1MinFCT = 1006,
|
EEMLumenSum = 1006,
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 斑块2-匹配动脉段最小FCT
|
/// 计算NTAV的(EEM-Lumen)求和/回撤中的图像数
|
||||||
/// </summary>
|
/// </summary>
|
||||||
Plaque2MinFCT = 1007,
|
NTAVEEMLumenSumOrRetraceImageCount = 1007,
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 斑块3-匹配动脉段最小FCT
|
/// 冠状动脉粥样硬化体积百分比(PAV)
|
||||||
/// </summary>
|
/// </summary>
|
||||||
Plaque3MinFCT = 1008,
|
PAV = 1008,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 总动脉粥样硬化体积(NTAV)
|
||||||
|
/// </summary>
|
||||||
|
NTAV = 1009,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 匹配动脉段最小的FCT
|
||||||
|
/// </summary>
|
||||||
|
MinFCT = 1010,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 平均最小FCT
|
||||||
|
/// </summary>
|
||||||
|
AverageMinFCT = 1011,
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 脂质角度
|
||||||
|
/// </summary>
|
||||||
|
LipidAngle = 1012,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 脂质角度平均值
|
||||||
|
/// </summary>
|
||||||
|
AvgLipidAngle = 1013,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 脂质角度最大值
|
||||||
|
/// </summary>
|
||||||
|
MaxLipidAngle = 1014,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue