From 15b50e39f1df5f4129016c9a60f52ec2cf917f0d Mon Sep 17 00:00:00 2001
From: he <109787524@qq.com>
Date: Wed, 10 Sep 2025 14:43:19 +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
---
IRaCIS.Core.API/IRaCIS.Core.API.csproj | 6 +
.../TumorEvaluation_IRECIST1.1_CN_V1.docx | Bin 23725 -> 25575 bytes
.../IRaCIS.Core.Application.xml | 162 +++++++++-
.../Reading/Dto/ExportTumorEvaluationDto.cs | 214 ++++++++++++++
.../IRECIST1Point1CalculateService.cs | 276 +++++++++++++++++-
.../MRECISTHCCCalculateService.cs | 2 +-
.../RECIST1Point1CalculateService.cs | 2 +-
.../RECIST1Point1_BMCalculateService.cs | 10 +-
8 files changed, 663 insertions(+), 9 deletions(-)
diff --git a/IRaCIS.Core.API/IRaCIS.Core.API.csproj b/IRaCIS.Core.API/IRaCIS.Core.API.csproj
index 31b011e55..d615d12d2 100644
--- a/IRaCIS.Core.API/IRaCIS.Core.API.csproj
+++ b/IRaCIS.Core.API/IRaCIS.Core.API.csproj
@@ -122,6 +122,12 @@
Always
+
+ Always
+
+
+ Always
+
Always
diff --git a/IRaCIS.Core.API/wwwroot/ReadReoprtTemplate/TumorEvaluation_IRECIST1.1_CN_V1.docx b/IRaCIS.Core.API/wwwroot/ReadReoprtTemplate/TumorEvaluation_IRECIST1.1_CN_V1.docx
index 36d557f5fe93690abebc31e3e88bf33d43d895fb..7c29d5e4bd938bedc178cc8586d1a8ed52a06782 100644
GIT binary patch
delta 13690
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
+
+
+ 非靶病灶信息
+
+
+
+
+ 非靶病灶信息
+
+
+
+
+ 有明确新病灶
+
+
+
+
+ 有触发iRECST后的新病灶
+
+
+
+
+ 新靶病灶结果
+
+
+
+
+ 新非靶病灶结果
+
+
+
+
+ 其他既往新病灶结果
+
+
+
+
+ 存在触发iRECIST后新病灶结果
+
+
+
+
+ 新病灶整体评估
+
+
+
+
+ 有明确新病灶
+
+
+
+
+ 有触发iRECST后的新病灶
+
+
+
+
+ 新靶病灶结果
+
+
+
+
+ 新非靶病灶结果
+
+
+
+
+ 其他既往新病灶结果
+
+
+
+
+ 存在触发iRECIST后新病灶结果
+
+
+
+
+ 新病灶整体评估
+
+
+
+
+ 有明确新病灶
+
+
+
+
+ 有触发iRECST后的新病灶
+
+
+
+
+ 新靶病灶结果
+
+
+
+
+ 新非靶病灶结果
+
+
+
+
+ 其他既往新病灶结果
+
+
+
+
+ 存在触发iRECIST后新病灶结果
+
+
+
+
+ 新病灶整体评估
+
+
访视名称
@@ -7150,6 +7265,16 @@
是否有新病灶
+
+
+ 是否有明确既往新病灶
+
+
+
+
+ 是否有触发iRECIST后新病灶
+
+
靶病灶结果
@@ -7160,6 +7285,31 @@
非靶病灶结果
+
+
+ 新靶病灶结果
+
+
+
+
+ 新非靶病灶结果
+
+
+
+
+ 其他既往新病灶结果
+
+
+
+
+ 存在触发iRECIST后新病灶结果
+
+
+
+
+ 新病灶整体评估
+
+
总体结果
@@ -7195,6 +7345,16 @@
非靶病灶信息
+
+
+ 新靶病灶信息
+
+
+
+
+ 新非靶病灶信息
+
+
序号
@@ -7210,7 +7370,7 @@
部位
-
+
检查号
diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ExportTumorEvaluationDto.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ExportTumorEvaluationDto.cs
index 15799f085..a275d7557 100644
--- a/IRaCIS.Core.Application/Service/Reading/Dto/ExportTumorEvaluationDto.cs
+++ b/IRaCIS.Core.Application/Service/Reading/Dto/ExportTumorEvaluationDto.cs
@@ -141,6 +141,66 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
}
}
+
+ ///
+ /// 非靶病灶信息
+ ///
+ public List NewTargetInfoList
+ {
+ get
+ {
+ List targets = new List();
+
+ var index = 0;
+ foreach (var item in VisitList.Last().NewVisitTargetInfoList)
+ {
+ TargetInfo targetInfo = new TargetInfo()
+ {
+ Title = item.Title,
+ VisitOneImgNum = item.VisitImgNum,
+ VisitOneLength = item.VisitLength != null ? item.VisitLength.Value.ToString() : string.Empty,
+ VisitTwoImgNum = VisitList.Count >= 2 ? VisitTwo.NewVisitTargetInfoList[index].VisitImgNum : string.Empty,
+ VisitTwoLength = VisitList.Count >= 2 && VisitTwo.NewVisitTargetInfoList[index].VisitLength != null ? VisitTwo.NewVisitTargetInfoList[index].VisitLength.Value.ToString() : string.Empty,
+ VisitThreeImgNum = VisitList.Count >= 3 ? VisitThree.NewVisitTargetInfoList[index].VisitImgNum : string.Empty,
+ VisitThreeLength = VisitList.Count >= 3 && VisitThree.NewVisitTargetInfoList[index].VisitLength != null ? VisitThree.NewVisitTargetInfoList[index].VisitLength.Value.ToString() : string.Empty
+ };
+ targets.Add(targetInfo);
+ index++;
+ }
+ return targets;
+
+ }
+ }
+
+ ///
+ /// 非靶病灶信息
+ ///
+ public List NewNoTargetInfoList
+ {
+ get
+ {
+ List targets = new List();
+
+ var index = 0;
+ foreach (var item in VisitList.Last().NewVisitNoTargetInfoList)
+ {
+ TargetInfo targetInfo = new TargetInfo()
+ {
+ Title = item.Title,
+ VisitOneImgNum = item.VisitImgNum,
+ VisitOneLength = item.VisitLength != null ? item.VisitLength.Value.ToString() : string.Empty,
+ VisitTwoImgNum = VisitList.Count >= 2 ? VisitTwo.NewVisitNoTargetInfoList[index].VisitImgNum : string.Empty,
+ VisitTwoLength = VisitList.Count >= 2 && VisitTwo.NewVisitNoTargetInfoList[index].VisitLength != null ? VisitTwo.NewVisitNoTargetInfoList[index].VisitLength.Value.ToString() : string.Empty,
+ VisitThreeImgNum = VisitList.Count >= 3 ? VisitThree.NewVisitNoTargetInfoList[index].VisitImgNum : string.Empty,
+ VisitThreeLength = VisitList.Count >= 3 && VisitThree.NewVisitNoTargetInfoList[index].VisitLength != null ? VisitThree.NewVisitNoTargetInfoList[index].VisitLength.Value.ToString() : string.Empty
+ };
+ targets.Add(targetInfo);
+ index++;
+ }
+ return targets;
+
+ }
+ }
}
@@ -174,10 +234,47 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public string OneHaveNewLesion { get; set; } = string.Empty;
+ ///
+ /// 有明确新病灶
+ ///
+ public string OneHavePreviousNewLesions { get; set; } = string.Empty;
+
+ ///
+ /// 有触发iRECST后的新病灶
+ ///
+ public string OneHaveTriggeringIRECSITNewLesions { get; set; } = string.Empty;
+
+ ///
+ /// 新靶病灶结果
+ ///
+ public string OneNewTargetResult { get; set; } = string.Empty;
+
+ ///
+ /// 新非靶病灶结果
+ ///
+ public string OneNewNoTargetResult { get; set; } = string.Empty;
+
+ ///
+ /// 其他既往新病灶结果
+ ///
+ public string OneOtherPreviousNewLesionResult { get; set; } = string.Empty;
+
+ ///
+ /// 存在触发iRECIST后新病灶结果
+ ///
+ public string OneTriggeringIRECSITResult { get; set; } = string.Empty;
+
+ ///
+ /// 新病灶整体评估
+ ///
+ public string OneNewLesionEvaluationResult { 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;
@@ -195,6 +292,41 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public string TwoHaveNewLesion { get; set; } = string.Empty;
+ ///
+ /// 有明确新病灶
+ ///
+ public string TwoHavePreviousNewLesions { get; set; } = string.Empty;
+
+ ///
+ /// 有触发iRECST后的新病灶
+ ///
+ public string TwoHaveTriggeringIRECSITNewLesions { get; set; } = string.Empty;
+
+ ///
+ /// 新靶病灶结果
+ ///
+ public string TwoNewTargetResult { get; set; } = string.Empty;
+
+ ///
+ /// 新非靶病灶结果
+ ///
+ public string TwoNewNoTargetResult { get; set; } = string.Empty;
+
+ ///
+ /// 其他既往新病灶结果
+ ///
+ public string TwoOtherPreviousNewLesionResult { get; set; } = string.Empty;
+
+ ///
+ /// 存在触发iRECIST后新病灶结果
+ ///
+ public string TwoTriggeringIRECSITResult { get; set; } = string.Empty;
+
+ ///
+ /// 新病灶整体评估
+ ///
+ public string TwoNewLesionEvaluationResult { get; set; } = string.Empty;
+
public string TwoTargetResult { get; set; } = string.Empty;
public string TwoNoTargetResult { get; set; } = string.Empty;
@@ -215,6 +347,41 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public string ThreeHaveNewLesion { get; set; } = string.Empty;
+ ///
+ /// 有明确新病灶
+ ///
+ public string ThreeHavePreviousNewLesions { get; set; } = string.Empty;
+
+ ///
+ /// 有触发iRECST后的新病灶
+ ///
+ public string ThreeHaveTriggeringIRECSITNewLesions { get; set; } = string.Empty;
+
+ ///
+ /// 新靶病灶结果
+ ///
+ public string ThreeNewTargetResult { get; set; } = string.Empty;
+
+ ///
+ /// 新非靶病灶结果
+ ///
+ public string ThreeNewNoTargetResult { get; set; } = string.Empty;
+
+ ///
+ /// 其他既往新病灶结果
+ ///
+ public string ThreeOtherPreviousNewLesionResult { get; set; } = string.Empty;
+
+ ///
+ /// 存在触发iRECIST后新病灶结果
+ ///
+ public string ThreeTriggeringIRECSITResult { get; set; } = string.Empty;
+
+ ///
+ /// 新病灶整体评估
+ ///
+ public string ThreeNewLesionEvaluationResult { get; set; } = string.Empty;
+
public string ThreeTargetResult { get; set; } = string.Empty;
public string ThreeNoTargetResult { get; set; } = string.Empty;
@@ -258,6 +425,16 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
///
public string HaveNewLesion { get; set; } = string.Empty;
+ ///
+ /// 是否有明确既往新病灶
+ ///
+ public string HavePreviousNewLesions { get; set; } = string.Empty;
+
+ ///
+ /// 是否有触发iRECIST后新病灶
+ ///
+ public string HaveTriggeringIRECSITNewLesions { get; set; } = string.Empty;
+
///
/// 靶病灶结果
///
@@ -268,6 +445,32 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
///
public string NoTargetResult { get; set; } = string.Empty;
+
+ ///
+ /// 新靶病灶结果
+ ///
+ public string NewTargetResult { get; set; } = string.Empty;
+
+ ///
+ /// 新非靶病灶结果
+ ///
+ public string NewNoTargetResult { get; set; } = string.Empty;
+
+ ///
+ /// 其他既往新病灶结果
+ ///
+ public string OtherPreviousNewLesionResult { get; set; } = string.Empty;
+
+ ///
+ /// 存在触发iRECIST后新病灶结果
+ ///
+ public string TriggeringIRECSITResult { get; set; } = string.Empty;
+
+ ///
+ /// 新病灶整体评估
+ ///
+ public string NewLesionEvaluationResult { get; set; } = string.Empty;
+
///
/// 总体结果
///
@@ -316,6 +519,17 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
///
public List VisitNoTargetInfoList { get; set; } = new List();
+
+ ///
+ /// 新靶病灶信息
+ ///
+ public List NewVisitTargetInfoList { get; set; } = new List();
+
+ ///
+ /// 新非靶病灶信息
+ ///
+ public List NewVisitNoTargetInfoList { get; set; } = new List();
+
}
public class VisitLesionInfo
diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/IRECIST1Point1CalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/IRECIST1Point1CalculateService.cs
index e57f54617..3da75228e 100644
--- a/IRaCIS.Core.Application/Service/ReadingCalculate/IRECIST1Point1CalculateService.cs
+++ b/IRaCIS.Core.Application/Service/ReadingCalculate/IRECIST1Point1CalculateService.cs
@@ -23,6 +23,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
[ApiExplorerSettings(GroupName = "Reading")]
public class IRECIST1Point1CalculateService(IRepository _readingTableQuestionAnswerRepository,
IRepository _visitTaskRepository,
+ IRepository _dicomInstanceRepository,
IRepository _hIRHospitalRepository,
IRepository _readingQuestionCriterionTrialRepository,
IRepository _readingTableQuestionTrialRepository,
@@ -65,7 +66,280 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
///
public async Task DownLoadTumorEvaluationStream(DownLoadReadReportInDto inDto)
{
- throw new BusinessValidationFailedException(_localizer["ReadingCalculate_DownLoadReadReport"]);
+ var downFile = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, $@"wwwroot/ReadReoprtTemplate/downLoad/{inDto.DownLoadGuid}");
+ Directory.CreateDirectory(downFile);
+
+ var taskinfo = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId && x.ReadingCategory == ReadingCategory.Visit)
+ .Include(x => x.TrialReadingCriterion).FirstNotNullAsync();
+ var visitInfo = await _subjectVisitRepository.Where(x => x.Id == taskinfo.SourceSubjectVisitId).Include(x => x.StudyList).FirstNotNullAsync();
+ var subjectInfo = await _subjectRepository.Where(x => x.Id == taskinfo.SubjectId).Include(x => x.Trial).Include(x => x.SubjectPatientList).FirstNotNullAsync();
+ var subjectPatientList = await _subjectPatientRepository.Where(x => x.SubjectId == subjectInfo.Id).Include(x => x.Patient).ToListAsync();
+ var patientIdStrList = await _dicomStudyRepository.Where(x => x.SubjectVisitId == taskinfo.SourceSubjectVisitId).Select(x => x.PatientIdStr).Distinct().ToListAsync();
+ var trialQuestion = await _readingQuestionTrialRepository.Where(x => x.ReadingQuestionCriterionTrialId == taskinfo.TrialReadingCriterionId).ToListAsync();
+ var tableQuestion = await _readingTableQuestionTrialRepository.Where(x => x.ReadingQuestionTrial.ReadingQuestionCriterionTrialId == taskinfo.TrialReadingCriterionId).ToListAsync();
+ var dicotionCode = trialQuestion.Where(x => x.DictionaryCode != string.Empty).Select(x => x.DictionaryCode).Distinct().ToList();
+ dicotionCode.AddRange(tableQuestion.Where(x => x.DictionaryCode != string.Empty).Select(x => x.DictionaryCode).Distinct());
+ var dictionList = await _dictionaryRepository.Where(x => dicotionCode.Contains(x.Code)).Include(x => x.ChildList).ToListAsync();
+ var unitDictionary = await _dictionaryRepository.Where(x => x.Code == "ValueUnit").Include(x => x.ChildList).ToListAsync();
+
+ var relatedVisitTask = await ServiceProvider.GetService().GetRelatedVisitTask(new GetRelatedVisitTaskInDto()
+ {
+ VisitTaskId = inDto.VisitTaskId
+ });
+
+ var relatedTaskIds = relatedVisitTask.Item1.Select(x => x.VisitTaskId).ToList();
+
+ var answerList = await _readingTaskQuestionAnswerRepository.Where(x => relatedTaskIds.Contains(x.VisitTaskId)).Include(x => x.ReadingQuestionTrial).ToListAsync();
+
+ var rowinfoList = await _readingTableAnswerRowInfoRepository.Where(x => relatedTaskIds.Contains(x.VisitTaskId)).Include(x => x.VisitTask).Include(x => x.ReadingQuestionTrial).ToListAsync();
+
+ var instanceIdList = rowinfoList.Select(x => x.InstanceId).ToList();
+ var instanceList = await _dicomInstanceRepository.Where(x => instanceIdList.Contains(x.Id)).Include(x => x.DicomSerie.DicomStudy).ToListAsync();
+
+ var tableAnswerList = await _readingTableQuestionAnswerRepository.Where(x => relatedTaskIds.Contains(x.VisitTaskId)).Include(x => x.ReadingQuestionTrial).Include(x => x.ReadingTableQuestionTrial).ToListAsync();
+ var taskinfoList = await _visitTaskRepository.Where(x => relatedTaskIds.Contains(x.Id))
+ .Include(x => x.SourceSubjectVisit).Include(x => x.SourceSubjectVisit.StudyList)
+ .Include(x => x.DoctorUser).ToListAsync();
+
+
+
+ string getHavePreviousNewLesions(Guid visitId)
+ {
+ var answer = answerList.Where(x => x.ReadingQuestionTrial.QuestionType == QuestionType.OtherNewTargetLesion && x.Id == visitId).Select(x => x.Answer).FirstIsNullReturnEmpty();
+ if (answer == ((int)(OtherPreviousNewLesionAssessment.iUPD)).ToString())
+ {
+ return _localizer["CriterionCalculateExport_Yes"];
+ }
+ else
+ {
+ return _localizer["CriterionCalculateExport_No"];
+ }
+ }
+
+ List exportVisitDatas = taskinfoList
+ .Select(x => new ExportVisitData()
+ {
+ VisitName = x.SourceSubjectVisit.VisitName,
+ VisitNum = x.VisitTaskNum,
+ CheckDate = string.Join(",", x.SourceSubjectVisit.StudyList.Where(x => x.StudyTime != null).Select(x => x.StudyTime.Value.ToString("yyyy-MM-dd"))),
+ CheckInfoList = x.SourceSubjectVisit.StudyList.Select(x => new DicomStudyInfo()
+ {
+ BodyPartExamined = x.BodyPartExamined,
+ Modalities = x.Modalities
+ }).ToList(),
+ HaveNewLesion = _generalCalculateService.GetTaskanswer(answerList, dictionList, unitDictionary, x.Id, QuestionType.NewLesions),
+ // 是否有明确既往新病灶 // 结果为IPUD就是有 其他的是无
+ HavePreviousNewLesions = getHavePreviousNewLesions(x.Id),
+
+ // 是否有明确既往新病灶
+ HaveTriggeringIRECSITNewLesions = _generalCalculateService.GetTaskanswer(answerList, dictionList, unitDictionary, x.Id, QuestionType.IRECISTNewTargetLesion),
+
+ NewTargetResult = _generalCalculateService.GetTaskanswer(answerList, dictionList, unitDictionary, x.Id, QuestionType.NewTargetLesion),
+ NewNoTargetResult = _generalCalculateService.GetTaskanswer(answerList, dictionList, unitDictionary, x.Id, QuestionType.NewNoTargetLesion),
+ OtherPreviousNewLesionResult = _generalCalculateService.GetTaskanswer(answerList, dictionList, unitDictionary, x.Id, QuestionType.OtherNewTargetLesion),
+ TriggeringIRECSITResult = _generalCalculateService.GetTaskanswer(answerList, dictionList, unitDictionary, x.Id, QuestionType.IRECISTNewTargetLesion),
+ NewLesionEvaluationResult = _generalCalculateService.GetTaskanswer(answerList, dictionList, unitDictionary, x.Id, QuestionType.NewLesionEvaluation),
+
+ TargetResult = _generalCalculateService.GetTaskanswer(answerList, dictionList, unitDictionary, x.Id, QuestionType.TargetLesion),
+ NoTargetResult = _generalCalculateService.GetTaskanswer(answerList, dictionList, unitDictionary, x.Id, QuestionType.NoTargetLesion),
+ 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, x.Id,5),
+ VisitNoTargetInfoList = getLesionInfo(LesionType.NonTargetLesions, x.Id),
+ NewVisitTargetInfoList = getLesionInfo(LesionType.NewTargetLesion, x.Id,5),
+ NewVisitNoTargetInfoList = getLesionInfo(LesionType.NewNonTargetLesion, x.Id),
+ }).OrderBy(x => x.VisitNum).ToList();
+
+
+ #region 两个函数
+ List getLesionInfo(LesionType lesionType, Guid Visittaskid, int? minNum = null)
+ {
+ var targetFocus = rowinfoList.Where(x => x.VisitTaskId == Visittaskid && x.ReadingQuestionTrial.LesionType == lesionType).OrderBy(x => x.RowIndex).ToList();
+
+
+ var targetInfo = new List();
+
+ int num = 1;
+ foreach (var item in targetFocus)
+ {
+
+ VisitLesionInfo target = new VisitLesionInfo
+ {
+ 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,
+ StudyIdStr = instanceList.Where(x => x.Id == item.InstanceId).Select(x => x.DicomSerie.DicomStudy.StudyId).FirstIsNullReturnEmpty(),
+ RowId = item.Id,
+ SeriesNumber = instanceList.Where(x => x.Id == item.InstanceId).Select(x => x.DicomSerie.SeriesNumber).FirstOrDefault(),
+ InstanceNumber = instanceList.Where(x => x.Id == item.InstanceId).Select(x => x.InstanceNumber).FirstOrDefault(),
+ VisitLength = getStateInfo(item.VisitTaskId, item.RowIndex, lesionType),
+ };
+ targetInfo.Add(target);
+ num++;
+
+ }
+ if (minNum != null)
+ {
+ for (int i = num; i <= minNum.Value; i++)
+ {
+ VisitLesionInfo target = new VisitLesionInfo
+ {
+ Number = i,
+ };
+ targetInfo.Add(target);
+
+ }
+
+ }
+
+ return targetInfo;
+ }
+
+ decimal getStateInfo(Guid visitTaskid, decimal item, LesionType lesionType)
+ {
+ // 非淋巴结取长径 淋巴结取长短径
+ var state = _generalCalculateService.GetTaskTableAnswer(tableAnswerList, dictionList, unitDictionary, visitTaskid, lesionType, QuestionMark.State, 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, false);
+
+ var result = string.Empty;
+
+ if (!majorAxis.IsNullOrEmpty())
+ {
+ result = majorAxis;
+
+ }
+
+ if (isLymph.EqEnum(YesOrNoOrNa.Yes) && !shortAxis.IsNullOrEmpty())
+ {
+ result = shortAxis;
+ }
+
+ return result.IsNullOrEmptyReturn0();
+
+ }
+ #endregion
+
+ var researchProgramNo = subjectInfo.Trial.ResearchProgramNo;
+ var subjectName = subjectInfo.ShortName;
+ var subjectCode = string.Join(",", patientIdStrList); //患者编号;
+
+
+
+ List resultdata = new List();
+ List times = new List() { "One", "Two", "Three" };
+ List columns = new List() {
+ "VisitName",
+ "CheckDate",
+ "CheckInfoStr",
+ "HaveNewLesion",
+ "TargetResult",
+ "NoTargetResult",
+ "OverallResult",
+ "DoctorSignTime",
+ "HavePreviousNewLesions",
+ "HaveTriggeringIRECSITNewLesions",
+ "NewTargetResult",
+ "NewNoTargetResult",
+ "OtherPreviousNewLesionResult",
+ "TriggeringIRECSITResult",
+ "NewLesionEvaluationResult",
+ };
+
+ var forCount = (int)Math.Ceiling((double)exportVisitDatas.Count() / 3);
+ for (int i = 0; i < forCount; i++)
+ {
+ ExportTumorEvaluationInfo export = new ExportTumorEvaluationInfo
+ {
+ ResearchProgramNo = researchProgramNo,
+ SubjectName = subjectName,
+ 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);
+ }
+
+ }
+
+ if (i >= forCount - 1)
+ {
+ export.IsLastPage = true;
+ // 之后最后一个任务需要签名
+ var thisVisitListNum = export.VisitList.Count();
+ switch (thisVisitListNum)
+ {
+ case 1:
+ export.Lesion.OneDoctorSign = _localizer["CriterionCalculateExport_Sign"];
+ break;
+ case 2:
+ export.Lesion.TwoDoctorSign = _localizer["CriterionCalculateExport_Sign"];
+ break;
+ case 3:
+ export.Lesion.ThreeDoctorSign = _localizer["CriterionCalculateExport_Sign"];
+ break;
+ }
+
+ }
+ resultdata.Add(export);
+ }
+
+
+
+
+
+ var value = new
+ {
+ VisitTaskList = resultdata,
+ IsLastPage = false,
+ };
+
+
+ var templatePath = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, $@"wwwroot/ReadReoprtTemplate/TumorEvaluation_RECIST1.1_{(_userInfo.IsEn_Us ? "EN" : "CN")}_V1.docx");
+ var isConvertedTask = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).Select(x => x.IsConvertedTask).FirstOrDefaultAsync();
+ if (isConvertedTask)
+ {
+ templatePath = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, $@"wwwroot/ReadReoprtTemplate/TumorEvaluation_IRECIST1.1_{(_userInfo.IsEn_Us ? "EN" : "CN")}_V1.docx");
+
+ }
+ var outputFilePath = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, $@"wwwroot/ReadReoprtTemplate/downLoad/{inDto.DownLoadGuid}.docx");
+
+
+ MiniWord.SaveAsByTemplate(outputFilePath, templatePath, value);
+
+
+ //// 获取文件夹中的所有文件路径
+ Directory.Delete(downFile, true);
+
+ if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
+ {
+ Stream stream = _generalCalculateService.ReadAndReturnStream(outputFilePath);
+ return stream;
+ }
+ else
+ {
+
+ var pdfurl = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"wwwroot/ReadReoprtTemplate/downLoad");
+ FileConvertHelper.ConvertWordToPdf(outputFilePath, pdfurl);
+ Stream stream = _generalCalculateService.ReadAndReturnStream(pdfurl + $"/{inDto.DownLoadGuid}.pdf");
+ return stream;
+ }
}
///
diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/MRECISTHCCCalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/MRECISTHCCCalculateService.cs
index 2834e3aa3..97275b3ef 100644
--- a/IRaCIS.Core.Application/Service/ReadingCalculate/MRECISTHCCCalculateService.cs
+++ b/IRaCIS.Core.Application/Service/ReadingCalculate/MRECISTHCCCalculateService.cs
@@ -124,7 +124,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
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,
- StudyIdStr = instanceList.Where(x => x.Id == item.InstanceId).Select(x => x.DicomSerie.DicomStudy.StudyId).FirstOrDefault(),
+ StudyIdStr = instanceList.Where(x => x.Id == item.InstanceId).Select(x => x.DicomSerie.DicomStudy.StudyId).FirstIsNullReturnEmpty(),
RowId = item.Id,
SeriesNumber = instanceList.Where(x => x.Id == item.InstanceId).Select(x => x.DicomSerie.SeriesNumber).FirstOrDefault(),
InstanceNumber = instanceList.Where(x => x.Id == item.InstanceId).Select(x => x.InstanceNumber).FirstOrDefault(),
diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/RECIST1Point1CalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/RECIST1Point1CalculateService.cs
index 6e8304586..2bb142b3e 100644
--- a/IRaCIS.Core.Application/Service/ReadingCalculate/RECIST1Point1CalculateService.cs
+++ b/IRaCIS.Core.Application/Service/ReadingCalculate/RECIST1Point1CalculateService.cs
@@ -139,7 +139,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
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,
- StudyIdStr = instanceList.Where(x => x.Id == item.InstanceId).Select(x => x.DicomSerie.DicomStudy.StudyId).FirstOrDefault(),
+ StudyIdStr = instanceList.Where(x => x.Id == item.InstanceId).Select(x => x.DicomSerie.DicomStudy.StudyId).FirstIsNullReturnEmpty(),
RowId = item.Id,
SeriesNumber = instanceList.Where(x => x.Id == item.InstanceId).Select(x => x.DicomSerie.SeriesNumber).FirstOrDefault(),
InstanceNumber = instanceList.Where(x => x.Id == item.InstanceId).Select(x => x.InstanceNumber).FirstOrDefault(),
diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/RECIST1Point1_BMCalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/RECIST1Point1_BMCalculateService.cs
index 7f4ec06f6..f3eff861c 100644
--- a/IRaCIS.Core.Application/Service/ReadingCalculate/RECIST1Point1_BMCalculateService.cs
+++ b/IRaCIS.Core.Application/Service/ReadingCalculate/RECIST1Point1_BMCalculateService.cs
@@ -112,13 +112,13 @@ 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, x.Id),
+ VisitTargetInfoList = getLesionInfo(LesionType.TargetLesion, x.Id,5),
VisitNoTargetInfoList = getLesionInfo(LesionType.NonTargetLesions, x.Id),
}).OrderBy(x => x.VisitNum).ToList();
#region 两个函数
- List getLesionInfo(LesionType lesionType, Guid Visittaskid)
+ List getLesionInfo(LesionType lesionType, Guid Visittaskid,int? minNum=null)
{
var targetFocus = rowinfoList.Where(x => x.VisitTaskId == Visittaskid && x.ReadingQuestionTrial.LesionType == lesionType).OrderBy(x => x.RowIndex).ToList();
@@ -135,7 +135,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
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,
- StudyIdStr = instanceList.Where(x => x.Id == item.InstanceId).Select(x => x.DicomSerie.DicomStudy.StudyId).FirstOrDefault(),
+ StudyIdStr = instanceList.Where(x => x.Id == item.InstanceId).Select(x => x.DicomSerie.DicomStudy.StudyId).FirstIsNullReturnEmpty(),
RowId = item.Id,
SeriesNumber = instanceList.Where(x => x.Id == item.InstanceId).Select(x => x.DicomSerie.SeriesNumber).FirstOrDefault(),
InstanceNumber = instanceList.Where(x => x.Id == item.InstanceId).Select(x => x.InstanceNumber).FirstOrDefault(),
@@ -145,9 +145,9 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
num++;
}
- if (lesionType == LesionType.TargetLesion)
+ if (minNum!=null)
{
- for (int i = num; i <= 5; i++)
+ for (int i = num; i <= minNum.Value; i++)
{
VisitLesionInfo target = new VisitLesionInfo
{