自动计算触发

IRC_NewDev
he 2024-04-11 10:41:13 +08:00
parent f415c03daa
commit 6061cf5d93
7 changed files with 288 additions and 77 deletions

View File

@ -2038,6 +2038,13 @@
<param name="inDto"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.Service.ReadingCalculate.LuganoCalculateService.GetSpleenLength(IRaCIS.Core.Application.Service.Reading.Dto.ReadingCalculateDto)">
<summary>
获取脾脏垂直径
</summary>
<param name="inDto"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.Service.ReadingCalculate.LuganoCalculateService.CompareBaselineSPD(IRaCIS.Core.Application.Service.Reading.Dto.ReadingCalculateDto)">
<summary>
与基线相比SPD变化的百分比
@ -2095,6 +2102,13 @@
<param name="visitTaskId"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.Service.ReadingCalculate.LuganoCalculateService.GetSplenicStatus(IRaCIS.Core.Application.Service.Reading.Dto.ReadingCalculateDto)">
<summary>
获取脾脏状态
</summary>
<param name="inDto"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.Service.ReadingCalculate.LuganoCalculateService.GetSplenicEvaluation(IRaCIS.Core.Application.Service.Reading.Dto.ReadingCalculateDto)">
<summary>
获取脾脏评估
@ -13771,6 +13785,7 @@
保存任务问题 带动态稽查参数
</summary>
<param name="inDto"></param>
<param name="param">请求类型</param>
<returns></returns>
</member>
<member name="M:IRaCIS.Application.Services.ReadingImageTaskService.ChangeDicomReadingQuestionAnswer(IRaCIS.Core.Application.Service.Reading.Dto.ChangeDicomReadingQuestionAnswerInDto)">
@ -13789,7 +13804,7 @@
</member>
<member name="M:IRaCIS.Application.Services.ReadingImageTaskService.SubmitTableQuestion(IRaCIS.Core.Application.Service.Reading.Dto.SubmitTableQuestionInDto)">
<summary>
提交表格问题答案 提交病灶
提交表格问题答案 提交病灶 保存病灶
</summary>
<param name="inDto"></param>
<returns></returns>

View File

@ -222,7 +222,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public Arm ArmEnum { get; set; }
public ComputationTrigger ComputationTrigger { get; set; } = ComputationTrigger.Lesion;
public ComputationTrigger ComputationTrigger { get; set; }
/// <summary>
/// 是否修改其他任务
@ -353,7 +353,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public QuestionType QuestionType { get; set; }
public ComputationTrigger? ComputationTrigger { get; set; }
public List<ComputationTrigger> ComputationTriggerList { get; set; }=new List<ComputationTrigger>();
public Func<ReadingCalculateDto, Task<decimal>> GetDecimalFun { get; set; }

View File

