融合修改

This commit is contained in:
he
2024-02-26 17:15:43 +08:00
parent 552e7a430d
commit 9eabd9031b
4 changed files with 141 additions and 7 deletions
@@ -15,5 +15,12 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate.Interface
/// <param name="inDto"></param>
/// <returns></returns>
Task CalculateTargetLesionStatus(CalculateTargetLesionStatusInDto inDto);
/// <summary>
/// 计算靶病灶融合后状态
/// </summary>
/// <param name="inDto"></param>
/// <returns></returns>
Task CalculateMergeTargetLesionStatus(CalculateTargetLesionStatusInDto inDto);
}
}
@@ -869,11 +869,117 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
}
/// <summary>
/// 计算靶病灶状态
/// 计算融合靶病灶状态
/// </summary>
/// <param name="inDto"></param>
/// <returns></returns>
public async Task CalculateTargetLesionStatus(CalculateTargetLesionStatusInDto inDto)
public async Task CalculateMergeTargetLesionStatus(CalculateTargetLesionStatusInDto inDto)
{
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 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 == (int)Math.Floor(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 == (int)Math.Floor(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();
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 lowPPDInfo = await GetLowPPDInfo(new GetPPDInfoInDto()
{
RowIndex = (int)Math.Floor(inDto.RowNumber),
VisitTaskId = inDto.VisitTaskId,
QuestionId = inDto.QuestionId,
});
if (lowPPDInfo.NadirPPD != 0)
{
//当前融合靶病灶LDi>15 mm &&
//(当前融合靶病灶的ppd-最低点PPD)/最低点PPD ≥50 %
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()
}
);
}
}
}
}
}
/// <summary>
/// 计算靶病灶状态
/// </summary>
/// <param name="inDto"></param>
/// <returns></returns>
public async Task CalculateTargetLesionStatus(CalculateTargetLesionStatusInDto inDto)
{
if (inDto.RowNumber % 1 != 0)
{