Merge branch 'Test_IRC_Net8' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test_IRC_Net8

IRC_NewDev
hang 2024-04-19 15:08:36 +08:00
commit e5b5cbb8d8
2 changed files with 593 additions and 564 deletions

View File

@ -1186,6 +1186,7 @@ namespace IRaCIS.Core.Application.Image.QA
{
var dbSubjectVisitList = await _subjectVisitRepository.Where(t => cRCRequestToQCCommand.SubjectVisitIds.Contains(t.Id), true).ProjectTo<QCCRCVisitViewModel>(_mapper.ConfigurationProvider).ToListAsync();
var trialinfo = await _trialRepository.Where(x => x.Id == dbSubjectVisitList[0].TrialId).FirstNotNullAsync();
//普通提交
if (dbSubjectVisitList.Count == 1)
{
@ -1213,8 +1214,9 @@ namespace IRaCIS.Core.Application.Image.QA
}
//同时要根据项目有没有配置Subject 级别临床数据
if (dbSubjectVisitList.Any(t => t.IsBaseLine && !t.IsHaveClinicalData))
if (dbSubjectVisitList.Any(t => t.IsBaseLine && !t.IsHaveClinicalData)&&trialinfo.ClinicalInformationTransmissionEnum!=0)
{
//---基线没有临床数据,确认提交?
return ResponseOutput.NotOk(_localizer["QCOperation_NoBaselineData"], 0, ApiResponseCodeEnum.NeedTips);
}

View File

@ -611,19 +611,22 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
new ReadingCalculateData (){QuestionType=QuestionType.LiverAssessment,GetStringFun=GetLiverAssessment,ComputationTriggerList=new List<ComputationTrigger>(){ ComputationTrigger.InitialCalculation, ComputationTrigger.LiverStatus,}},
// 骨髓中是否存在局灶性 FDG亲和病灶的证据
new ReadingCalculateData (){QuestionType=QuestionType.EvidenceFocalFDG,GetStringFun=GetEvidenceFocalFDG,ComputationTriggerList=new List<ComputationTrigger>(){ }},
new ReadingCalculateData (){QuestionType=QuestionType.EvidenceFocalFDG,GetStringFun=GetEvidenceFocalFDG,ComputationTriggerList=new List<ComputationTrigger>(){ ComputationTrigger.ImageQuality, }},
//CT/MRI
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,}},
//SUVmax
new ReadingCalculateData (){QuestionType=QuestionType.SUVmax,GetDecimalNullFun=GetSuvMax,ComputationTriggerList=new List<ComputationTrigger>(){ ComputationTrigger.MergeSave,ComputationTrigger.RemoveLesion,}},
// PET 5PS评分
new ReadingCalculateData (){QuestionType=QuestionType.PET5PS,GetStringFun=GetPET5PS,ComputationTriggerList=new List<ComputationTrigger>(){ ComputationTrigger.ImageQuality, ComputationTrigger.LiverBloodPool,ComputationTrigger.MediastinalPool,ComputationTrigger.MergeSave,ComputationTrigger.RemoveLesion,} },
new ReadingCalculateData (){QuestionType=QuestionType.PET5PS,GetStringFun=GetPET5PS,ComputationTriggerList=new List<ComputationTrigger>(){ ComputationTrigger.InitialCalculation, ComputationTrigger.ImageQuality, ComputationTrigger.LiverBloodPool,ComputationTrigger.MediastinalPool,ComputationTrigger.MergeSave,ComputationTrigger.RemoveLesion,}},
// 修改PET 5PS评分备注
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,ComputationTriggerList=new List<ComputationTrigger>(){ ComputationTrigger.LiverBloodPool,ComputationTrigger.MediastinalPool,ComputationTrigger.MergeSave,ComputationTrigger.RemoveLesion,}},
new ReadingCalculateData (){QuestionType=QuestionType.UptakeChange,GetStringFun=GetUptakeChange,ComputationTriggerList=new List<ComputationTrigger>(){ ComputationTrigger.InitialCalculation, ComputationTrigger.ImageQuality, ComputationTrigger.LiverBloodPool,ComputationTrigger.MediastinalPool,ComputationTrigger.MergeSave,ComputationTrigger.RemoveLesion,}},
// FDG-PET 评估结果
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,}},
@ -634,8 +637,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
// 影像学整体肿瘤评估
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,ComputationTriggerList=new List<ComputationTrigger>(){ ComputationTrigger.MergeSave,ComputationTrigger.RemoveLesion,}},
// SUVmax所在病灶
new ReadingCalculateData (){QuestionType=QuestionType.SUVmaxLesion,GetStringFun=GetSuvMaxFocus,ComputationTriggerList=new List<ComputationTrigger>(){ ComputationTrigger.MergeSave,ComputationTrigger.RemoveLesion,}},
@ -2521,9 +2523,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
}
}
// 如果不是保存肝脏血池和纵隔血池
if (inDto.ComputationTrigger != ComputationTrigger.LiverBloodPool && inDto.ComputationTrigger != ComputationTrigger.MediastinalPool)
{
// 先在数据库查这几个值
List<QuestionType?> needSearchTypes = new List<QuestionType?>()
{
@ -2535,18 +2535,18 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
{
x.Answer,
x.ReadingQuestionTrial.QuestionType
}).ToListAsync(); ;
}).ToListAsync();
// 数据库中最大SUVmax
var dataBaseSUVmax = dataBaseDataList.Where(x => x.QuestionType == QuestionType.SUVmax).Select(x => x.Answer).FirstIsNullReturnEmpty();
// 如果SUVmax没变 就不重新计算
if (dataBaseSUVmax == (await GetSuvMax(inDto)).ToString())
// 如果不是保存肝脏血池和纵隔血池
if (inDto.ComputationTrigger != ComputationTrigger.LiverBloodPool && inDto.ComputationTrigger != ComputationTrigger.MediastinalPool&& dataBaseSUVmax == (await GetSuvMax(inDto)).ToString())
{
return dataBaseDataList.Where(x => x.QuestionType == QuestionType.PET5PS).Select(x => x.Answer).FirstIsNullReturnEmpty();
}
return dataBaseDataList.Where(x => x.QuestionType == QuestionType.PET5PS).Select(x => x.Answer).FirstIsNullReturnEmpty();
}
@ -2557,7 +2557,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
// return SpleenAssessment.Stabilization.GetEnumInt();
//}
if (inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.ExistPET && x.Answer == ReadingYesOrNo.No.GetEnumInt()))
else if (inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.ExistPET && x.Answer == ReadingYesOrNo.No.GetEnumInt()))
{
return PET5PSScore.NE.GetEnumInt();
}
@ -2602,8 +2602,8 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
{
result = PET5PSScore.Three;
}
//本访视点病灶的SUVmax所有病灶中最大的<纵隔血池SUVmax
else if (maxSUVmax < MediastinumSUVmax && maxSUVmax != 0)
//本访视点病灶的SUVmax所有病灶中最大的<=纵隔血池SUVmax
else if (maxSUVmax <= MediastinumSUVmax && maxSUVmax != 0)
{
result = PET5PSScore.Two;
}
@ -2666,6 +2666,20 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
/// <returns></returns>
public async Task<string> GetUptakeChange(ReadingCalculateDto inDto)
{
if (await ImageQualityIsUnableFuse(inDto))
{
if (inDto.IsBaseLine)
{
return string.Empty;
}
else
{
return SUVChangeVSBaseline.NotEvaluable.GetEnumInt();
}
}
//PET5ps评分改变时才计算
List<QuestionType?> needSearchTypes = new List<QuestionType?>()
@ -2797,7 +2811,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
if (notExistPET)
if (notExistPET || (await ImageQualityIsUnableFuse(inDto)))
{
return FDGPETOverallAssessment.NE.GetEnumInt();
}
@ -2906,6 +2920,19 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
/// <returns></returns>
public async Task<string> GetEvidenceFocalFDG(ReadingCalculateDto inDto)
{
if (await ImageQualityIsUnableFuse(inDto))
{
if (inDto.IsBaseLine)
{
return string.Empty;
}
else
{
return FDGAffinityFociInBM.NE.GetEnumInt();
}
}
if (inDto.QuestionInfo.Any(x => x.QuestionType == QuestionType.ExistPET && x.Answer == ReadingYesOrNo.No.GetEnumInt()))
{
return FDGAffinityFociInBM.NE.GetEnumInt();