@ -588,8 +588,9 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
{
public Guid VisitTaskId { get; set; }
public ComputationTrigger ComputationTrigger { get; set; }
public bool UpdateMark { get; set; } = false;
public bool UpdateMark { get; set; } = false;
public List<ChangeDicomReadingQuestionAnswerDto> Answers { get; set; }
@ -2086,7 +2087,9 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
{
public Guid QuestionId { get; set; }
public Guid? OrganInfoId { get; set; }
public ComputationTrigger ComputationTrigger { get; set; } = ComputationTrigger.CTSave;
public Guid? OrganInfoId { get; set; }
public int? NumberOfFrames { get; set; }

View File

@ -1637,7 +1637,7 @@ namespace IRaCIS.Application.Services
{
IsChangeOtherTask = false,
VisitTaskId = inDto.VisitTaskId,
ComputationTrigger = ComputationTrigger.Lesion,
ComputationTrigger = ComputationTrigger.MergeLesion,
});
// 保存完了计算疾病进展
@ -1746,19 +1746,32 @@ namespace IRaCIS.Application.Services
/// 保存任务问题 带动态稽查参数
/// </summary>
/// <param name="inDto"></param>
/// <param name="param">请求类型</param>
/// <returns></returns>
[Route("/SaveTaskQuestion/{param}")]
[HttpPost]
public async Task<IResponseOutput> SaveTaskQuestion(ChangeDicomReadingQuestionAnswerInDto inDto, string param)
{
var taskinfo = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).Include(x => x.TrialReadingCriterion).FirstNotNullAsync();
var result = await this.SaveImageQuality(inDto);
// 保存脾尖或者脾底进行计算
if (taskinfo.TrialReadingCriterion.CriterionType == CriterionType.Lugano2014 && (param == "4" || param == "5"))
{
await _luganoCalculateService.SaveSplenicCalculate(inDto.VisitTaskId);
}
try
{
param = param == string.Empty ? "0" : param;
inDto.ComputationTrigger = (ComputationTrigger)int.Parse(param);
}
catch (Exception)
{
}
var result = await this.SaveImageQuality(inDto);
// 自动计算
await this._readingCalculateService.CalculateTask(new CalculateTaskInDto()
{
IsChangeOtherTask = false,
VisitTaskId = inDto.VisitTaskId,
ComputationTrigger = inDto.ComputationTrigger,
});
return result;
}
@ -2055,7 +2068,7 @@ namespace IRaCIS.Application.Services
{
IsChangeOtherTask = false,
VisitTaskId = inDto.VisitTaskId,
ComputationTrigger=ComputationTrigger.Lesion,
ComputationTrigger=ComputationTrigger.RemoveLesion,
});
@ -2078,7 +2091,7 @@ namespace IRaCIS.Application.Services
/// <summary>
/// 提交表格问题答案 提交病灶
/// 提交表格问题答案 提交病灶 保存病灶
/// </summary>
/// <param name="inDto"></param>
/// <returns></returns>
@ -2453,7 +2466,7 @@ namespace IRaCIS.Application.Services
{
IsChangeOtherTask = false,
VisitTaskId = inDto.VisitTaskId,
ComputationTrigger = ComputationTrigger.Lesion,
ComputationTrigger = inDto.ComputationTrigger,
});
// 保存完了计算疾病进展

View File

@ -154,7 +154,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
{
IsChangeOtherTask = false,
VisitTaskId = inDto.VisitTaskId,
ComputationTrigger = ComputationTrigger.Report,
ComputationTrigger = ComputationTrigger.InitialCalculation,
});
}
}
@ -209,7 +209,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
{
await service.CalculateTask(new CalculateTaskInDto()
{
ComputationTrigger= ComputationTrigger.Report,
ComputationTrigger= ComputationTrigger.InitialCalculation,
VisitTaskId = inDto.VisitTaskId
});
}

View File

