自动计算触发
parent
f415c03daa
commit
6061cf5d93
|
@ -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>
|
||||
|
|
|
@ -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; }
|
||||
|
||||
|
|
|
@ -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; }
|
||||
|
||||
|
|
|
@ -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,
|
||||
});
|
||||
|
||||
// 保存完了计算疾病进展
|
||||
|
|
|
@ -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
|
||||
});
|
||||
}
|
||||
|
|
|
@ -513,88 +513,81 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
|||
|
||||
List<ReadingCalculateData> calculateList = new List<ReadingCalculateData>()
|
||||
{
|
||||
/*
|
||||
* 保存影像质量问题
|
||||
* 如果:不正常:PET-CT不能融合, FDG-PET的评估设置为NE
|
||||
*
|
||||
* 保存二维页面病灶
|
||||
*
|
||||
* 保存
|
||||
*
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
// 是否存在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();
|
||||
}
|
||||
|
|
|
@ -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>
|
||||
/// 新靶病灶评估
|
||||
|
|
Loading…
Reference in New Issue