From 0611c1d9fe009ebad2e1b281e94feb70fdf08392 Mon Sep 17 00:00:00 2001 From: he <109787524@qq.com> Date: Tue, 25 Mar 2025 13:11:22 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../TumorEvaluation_RECIST1.1_CN_V1.docx | Bin 16975 -> 16991 bytes .../IRaCIS.Core.Application.xml | 4 +- .../Reading/Dto/ExportTumorEvaluationDto.cs | 72 ++++++++++++++++-- .../General/GeneralCalculateService.cs | 62 +++++++++++---- .../Interface/IGeneralCalculateService.cs | 4 +- .../RECIST1Point1CalculateService.cs | 46 ++++++++--- 6 files changed, 154 insertions(+), 34 deletions(-) diff --git a/IRaCIS.Core.API/wwwroot/ReadReoprtTemplate/TumorEvaluation_RECIST1.1_CN_V1.docx b/IRaCIS.Core.API/wwwroot/ReadReoprtTemplate/TumorEvaluation_RECIST1.1_CN_V1.docx index fb576fc7dfa1cebf803b8240c86900d17ddeea2e..910a854b2ad4902775d15e953c385e627ba12436 100644 GIT binary patch delta 8494 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 Lhad?0Pn-V$6_tSF delta 8499 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 Mh82xn@;@>E0~$>^)Bpeg diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml index 17ec78301..294e1284e 100644 --- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml +++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml @@ -2601,7 +2601,7 @@ - + 获取任务表格问题答案 @@ -5489,7 +5489,7 @@ 任务类型 - + 获取任务表格问题答案 diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ExportTumorEvaluationDto.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ExportTumorEvaluationDto.cs index ccfacd9e3..a8bf6bd35 100644 --- a/IRaCIS.Core.Application/Service/Reading/Dto/ExportTumorEvaluationDto.cs +++ b/IRaCIS.Core.Application/Service/Reading/Dto/ExportTumorEvaluationDto.cs @@ -30,6 +30,8 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto public string ResearchProgramNo { get; set; } = string.Empty; + public ExportData Lesion { get; set; }=new ExportData(); + /// /// 访视一 /// @@ -123,11 +125,11 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto { Title = item.Title, VisitOneImgNum = item.VisitImgNum, - VisitOneLength = item.VisitLength.ToString(), + VisitOneLength = item.VisitLength!=null? item.VisitLength.Value.ToString():string.Empty, VisitTwoImgNum = VisitList.Count >= 2 ? VisitTwo.VisitNoTargetInfoList[index].VisitImgNum : string.Empty, - VisitTwoLength = VisitList.Count >= 2 ? VisitTwo.VisitNoTargetInfoList[index].VisitLength.ToString() : string.Empty, + VisitTwoLength = VisitList.Count >= 2&& VisitTwo.VisitNoTargetInfoList[index].VisitLength!=null ? VisitTwo.VisitNoTargetInfoList[index].VisitLength.Value.ToString() : string.Empty, VisitThreeImgNum = VisitList.Count >= 3 ? VisitThree.VisitNoTargetInfoList[index].VisitImgNum : string.Empty, - VisitThreeLength = VisitList.Count >= 3 ? VisitThree.VisitNoTargetInfoList[index].VisitLength.ToString() : string.Empty + VisitThreeLength = VisitList.Count >= 3&& VisitThree.VisitNoTargetInfoList[index].VisitLength!=null ? VisitThree.VisitNoTargetInfoList[index].VisitLength.Value.ToString() : string.Empty }; targets.Add(targetInfo); index++; @@ -157,6 +159,64 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto public string VisitThreeLength { get; set; } = string.Empty; } + public class ExportData + { + public string OneVisitName { get; set; } = string.Empty; + + public string OneCheckDate { get; set; } = string.Empty; + + public string OneCheckInfoStr { get; set; } = string.Empty; + + public string OneTargetSum { get; set; } = string.Empty; + + public string OneHaveNewLesion { get; set; } = string.Empty; + + public string OneTargetResult { get; set; } = string.Empty; + + public string OneNoTargetResult { get; set; } = string.Empty; + + public string OneOverallResult { get; set; } = string.Empty; + + public string OneDoctorSignTime { get; set; } = string.Empty; + + public string TwoVisitName { get; set; } = string.Empty; + + public string TwoCheckDate { get; set; } = string.Empty; + + + public string TwoCheckInfoStr { get; set; } = string.Empty; + + public string TwoTargetSum { get; set; } = string.Empty; + + public string TwoHaveNewLesion { get; set; } = string.Empty; + + public string TwoTargetResult { get; set; } = string.Empty; + + public string TwoNoTargetResult { get; set; } = string.Empty; + + public string TwoOverallResult { get; set; } = string.Empty; + + public string TwoDoctorSignTime { get; set; } = string.Empty; + + public string ThreeVisitName { get; set; } = string.Empty; + + public string ThreeCheckDate { get; set; } = string.Empty; + + public string ThreeCheckInfoStr { get; set; } = string.Empty; + + public string ThreeTargetSum { get; set; } = string.Empty; + + public string ThreeHaveNewLesion { get; set; } = string.Empty; + + public string ThreeTargetResult { get; set; } = string.Empty; + + public string ThreeNoTargetResult { get; set; } = string.Empty; + + public string ThreeOverallResult { get; set; } = string.Empty; + + public string ThreeDoctorSignTime { get; set; } = string.Empty; + } + public class ExportVisitData { /// @@ -221,7 +281,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto { get { - return $"{DoctorName}/{SignTime}"; + return DoctorName==string.Empty?string.Empty: $"{DoctorName}/{SignTime}"; } } @@ -233,7 +293,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto /// /// 靶病灶总长度 /// - public decimal TargetSum + public decimal? TargetSum { get { @@ -322,7 +382,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto /// /// 长度 /// - public decimal VisitLength { get; set; } + public decimal? VisitLength { get; set; } } diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/General/GeneralCalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/General/GeneralCalculateService.cs index bd52df167..6fbbe51bb 100644 --- a/IRaCIS.Core.Application/Service/ReadingCalculate/General/GeneralCalculateService.cs +++ b/IRaCIS.Core.Application/Service/ReadingCalculate/General/GeneralCalculateService.cs @@ -14,6 +14,7 @@ using SixLabors.ImageSharp; using SixLabors.ImageSharp.PixelFormats; using System.Data; using System.IO; +using System.Reflection; using System.Text; namespace IRaCIS.Core.Application.Service.ReadingCalculate @@ -669,13 +670,42 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate return answer; } - - /// - /// 获取报告No - /// - /// - /// - public async Task GetReportExportNo(VisitTask visitTaskInfo) + + public void SetPropertyDynamically(object targetObj, string targetPropName, object sourceObj, string prefix) + { + // 1. 解析目标属性名(如"CheckInfoStr") + string basePropName = targetPropName.Replace(prefix, ""); + + // 2. 获取源对象路径(如"VisitOne.CheckInfoStr") + string sourcePath = $"Visit{prefix}.{basePropName}"; + object sourceValue = GetNestedPropertyValue(sourceObj, sourcePath); + + // 3. 赋值给目标属性 + PropertyInfo targetProp = targetObj.GetType().GetProperty(prefix+targetPropName); + if (targetProp != null && sourceValue != null) + { + targetProp.SetValue(targetObj, sourceValue); + } + } + + public object GetNestedPropertyValue(object obj, string path) + { + foreach (string part in path.Split('.')) + { + if (obj == null) return null; + PropertyInfo prop = obj.GetType().GetProperty(part); + if (prop == null) return null; + obj = prop.GetValue(obj); + } + return obj; + } + + /// + /// 获取报告No + /// + /// + /// + public async Task GetReportExportNo(VisitTask visitTaskInfo) { if (visitTaskInfo.ReportExportDate != null && visitTaskInfo.ReportExportNum != null) { @@ -779,7 +809,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate /// 问题标识 /// 索引 /// - public string GetTaskTableAnswer(List? tableAnswerList, List? dictionList, List? unitDictionary, Guid taskId, LesionType lesionType, QuestionMark questionMark, decimal rowIndex) + public string GetTaskTableAnswer(List? tableAnswerList, List? dictionList, List? unitDictionary, Guid taskId, LesionType lesionType, QuestionMark questionMark, decimal rowIndex,bool AutoUnit=true) { var answerData = tableAnswerList.FirstOrDefault(x => x.VisitTaskId == taskId && x.ReadingQuestionTrial.LesionType == lesionType && x.ReadingTableQuestionTrial.QuestionMark == questionMark && x.RowIndex == rowIndex); @@ -798,16 +828,20 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate answer = answerData.Answer; } - if (answer != "NA" && answerData.ReadingTableQuestionTrial.Unit != null && answerData.ReadingTableQuestionTrial.Unit != ValueUnit.none) + if (AutoUnit) { - answer += " " + unitDictionary.SelectMany(x => x.ChildList).Where(x => x.Code == ((int)answerData.ReadingTableQuestionTrial.Unit).ToString()).Select(x => x.ValueCN).FirstIsNullReturnEmpty(); - } + if (answer != "NA" && answerData.ReadingTableQuestionTrial.Unit != null && answerData.ReadingTableQuestionTrial.Unit != ValueUnit.none) + { + answer += " " + unitDictionary.SelectMany(x => x.ChildList).Where(x => x.Code == ((int)answerData.ReadingTableQuestionTrial.Unit).ToString()).Select(x => x.ValueCN).FirstIsNullReturnEmpty(); + } - if (answer != "NA" && answerData.ReadingTableQuestionTrial.ValueType == ValueOfType.Percentage) - { - answer += " %"; + if (answer != "NA" && answerData.ReadingTableQuestionTrial.ValueType == ValueOfType.Percentage) + { + answer += " %"; + } } + return answer; } diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/Interface/IGeneralCalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/Interface/IGeneralCalculateService.cs index c1e57ca84..37445abf1 100644 --- a/IRaCIS.Core.Application/Service/ReadingCalculate/Interface/IGeneralCalculateService.cs +++ b/IRaCIS.Core.Application/Service/ReadingCalculate/Interface/IGeneralCalculateService.cs @@ -128,7 +128,7 @@ namespace IRaCIS.Core.Application.Service /// 问题标识 /// 索引 /// - string GetTaskTableAnswer(List? tableAnswerList, List? dictionList, List? unitDictionary, Guid taskId, LesionType lesionType, QuestionMark questionMark, decimal rowIndex); + string GetTaskTableAnswer(List? tableAnswerList, List? dictionList, List? unitDictionary, Guid taskId, LesionType lesionType, QuestionMark questionMark, decimal rowIndex, bool AutoUnit = true); /// /// 获取阅片报告 @@ -136,5 +136,7 @@ namespace IRaCIS.Core.Application.Service /// /// Task GetReportExportNo(VisitTask visitTaskInfo); + + void SetPropertyDynamically(object targetObj, string targetPropName, object sourceObj, string prefix); } } diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/RECIST1Point1CalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/RECIST1Point1CalculateService.cs index 762c83721..a4726b404 100644 --- a/IRaCIS.Core.Application/Service/ReadingCalculate/RECIST1Point1CalculateService.cs +++ b/IRaCIS.Core.Application/Service/ReadingCalculate/RECIST1Point1CalculateService.cs @@ -15,6 +15,7 @@ using Microsoft.Extensions.Options; using MiniSoftware; using Newtonsoft.Json; using System.Linq; +using System.Reflection; using System.Runtime.InteropServices; namespace IRaCIS.Core.Application.Service.ReadingCalculate @@ -113,15 +114,15 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate OverallResult = _generalCalculateService.GetTaskanswer(answerList, dictionList, unitDictionary, x.Id, QuestionType.Tumor), DoctorName = x.DoctorUser.LastName + x.DoctorUser.FirstName, SignTime = x.SignTime?.ToString("yyyy-MM-dd HH:mm:ss"), - VisitTargetInfoList = getLesionInfo(LesionType.TargetLesion), - VisitNoTargetInfoList = getLesionInfo(LesionType.NonTargetLesions), + VisitTargetInfoList = getLesionInfo(LesionType.TargetLesion,x.Id), + VisitNoTargetInfoList = getLesionInfo(LesionType.NonTargetLesions, x.Id), }).OrderBy(x=>x.VisitNum).ToList(); #region 两个函数 - List getLesionInfo(LesionType lesionType) + List getLesionInfo(LesionType lesionType,Guid Visittaskid) { - var targetFocus = rowinfoList.Where(x => x.VisitTaskId == inDto.VisitTaskId && x.ReadingQuestionTrial.LesionType == lesionType).OrderBy(x => x.RowIndex).ToList(); + var targetFocus = rowinfoList.Where(x => x.VisitTaskId == Visittaskid && x.ReadingQuestionTrial.LesionType == lesionType).OrderBy(x => x.RowIndex).ToList(); var targetInfo = new List(); @@ -129,11 +130,12 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate int num = 1; foreach (var item in targetFocus) { + VisitLesionInfo target = new VisitLesionInfo { - RowMark = rowinfoList.Where(x => x.VisitTaskId == inDto.VisitTaskId && x.RowIndex == item.RowIndex && x.ReadingQuestionTrial.LesionType == lesionType).Select(x => x.RowMark).FirstIsNullReturnEmpty(), - Organ = _generalCalculateService.GetTaskTableAnswer(tableAnswerList, dictionList, unitDictionary, inDto.VisitTaskId, lesionType, QuestionMark.Organ, item.RowIndex), - Part = _generalCalculateService.GetTaskTableAnswer(tableAnswerList, dictionList, unitDictionary, inDto.VisitTaskId, lesionType, QuestionMark.Part, item.RowIndex), + RowMark = rowinfoList.Where(x => x.VisitTaskId == Visittaskid && x.RowIndex == item.RowIndex && x.ReadingQuestionTrial.LesionType == lesionType).Select(x => x.RowMark).FirstIsNullReturnEmpty(), + Organ = _generalCalculateService.GetTaskTableAnswer(tableAnswerList, dictionList, unitDictionary, Visittaskid, lesionType, QuestionMark.Organ, item.RowIndex), + Part = _generalCalculateService.GetTaskTableAnswer(tableAnswerList, dictionList, unitDictionary, Visittaskid, lesionType, QuestionMark.Part, item.RowIndex), Number = num, StudyCode = instanceList.Where(x => x.Id == item.InstanceId).Select(x => x.DicomSerie.DicomStudy.Code).FirstOrDefault(), RowId = item.Id, @@ -143,6 +145,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate }; targetInfo.Add(target); num++; + } if (lesionType == LesionType.TargetLesion) { @@ -153,7 +156,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate Number = i, }; targetInfo.Add(target); - i++; + } } @@ -165,10 +168,10 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate { // 非淋巴结取长径 淋巴结取长短径 var state = _generalCalculateService.GetTaskTableAnswer(tableAnswerList, dictionList, unitDictionary, visitTaskid, lesionType, QuestionMark.State, item); - var majorAxis = _generalCalculateService.GetTaskTableAnswer(tableAnswerList, dictionList, unitDictionary, visitTaskid, lesionType, QuestionMark.MajorAxis, item); + var majorAxis = _generalCalculateService.GetTaskTableAnswer(tableAnswerList, dictionList, unitDictionary, visitTaskid, lesionType, QuestionMark.MajorAxis, item,false); var isLymph = _generalCalculateService.GetTaskTableAnswer(tableAnswerList, dictionList, unitDictionary, visitTaskid, lesionType, QuestionMark.IsLymph, item); - var shortAxis = _generalCalculateService.GetTaskTableAnswer(tableAnswerList, dictionList, unitDictionary, visitTaskid, lesionType, QuestionMark.ShortAxis, item); + var shortAxis = _generalCalculateService.GetTaskTableAnswer(tableAnswerList, dictionList, unitDictionary, visitTaskid, lesionType, QuestionMark.ShortAxis, item, false); var result = string.Empty; @@ -196,6 +199,8 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate List resultdata = new List(); + List times= new List() { "One", "Two", "Three" }; + List columns=new List() { "VisitName", "CheckDate","CheckInfoStr", "HaveNewLesion", "TargetResult", "NoTargetResult", "OverallResult", "DoctorSignTime" }; for (int i = 0; i < (int)Math.Ceiling((double)exportVisitDatas.Count() / 3); i++) { ExportTumorEvaluationInfo export = new ExportTumorEvaluationInfo @@ -205,15 +210,34 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate SubjectCode = subjectCode, VisitList= exportVisitDatas.Skip(i*3).Take(3).ToList(), }; + + export.Lesion = new ExportData() + { + OneTargetSum = export.VisitOne.TargetSum.ToString(), + TwoTargetSum = export.VisitTwo.VisitTargetInfoList.Count()> 0? export.VisitTwo.TargetSum.ToString():string.Empty, + ThreeTargetSum = export.VisitThree.VisitTargetInfoList.Count() > 0 ? export.VisitThree.TargetSum.ToString() : string.Empty, + + + }; + foreach (var time in times) + { + foreach (var column in columns) + { + _generalCalculateService.SetPropertyDynamically(export.Lesion, column, export, time); + } + + } + resultdata.Add(export); } + + var value = new { VisitTaskList = resultdata, }; - var templatePath = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"wwwroot/ReadReoprtTemplate/TumorEvaluation_RECIST1.1_CN_V1.docx"); var outputFilePath = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, $@"wwwroot/ReadReoprtTemplate/downLoad/{inDto.DownLoadGuid}.docx");