From d4bbe47b8147e30bd55429b11640f204964f3637 Mon Sep 17 00:00:00 2001 From: he <109787524@qq.com> Date: Tue, 4 Aug 2026 13:32:51 +0800 Subject: [PATCH 1/5] =?UTF-8?q?=E5=AF=BC=E5=87=BA=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Reading/Dto/ReadingCalculateViewModel.cs | 31 ++++++++++ .../ReadingCalculate/IVUSCalculateService.cs | 61 ++++++++++++++++++- .../ReadingCalculate/OCTCalculateService.cs | 59 ++++++++++++++++++ IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs | 5 ++ 4 files changed, 155 insertions(+), 1 deletion(-) diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingCalculateViewModel.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingCalculateViewModel.cs index ff52940a3..9b98c98cb 100644 --- a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingCalculateViewModel.cs +++ b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingCalculateViewModel.cs @@ -250,6 +250,37 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto public string TaskBlindName { get; set; } public string SubjectID { get; set; } + + /// + /// 靶段 + /// + public string TargetSegment { get; set; } + + /// + /// 靶段备注 + /// + public string TargetSegmentRemarks { get; set; } + + /// + /// ROI段落总长度 + /// + public string ROIAllLength { get; set; } + + /// + /// 回撤中的图像帧数 + /// + public string PullbackFrameCount { get; set; } + + /// + /// 斑块类型 + /// + public string PlaqueType { get; set; } + + /// + /// 访视点备注(如有) + /// + public string AdjustReason { get; set; } + } public class OCTFCTUploadData diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/IVUSCalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/IVUSCalculateService.cs index ed0469fe2..11c01d139 100644 --- a/IRaCIS.Core.Application/Service/ReadingCalculate/IVUSCalculateService.cs +++ b/IRaCIS.Core.Application/Service/ReadingCalculate/IVUSCalculateService.cs @@ -1,4 +1,6 @@ -using IRaCIS.Core.Application.Service.Reading.Dto; +using DocumentFormat.OpenXml.Spreadsheet; +using IRaCIS.Core.Application.Interfaces; +using IRaCIS.Core.Application.Service.Reading.Dto; using IRaCIS.Core.Application.ViewModel; using IRaCIS.Core.Infra.EFCore.Common; using IRaCIS.Core.Infrastructure; @@ -6,6 +8,7 @@ using MassTransit; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; +using Newtonsoft.Json; namespace IRaCIS.Core.Application.Service.ReadingCalculate { @@ -18,6 +21,8 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate IRepository _readingTableAnswerRowInfoRepository, IRepository _readingQuestionTrialRepository, IRepository _organInfoRepository, + ISubjectVisitService iSubjectVisitService, + IRepository _dictionaryRepository, IRepository _readingGlobalTaskInfoRepository, IRepository _subjectVisitRepository, IRepository _tumorAssessmentRepository, @@ -414,10 +419,64 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate var taskinfo = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).Include(x=>x.Subject).FirstNotNullAsync(); + //靶段 + var targetSegmentdic = await _dictionaryRepository.Where(x => x.Parent.Code == "TargetSegment").ToListAsync(); + + //斑块类型 + var plaqueTypedic = await _dictionaryRepository.Where(x => x.Parent.Code == "PlaqueType").ToListAsync(); + + + + + var awswerList=await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == inDto.VisitTaskId).Include(x=>x.ReadingQuestionTrial).ToListAsync(); + + + + var targetSegmentAnswer = awswerList.Where(x => x.ReadingQuestionTrial.QuestionType == QuestionType.TargetSegment).Select(x => x.Answer).FirstOrDefault() ?? string.Empty; + if (targetSegmentAnswer.IsNotNullOrEmpty()) + { + var data= JsonConvert.DeserializeObject>(targetSegmentAnswer); + targetSegmentAnswer = string.Join(",", targetSegmentdic + .Where(x => data.Contains(x.Code)) + .Select(x => x.Value)); + } + else + { + var targetSegmentData = await iSubjectVisitService.GetReadingVisitStudyList(new Contracts.GetReadingVisitStudyListIndto() + { + SujectVisitId = taskinfo.SourceSubjectVisitId ?? default(Guid), + TrialId = taskinfo.TrialId, + VisitTaskId = inDto.VisitTaskId + }); + targetSegmentAnswer = string.Join(",", targetSegmentData + .Where(x =>x.BodyPartForEdit.IsNotNullOrEmpty()) + .Select(x => x.BodyPartForEdit)); + } + + + var plaqueTypeAnswer = awswerList.Where(x => x.ReadingQuestionTrial.QuestionType == QuestionType.PlaqueType).Select(x => x.Answer).FirstOrDefault() ?? string.Empty; + if (plaqueTypeAnswer.IsNotNullOrEmpty()) + { + var data = JsonConvert.DeserializeObject>(plaqueTypeAnswer); + plaqueTypeAnswer = string.Join(",", plaqueTypedic + .Where(x => data.Contains(x.Code)) + .Select(x => x.Value)); + } + + var values = new TemplateData() { SubjectID = (taskinfo.BlindSubjectCode.IsNullOrEmpty() ? taskinfo.Subject.Code : taskinfo.BlindSubjectCode), TaskBlindName = taskinfo.TaskBlindName, + TargetSegment= targetSegmentAnswer, + TargetSegmentRemarks = awswerList.Where(x=>x.ReadingQuestionTrial.QuestionType == QuestionType.TargetSegmentRemarks).Select(x=>x.Answer).FirstOrDefault()??string.Empty, + ROIAllLength = awswerList.Where(x => x.ReadingQuestionTrial.QuestionType == QuestionType.ROIAllLength).Select(x => x.Answer).FirstOrDefault() ?? string.Empty, + PullbackFrameCount = awswerList.Where(x => x.ReadingQuestionTrial.QuestionType == QuestionType.PullbackFrameCount).Select(x => x.Answer).FirstOrDefault() ?? string.Empty, + AdjustReason = awswerList.Where(x => x.ReadingQuestionTrial.QuestionType == QuestionType.AdjustReason).Select(x => x.Answer).FirstOrDefault() ?? string.Empty, + PlaqueType = plaqueTypeAnswer, + + + }; return await _visitTaskHelpeService.ExportTemplateAsync(new IRaCIS.Application.Contracts.ExportTemplateAsyncDto() { diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/OCTCalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/OCTCalculateService.cs index 862855b7d..8f2bcc7ab 100644 --- a/IRaCIS.Core.Application/Service/ReadingCalculate/OCTCalculateService.cs +++ b/IRaCIS.Core.Application/Service/ReadingCalculate/OCTCalculateService.cs @@ -2,6 +2,7 @@ using DocumentFormat.OpenXml.Drawing.Spreadsheet; using DocumentFormat.OpenXml.Office.SpreadSheetML.Y2023.MsForms; using DocumentFormat.OpenXml.Office2010.Excel; +using IRaCIS.Core.Application.Interfaces; using IRaCIS.Core.Application.Service.Reading.Dto; using IRaCIS.Core.Application.ViewModel; using IRaCIS.Core.Domain.Models; @@ -12,6 +13,7 @@ using MassTransit; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; +using Newtonsoft.Json; namespace IRaCIS.Core.Application.Service.ReadingCalculate { @@ -24,6 +26,8 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate IRepository _readingTableAnswerRowInfoRepository, IRepository _readingQuestionTrialRepository, IRepository _organInfoRepository, + ISubjectVisitService iSubjectVisitService, + IRepository _dictionaryRepository, IHttpContextAccessor httpContext, IRepository _readingGlobalTaskInfoRepository, IRepository _subjectVisitRepository, @@ -271,10 +275,65 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate public async Task GetOCTFCTTemplate(GetExportTemplateInDto inDto) { var taskinfo = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).Include(x => x.Subject).FirstNotNullAsync(); + + //靶段 + var targetSegmentdic = await _dictionaryRepository.Where(x => x.Parent.Code == "TargetSegment").ToListAsync(); + + //斑块类型 + var plaqueTypedic = await _dictionaryRepository.Where(x => x.Parent.Code == "PlaqueType").ToListAsync(); + + + + + var awswerList = await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == inDto.VisitTaskId).Include(x => x.ReadingQuestionTrial).ToListAsync(); + + + + var targetSegmentAnswer = awswerList.Where(x => x.ReadingQuestionTrial.QuestionType == QuestionType.TargetSegment).Select(x => x.Answer).FirstOrDefault() ?? string.Empty; + if (targetSegmentAnswer.IsNotNullOrEmpty()) + { + var data = JsonConvert.DeserializeObject>(targetSegmentAnswer); + targetSegmentAnswer = string.Join(",", targetSegmentdic + .Where(x => data.Contains(x.Code)) + .Select(x => x.Value)); + } + else + { + var targetSegmentData = await iSubjectVisitService.GetReadingVisitStudyList(new Contracts.GetReadingVisitStudyListIndto() + { + SujectVisitId = taskinfo.SourceSubjectVisitId ?? default(Guid), + TrialId = taskinfo.TrialId, + VisitTaskId = inDto.VisitTaskId + }); + targetSegmentAnswer = string.Join(",", targetSegmentData + .Where(x => x.BodyPartForEdit.IsNotNullOrEmpty()) + .Select(x => x.BodyPartForEdit)); + } + + + var plaqueTypeAnswer = awswerList.Where(x => x.ReadingQuestionTrial.QuestionType == QuestionType.PlaqueType).Select(x => x.Answer).FirstOrDefault() ?? string.Empty; + if (plaqueTypeAnswer.IsNotNullOrEmpty()) + { + var data = JsonConvert.DeserializeObject>(plaqueTypeAnswer); + plaqueTypeAnswer = string.Join(",", plaqueTypedic + .Where(x => data.Contains(x.Code)) + .Select(x => x.Value)); + } + + var values = new TemplateData() { SubjectID = (taskinfo.BlindSubjectCode.IsNullOrEmpty() ? taskinfo.Subject.Code : taskinfo.BlindSubjectCode), TaskBlindName = taskinfo.TaskBlindName, + TargetSegment = targetSegmentAnswer, + TargetSegmentRemarks = awswerList.Where(x => x.ReadingQuestionTrial.QuestionType == QuestionType.TargetSegmentRemarks).Select(x => x.Answer).FirstOrDefault() ?? string.Empty, + ROIAllLength = awswerList.Where(x => x.ReadingQuestionTrial.QuestionType == QuestionType.ROIAllLength).Select(x => x.Answer).FirstOrDefault() ?? string.Empty, + //PullbackFrameCount = awswerList.Where(x => x.ReadingQuestionTrial.QuestionType == QuestionType.PullbackFrameCount).Select(x => x.Answer).FirstOrDefault() ?? string.Empty, + AdjustReason = awswerList.Where(x => x.ReadingQuestionTrial.QuestionType == QuestionType.AdjustReason).Select(x => x.Answer).FirstOrDefault() ?? string.Empty, + PlaqueType = plaqueTypeAnswer, + + + }; return await _visitTaskHelpeService.ExportTemplateAsync(new IRaCIS.Application.Contracts.ExportTemplateAsyncDto() { diff --git a/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs b/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs index 2b7eea0f7..8240f31c5 100644 --- a/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs +++ b/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs @@ -3060,6 +3060,11 @@ namespace IRaCIS.Core.Domain.Share /// ROIAllLength = 1015, + /// + /// 斑块类型 + /// + PlaqueType=1018, + /// /// PAV(冠状动脉粥样硬化体积百分比) /// From 5c8ccdf434f3111de580940590fd0684e9990d07 Mon Sep 17 00:00:00 2001 From: he <109787524@qq.com> Date: Tue, 4 Aug 2026 14:10:22 +0800 Subject: [PATCH 2/5] =?UTF-8?q?=E5=AF=BC=E5=85=A5=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ReadingCalculate/IVUSCalculateService.cs | 95 ++++++++++++++++++- .../ReadingCalculate/OCTCalculateService.cs | 88 ++++++++++++++++- 2 files changed, 181 insertions(+), 2 deletions(-) diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/IVUSCalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/IVUSCalculateService.cs index 11c01d139..51733f545 100644 --- a/IRaCIS.Core.Application/Service/ReadingCalculate/IVUSCalculateService.cs +++ b/IRaCIS.Core.Application/Service/ReadingCalculate/IVUSCalculateService.cs @@ -588,7 +588,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate List measuredValueList = new List(); var errorRow = new List { }; - for (int i = 3; i < dataTable.Rows.Count; i++) + for (int i = 8; i < dataTable.Rows.Count; i++) { IVUSMeasuredValue iVUSMeasuredValue = new IVUSMeasuredValue() { }; try @@ -750,7 +750,100 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate } } + #region 构造外层问题答案 + List questionAnswers = new List(); + var readingQuestionList = await _readingQuestionTrialRepository.Where(x => x.ReadingQuestionCriterionTrialId == taskinfo.TrialReadingCriterionId).ToListAsync(); + var targetSegmentAnswer = dataTable.Rows[2]["B"].ToString(); + + if (targetSegmentAnswer.IsNotNullOrEmpty()) + { + var targetSegmentValues = targetSegmentAnswer.Replace(",", ",").Split(",").ToList(); + var targetSegmentdic = await _dictionaryRepository.Where(x => x.Parent.Code == "TargetSegment").ToListAsync(); + targetSegmentAnswer = JsonConvert.SerializeObject(targetSegmentdic.Where(x => targetSegmentValues.Contains(x.Value)).Select(x => x.Code).ToList()); + } + + questionAnswers.Add(new ReadingTaskQuestionAnswer() + { + Answer= targetSegmentAnswer??string.Empty, + ReadingQuestionCriterionTrialId = taskinfo.TrialReadingCriterionId, + ReadingQuestionTrialId = readingQuestionList.Where(x => x.QuestionType == QuestionType.TargetSegment).Select(x => x.Id).FirstOrDefault(), + TrialId = taskinfo.TrialId, + SubjectId= taskinfo.SubjectId, + VisitTaskId = taskinfo.Id, + }); + + questionAnswers.Add(new ReadingTaskQuestionAnswer() + { + Answer = dataTable.Rows[3]["B"].ToString()??string.Empty, + ReadingQuestionCriterionTrialId = taskinfo.TrialReadingCriterionId, + ReadingQuestionTrialId = readingQuestionList.Where(x => x.QuestionType == QuestionType.TargetSegmentRemarks).Select(x => x.Id).FirstOrDefault(), + TrialId = taskinfo.TrialId, + SubjectId = taskinfo.SubjectId, + VisitTaskId = taskinfo.Id, + }); + + + questionAnswers.Add(new ReadingTaskQuestionAnswer() + { + Answer = dataTable.Rows[4]["B"].ToString() ?? string.Empty, + ReadingQuestionCriterionTrialId = taskinfo.TrialReadingCriterionId, + ReadingQuestionTrialId = readingQuestionList.Where(x => x.QuestionType == QuestionType.ROIAllLength).Select(x => x.Id).FirstOrDefault(), + TrialId = taskinfo.TrialId, + SubjectId = taskinfo.SubjectId, + VisitTaskId = taskinfo.Id, + }); + + + questionAnswers.Add(new ReadingTaskQuestionAnswer() + { + Answer = dataTable.Rows[5]["B"].ToString() ?? string.Empty, + ReadingQuestionCriterionTrialId = taskinfo.TrialReadingCriterionId, + ReadingQuestionTrialId = readingQuestionList.Where(x => x.QuestionType == QuestionType.PullbackFrameCount).Select(x => x.Id).FirstOrDefault(), + TrialId = taskinfo.TrialId, + SubjectId = taskinfo.SubjectId, + VisitTaskId = taskinfo.Id, + }); + + + var plaqueTypeAnswer = dataTable.Rows[6]["B"].ToString(); + + if (plaqueTypeAnswer.IsNotNullOrEmpty()) + { + var plaqueTypeAnswerValues = plaqueTypeAnswer.Replace(",", ",").Split(",").ToList(); + var plaqueTypeAnswerdic = await _dictionaryRepository.Where(x => x.Parent.Code == "PlaqueType").ToListAsync(); + plaqueTypeAnswer = JsonConvert.SerializeObject(plaqueTypeAnswerdic + .Where(x => plaqueTypeAnswerValues.Any(val => x.Value.Contains(val))) + .Select(x => x.Code) + .ToList()); + } + + questionAnswers.Add(new ReadingTaskQuestionAnswer() + { + Answer = plaqueTypeAnswer ?? string.Empty, + ReadingQuestionCriterionTrialId = taskinfo.TrialReadingCriterionId, + ReadingQuestionTrialId = readingQuestionList.Where(x => x.QuestionType == QuestionType.PlaqueType).Select(x => x.Id).FirstOrDefault(), + TrialId = taskinfo.TrialId, + SubjectId = taskinfo.SubjectId, + VisitTaskId = taskinfo.Id, + }); + + questionAnswers.Add(new ReadingTaskQuestionAnswer() + { + Answer = dataTable.Rows[7]["B"].ToString() ?? string.Empty, + ReadingQuestionCriterionTrialId = taskinfo.TrialReadingCriterionId, + ReadingQuestionTrialId = readingQuestionList.Where(x => x.QuestionType == QuestionType.AdjustReason).Select(x => x.Id).FirstOrDefault(), + TrialId = taskinfo.TrialId, + SubjectId = taskinfo.SubjectId, + VisitTaskId = taskinfo.Id, + }); + + var questionids = questionAnswers.Select(x => x.ReadingQuestionTrialId).ToList(); + await _readingTaskQuestionAnswerRepository.DeleteFromQueryAsync(x => x.VisitTaskId == taskinfo.Id && questionids.Contains(x.ReadingQuestionTrialId)); + await _readingTableQuestionAnswerRepository.SaveChangesAsync(); + await _readingTaskQuestionAnswerRepository.AddRangeAsync(questionAnswers); + await _readingTaskQuestionAnswerRepository.SaveChangesAsync(); + #endregion await _readingTableAnswerRowInfoRepository.DeleteFromQueryAsync(x => x.QuestionId == questionInfo.Id && x.VisitTaskId == taskinfo.Id); await _readingTableQuestionAnswerRepository.DeleteFromQueryAsync(x => x.QuestionId == questionInfo.Id && x.VisitTaskId == taskinfo.Id); await _readingTableQuestionAnswerRepository.SaveChangesAsync(); diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/OCTCalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/OCTCalculateService.cs index 8f2bcc7ab..5f0d3c305 100644 --- a/IRaCIS.Core.Application/Service/ReadingCalculate/OCTCalculateService.cs +++ b/IRaCIS.Core.Application/Service/ReadingCalculate/OCTCalculateService.cs @@ -329,8 +329,9 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate TargetSegmentRemarks = awswerList.Where(x => x.ReadingQuestionTrial.QuestionType == QuestionType.TargetSegmentRemarks).Select(x => x.Answer).FirstOrDefault() ?? string.Empty, ROIAllLength = awswerList.Where(x => x.ReadingQuestionTrial.QuestionType == QuestionType.ROIAllLength).Select(x => x.Answer).FirstOrDefault() ?? string.Empty, //PullbackFrameCount = awswerList.Where(x => x.ReadingQuestionTrial.QuestionType == QuestionType.PullbackFrameCount).Select(x => x.Answer).FirstOrDefault() ?? string.Empty, - AdjustReason = awswerList.Where(x => x.ReadingQuestionTrial.QuestionType == QuestionType.AdjustReason).Select(x => x.Answer).FirstOrDefault() ?? string.Empty, PlaqueType = plaqueTypeAnswer, + AdjustReason = awswerList.Where(x => x.ReadingQuestionTrial.QuestionType == QuestionType.AdjustReason).Select(x => x.Answer).FirstOrDefault() ?? string.Empty, + @@ -723,6 +724,91 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate } } + + #region 构造外层问题答案 + List questionAnswers = new List(); + + var readingQuestionList = await _readingQuestionTrialRepository.Where(x => x.ReadingQuestionCriterionTrialId == taskinfo.TrialReadingCriterionId).ToListAsync(); + var targetSegmentAnswer = dataTable.Rows[2]["B"].ToString(); + + if (targetSegmentAnswer.IsNotNullOrEmpty()) + { + var targetSegmentValues = targetSegmentAnswer.Replace(",", ",").Split(",").ToList(); + var targetSegmentdic = await _dictionaryRepository.Where(x => x.Parent.Code == "TargetSegment").ToListAsync(); + targetSegmentAnswer = JsonConvert.SerializeObject(targetSegmentdic.Where(x => targetSegmentValues.Contains(x.Value)).Select(x => x.Code).ToList()); + } + + questionAnswers.Add(new ReadingTaskQuestionAnswer() + { + Answer = targetSegmentAnswer ?? string.Empty, + ReadingQuestionCriterionTrialId = taskinfo.TrialReadingCriterionId, + ReadingQuestionTrialId = readingQuestionList.Where(x => x.QuestionType == QuestionType.TargetSegment).Select(x => x.Id).FirstOrDefault(), + TrialId = taskinfo.TrialId, + SubjectId = taskinfo.SubjectId, + VisitTaskId = taskinfo.Id, + }); + + questionAnswers.Add(new ReadingTaskQuestionAnswer() + { + Answer = dataTable.Rows[3]["B"].ToString() ?? string.Empty, + ReadingQuestionCriterionTrialId = taskinfo.TrialReadingCriterionId, + ReadingQuestionTrialId = readingQuestionList.Where(x => x.QuestionType == QuestionType.TargetSegmentRemarks).Select(x => x.Id).FirstOrDefault(), + TrialId = taskinfo.TrialId, + SubjectId = taskinfo.SubjectId, + VisitTaskId = taskinfo.Id, + }); + + + questionAnswers.Add(new ReadingTaskQuestionAnswer() + { + Answer = dataTable.Rows[4]["B"].ToString() ?? string.Empty, + ReadingQuestionCriterionTrialId = taskinfo.TrialReadingCriterionId, + ReadingQuestionTrialId = readingQuestionList.Where(x => x.QuestionType == QuestionType.ROIAllLength).Select(x => x.Id).FirstOrDefault(), + TrialId = taskinfo.TrialId, + SubjectId = taskinfo.SubjectId, + VisitTaskId = taskinfo.Id, + }); + + + var plaqueTypeAnswer = dataTable.Rows[5]["B"].ToString(); + + if (plaqueTypeAnswer.IsNotNullOrEmpty()) + { + var plaqueTypeAnswerValues = plaqueTypeAnswer.Replace(",", ",").Split(",").ToList(); + var plaqueTypeAnswerdic = await _dictionaryRepository.Where(x => x.Parent.Code == "PlaqueType").ToListAsync(); + plaqueTypeAnswer = JsonConvert.SerializeObject(plaqueTypeAnswerdic + .Where(x => plaqueTypeAnswerValues.Any(val => x.Value.Contains(val))) + .Select(x => x.Code) + .ToList()); + } + + questionAnswers.Add(new ReadingTaskQuestionAnswer() + { + Answer = plaqueTypeAnswer ?? string.Empty, + ReadingQuestionCriterionTrialId = taskinfo.TrialReadingCriterionId, + ReadingQuestionTrialId = readingQuestionList.Where(x => x.QuestionType == QuestionType.PlaqueType).Select(x => x.Id).FirstOrDefault(), + TrialId = taskinfo.TrialId, + SubjectId = taskinfo.SubjectId, + VisitTaskId = taskinfo.Id, + }); + + questionAnswers.Add(new ReadingTaskQuestionAnswer() + { + Answer = dataTable.Rows[6]["B"].ToString() ?? string.Empty, + ReadingQuestionCriterionTrialId = taskinfo.TrialReadingCriterionId, + ReadingQuestionTrialId = readingQuestionList.Where(x => x.QuestionType == QuestionType.AdjustReason).Select(x => x.Id).FirstOrDefault(), + TrialId = taskinfo.TrialId, + SubjectId = taskinfo.SubjectId, + VisitTaskId = taskinfo.Id, + }); + + var questionids = questionAnswers.Select(x => x.ReadingQuestionTrialId).ToList(); + await _readingTaskQuestionAnswerRepository.DeleteFromQueryAsync(x => x.VisitTaskId == taskinfo.Id && questionids.Contains(x.ReadingQuestionTrialId)); + await _readingTableQuestionAnswerRepository.SaveChangesAsync(); + await _readingTaskQuestionAnswerRepository.AddRangeAsync(questionAnswers); + await _readingTaskQuestionAnswerRepository.SaveChangesAsync(); + #endregion + await _readingTableAnswerRowInfoRepository.DeleteFromQueryAsync(x => x.QuestionId == questionInfo.Id && x.VisitTaskId == taskinfo.Id); await _readingTableQuestionAnswerRepository.DeleteFromQueryAsync(x => x.QuestionId == questionInfo.Id && x.VisitTaskId == taskinfo.Id); await _readingTableQuestionAnswerRepository.SaveChangesAsync(); From 739f610d4e7ace4ac5544d0783b5ecb58fe93dd5 Mon Sep 17 00:00:00 2001 From: he <109787524@qq.com> Date: Tue, 4 Aug 2026 14:15:13 +0800 Subject: [PATCH 3/5] =?UTF-8?q?=E5=AD=97=E5=85=B8=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/ReadingCalculate/IVUSCalculateService.cs | 8 ++++---- .../Service/ReadingCalculate/OCTCalculateService.cs | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/IVUSCalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/IVUSCalculateService.cs index 51733f545..cc51931d6 100644 --- a/IRaCIS.Core.Application/Service/ReadingCalculate/IVUSCalculateService.cs +++ b/IRaCIS.Core.Application/Service/ReadingCalculate/IVUSCalculateService.cs @@ -438,7 +438,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate var data= JsonConvert.DeserializeObject>(targetSegmentAnswer); targetSegmentAnswer = string.Join(",", targetSegmentdic .Where(x => data.Contains(x.Code)) - .Select(x => x.Value)); + .Select(x => x.ValueCN)); } else { @@ -460,7 +460,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate var data = JsonConvert.DeserializeObject>(plaqueTypeAnswer); plaqueTypeAnswer = string.Join(",", plaqueTypedic .Where(x => data.Contains(x.Code)) - .Select(x => x.Value)); + .Select(x => x.ValueCN)); } @@ -760,7 +760,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate { var targetSegmentValues = targetSegmentAnswer.Replace(",", ",").Split(",").ToList(); var targetSegmentdic = await _dictionaryRepository.Where(x => x.Parent.Code == "TargetSegment").ToListAsync(); - targetSegmentAnswer = JsonConvert.SerializeObject(targetSegmentdic.Where(x => targetSegmentValues.Contains(x.Value)).Select(x => x.Code).ToList()); + targetSegmentAnswer = JsonConvert.SerializeObject(targetSegmentdic.Where(x => targetSegmentValues.Contains(x.ValueCN)).Select(x => x.Code).ToList()); } questionAnswers.Add(new ReadingTaskQuestionAnswer() @@ -813,7 +813,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate var plaqueTypeAnswerValues = plaqueTypeAnswer.Replace(",", ",").Split(",").ToList(); var plaqueTypeAnswerdic = await _dictionaryRepository.Where(x => x.Parent.Code == "PlaqueType").ToListAsync(); plaqueTypeAnswer = JsonConvert.SerializeObject(plaqueTypeAnswerdic - .Where(x => plaqueTypeAnswerValues.Any(val => x.Value.Contains(val))) + .Where(x => plaqueTypeAnswerValues.Any(val => x.ValueCN.Contains(val))) .Select(x => x.Code) .ToList()); } diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/OCTCalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/OCTCalculateService.cs index 5f0d3c305..c10997fda 100644 --- a/IRaCIS.Core.Application/Service/ReadingCalculate/OCTCalculateService.cs +++ b/IRaCIS.Core.Application/Service/ReadingCalculate/OCTCalculateService.cs @@ -295,7 +295,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate var data = JsonConvert.DeserializeObject>(targetSegmentAnswer); targetSegmentAnswer = string.Join(",", targetSegmentdic .Where(x => data.Contains(x.Code)) - .Select(x => x.Value)); + .Select(x => x.ValueCN)); } else { @@ -317,7 +317,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate var data = JsonConvert.DeserializeObject>(plaqueTypeAnswer); plaqueTypeAnswer = string.Join(",", plaqueTypedic .Where(x => data.Contains(x.Code)) - .Select(x => x.Value)); + .Select(x => x.ValueCN)); } @@ -735,7 +735,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate { var targetSegmentValues = targetSegmentAnswer.Replace(",", ",").Split(",").ToList(); var targetSegmentdic = await _dictionaryRepository.Where(x => x.Parent.Code == "TargetSegment").ToListAsync(); - targetSegmentAnswer = JsonConvert.SerializeObject(targetSegmentdic.Where(x => targetSegmentValues.Contains(x.Value)).Select(x => x.Code).ToList()); + targetSegmentAnswer = JsonConvert.SerializeObject(targetSegmentdic.Where(x => targetSegmentValues.Contains(x.ValueCN)).Select(x => x.Code).ToList()); } questionAnswers.Add(new ReadingTaskQuestionAnswer() @@ -777,7 +777,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate var plaqueTypeAnswerValues = plaqueTypeAnswer.Replace(",", ",").Split(",").ToList(); var plaqueTypeAnswerdic = await _dictionaryRepository.Where(x => x.Parent.Code == "PlaqueType").ToListAsync(); plaqueTypeAnswer = JsonConvert.SerializeObject(plaqueTypeAnswerdic - .Where(x => plaqueTypeAnswerValues.Any(val => x.Value.Contains(val))) + .Where(x => plaqueTypeAnswerValues.Any(val => x.ValueCN.Contains(val))) .Select(x => x.Code) .ToList()); } From c5eaf847cc1644e04e06d03f634e40872059f464 Mon Sep 17 00:00:00 2001 From: he <109787524@qq.com> Date: Tue, 4 Aug 2026 14:27:46 +0800 Subject: [PATCH 4/5] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=A1=8C=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/ReadingCalculate/IVUSCalculateService.cs | 2 +- .../Service/ReadingCalculate/OCTCalculateService.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/IVUSCalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/IVUSCalculateService.cs index cc51931d6..672413414 100644 --- a/IRaCIS.Core.Application/Service/ReadingCalculate/IVUSCalculateService.cs +++ b/IRaCIS.Core.Application/Service/ReadingCalculate/IVUSCalculateService.cs @@ -588,7 +588,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate List measuredValueList = new List(); var errorRow = new List { }; - for (int i = 8; i < dataTable.Rows.Count; i++) + for (int i = 9; i < dataTable.Rows.Count; i++) { IVUSMeasuredValue iVUSMeasuredValue = new IVUSMeasuredValue() { }; try diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/OCTCalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/OCTCalculateService.cs index c10997fda..9f949fe33 100644 --- a/IRaCIS.Core.Application/Service/ReadingCalculate/OCTCalculateService.cs +++ b/IRaCIS.Core.Application/Service/ReadingCalculate/OCTCalculateService.cs @@ -416,7 +416,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate return value; } } - for (int i = 3; i < dataTable.Rows.Count; i++) + for (int i = 8; i < dataTable.Rows.Count; i++) { try { From ef7f0ebc4a434521574230203f9cb3176ccf5042 Mon Sep 17 00:00:00 2001 From: he <109787524@qq.com> Date: Tue, 4 Aug 2026 14:32:19 +0800 Subject: [PATCH 5/5] =?UTF-8?q?=E9=87=8D=E6=96=B0=E5=8F=91=E5=B8=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/ReadingCalculate/OCTCalculateService.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/OCTCalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/OCTCalculateService.cs index 9f949fe33..e5bdc061b 100644 --- a/IRaCIS.Core.Application/Service/ReadingCalculate/OCTCalculateService.cs +++ b/IRaCIS.Core.Application/Service/ReadingCalculate/OCTCalculateService.cs @@ -421,6 +421,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate try { + // 手动抛出异常进入catch if (!yesOrNo.ContainsKey(dataTable.Rows[i]["K"].ToString())|| !yesOrNo.ContainsKey(dataTable.Rows[i]["L"].ToString())) {