自动计算触发
parent
f415c03daa
commit
6061cf5d93
|
@ -2038,6 +2038,13 @@
|
||||||
<param name="inDto"></param>
|
<param name="inDto"></param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</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)">
|
<member name="M:IRaCIS.Core.Application.Service.ReadingCalculate.LuganoCalculateService.CompareBaselineSPD(IRaCIS.Core.Application.Service.Reading.Dto.ReadingCalculateDto)">
|
||||||
<summary>
|
<summary>
|
||||||
与基线相比SPD变化的百分比
|
与基线相比SPD变化的百分比
|
||||||
|
@ -2095,6 +2102,13 @@
|
||||||
<param name="visitTaskId"></param>
|
<param name="visitTaskId"></param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</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)">
|
<member name="M:IRaCIS.Core.Application.Service.ReadingCalculate.LuganoCalculateService.GetSplenicEvaluation(IRaCIS.Core.Application.Service.Reading.Dto.ReadingCalculateDto)">
|
||||||
<summary>
|
<summary>
|
||||||
获取脾脏评估
|
获取脾脏评估
|
||||||
|
@ -13771,6 +13785,7 @@
|
||||||
保存任务问题 带动态稽查参数
|
保存任务问题 带动态稽查参数
|
||||||
</summary>
|
</summary>
|
||||||
<param name="inDto"></param>
|
<param name="inDto"></param>
|
||||||
|
<param name="param">请求类型</param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
<member name="M:IRaCIS.Application.Services.ReadingImageTaskService.ChangeDicomReadingQuestionAnswer(IRaCIS.Core.Application.Service.Reading.Dto.ChangeDicomReadingQuestionAnswerInDto)">
|
<member name="M:IRaCIS.Application.Services.ReadingImageTaskService.ChangeDicomReadingQuestionAnswer(IRaCIS.Core.Application.Service.Reading.Dto.ChangeDicomReadingQuestionAnswerInDto)">
|
||||||
|
@ -13789,7 +13804,7 @@
|
||||||
</member>
|
</member>
|
||||||
<member name="M:IRaCIS.Application.Services.ReadingImageTaskService.SubmitTableQuestion(IRaCIS.Core.Application.Service.Reading.Dto.SubmitTableQuestionInDto)">
|
<member name="M:IRaCIS.Application.Services.ReadingImageTaskService.SubmitTableQuestion(IRaCIS.Core.Application.Service.Reading.Dto.SubmitTableQuestionInDto)">
|
||||||
<summary>
|
<summary>
|
||||||
提交表格问题答案 提交病灶
|
提交表格问题答案 提交病灶 保存病灶
|
||||||
</summary>
|
</summary>
|
||||||
<param name="inDto"></param>
|
<param name="inDto"></param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
|
|
|
@ -222,7 +222,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
|
||||||
|
|
||||||
public Arm ArmEnum { get; set; }
|
public Arm ArmEnum { get; set; }
|
||||||
|
|
||||||
public ComputationTrigger ComputationTrigger { get; set; } = ComputationTrigger.Lesion;
|
public ComputationTrigger ComputationTrigger { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 是否修改其他任务
|
/// 是否修改其他任务
|
||||||
|
@ -353,7 +353,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
|
||||||
public QuestionType QuestionType { get; set; }
|
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; }
|
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 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; }
|
public List<ChangeDicomReadingQuestionAnswerDto> Answers { get; set; }
|
||||||
|
|
||||||
|
@ -2086,7 +2087,9 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
|
||||||
{
|
{
|
||||||
public Guid QuestionId { get; set; }
|
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; }
|
public int? NumberOfFrames { get; set; }
|
||||||
|
|
||||||
|
|
|
@ -1637,7 +1637,7 @@ namespace IRaCIS.Application.Services
|
||||||
{
|
{
|
||||||
IsChangeOtherTask = false,
|
IsChangeOtherTask = false,
|
||||||
VisitTaskId = inDto.VisitTaskId,
|
VisitTaskId = inDto.VisitTaskId,
|
||||||
ComputationTrigger = ComputationTrigger.Lesion,
|
ComputationTrigger = ComputationTrigger.MergeLesion,
|
||||||
});
|
});
|
||||||
|
|
||||||
// 保存完了计算疾病进展
|
// 保存完了计算疾病进展
|
||||||
|
@ -1746,19 +1746,32 @@ namespace IRaCIS.Application.Services
|
||||||
/// 保存任务问题 带动态稽查参数
|
/// 保存任务问题 带动态稽查参数
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="inDto"></param>
|
/// <param name="inDto"></param>
|
||||||
|
/// <param name="param">请求类型</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
[Route("/SaveTaskQuestion/{param}")]
|
[Route("/SaveTaskQuestion/{param}")]
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
public async Task<IResponseOutput> SaveTaskQuestion(ChangeDicomReadingQuestionAnswerInDto inDto, string param)
|
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 taskinfo = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).Include(x => x.TrialReadingCriterion).FirstNotNullAsync();
|
||||||
var result = await this.SaveImageQuality(inDto);
|
try
|
||||||
// 保存脾尖或者脾底进行计算
|
{
|
||||||
if (taskinfo.TrialReadingCriterion.CriterionType == CriterionType.Lugano2014 && (param == "4" || param == "5"))
|
param = param == string.Empty ? "0" : param;
|
||||||
{
|
|
||||||
await _luganoCalculateService.SaveSplenicCalculate(inDto.VisitTaskId);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
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;
|
return result;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -2055,7 +2068,7 @@ namespace IRaCIS.Application.Services
|
||||||
{
|
{
|
||||||
IsChangeOtherTask = false,
|
IsChangeOtherTask = false,
|
||||||
VisitTaskId = inDto.VisitTaskId,
|
VisitTaskId = inDto.VisitTaskId,
|
||||||
ComputationTrigger=ComputationTrigger.Lesion,
|
ComputationTrigger=ComputationTrigger.RemoveLesion,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
@ -2078,7 +2091,7 @@ namespace IRaCIS.Application.Services
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 提交表格问题答案 提交病灶
|
/// 提交表格问题答案 提交病灶 保存病灶
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="inDto"></param>
|
/// <param name="inDto"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
|
@ -2453,7 +2466,7 @@ namespace IRaCIS.Application.Services
|
||||||
{
|
{
|
||||||
IsChangeOtherTask = false,
|
IsChangeOtherTask = false,
|
||||||
VisitTaskId = inDto.VisitTaskId,
|
VisitTaskId = inDto.VisitTaskId,
|
||||||
ComputationTrigger = ComputationTrigger.Lesion,
|
ComputationTrigger = inDto.ComputationTrigger,
|
||||||
});
|
});
|
||||||
|
|
||||||
// 保存完了计算疾病进展
|
// 保存完了计算疾病进展
|
||||||
|
|
|
@ -154,7 +154,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
||||||
{
|
{
|
||||||
IsChangeOtherTask = false,
|
IsChangeOtherTask = false,
|
||||||
VisitTaskId = inDto.VisitTaskId,
|
VisitTaskId = inDto.VisitTaskId,
|
||||||
ComputationTrigger = ComputationTrigger.Report,
|
ComputationTrigger = ComputationTrigger.InitialCalculation,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -209,7 +209,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
||||||
{
|
{
|
||||||
await service.CalculateTask(new CalculateTaskInDto()
|
await service.CalculateTask(new CalculateTaskInDto()
|
||||||
{
|
{
|
||||||
ComputationTrigger= ComputationTrigger.Report,
|
ComputationTrigger= ComputationTrigger.InitialCalculation,
|
||||||
VisitTaskId = inDto.VisitTaskId
|
VisitTaskId = inDto.VisitTaskId
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -513,88 +513,81 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
||||||
|
|
||||||
List<ReadingCalculateData> calculateList = new List<ReadingCalculateData>()
|
List<ReadingCalculateData> calculateList = new List<ReadingCalculateData>()
|
||||||
{
|
{
|
||||||
/*
|
|
||||||
* 保存影像质量问题
|
|
||||||
* 如果:不正常:PET-CT不能融合, FDG-PET的评估设置为NE
|
|
||||||
*
|
|
||||||
* 保存二维页面病灶
|
|
||||||
*
|
|
||||||
* 保存
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
// 是否存在Pet
|
// 是否存在Pet
|
||||||
new ReadingCalculateData (){QuestionType=QuestionType.ExistPET,GetStringFun=GetExistPET},
|
new ReadingCalculateData (){QuestionType=QuestionType.ExistPET,GetStringFun=GetExistPET ,ComputationTriggerList=new List<ComputationTrigger>(){ ComputationTrigger.InitialCalculation, } },
|
||||||
|
|
||||||
//垂直径乘积之和(SPD)
|
//垂直径乘积之和(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变化的百分比
|
// 与基线相比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亲和病灶的证据
|
// 骨髓中是否存在局灶性 FDG亲和病灶的证据
|
||||||
//new ReadingCalculateData (){QuestionType=QuestionType.EvidenceFocalFDG,GetStringFun=GetEvidenceFocalFDG,ComputationTrigger=ComputationTrigger.Lesion},
|
new ReadingCalculateData (){QuestionType=QuestionType.EvidenceFocalFDG,GetStringFun=GetEvidenceFocalFDG,ComputationTriggerList=new List<ComputationTrigger>(){ }},
|
||||||
|
|
||||||
//CT/MRI
|
//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评分
|
// 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评分备注
|
// 修改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 评估结果
|
// 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 评估结果
|
// 上一次 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
|
//SUVmax
|
||||||
new ReadingCalculateData (){QuestionType=QuestionType.SUVmax,GetDecimalNullFun=GetSuvMax},
|
new ReadingCalculateData (){QuestionType=QuestionType.SUVmax,GetDecimalNullFun=GetSuvMax,ComputationTriggerList=new List<ComputationTrigger>(){ ComputationTrigger.MergeSave,ComputationTrigger.RemoveLesion,}},
|
||||||
|
|
||||||
// SUVmax所在病灶
|
// 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>
|
var typeNAList = new List<QuestionType>
|
||||||
{
|
{
|
||||||
QuestionType.SODChange,
|
QuestionType.SODChange,
|
||||||
|
@ -2046,13 +2039,42 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region 与基线相比SPD变化的百分比
|
#region 脾脏垂直径
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 与基线相比SPD变化的百分比
|
/// 获取脾脏垂直径
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="inDto"></param>
|
/// <param name="inDto"></param>
|
||||||
/// <returns></returns>
|
/// <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)
|
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 获取脾脏评估
|
#region 获取脾脏评估
|
||||||
|
|
||||||
|
@ -2488,7 +2527,47 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public async Task<string> GetPET5PS(ReadingCalculateDto inDto)
|
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)
|
//if (inDto.IsBaseLine)
|
||||||
//{
|
//{
|
||||||
// return SpleenAssessment.Stabilization.GetEnumInt();
|
// return SpleenAssessment.Stabilization.GetEnumInt();
|
||||||
|
@ -2577,8 +2656,33 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public async Task<string> GetUptakeChange(ReadingCalculateDto inDto)
|
public async Task<string> GetUptakeChange(ReadingCalculateDto inDto)
|
||||||
{
|
{
|
||||||
//PET5ps评分改变时,才计算
|
//PET5ps评分改变时,才计算
|
||||||
if (inDto.IsBaseLine)
|
|
||||||
|
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();
|
return SUVChangeVSBaseline.NA.GetEnumInt();
|
||||||
}
|
}
|
||||||
|
@ -2658,7 +2762,23 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
||||||
public async Task<string> GetFDGPETOverallAssessment(ReadingCalculateDto inDto)
|
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();
|
return FDGPETOverallAssessment.NA.GetEnumInt();
|
||||||
}
|
}
|
||||||
|
|
|
@ -2405,21 +2405,81 @@ public enum PET5PSScore
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 计算触发
|
/// 计算触发 // 用的是SaveQuestionType 这个字典
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public enum ComputationTrigger
|
public enum ComputationTrigger //SaveQuestionType
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 病灶
|
/// 分裂病灶
|
||||||
/// </summary>
|
/// </summary>
|
||||||
Lesion=0,
|
SplitLesions = -6,
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 报告
|
/// 融合病灶
|
||||||
/// </summary>
|
/// </summary>
|
||||||
Report=1,
|
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>
|
/// <summary>
|
||||||
/// 新靶病灶评估
|
/// 新靶病灶评估
|
||||||
|
|
Loading…
Reference in New Issue