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 {