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

This commit is contained in:
2024-09-06 11:41:51 +08:00
3 changed files with 205 additions and 91 deletions
@@ -499,12 +499,12 @@ namespace IRaCIS.Application.Services
x.SubjectId == taskInfo.SubjectId &&
x.ArmEnum == taskInfo.ArmEnum &&
x.DoctorUserId == taskInfo.DoctorUserId &&
x.ReadingTaskState == ReadingTaskState.HaveSigned &&
x.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId &&
x.TaskState == TaskState.Effect &&
x.IsAnalysisCreate == taskInfo.IsAnalysisCreate &&
x.ReadingCategory == ReadingCategory.Visit) || x.Id == inDto.VisitTaskId)
.WhereIf(taskInfo.TrialReadingCriterion.IsReadingTaskViewInOrder != ReadingOrder.SubjectRandom,x=> x.VisitTaskNum <= taskInfo.VisitTaskNum);
.WhereIf(taskInfo.TrialReadingCriterion.IsReadingTaskViewInOrder != ReadingOrder.SubjectRandom,x=> x.VisitTaskNum <= taskInfo.VisitTaskNum && x.ReadingTaskState == ReadingTaskState.HaveSigned);
@@ -397,7 +397,6 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
{
//_logger.LogError("测试计算");
ReadingCalculateDto readingData = await _generalCalculateService.GetReadingCalculateDto(visitTaskId);
// await _generalCalculateService.LogRecord(readingData, "其他既往新病灶", LesionType.OtherPreviousNewLesion);
if (type == null)
{
await ReadingCalculate(readingData);
@@ -456,56 +455,32 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
List<ReadingCalculateData> calculateList = new List<ReadingCalculateData>()
{
////靶病灶径线之和(SOD
//new ReadingCalculateData (){QuestionType=QuestionType.SOD,GetDecimalNullFun=GetSODData},
// EEM求和
new ReadingCalculateData (){QuestionType=QuestionType.EEMSun,GetDecimalNullFun=GetEEM},
// (EEM-Lumen)求和
new ReadingCalculateData (){QuestionType=QuestionType.EEMLumenSum,GetDecimalNullFun=GetEEMLumenSum},
// 计算NTAV的(EEM-Lumen)求和/回撤中的图像数
new ReadingCalculateData (){QuestionType=QuestionType.NTAVEEMLumenSumOrRetraceImageCount,GetDecimalNullFun=GetNTAVEEMLumenSumOrRetraceImageCount},
// 冠状动脉粥样硬化体积百分比(PAV)
new ReadingCalculateData (){QuestionType=QuestionType.PAV,GetDecimalNullFun=GetPAV},
// 总动脉粥样硬化体积(NTAV
new ReadingCalculateData (){QuestionType=QuestionType.NTAV,GetDecimalNullFun=GetNTAV},
};
// 没有靶病灶只计算最后几个
if (inDto.QuestionInfo.Where(x => x.LesionType == LesionType.TargetLesion).Sum(x => x.TableRowInfoList.Count()) == 0)
{
List<QuestionType> questionTypes = new List<QuestionType>()
{
QuestionType.TargetLesion,
QuestionType.NoTargetLesion,
QuestionType.NewLesions,
QuestionType.Tumor,
QuestionType.ExistDisease,
};
// 没有靶病灶就删除其他几个答案的值
var isNeedDeleteTypes = calculateList.Where(x => !questionTypes.Contains(x.QuestionType)).Select(x => x.QuestionType).ToList();
var isNeedDeleteIds = inDto.QuestionInfo.Where(x => x.QuestionType != null && isNeedDeleteTypes.Contains(x.QuestionType.Value)).Select(x => x.QuestionId).ToList();
await _readingTaskQuestionAnswerRepository.BatchUpdateNoTrackingAsync(x => x.VisitTaskId == inDto.VisitTaskId && isNeedDeleteIds.Contains(x.ReadingQuestionTrialId), x => new ReadingTaskQuestionAnswer
{
Answer = string.Empty
});
calculateList = calculateList.Where(x => questionTypes.Contains(x.QuestionType)).ToList();
}
if (calculateType != null)
{
calculateList = calculateList.Where(x => calculateType.Contains(x.QuestionType)).ToList();
}
var typeNAList = new List<QuestionType>
{
QuestionType.SODChange,
QuestionType.SODPercent,
QuestionType.LowestIncrease,
QuestionType.LowPercent,
};
foreach (var calculate in calculateList)
{
@@ -514,8 +489,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
if (item != null)
{
//计算答案
if (inDto.IsOnlyChangeAllTask == false)
{
#region
if (calculate.GetDecimalFun != null)
@@ -526,25 +500,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
else if (calculate.GetDecimalNullFun != null)
{
var value = await calculate.GetDecimalNullFun(inDto);
if (value == null)
{
if (typeNAList.Contains(item.QuestionType ?? QuestionType.SOD))
{
item.Answer = nameof(YesOrNoOrNa.NA);
}
else
{
item.Answer = this.nAString;
}
}
else
{
item.Answer = value == null ? string.Empty : value.Value.ToString();
}
item.Answer = value == null ? string.Empty : value.Value.ToString();
}
else if (calculate.GetStringFun != null)
{
@@ -583,19 +539,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
Answer = item.Answer,
ReadingQuestionTrialId = item.QuestionId,
});
}
// 修改全局
if (inDto.IsChangeOtherTask && calculate.ChangeAllTaskFun != null)
{
await calculate.ChangeAllTaskFun(new ChangeAllTaskDto()
{
calculateDto = inDto,
QuestionId = item.QuestionId,
});
}
}
}
}
@@ -634,16 +578,91 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
}
///// <summary>
///// 计算NTAV的EEM
///// </summary>
///// <param name="inDto"></param>
///// <returns></returns>
//public async Task<decimal> GetEEM(ReadingCalculateDto inDto)
//{
// var tableQuestion = inDto.QuestionInfo.Where(x => x.LesionType == LesionType.TargetLesion).SelectMany(x => x.TableRowInfoList).ToList();
//}
/// <summary>
/// 计算NTAV的EEM
/// </summary>
/// <param name="inDto"></param>
/// <returns></returns>
public async Task<decimal?> GetEEM(ReadingCalculateDto inDto)
{
return inDto.QuestionInfo.Where(x => x.LesionType == LesionType.MatchValues).SelectMany(x => x.TableRowInfoList).SelectMany(x => x.TableQuestionList)
.Where(x => x.QuestionMark == QuestionMark.ElasticAreaDiffValue).Select(x => x.Answer.IsNullOrEmptyReturn0()).Sum();
}
/// <summary>
/// 获取(EEM-Lumen)求和
/// </summary>
/// <param name="inDto"></param>
/// <returns></returns>
public async Task<decimal?> GetEEMLumenSum(ReadingCalculateDto inDto)
{
var eMM= await GetEEM(inDto);
var lumenAreaSum = inDto.QuestionInfo.Where(x => x.LesionType == LesionType.MatchValues).SelectMany(x => x.TableRowInfoList).SelectMany(x => x.TableQuestionList)
.Where(x => x.QuestionMark == QuestionMark.LumenArea).Select(x => x.Answer.IsNullOrEmptyReturn0()).Sum();
if (eMM == 0 || lumenAreaSum == 0)
{
return null;
}
return eMM / lumenAreaSum;
}
/// <summary>
/// 计算NTAV的(EEM-Lumen)求和/回撤中的图像数
/// </summary>
/// <param name="inDto"></param>
/// <returns></returns>
public async Task<decimal?> GetNTAVEEMLumenSumOrRetraceImageCount(ReadingCalculateDto inDto)
{
var eEMLumenSum = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.EEMLumenSum).Select(x => x.Answer).FirstOrDefault().IsNullOrEmptyReturn0();
var retracedFramesNumber = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.RetracedFramesNumber).Select(x => x.Answer).FirstOrDefault().IsNullOrEmptyReturn0();
if (eEMLumenSum == 0 || retracedFramesNumber == 0)
{
return null;
}
return eEMLumenSum / retracedFramesNumber;
}
/// <summary>
/// 冠状动脉粥样硬化体积百分比(PAV)
/// </summary>
/// <param name="inDto"></param>
/// <returns></returns>
public async Task<decimal?> GetPAV(ReadingCalculateDto inDto)
{
var result =await GetEEMLumenSum(inDto);
if (result == null)
{
return null;
}
else
{
return result.Value * 200;
}
}
/// <summary>
/// 总动脉粥样硬化体积(NTAV
/// </summary>
/// <param name="inDto"></param>
/// <returns></returns>
public async Task<decimal?> GetNTAV(ReadingCalculateDto inDto)
{
var result = await GetNTAVEEMLumenSumOrRetraceImageCount(inDto);
var medianFrame= inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.MedianFrame).Select(x => x.Answer).FirstOrDefault().IsNullOrEmptyReturn0();
if (result == null|| medianFrame==0)
{
return null;
}
else
{
return result.Value * medianFrame;
}
}
#region 访