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 fb576fc7d..910a854b2 100644
Binary files a/IRaCIS.Core.API/wwwroot/ReadReoprtTemplate/TumorEvaluation_RECIST1.1_CN_V1.docx and b/IRaCIS.Core.API/wwwroot/ReadReoprtTemplate/TumorEvaluation_RECIST1.1_CN_V1.docx differ
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");