代码修改

IRC_NewDev
he 2024-01-31 10:18:23 +08:00
parent 2f224047bc
commit bf54bcfd9b
2 changed files with 118 additions and 3 deletions

View File

@ -22,6 +22,11 @@ namespace IRaCIS.Core.Application.ViewModel
}
public class GetSplitPPdInDto
{
public Guid RowId { get; set; }
}
public class ReadingTaskQuestionAnswerDto : ReadingTaskQuestionAnswer
{
public QuestionType QuestionType { get; set; }

View File

@ -13,6 +13,7 @@ using MassTransit;
using System.Reflection.Metadata.Ecma335;
using System.Linq;
using NPOI.SS.Formula.Functions;
using DocumentFormat.OpenXml.Drawing.Charts;
namespace IRaCIS.Core.Application.Service.ReadingCalculate
{
@ -885,19 +886,106 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
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 ppdAnswerList= await _readingTableQuestionAnswerRepository.Where(x => x.VisitTaskId == inDto.VisitTaskId && x.TableQuestionId == stateQuestion.Id)
.Where(x=> x.RowIndex >= (int)Math.Floor(inDto.RowNumber) && x.RowIndex< ((int)Math.Floor(inDto.RowNumber)+1))
.Select(x => x.Answer).ToListAsync();
var ppdAnswerList= await _readingTableQuestionAnswerRepository.Where(x =>
x.VisitTaskId == inDto.VisitTaskId &&
x.ReadingTableQuestionTrial.QuestionMark == QuestionMark.PPD &&
x.QuestionId == targetQuestion.Id &&
x.RowIndex >= (int)Math.Floor(inDto.RowNumber) && x.RowIndex < ((int)Math.Floor(inDto.RowNumber) + 1)
).Select(x => x.Answer).ToListAsync();
var allPPd = ppdAnswerList.Select(x => x.IsNullOrEmptyReturn0()).Sum();
// 是否符合疾病进展
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)
{
//15mm < 当前靶病灶LDi≤20mm &&
//&& 相比最低点PPD增加百分比 ≥50 &&
//(相比PPD最低点LDi增加值 ≥5 mm
//or相比PPD最低点SDi增加值≥5 mm)
if (15 < majorAxis && majorAxis <= 20 &&
(allPPd - lowPPDInfo.NadirPPD) * 100 / lowPPDInfo.NadirPPD >= 50 &&
(majorAxis - lowPPDInfo.LowPPDLDi >= 5 ||
shortAxis - lowPPDInfo.LowPPDSDi >= 5)
)
{
accord = true;
}
//当前靶病灶LDi>20 mm
//相比最低点PPD增加百分比 ≥50
// (相比PPD最低点LDi增加值 ≥10 mm
// 或者相比PPD最低点SDi增加值Sdi ≥10 mm)
if ( majorAxis > 20 &&
(allPPd - lowPPDInfo.NadirPPD) * 100 / lowPPDInfo.NadirPPD >= 50 &&
(majorAxis - lowPPDInfo.LowPPDLDi >= 10 ||
shortAxis - lowPPDInfo.LowPPDSDi >= 10)
)
{
accord = true;
}
}
// 符合疾病进展
if (accord)
{
await _readingTableQuestionAnswerRepository.UpdatePartialFromQueryAsync(x =>
x.VisitTaskId == inDto.VisitTaskId &&
x.RowIndex == (int)Math.Floor(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 == (int)Math.Floor(inDto.RowNumber) &&
x.ReadingTableQuestionTrial.QuestionMark == QuestionMark.State &&
x.QuestionId == targetQuestion.Id, x => new ReadingTableQuestionAnswer()
{
Answer = TargetState.Exist.GetEnumInt()
}
);
}
}
@ -910,6 +998,28 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
}
/// <summary>
/// 获取分裂病灶的PPd之和 不包括当前的主病灶
/// </summary>
/// <returns></returns>
[HttpPost]
public async Task<decimal> GetSplitPPdSum(GetSplitPPdInDto inDto)
{
var rowinfo = await _readingTableAnswerRowInfoRepository.Where(x => x.Id == inDto.RowId).FirstNotNullAsync();
var ppdAnswerList = await _readingTableQuestionAnswerRepository.Where(x =>
x.VisitTaskId == rowinfo.VisitTaskId &&
x.ReadingTableQuestionTrial.QuestionMark == QuestionMark.PPD &&
x.QuestionId == rowinfo.QuestionId &&
x.RowIndex > (int)Math.Floor(rowinfo.RowIndex) && x.RowIndex < ((int)Math.Floor(rowinfo.RowIndex) + 1)
).Select(x => x.Answer).ToListAsync();
var allPPd = ppdAnswerList.Select(x => x.IsNullOrEmptyReturn0()).Sum();
return allPPd;
}
#region 将上一次的访视病灶添加到这一次
/// <summary>