代码修改

This commit is contained in:
he
2023-04-10 17:21:42 +08:00
parent 9d289bede7
commit b00ac06cee
4 changed files with 252 additions and 44 deletions
@@ -53,22 +53,62 @@ namespace IRaCIS.Core.Application.ViewModel
/// <summary>
/// 基线未选择任何靶病灶
/// </summary>
public bool ExistsTargetLesion { get; set; }
public bool NotExistsTargetLesion { get; set; }
/// <summary>
/// 上一访视评估为iCPD
/// 上一访视评估
/// </summary>
public bool LastTaskIsICPD { get; set; }
public string LastTaskTarget { get; set; }
/// <summary>
/// 满足RECISTPD
/// </summary>
public bool MeetRECISTPD { get; set; }
/// <summary>
/// 本次访视SOD增加不小于5mm
/// </summary>
public bool SODAddGreaterThan5 { get; set; }
/// <summary>
/// 比整体访视期间最低点SOD增加≥20 %
/// </summary>
public bool LowSodAddGreaterThan20Percent { get; set; }
/// <summary>
/// 比整体访视期间最低点SOD绝对增加值≥5 mm
/// </summary>
public bool LowSodAddGreaterThan5 { get; set; }
/// <summary>
/// 当前访视至少有一个“存在”状态的靶病灶
/// </summary>
public bool HaveExistLesion { get; set; }
/// <summary>
/// 有任一靶病灶为NE状态
/// </summary>
public bool HaveNeLesion { get; set; }
/// <summary>
/// 所有非淋巴结靶病灶消失,径线总和为0
/// </summary>
public bool AllLesionVanish { get; set; }
/// <summary>
/// 所有淋巴结靶病灶的短径缩小到 < 10 mm
/// </summary>
public bool AllMinorAxisLessThan10 { get; set; }
/// <summary>
/// 与基线期SOD相比减小≥30 %
/// </summary>
public bool BaseLineLessThan30 { get; set; }
}
/// <summary>
/// 新靶病灶评估Dto
/// </summary>
@@ -1524,55 +1524,166 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
lastVisitTaskId = lastTaskId;
return lastTaskId;
}
}
#endregion
#region
#region IRECIST计算
#region IRECIST靶病灶评估
/// <summary>
/// 获取IRECIST靶病灶评估
/// </summary>
/// <param name="inDto"></param>
/// <remarks>
/// if(基线没有靶病灶)
/// {
/// 靶病灶疗效为 ND
/// }else if ((上一访视评估为iCPD && 本次访视满足RECIST1.1的PD条件)|| 上一访视评估为iUPD || 本次访视SOD增加不小于5mm)
/// {
/// 靶病灶疗效为 ICPD
/// } else if (本次访视满足RECIST1.1的PD条件 && (比整体访视期间最低点SOD增加≥20 % && 比整体访视期间最低点SOD绝对增加值≥5 mm)|| (前一访视评估为iCR && 当前访视至少有一个“存在”状态的靶病灶))
/// {
/// 靶病灶疗效为 iUPD
/// } else if (有任一靶病灶为NE状态)
/// {
/// 靶病灶疗效为 NE
/// }
/// else if (所有非淋巴结靶病灶消失,径线总和为0 mm && 所有淋巴结靶病灶的短径缩小到 < 10 mm)
/// {
/// 靶病灶疗效为 iCR
/// } else if (与基线期SOD相比减小≥30 %)
/// {
/// 靶病灶疗效为 iPR
/// }
/// else
/// {
/// 靶病灶疗效为 iSD
/// }
///
/// </remarks>
/// <returns></returns>
public async Task<string> GetIRECISTTargetLesionEvaluate(ReadingCalculateDto inDto)
{
//if(基线没有靶病灶)
//{
// 靶病灶疗效为 ND
//}else if ((上一访视评估为iCPD && 本次访视满足RECIST1.1的PD条件)|| 上一访视评估为iUPD || 本次访视SOD增加不小于5mm)
//{
// 靶病灶疗效为 ICPD
//} else if (本次访视满足RECIST1.1的PD条件 && (比整体访视期间最低点SOD增加≥20 % && 比整体访视期间最低点SOD绝对增加值≥5 mm)|| (前一访视评估为iCR && 当前访视至少有一个“存在”状态的靶病灶))
//{
// 靶病灶疗效为 iUPD
//} else if (有任一靶病灶为NE状态)
// {
// 靶病灶疗效为 NE
//}
// else if (所有非淋巴结靶病灶消失,径线总和为0 mm && 所有淋巴结靶病灶的短径缩小到 < 10 mm)
//{
// 靶病灶疗效为 iCR
//} else if (与基线期SOD相比减小≥30 %)
//{
// 靶病灶疗效为 iPR
//}
//else
// {
// 靶病灶疗效为 iSD
//}
var tableQuestion = inDto.QuestionInfo.Where(x => x.LesionType == LesionType.TargetLesion).SelectMany(x => x.TableRowInfoList).ToList();
var lastVisitTaskId = await GetLastVisitTaskId(inDto);
var tumorQuestionId = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.Tumor).Select(x => x.QuestionId).FirstOrDefault();
//if()
return string.Empty;
var sodQuestionId = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.SOD).Select(x => x.QuestionId).FirstOrDefault();
IRECISTTargetLesionDto resultData = new IRECISTTargetLesionDto()
{
// 基线没有靶病灶
NotExistsTargetLesion = tableQuestion.Count() == 0,
// 上一访视评估
LastTaskTarget = (await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == lastVisitTaskId && x.ReadingQuestionTrialId == tumorQuestionId)
.Select(x => x.Answer).FirstOrDefaultAsync()) ?? string.Empty,
// 满足RECISTPD
MeetRECISTPD = (await GetTargetLesionEvaluate(inDto)) == TargetAssessment.PD.GetEnumInt(),
// 本次访视SOD增加不小于5mm
SODAddGreaterThan5 = await GetSODData(inDto) - (await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == lastVisitTaskId && x.ReadingQuestionTrialId == sodQuestionId)
.Select(x => x.Answer).FirstOrDefaultAsync()).IsNullOrEmptyReturn0() >= 5,
//比整体访视期间最低点SOD增加≥20 %
LowSodAddGreaterThan20Percent = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.LowPercent).Sum(x => x.Answer.IsNullOrEmptyReturn0()) >= 20,
// 比整体访视期间最低点SOD绝对增加值≥5 mm
LowSodAddGreaterThan5 = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.LowestIncrease).Sum(x => x.Answer.IsNullOrEmptyReturn0()) >= 5,
// 当前访视至少有一个“存在”状态的靶病灶
HaveExistLesion = tableQuestion.SelectMany(x => x.TableQuestionList).Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(TargetState.Exist)),
// 有任一靶病灶为NE状态
HaveNeLesion = tableQuestion.SelectMany(x => x.TableQuestionList).Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(TargetState.UnableEvaluate)),
// 所有非淋巴结靶病灶消失,径线总和为0
AllLesionVanish = true,
// 所有淋巴结靶病灶的短径缩小到 < 10 mm
AllMinorAxisLessThan10 = true,
// 与基线期SOD相比减小≥30 %
BaseLineLessThan30 = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.SODPercent).Sum(x => x.Answer.IsNullOrEmptyReturn0()) <= -30,
};
foreach (var item in tableQuestion)
{
if (item.TableQuestionList.Any(x => x.QuestionMark == QuestionMark.IsLymph && x.Answer.EqEnum(YesOrNoOrNa.Yes)))
{
// 淋巴结的短径
resultData.AllMinorAxisLessThan10 = resultData.AllMinorAxisLessThan10 && (item.TableQuestionList.Where(x => x.QuestionMark == QuestionMark.ShortAxis).Select(x => x.Answer).FirstOrDefault()).IsNullOrEmptyReturn0() < 10;
}
if (item.TableQuestionList.Any(x => x.QuestionMark == QuestionMark.IsLymph && !x.Answer.EqEnum(YesOrNoOrNa.Yes)))
{
resultData.AllLesionVanish = resultData.AllLesionVanish && item.TableQuestionList.Where(x => x.QuestionMark == QuestionMark.State).Select(x => x.Answer).FirstOrDefault() == TargetState.Loss.GetEnumInt();
}
}
TargetAssessment result = TargetAssessment.SD;
// if(基线没有靶病灶)
if (resultData.NotExistsTargetLesion)
{
// 靶病灶疗效为 ND
result = TargetAssessment.ND;
}
// }else if ((上一访视评估为iCPD && 本次访视满足RECIST1.1的PD条件)|| 上一访视评估为iUPD || 本次访视SOD增加不小于5mm)
else if ((resultData.LastTaskTarget.EqEnum(OverallAssessment.iCPD) && resultData.MeetRECISTPD) || resultData.LastTaskTarget.EqEnum(OverallAssessment.iUPD) || resultData.SODAddGreaterThan5)
{
// 靶病灶疗效为 ICPD
result = TargetAssessment.iCPD;
}
// } else if (本次访视满足RECIST1.1的PD条件 && (比整体访视期间最低点SOD增加≥20 % && 比整体访视期间最低点SOD绝对增加值≥5 mm)|| (前一访视评估为iCR && 当前访视至少有一个“存在”状态的靶病灶))
else if(resultData.MeetRECISTPD&&(resultData.LowSodAddGreaterThan20Percent&&resultData.LowSodAddGreaterThan5)|| (resultData.LastTaskTarget.EqEnum(OverallAssessment.iCR)&&resultData.HaveExistLesion))
{
// 靶病灶疗效为 iUPD
result = TargetAssessment.iUPD;
}
// else if (有任一靶病灶为NE状态)
else if(resultData.HaveNeLesion)
{
// 靶病灶疗效为 NE
result = TargetAssessment.NE;
}
// else if (所有非淋巴结靶病灶消失,径线总和为0 mm && 所有淋巴结靶病灶的短径缩小到 < 10 mm)
else if(resultData.AllLesionVanish&&resultData.AllMinorAxisLessThan10)
{
// 靶病灶疗效为 iCR
result = TargetAssessment.iCR;
}
// else if (与基线期SOD相比减小≥30 %)
else if(resultData.BaseLineLessThan30)
{
// 靶病灶疗效为 iPR
result = TargetAssessment.iPR;
}
// else
else
{
// 靶病灶疗效为 iSD
result = TargetAssessment.iSD;
}
return result.GetEnumInt();
}
#endregion
#region IRECIST非靶病灶评估
#endregion
/// <summary>
/// 获取新靶病灶评估
@@ -1611,6 +1722,8 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
return string.Empty;
}
#endregion
#region
@@ -1848,7 +1961,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
}
}
//if(上次访视点评估是CR
if (resultData.LastTargetLesionEvaluate.EqEnum(TargetAssessment.CR))
if (resultData.LastTargetLesionEvaluate.EqEnum(OverallAssessment.CR))
{
//if (当前访视点淋巴结病灶,至少一个淋巴结靶病灶短径≥10 mm 并且该淋巴结靶病灶短径绝对增加值≥5 mm)
// 换句话说 就是 短径≥10 的病灶 和 短径增加值≥5的病灶 的交集数量大于0