@ -513,88 +513,81 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
List<ReadingCalculateData> calculateList = new List<ReadingCalculateData>()
{
/*
*
* PET-CT FDG-PETNE
*
*
*
*
*
*
*
*/
// 是否存在Pet
new ReadingCalculateData (){QuestionType=QuestionType.ExistPET,GetStringFun=GetExistPET},
new ReadingCalculateData (){QuestionType=QuestionType.ExistPET,GetStringFun=GetExistPET ,ComputationTriggerList=new List<ComputationTrigger>(){ ComputationTrigger.InitialCalculation, } },
//垂直径乘积之和SPD
new ReadingCalculateData (){QuestionType=QuestionType.SPD,GetDecimalFun=GetSPD},
new ReadingCalculateData (){QuestionType=QuestionType.SPD,GetDecimalFun=GetSPD,ComputationTriggerList=new List<ComputationTrigger>(){ ComputationTrigger.InitialCalculation, ComputationTrigger.CTSave,ComputationTrigger.RemoveLesion,}},
// 与基线相比SPD变化的百分比
new ReadingCalculateData (){QuestionType=QuestionType.SPDChange,GetStringFun=CompareBaselineSPD},
new ReadingCalculateData (){QuestionType=QuestionType.SPDChange,GetStringFun=CompareBaselineSPD,ComputationTriggerList=new List<ComputationTrigger>(){ ComputationTrigger.InitialCalculation, ComputationTrigger.CTSave,ComputationTrigger.RemoveLesion,}},
// 脾脏垂直径
new ReadingCalculateData (){QuestionType=QuestionType.SpleenLength,GetDecimalNullFun=GetSpleenLength,ComputationTriggerList=new List<ComputationTrigger>(){ ComputationTrigger.SplenicApexPosition,ComputationTrigger.PositionSpleenFloor,}},
// 与基线相比脾肿大增加的百分比
new ReadingCalculateData (){QuestionType=QuestionType.SplenoncusChange,GetStringFun=GetSplenoncusChange},
new ReadingCalculateData (){QuestionType=QuestionType.SplenoncusChange,GetStringFun=GetSplenoncusChange,ComputationTriggerList=new List<ComputationTrigger>(){ ComputationTrigger.InitialCalculation, ComputationTrigger.SplenicApexPosition,ComputationTrigger.PositionSpleenFloor,}},
// 与最低点相比脾脏垂直径长度的增加值
new ReadingCalculateData (){QuestionType=QuestionType.SplenoncusAdd,GetStringFun=GetSplenoncusAdd},
new ReadingCalculateData (){QuestionType=QuestionType.SplenoncusAdd,GetStringFun=GetSplenoncusAdd,ComputationTriggerList=new List<ComputationTrigger>(){ ComputationTrigger.InitialCalculation, ComputationTrigger.SplenicApexPosition,ComputationTrigger.PositionSpleenFloor,}},
// 与基线相比脾垂直径变化值
new ReadingCalculateData (){QuestionType=QuestionType.SplenoncusDiameterChange,GetStringFun=GetSplenoncusDiameterChange},
new ReadingCalculateData (){QuestionType=QuestionType.SplenoncusDiameterChange,GetStringFun=GetSplenoncusDiameterChange,ComputationTriggerList=new List<ComputationTrigger>(){ ComputationTrigger.InitialCalculation, ComputationTrigger.SplenicApexPosition,ComputationTrigger.PositionSpleenFloor,}},
// 脾肿垂直径最低点访视
new ReadingCalculateData (){QuestionType=QuestionType.LowestSplenoncusVisit,GetStringFun=GetLowestSplenoncusVisit},
new ReadingCalculateData (){QuestionType=QuestionType.LowestSplenoncusVisit,GetStringFun=GetLowestSplenoncusVisit,ComputationTriggerList=new List<ComputationTrigger>(){ ComputationTrigger.InitialCalculation, ComputationTrigger.SplenicApexPosition,ComputationTrigger.PositionSpleenFloor,}},
// 获取脾脏状态
new ReadingCalculateData (){QuestionType=QuestionType.SplenicStatus,GetStringFun=GetSplenicStatus,ComputationTriggerList=new List<ComputationTrigger>(){ ComputationTrigger.SplenicApexPosition,ComputationTrigger.PositionSpleenFloor,}},
// 获取脾脏评估
new ReadingCalculateData (){QuestionType=QuestionType.SplenicEvaluation,GetStringFun=GetSplenicEvaluation},
new ReadingCalculateData (){QuestionType=QuestionType.SplenicEvaluation,GetStringFun=GetSplenicEvaluation,ComputationTriggerList=new List<ComputationTrigger>(){ ComputationTrigger.InitialCalculation, ComputationTrigger.SplenicApexPosition,ComputationTrigger.PositionSpleenFloor,ComputationTrigger.SplenicEvaluation,}},
//靶病灶评估
new ReadingCalculateData (){QuestionType=QuestionType.TargetLesion,GetStringFun=GetTargetLesionEvaluate},
new ReadingCalculateData (){QuestionType=QuestionType.TargetLesion,GetStringFun=GetTargetLesionEvaluate,ComputationTriggerList=new List<ComputationTrigger>(){ ComputationTrigger.InitialCalculation, ComputationTrigger.CTSave,ComputationTrigger.MergeSave,ComputationTrigger.RemoveLesion,ComputationTrigger.MergeLesion,}},
//非靶病灶评估
new ReadingCalculateData (){QuestionType=QuestionType.NoTargetLesion,GetStringFun=GetNoTargetLesionEvaluate},
new ReadingCalculateData (){QuestionType=QuestionType.NoTargetLesion,GetStringFun=GetNoTargetLesionEvaluate,ComputationTriggerList=new List<ComputationTrigger>(){ ComputationTrigger.InitialCalculation, ComputationTrigger.CTSave,ComputationTrigger.MergeSave,ComputationTrigger.RemoveLesion,}},
//新病灶评估
new ReadingCalculateData (){QuestionType=QuestionType.NewLesionEvaluation,GetStringFun=GetNewLesionEvaluate},
new ReadingCalculateData (){QuestionType=QuestionType.NewLesionEvaluation,GetStringFun=GetNewLesionEvaluate,ComputationTriggerList=new List<ComputationTrigger>(){ ComputationTrigger.InitialCalculation, ComputationTrigger.CTSave,ComputationTrigger.MergeSave,ComputationTrigger.RemoveLesion,}},
//获取肝脏评估
new ReadingCalculateData (){QuestionType=QuestionType.LiverAssessment,GetStringFun=GetLiverAssessment},
new ReadingCalculateData (){QuestionType=QuestionType.LiverAssessment,GetStringFun=GetLiverAssessment,ComputationTriggerList=new List<ComputationTrigger>(){ ComputationTrigger.InitialCalculation, ComputationTrigger.LiverStatus,}},
// // 骨髓中是否存在局灶性 FDG亲和病灶的证据
//new ReadingCalculateData (){QuestionType=QuestionType.EvidenceFocalFDG,GetStringFun=GetEvidenceFocalFDG,ComputationTrigger=ComputationTrigger.Lesion},
// 骨髓中是否存在局灶性 FDG亲和病灶的证据
new ReadingCalculateData (){QuestionType=QuestionType.EvidenceFocalFDG,GetStringFun=GetEvidenceFocalFDG,ComputationTriggerList=new List<ComputationTrigger>(){ }},
//CT/MRI
new ReadingCalculateData (){QuestionType=QuestionType.CTandMRI,GetStringFun=CTMRIEvaluation},
new ReadingCalculateData (){QuestionType=QuestionType.CTandMRI,GetStringFun=CTMRIEvaluation,ComputationTriggerList=new List<ComputationTrigger>(){ ComputationTrigger.InitialCalculation, ComputationTrigger.LiverStatus,ComputationTrigger.SplenicApexPosition,ComputationTrigger.PositionSpleenFloor,ComputationTrigger.SplenicEvaluation,ComputationTrigger.CTSave,ComputationTrigger.MergeSave,ComputationTrigger.RemoveLesion,ComputationTrigger.MergeLesion,}},
// PET 5PS评分
new ReadingCalculateData (){QuestionType=QuestionType.PET5PS,GetStringFun=GetPET5PS,ComputationTrigger=ComputationTrigger.Lesion},
new ReadingCalculateData (){QuestionType=QuestionType.PET5PS,GetStringFun=GetPET5PS,ComputationTriggerList=new List<ComputationTrigger>(){ ComputationTrigger.ImageQuality, ComputationTrigger.LiverBloodPool,ComputationTrigger.MediastinalPool,ComputationTrigger.MergeSave,ComputationTrigger.RemoveLesion,} },
// 修改PET 5PS评分备注
new ReadingCalculateData (){QuestionType=QuestionType.PSScoreRemarks,GetStringFun=GetPET5PSRemark,ComputationTrigger=ComputationTrigger.Lesion},
new ReadingCalculateData (){QuestionType=QuestionType.PSScoreRemarks,GetStringFun=GetPET5PSRemark,ComputationTriggerList=new List<ComputationTrigger>(){ ComputationTrigger.LiverBloodPool,ComputationTrigger.MediastinalPool,ComputationTrigger.MergeSave,ComputationTrigger.RemoveLesion,}},
//与基线相比摄取值变化
new ReadingCalculateData (){QuestionType=QuestionType.UptakeChange,GetStringFun=GetUptakeChange,ComputationTrigger=ComputationTrigger.Lesion},
new ReadingCalculateData (){QuestionType=QuestionType.UptakeChange,GetStringFun=GetUptakeChange,ComputationTriggerList=new List<ComputationTrigger>(){ ComputationTrigger.LiverBloodPool,ComputationTrigger.MediastinalPool,ComputationTrigger.MergeSave,ComputationTrigger.RemoveLesion,}},
// FDG-PET 评估结果
new ReadingCalculateData (){QuestionType=QuestionType.FDGPET,GetStringFun=GetFDGPETOverallAssessment},
new ReadingCalculateData (){QuestionType=QuestionType.FDGPET,GetStringFun=GetFDGPETOverallAssessment,ComputationTriggerList=new List<ComputationTrigger>(){ ComputationTrigger.InitialCalculation, ComputationTrigger.ImageQuality, ComputationTrigger.LiverBloodPool,ComputationTrigger.MediastinalPool,ComputationTrigger.MergeSave,ComputationTrigger.RemoveLesion,ComputationTrigger.PDGPET,}},
// 上一次 FDG-PET 评估结果
new ReadingCalculateData (){QuestionType=QuestionType.LastFDGPET,GetStringFun=GetLastFDGPETOverallAssessment},
new ReadingCalculateData (){QuestionType=QuestionType.LastFDGPET,GetStringFun=GetLastFDGPETOverallAssessment,ComputationTriggerList=new List<ComputationTrigger>(){ ComputationTrigger.InitialCalculation, ComputationTrigger.MergeSave,ComputationTrigger.RemoveLesion,}},
// 影像学整体肿瘤评估
new ReadingCalculateData (){QuestionType=QuestionType.ImgOncology,GetStringFun=GetImgOncology},
new ReadingCalculateData (){QuestionType=QuestionType.ImgOncology,GetStringFun=GetImgOncology,ComputationTriggerList=new List<ComputationTrigger>(){ ComputationTrigger.InitialCalculation, ComputationTrigger.LiverStatus,ComputationTrigger.SplenicApexPosition,ComputationTrigger.PositionSpleenFloor,ComputationTrigger.SplenicEvaluation,ComputationTrigger.LiverBloodPool,ComputationTrigger.MediastinalPool,ComputationTrigger.CTSave,ComputationTrigger.MergeSave,ComputationTrigger.RemoveLesion,ComputationTrigger.PDGPET,ComputationTrigger.MergeLesion,}},
//SUVmax
new ReadingCalculateData (){QuestionType=QuestionType.SUVmax,GetDecimalNullFun=GetSuvMax},
new ReadingCalculateData (){QuestionType=QuestionType.SUVmax,GetDecimalNullFun=GetSuvMax,ComputationTriggerList=new List<ComputationTrigger>(){ ComputationTrigger.MergeSave,ComputationTrigger.RemoveLesion,}},
// SUVmax所在病灶
new ReadingCalculateData (){QuestionType=QuestionType.SUVmaxLesion,GetStringFun=GetSuvMaxFocus},
new ReadingCalculateData (){QuestionType=QuestionType.SUVmaxLesion,GetStringFun=GetSuvMaxFocus,ComputationTriggerList=new List<ComputationTrigger>(){ ComputationTrigger.MergeSave,ComputationTrigger.RemoveLesion,}},
//是否存在疾病
new ReadingCalculateData (){QuestionType=QuestionType.ExistDisease,GetStringFun=GetIsExistDisease},
new ReadingCalculateData (){QuestionType=QuestionType.ExistDisease,GetStringFun=GetIsExistDisease,ComputationTriggerList=new List<ComputationTrigger>(){ ComputationTrigger.InitialCalculation, ComputationTrigger.CTSave,ComputationTrigger.MergeSave,ComputationTrigger.RemoveLesion,}},
@ -681,7 +674,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
}
calculateList = calculateList.Where(x => x.ComputationTrigger == null || x.ComputationTrigger == inDto.ComputationTrigger).ToList();
calculateList = calculateList.Where(x =>x.ComputationTriggerList.Contains(inDto.ComputationTrigger)).ToList();
var typeNAList = new List<QuestionType>
{
QuestionType.SODChange,
@ -2046,13 +2039,42 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
#endregion
#region 与基线相比SPD变化的百分比
#region 脾脏垂直径
/// <summary>
/// 与基线相比SPD变化的百分比
/// 获取脾脏垂直径
/// </summary>
/// <param name="inDto"></param>
/// <returns></returns>
public async Task<string> CompareBaselineSPD(ReadingCalculateDto inDto)
public async Task<decimal?> GetSpleenLength(ReadingCalculateDto inDto)
{
// 脾尖答案
var splenicTopAnswer = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.SplenicTopPosition).Select(x => x.Answer).FirstOrDefault();
// 脾底答案
var splenicBottomAnswer = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.SplenicBottomPosition).Select(x => x.Answer).FirstOrDefault();
decimal? spleenLength=null;
if (splenicTopAnswer != null && splenicBottomAnswer != null)
{
spleenLength = splenicTopAnswer.IsNullOrEmptyReturn0() - splenicBottomAnswer.IsNullOrEmptyReturn0();
if (spleenLength < 0)
{
spleenLength = 0 - spleenLength;
}
return spleenLength;
}
return spleenLength;
}
#endregion
#region 与基线相比SPD变化的百分比
/// <summary>
/// 与基线相比SPD变化的百分比
/// </summary>
/// <param name="inDto"></param>
/// <returns></returns>
public async Task<string> CompareBaselineSPD(ReadingCalculateDto inDto)
{
if (inDto.IsBaseLine)
{
@ -2400,6 +2422,23 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
}
/// <summary>
/// 获取脾脏状态
/// </summary>
/// <param name="inDto"></param>
/// <returns></returns>
public async Task<string> GetSplenicStatus(ReadingCalculateDto inDto)
{
var spleenLength= inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.SpleenLength).Select(x => x.Answer).FirstOrDefault();
if (spleenLength == string.Empty)
{
return string.Empty;
}
else
{
return await GetSplenicState(inDto.VisitTaskId, spleenLength.IsNullOrEmptyReturn0());
}
}
#region 获取脾脏评估
@ -2488,12 +2527,52 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
/// <returns></returns>
public async Task<string> GetPET5PS(ReadingCalculateDto inDto)
{
//病灶最大SUVmax、肝脏血池、纵膈血池SUVmax未发生改变时不用计算
// 如果是保存影像进来 PET-CT不能融合 就是NE
if (inDto.ComputationTrigger == ComputationTrigger.ImageQuality)
{
if (await ImageQualityIsUnableFuse(inDto))
{
return PET5PSScore.NE.GetEnumInt();
}
}
// 如果不是保存肝脏血池和纵隔血池
if (inDto.ComputationTrigger != ComputationTrigger.LiverBloodPool && inDto.ComputationTrigger != ComputationTrigger.MediastinalPool)
{
// 先在数据库查这几个值
List<QuestionType?> needSearchTypes = new List<QuestionType?>()
{
QuestionType.SUVmax,
QuestionType.PET5PS,
};
var dataBaseDataList = await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == inDto.VisitTaskId && needSearchTypes.Contains(x.ReadingQuestionTrial.QuestionType)).Select(x => new
{
x.Answer,
x.ReadingQuestionTrial.QuestionType
}).ToListAsync(); ;
// 数据库中最大SUVmax
var dataBaseSUVmax = dataBaseDataList.Where(x => x.QuestionType == QuestionType.SUVmax).Select(x => x.Answer).FirstIsNullReturnEmpty();
// 如果SUVmax没变 就不重新计算
if (dataBaseSUVmax == (await GetSuvMax(inDto)).ToString())
{
return dataBaseDataList.Where(x => x.QuestionType == QuestionType.PET5PS).Select(x => x.Answer).FirstIsNullReturnEmpty();
}
}
//if (inDto.IsBaseLine)
//{
// return SpleenAssessment.Stabilization.GetEnumInt();
//}
if (inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.ExistPET && x.Answer == ReadingYesOrNo.No.GetEnumInt()))
{
return PET5PSScore.NE.GetEnumInt();
@ -2577,8 +2656,33 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
/// <returns></returns>
public async Task<string> GetUptakeChange(ReadingCalculateDto inDto)
{
//PET5ps评分改变时才计算
if (inDto.IsBaseLine)
//PET5ps评分改变时才计算
List<QuestionType?> needSearchTypes = new List<QuestionType?>()
{
QuestionType.PET5PS,
QuestionType.UptakeChange,
};
var dataBaseDataList = await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == inDto.VisitTaskId && needSearchTypes.Contains(x.ReadingQuestionTrial.QuestionType)).Select(x => new
{
x.Answer,
x.ReadingQuestionTrial.QuestionType
}).ToListAsync(); ;
// 数据库中PET5ps评分
var dataBasePET5ps = dataBaseDataList.Where(x => x.QuestionType == QuestionType.PET5PS).Select(x => x.Answer).FirstIsNullReturnEmpty();
if (dataBasePET5ps == await GetPET5PS(inDto))
{
return dataBaseDataList.Where(x => x.QuestionType == QuestionType.UptakeChange).Select(x => x.Answer).FirstIsNullReturnEmpty();
}
if (inDto.IsBaseLine)
{
return SUVChangeVSBaseline.NA.GetEnumInt();
}
@ -2658,7 +2762,23 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
public async Task<string> GetFDGPETOverallAssessment(ReadingCalculateDto inDto)
{
if (inDto.IsBaseLine)
// 如果是保存影像进来 PET-CT不能融合 就是NE
if (inDto.ComputationTrigger == ComputationTrigger.ImageQuality)
{
if (await ImageQualityIsUnableFuse(inDto))
{
if (inDto.IsBaseLine)
{
return FDGPETOverallAssessment.NA.GetEnumInt();
}
else
{
return FDGPETOverallAssessment.NE.GetEnumInt();
}
}
}
if (inDto.IsBaseLine)
{
return FDGPETOverallAssessment.NA.GetEnumInt();
}

View File

@ -2405,21 +2405,81 @@ public enum PET5PSScore
}
/// <summary>
/// 计算触发
/// </summary>
public enum ComputationTrigger
{
/// <summary>
/// 病灶
/// </summary>
Lesion=0,
/// <summary>
/// 计算触发 // 用的是SaveQuestionType 这个字典
/// </summary>
public enum ComputationTrigger //SaveQuestionType
{
/// <summary>
/// 分裂病灶
/// </summary>
SplitLesions = -6,
/// <summary>
/// 报告
/// </summary>
Report=1,
}
/// <summary>
/// 融合病灶
/// </summary>
MergeLesion = -5,
/// <summary>
/// 删除病灶
/// </summary>
RemoveLesion = -4,
/// <summary>
/// 融合保存病灶
/// </summary>
MergeSave = -3,
/// <summary>
/// CT保存病灶
/// </summary>
CTSave = -2,
/// <summary>
/// 初始计算
/// </summary>
InitialCalculation = -1,
/// <summary>
/// 保存影像质量
/// </summary>
ImageQuality = 0,
/// <summary>
/// 保存PDG-PET
/// </summary>
PDGPET = 1,
/// <summary>
/// 测量肝脏血池
/// </summary>
LiverBloodPool = 2,
/// <summary>
/// 测量纵膈血池
/// </summary>
MediastinalPool = 3,
/// <summary>
/// 标注脾尖位置
/// </summary>
SplenicApexPosition = 4,
/// <summary>
/// 标注脾底位置
/// </summary>
PositionSpleenFloor = 5,
/// <summary>
/// 保存肝脏状态
/// </summary>
LiverStatus = 6,
/// <summary>
/// 保存脾脏评估
/// </summary>
SplenicEvaluation = 7,
}
/// <summary>
/// 新靶病灶评估