图表功能添加
parent
64ea537dae
commit
e070a78872
|
|
@ -491,6 +491,21 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
|
||||||
public List<string> Value { get; set; }
|
public List<string> Value { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class GetReportsChartTypeDataInDto
|
||||||
|
{
|
||||||
|
public ReportChartType ReportChartTypeEnum { get; set; }
|
||||||
|
|
||||||
|
public CriterionType CriterionType { get; set; }
|
||||||
|
public GetReadingReportEvaluationOutDto Data { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class GetReportsChartSummaryInDto
|
||||||
|
{
|
||||||
|
public Guid SubjectId { get; set; }
|
||||||
|
|
||||||
|
public CriterionType CriterionType { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
public class GetReportsChartDataInDto
|
public class GetReportsChartDataInDto
|
||||||
{
|
{
|
||||||
public Guid VisitTaskId { get; set; }
|
public Guid VisitTaskId { get; set; }
|
||||||
|
|
|
||||||
|
|
@ -76,14 +76,14 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
||||||
|
|
||||||
await _readingImportFileRepository.AddAsync(new ReadingImportFile()
|
await _readingImportFileRepository.AddAsync(new ReadingImportFile()
|
||||||
{
|
{
|
||||||
|
|
||||||
FilePath = ossRelativePath,
|
FilePath = ossRelativePath,
|
||||||
VisitTaskId = visitTaskId,
|
VisitTaskId = visitTaskId,
|
||||||
TrialId = visitTaskInfo.TrialId,
|
TrialId = visitTaskInfo.TrialId,
|
||||||
SubjectId = visitTaskInfo.SubjectId,
|
SubjectId = visitTaskInfo.SubjectId,
|
||||||
SubjectVisitId = visitTaskInfo.SourceSubjectVisitId,
|
SubjectVisitId = visitTaskInfo.SourceSubjectVisitId,
|
||||||
TrialReadingCriterionId = visitTaskInfo.TrialReadingCriterionId,
|
TrialReadingCriterionId = visitTaskInfo.TrialReadingCriterionId,
|
||||||
TableName= tableName,
|
TableName = tableName,
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
@ -260,103 +260,26 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
||||||
VisitTaskId = inDto.VisitTaskId,
|
VisitTaskId = inDto.VisitTaskId,
|
||||||
});
|
});
|
||||||
|
|
||||||
GetReportsChartDataOutDto result = new GetReportsChartDataOutDto()
|
GetReportsChartDataOutDto result = new GetReportsChartDataOutDto()
|
||||||
{
|
{
|
||||||
VisitTaskNameList = data.VisitTaskList.Select(x => x.BlindName).ToList(),
|
VisitTaskNameList = data.VisitTaskList.Select(x => x.BlindName).ToList(),
|
||||||
LatestScanDateList = data.VisitTaskList.Select(x => x.LatestScanDate).ToList(),
|
LatestScanDateList = data.VisitTaskList.Select(x => x.LatestScanDate).ToList(),
|
||||||
ChartDataList =new List<ReportChartData>() { },
|
ChartDataList = new List<ReportChartData>() { },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
result.VisitTaskNameList = data.VisitTaskList.Select(x => x.BlindName).ToList();
|
result.VisitTaskNameList = data.VisitTaskList.Select(x => x.BlindName).ToList();
|
||||||
|
|
||||||
if (inDto.ReportChartTypeEnum != null)
|
if (inDto.ReportChartTypeEnum != null)
|
||||||
{
|
{
|
||||||
switch (inDto.ReportChartTypeEnum)
|
var reportData = await GetReportsChartTypeData(new GetReportsChartTypeDataInDto()
|
||||||
{
|
{
|
||||||
case ReportChartType.Target:
|
CriterionType = criterionType,
|
||||||
{
|
Data = data,
|
||||||
// 这是病灶
|
ReportChartTypeEnum = inDto.ReportChartTypeEnum.Value,
|
||||||
var target = data.TaskQuestions.SelectMany(x => x.Childrens)
|
});
|
||||||
.Where(x => x.LesionType == LesionType.TargetLesion).SelectMany(x=>x.Childrens)
|
result.ChartDataList = reportData.ChartDataList;
|
||||||
.ToList();
|
result.Unit = reportData.Unit;
|
||||||
|
|
||||||
|
|
||||||
foreach (var item in target)
|
|
||||||
{
|
|
||||||
ReportChartData chartData = new ReportChartData()
|
|
||||||
{
|
|
||||||
Name = item.QuestionName,
|
|
||||||
Value= new List<string>(),
|
|
||||||
};
|
|
||||||
|
|
||||||
for (var i = 0; i < result.VisitTaskNameList.Count; i++)
|
|
||||||
{
|
|
||||||
|
|
||||||
switch (criterionType)
|
|
||||||
{
|
|
||||||
case CriterionType.RECIST1Point1:
|
|
||||||
case CriterionType.RECIST1Pointt1_MB:
|
|
||||||
case CriterionType.mRECISTHCC:
|
|
||||||
case CriterionType.IRECIST1Point1:
|
|
||||||
// 淋巴结的短径
|
|
||||||
if (item.Childrens.Any(x => x.QuestionMark == QuestionMark.IsLymph && x.Answer[i].Answer.EqEnum(ReadingYesOrNo.Yes)))
|
|
||||||
{
|
|
||||||
chartData.Value.Add(item.Childrens.Where(x => x.QuestionMark == QuestionMark.ShortAxis).Select(x => x.Answer[i].Answer).FirstOrDefault());
|
|
||||||
result.Unit = item.Childrens.Where(x => x.QuestionMark == QuestionMark.ShortAxis).Select(x => x.Unit).FirstOrDefault();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
chartData.Value.Add(item.Childrens.Where(x => x.QuestionMark == QuestionMark.MajorAxis).Select(x => x.Answer[i].Answer).FirstOrDefault());
|
|
||||||
result.Unit = item.Childrens.Where(x => x.QuestionMark == QuestionMark.ShortAxis).Select(x => x.Unit).FirstOrDefault();
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case CriterionType.Lugano2014:
|
|
||||||
case CriterionType.Lugano2014WithoutPET:
|
|
||||||
chartData.Value.Add(item.Childrens.Where(x => x.QuestionMark == QuestionMark.PPD).Select(x => x.Answer[i].Answer).FirstOrDefault());
|
|
||||||
result.Unit = item.Childrens.Where(x => x.QuestionMark == QuestionMark.PPD).Select(x => x.Unit).FirstOrDefault();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
result.ChartDataList.Add(chartData);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ReportChartType.BaseLineTarget:
|
|
||||||
// 这是病灶
|
|
||||||
var baseTarget = data.TaskQuestions.SelectMany(x => x.Childrens)
|
|
||||||
.Where(x => x.LesionType == LesionType.BaselineLesions).SelectMany(x => x.Childrens)
|
|
||||||
.ToList();
|
|
||||||
|
|
||||||
foreach (var item in baseTarget)
|
|
||||||
{
|
|
||||||
ReportChartData chartData = new ReportChartData()
|
|
||||||
{
|
|
||||||
Name = item.QuestionName,
|
|
||||||
Value = new List<string>(),
|
|
||||||
};
|
|
||||||
|
|
||||||
for (var i = 0; i < result.VisitTaskNameList.Count; i++)
|
|
||||||
{
|
|
||||||
|
|
||||||
chartData.Value.Add(item.Childrens.Where(x => x.QuestionMark == QuestionMark.LesionNumber).Select(x => x.Answer[i].Answer).FirstOrDefault());
|
|
||||||
result.Unit = item.Childrens.Where(x => x.QuestionMark == QuestionMark.LesionNumber).Select(x => x.Unit).FirstOrDefault();
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
result.ChartDataList.Add(chartData);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else if (inDto.QuestionId != null)
|
else if (inDto.QuestionId != null)
|
||||||
{
|
{
|
||||||
|
|
@ -411,6 +334,131 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private async Task<GetReportsChartDataOutDto> GetReportsChartTypeData(GetReportsChartTypeDataInDto inDto)
|
||||||
|
{
|
||||||
|
var visitTaskNameList = inDto.Data.VisitTaskList.Select(x => x.BlindName).ToList();
|
||||||
|
GetReportsChartDataOutDto result = new GetReportsChartDataOutDto() { };
|
||||||
|
switch (inDto.ReportChartTypeEnum)
|
||||||
|
{
|
||||||
|
case ReportChartType.Target:
|
||||||
|
{
|
||||||
|
// 这是病灶
|
||||||
|
var target = inDto.Data.TaskQuestions.SelectMany(x => x.Childrens)
|
||||||
|
.Where(x => x.LesionType == LesionType.TargetLesion).SelectMany(x => x.Childrens)
|
||||||
|
.ToList();
|
||||||
|
|
||||||
|
|
||||||
|
foreach (var item in target)
|
||||||
|
{
|
||||||
|
ReportChartData chartData = new ReportChartData()
|
||||||
|
{
|
||||||
|
Name = item.QuestionName,
|
||||||
|
Value = new List<string>(),
|
||||||
|
};
|
||||||
|
|
||||||
|
for (var i = 0; i < visitTaskNameList.Count; i++)
|
||||||
|
{
|
||||||
|
|
||||||
|
switch (inDto.CriterionType)
|
||||||
|
{
|
||||||
|
case CriterionType.RECIST1Point1:
|
||||||
|
case CriterionType.RECIST1Pointt1_MB:
|
||||||
|
case CriterionType.mRECISTHCC:
|
||||||
|
case CriterionType.IRECIST1Point1:
|
||||||
|
// 淋巴结的短径
|
||||||
|
if (item.Childrens.Any(x => x.QuestionMark == QuestionMark.IsLymph && x.Answer[i].Answer.EqEnum(ReadingYesOrNo.Yes)))
|
||||||
|
{
|
||||||
|
chartData.Value.Add(item.Childrens.Where(x => x.QuestionMark == QuestionMark.ShortAxis).Select(x => x.Answer[i].Answer).FirstOrDefault());
|
||||||
|
result.Unit = item.Childrens.Where(x => x.QuestionMark == QuestionMark.ShortAxis).Select(x => x.Unit).FirstOrDefault();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
chartData.Value.Add(item.Childrens.Where(x => x.QuestionMark == QuestionMark.MajorAxis).Select(x => x.Answer[i].Answer).FirstOrDefault());
|
||||||
|
result.Unit = item.Childrens.Where(x => x.QuestionMark == QuestionMark.ShortAxis).Select(x => x.Unit).FirstOrDefault();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CriterionType.Lugano2014:
|
||||||
|
case CriterionType.Lugano2014WithoutPET:
|
||||||
|
chartData.Value.Add(item.Childrens.Where(x => x.QuestionMark == QuestionMark.PPD).Select(x => x.Answer[i].Answer).FirstOrDefault());
|
||||||
|
result.Unit = item.Childrens.Where(x => x.QuestionMark == QuestionMark.PPD).Select(x => x.Unit).FirstOrDefault();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
result.ChartDataList.Add(chartData);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ReportChartType.BaseLineTarget:
|
||||||
|
// 这是病灶
|
||||||
|
var baseTarget = inDto.Data.TaskQuestions.SelectMany(x => x.Childrens)
|
||||||
|
.Where(x => x.LesionType == LesionType.BaselineLesions).SelectMany(x => x.Childrens)
|
||||||
|
.ToList();
|
||||||
|
|
||||||
|
foreach (var item in baseTarget)
|
||||||
|
{
|
||||||
|
ReportChartData chartData = new ReportChartData()
|
||||||
|
{
|
||||||
|
Name = item.QuestionName,
|
||||||
|
Value = new List<string>(),
|
||||||
|
};
|
||||||
|
|
||||||
|
for (var i = 0; i < result.VisitTaskNameList.Count; i++)
|
||||||
|
{
|
||||||
|
|
||||||
|
chartData.Value.Add(item.Childrens.Where(x => x.QuestionMark == QuestionMark.LesionNumber).Select(x => x.Answer[i].Answer).FirstOrDefault());
|
||||||
|
result.Unit = item.Childrens.Where(x => x.QuestionMark == QuestionMark.LesionNumber).Select(x => x.Unit).FirstOrDefault();
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
result.ChartDataList.Add(chartData);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取报告图表汇总
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="inDto"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public async Task GetReportsChartSummary(GetReportsChartSummaryInDto inDto)
|
||||||
|
{
|
||||||
|
var r1Data = await GetData(new List<Arm>() { Arm.SingleReadingArm, Arm.DoubleReadingArm1 });
|
||||||
|
var r2Data = await GetData(new List<Arm>() { Arm.DoubleReadingArm2 });
|
||||||
|
async Task<GetReadingReportEvaluationOutDto> GetData(List<Arm> arms)
|
||||||
|
{
|
||||||
|
var data = new GetReadingReportEvaluationOutDto() { };
|
||||||
|
var task = await _visitTaskRepository.Where(x =>
|
||||||
|
x.SubjectId == inDto.SubjectId
|
||||||
|
&& arms.Contains(x.ArmEnum)
|
||||||
|
&& x.ReadingTaskState == ReadingTaskState.HaveSigned
|
||||||
|
&& x.TaskState == TaskState.Effect
|
||||||
|
&& x.TrialReadingCriterion.CriterionType == inDto.CriterionType
|
||||||
|
).OrderByDescending(x => x.VisitTaskNum).FirstOrDefaultAsync();
|
||||||
|
if (task != null)
|
||||||
|
{
|
||||||
|
data = await GetReadingReportEvaluation(new GetReadingReportEvaluationInDto()
|
||||||
|
{
|
||||||
|
TrialId = task.TrialId,
|
||||||
|
VisitTaskId = task.Id,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取阅片报告
|
/// 获取阅片报告
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue