Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
commit
8dec77f30a
|
@ -22,6 +22,11 @@ namespace IRaCIS.Core.Application.ViewModel
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class GetSplitPPdInDto
|
||||||
|
{
|
||||||
|
public Guid RowId { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
public class ReadingTaskQuestionAnswerDto : ReadingTaskQuestionAnswer
|
public class ReadingTaskQuestionAnswerDto : ReadingTaskQuestionAnswer
|
||||||
{
|
{
|
||||||
public QuestionType QuestionType { get; set; }
|
public QuestionType QuestionType { get; set; }
|
||||||
|
|
|
@ -13,6 +13,7 @@ using MassTransit;
|
||||||
using System.Reflection.Metadata.Ecma335;
|
using System.Reflection.Metadata.Ecma335;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using NPOI.SS.Formula.Functions;
|
using NPOI.SS.Formula.Functions;
|
||||||
|
using DocumentFormat.OpenXml.Drawing.Charts;
|
||||||
|
|
||||||
namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
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();
|
var stateQuestion = await _readingTableQuestionTrialRepository.Where(x => x.ReadingQuestionId == targetQuestion.Id && x.QuestionMark == QuestionMark.State).FirstOrDefaultAsync();
|
||||||
if (stateQuestion != null)
|
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 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问题
|
// 找到ppd问题
|
||||||
var ppdQuestion = await _readingTableQuestionTrialRepository.Where(x => x.ReadingQuestionId == targetQuestion.Id && x.QuestionMark == QuestionMark.PPD).FirstOrDefaultAsync();
|
var ppdQuestion = await _readingTableQuestionTrialRepository.Where(x => x.ReadingQuestionId == targetQuestion.Id && x.QuestionMark == QuestionMark.PPD).FirstOrDefaultAsync();
|
||||||
|
|
||||||
if(ppdQuestion!=null)
|
if(ppdQuestion!=null)
|
||||||
{
|
{
|
||||||
var ppdAnswerList= await _readingTableQuestionAnswerRepository.Where(x => x.VisitTaskId == inDto.VisitTaskId && x.TableQuestionId == stateQuestion.Id)
|
var ppdAnswerList= await _readingTableQuestionAnswerRepository.Where(x =>
|
||||||
.Where(x=> x.RowIndex >= (int)Math.Floor(inDto.RowNumber) && x.RowIndex< ((int)Math.Floor(inDto.RowNumber)+1))
|
x.VisitTaskId == inDto.VisitTaskId &&
|
||||||
.Select(x => x.Answer).ToListAsync();
|
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 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 将上一次的访视病灶添加到这一次
|
#region 将上一次的访视病灶添加到这一次
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
Loading…
Reference in New Issue