图表修改
continuous-integration/drone/push Build is passing Details

Test_IRC_Net8
he 2025-12-29 16:40:34 +08:00
parent 5725e684c0
commit 9d7bd3c35b
3 changed files with 142 additions and 5 deletions

View File

@ -3834,6 +3834,13 @@
<param name="inDto"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.Service.ReadingCalculate.ReadingCalculateService.GetReportsChartSummary(IRaCIS.Core.Application.Service.Reading.Dto.GetReportsChartSummaryInDto)">
<summary>
获取报告图表汇总
</summary>
<param name="inDto"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.Service.ReadingCalculate.ReadingCalculateService.GetReadingReportEvaluation(IRaCIS.Core.Application.Service.Reading.Dto.GetReadingReportEvaluationInDto)">
<summary>
获取阅片报告

View File

@ -1,4 +1,4 @@
using IRaCIS.Core.Domain.Share;
using IRaCIS.Core.Domain.Share;
using Newtonsoft.Json;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
@ -198,9 +198,9 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public GetReportVerifyOutDto CalculateResult { get; set; }
public ReadingTaskState ReadingTaskState { get; set; }
public List<VisitTaskInfo> VisitTaskList { get; set; }
public List<VisitTaskInfo> VisitTaskList { get; set; } =new List<VisitTaskInfo> { };
public List<ReadingReportDto> TaskQuestions { get; set; }
public List<ReadingReportDto> TaskQuestions { get; set; } =new List<ReadingReportDto> { };
public List<LesionDto> LesionCountList { get; set; } = new List<LesionDto>();
@ -507,7 +507,27 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
}
public class GetReportsChartSummaryOutDto
{
{
public EvaluationColumn Evaluation { get; set; }
public List<ChartItem> Charts { get; set; } = new List<ChartItem>();
}
public class EvaluationColumn
{
public List<List<string>> Evaluation { get; set; }
public string DictionaryCode { get; set; }
}
public class ChartItem
{
public Arm Arm { get; set; }
public ReportChartType? ChartType { get; set; }
public string GroupName { get; set; }
public ValueUnit? Unit { get; set; }
public List<string> VisitTaskNameList { get; set; } = new List<string>();
public List<DateTime?> LatestScanDateList { get; set; } = new List<DateTime?>();
public List<ReportChartData> ChartDataList { get; set; } = new List<ReportChartData>();
}
public class GetReportsChartDataInDto

View File

@ -337,7 +337,11 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
private async Task<GetReportsChartDataOutDto> GetReportsChartTypeData(GetReportsChartTypeDataInDto inDto)
{
var visitTaskNameList = inDto.Data.VisitTaskList.Select(x => x.BlindName).ToList();
GetReportsChartDataOutDto result = new GetReportsChartDataOutDto() { };
GetReportsChartDataOutDto result = new GetReportsChartDataOutDto() {
ChartDataList=new List<ReportChartData>() { },
};
switch (inDto.ReportChartTypeEnum)
{
case ReportChartType.Target:
@ -458,6 +462,112 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
return data;
}
EvaluationColumn BuildEvaluationTable(GetReadingReportEvaluationOutDto r1, GetReadingReportEvaluationOutDto r2)
{
EvaluationColumn result = new EvaluationColumn()
{
Evaluation = new List<List<string>>() { }
};
var data = r1.VisitTaskList.Count() > r2.VisitTaskList.Count() ? r1 : r2;
var visitTaskName = data.VisitTaskList.Select(x => x.BlindName).ToList();
var length = data.VisitTaskList.Count();
result.Evaluation.Add(visitTaskName);
result.DictionaryCode = data.TaskQuestions.SelectMany(x => x.Childrens).Where(x => x.QuestionType == QuestionType.Tumor).Select(x => x.DictionaryCode).FirstIsNullReturnEmpty();
var r1data = r1.TaskQuestions.SelectMany(x => x.Childrens).Where(x => x.QuestionType == QuestionType.Tumor).SelectMany(x => x.Answer).Select(x => x.Answer).ToList();
r1data = r1data.Concat(Enumerable.Repeat("", length))
.Take(length)
.ToList();
result.Evaluation.Add(r1data);
var r2data = r2.TaskQuestions.SelectMany(x => x.Childrens).Where(x => x.QuestionType == QuestionType.Tumor).SelectMany(x => x.Answer).Select(x => x.Answer).ToList();
r2data = r2data.Concat(Enumerable.Repeat("", length))
.Take(length)
.ToList();
result.Evaluation.Add(r2data);
return result;
}
List<ChartItem> BuildShowChartGroups(GetReadingReportEvaluationOutDto data, Arm arm)
{
var groups = new List<ChartItem>();
if (data.TaskQuestions == null || data.VisitTaskList == null) return groups;
foreach (var g in data.TaskQuestions)
{
var items = g.Childrens?.Where(c => c.ShowChartTypeEnum != ShowChartType.NotShow).ToList() ?? new List<ReadingReportDto>();
if (items.Count == 0) continue;
var chartList = new List<ReportChartData>();
foreach (var item in items)
{
var cd = new ReportChartData
{
Name = item.QuestionName,
Value = item.Answer?.Select(a => a.Answer).ToList() ?? new List<string>()
};
chartList.Add(cd);
}
groups.Add(new ChartItem
{
Arm = arm,
ChartType = null,
GroupName = g.GroupName,
Unit = items.FirstOrDefault()?.Unit,
VisitTaskNameList = data.VisitTaskList.Select(x => x.BlindName).ToList(),
LatestScanDateList = data.VisitTaskList.Select(x => x.LatestScanDate).ToList(),
ChartDataList = chartList
});
}
return groups;
}
async Task<ChartItem> BuildTargetChart(GetReadingReportEvaluationOutDto data, Arm arm)
{
var item = new ChartItem
{
Arm = arm,
ChartType = ReportChartType.Target,
GroupName = "Target",
VisitTaskNameList = data.VisitTaskList?.Select(x => x.BlindName).ToList() ?? new List<string>(),
LatestScanDateList = data.VisitTaskList?.Select(x => x.LatestScanDate).ToList() ?? new List<DateTime?>(),
ChartDataList = new List<ReportChartData>(),
};
if (data.VisitTaskList != null && data.TaskQuestions != null)
{
var chart = await GetReportsChartTypeData(new GetReportsChartTypeDataInDto
{
CriterionType = inDto.CriterionType,
Data = data,
ReportChartTypeEnum = ReportChartType.Target
});
item.ChartDataList = chart.ChartDataList;
item.Unit = chart.Unit;
}
return item;
}
result.Evaluation = BuildEvaluationTable(r1Data, r2Data);
if (r1Data != null)
{
var r1Target = await BuildTargetChart(r1Data, Arm.DoubleReadingArm1);
result.Charts.Add(r1Target);
var r1Groups = BuildShowChartGroups(r1Data, Arm.DoubleReadingArm1);
result.Charts.AddRange(r1Groups);
}
if (r2Data != null)
{
var r2Target = await BuildTargetChart(r2Data, Arm.DoubleReadingArm2);
result.Charts.Add(r2Target);
var r2Groups = BuildShowChartGroups(r2Data, Arm.DoubleReadingArm2);
result.Charts.AddRange(r2Groups);
}
return result;
}