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; }