From 9d7bd3c35bd87d2cd9358f7f685930c1b8d9ccdc Mon Sep 17 00:00:00 2001
From: he <109787524@qq.com>
Date: Mon, 29 Dec 2025 16:40:34 +0800
Subject: [PATCH] =?UTF-8?q?=E5=9B=BE=E8=A1=A8=E4=BF=AE=E6=94=B9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../IRaCIS.Core.Application.xml | 7 ++
.../Reading/Dto/ReadingImageTaskViewModel.cs | 28 ++++-
.../General/ReadingCalculateService.cs | 112 +++++++++++++++++-
3 files changed, 142 insertions(+), 5 deletions(-)
diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
index 85135d99d..bc7bfae91 100644
--- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
+++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
@@ -3834,6 +3834,13 @@
+
+
+ 获取报告图表汇总
+
+
+
+
获取阅片报告
diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs
index 32fcbff68..ccef7b576 100644
--- a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs
+++ b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs
@@ -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 VisitTaskList { get; set; }
+ public List VisitTaskList { get; set; } =new List { };
- public List TaskQuestions { get; set; }
+ public List TaskQuestions { get; set; } =new List { };
public List LesionCountList { get; set; } = new List();
@@ -507,7 +507,27 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
}
public class GetReportsChartSummaryOutDto
- {
+ {
+ public EvaluationColumn Evaluation { get; set; }
+ public List Charts { get; set; } = new List();
+ }
+
+
+ public class EvaluationColumn
+ {
+ public List> 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 VisitTaskNameList { get; set; } = new List();
+ public List LatestScanDateList { get; set; } = new List();
+ public List ChartDataList { get; set; } = new List();
}
public class GetReportsChartDataInDto
diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/General/ReadingCalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/General/ReadingCalculateService.cs
index c3ed1f835..d917ce743 100644
--- a/IRaCIS.Core.Application/Service/ReadingCalculate/General/ReadingCalculateService.cs
+++ b/IRaCIS.Core.Application/Service/ReadingCalculate/General/ReadingCalculateService.cs
@@ -337,7 +337,11 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
private async Task GetReportsChartTypeData(GetReportsChartTypeDataInDto inDto)
{
var visitTaskNameList = inDto.Data.VisitTaskList.Select(x => x.BlindName).ToList();
- GetReportsChartDataOutDto result = new GetReportsChartDataOutDto() { };
+ GetReportsChartDataOutDto result = new GetReportsChartDataOutDto() {
+
+ ChartDataList=new List() { },
+
+ };
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>() { }
+ };
+
+ 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 BuildShowChartGroups(GetReadingReportEvaluationOutDto data, Arm arm)
+ {
+ var groups = new List();
+ 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();
+ if (items.Count == 0) continue;
+ var chartList = new List();
+ foreach (var item in items)
+ {
+ var cd = new ReportChartData
+ {
+ Name = item.QuestionName,
+ Value = item.Answer?.Select(a => a.Answer).ToList() ?? new List()
+ };
+ 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 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(),
+ LatestScanDateList = data.VisitTaskList?.Select(x => x.LatestScanDate).ToList() ?? new List(),
+ ChartDataList = new List(),
+ };
+ 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;
}