ivus-oct-导表修改-uat-2
continuous-integration/drone/push Build is failing Details

Test_IRC_Net8
hang 2025-12-09 14:37:42 +08:00
parent a592a39fae
commit 7a0b29bda6
2 changed files with 77 additions and 21 deletions

View File

@ -15,6 +15,8 @@ public class TumorCommonQustionInfo
//问题标识,肿瘤评估用于区分是什么问题
public QuestionType? QuestionType { get; set; }
public OptionType OptionTypeEnum { get; set; }
public Guid QuestionId { get; set; }
public string QuestionName { get; set; }
@ -51,6 +53,8 @@ public class TumorLessionAnswerInfo
{
public QuestionMark? QuestionMark { get; set; }
public OptionType OptionTypeEnum { get; set; }
//病灶Id
public Guid RowId { get; set; }

View File

@ -1,4 +1,5 @@
using IRaCIS.Application.Contracts;
using DocumentFormat.OpenXml.Spreadsheet;
using IRaCIS.Application.Contracts;
using IRaCIS.Application.Interfaces;
using IRaCIS.Core.Application.Helper;
using IRaCIS.Core.Application.ViewModel;
@ -10,7 +11,9 @@ using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc;
using MiniExcelLibs;
using MiniExcelLibs.OpenXml;
using Newtonsoft.Json;
using NPOI.SS.Formula.Functions;
using Org.BouncyCastle.Asn1.X509;
using System;
using System.Collections;
using System.Collections.Generic;
@ -279,6 +282,7 @@ public class IVUS_OCTExportService(IRepository<ReadingQuestionCriterionTrial> _r
.Select(c => new TumorCommonQustionInfo()
{
QuestionType = c.ReadingQuestionTrial.QuestionType,
OptionTypeEnum = c.ReadingQuestionTrial.OptionTypeEnum,
QuestionId = c.ReadingQuestionTrial.Id,
QuestionName = isEn_Us ? c.ReadingQuestionTrial.QuestionEnName : c.ReadingQuestionTrial.QuestionName,
QuestionValue = c.IsGlobalChange ? c.GlobalChangeAnswer : c.Answer,
@ -301,6 +305,7 @@ public class IVUS_OCTExportService(IRepository<ReadingQuestionCriterionTrial> _r
{
RowId = k.RowId,
OptionTypeEnum = k.ReadingTableQuestionTrial.OptionTypeEnum,
TranslateDicName = k.ReadingTableQuestionTrial.DictionaryCode,
QuestionMark = k.ReadingTableQuestionTrial.QuestionMark,
TableQuesionId = k.ReadingTableQuestionTrial.Id,
@ -359,9 +364,12 @@ public class IVUS_OCTExportService(IRepository<ReadingQuestionCriterionTrial> _r
#region 字典和各个表的数组准备
var dicNameList = new List<string>() { "ArmEnum", "ValueUnit" }
var dicNameList = taskList.SelectMany(t => t.QuestionAnswerList).Select(t => t.TranslateDicName)
.Union(taskList.SelectMany(t => t.LesionList).SelectMany(t => t.LessionAnswerList).Where(t => t.TranslateDicName.IsNotNullOrEmpty()).Select(c => c.TranslateDicName))
.Union(new List<string>() { "ArmEnum", "ValueUnit" })
.Distinct().ToArray();
//翻译字典
var translateDataList = await _dictionaryService.GetBasicDataSelect(dicNameList);
@ -393,7 +401,9 @@ public class IVUS_OCTExportService(IRepository<ReadingQuestionCriterionTrial> _r
//靶段
ivus.TARGETV = task.QuestionAnswerList.Where(t => t.QuestionType == QuestionType.TargetSegment).FirstOrDefault()?.QuestionValue ?? string.Empty;
var target = task.QuestionAnswerList.Where(t => t.QuestionType == QuestionType.TargetSegment).FirstOrDefault();
ivus.TARGETV = translateDataList[target?.TranslateDicName].Where(t => t.Code.ToLower() == target?.QuestionValue?.ToLower()).Select(t => isEn_Us ? t.Value : t.ValueCN).FirstOrDefault() ?? String.Empty;
var marks = task.QuestionAnswerList.Where(t => t.QuestionType == QuestionType.TargetSegmentRemarks).FirstOrDefault()?.QuestionValue ?? string.Empty;
@ -478,19 +488,19 @@ public class IVUS_OCTExportService(IRepository<ReadingQuestionCriterionTrial> _r
case QuestionMark.AvgFCT:
mark = "AVGFCT";
break;
case QuestionMark.MacrophageInfiltration:
case QuestionMark.MacrophageInfiltrationMeasurement:
mark = "MACRI";
break;
case QuestionMark.MacrophageExtensionAngle:
case QuestionMark.MacrophageInfiltrationAngle:
mark = "MIARC";
break;
case QuestionMark.Microchannels:
case QuestionMark.MicrochannelMeasurement:
mark = "MC";
break;
case QuestionMark.CholesterolCrystallization:
case QuestionMark.CholesterolCrystalMeasurement:
mark = "CCS";
break;
case QuestionMark.LumenArea:
case QuestionMark.LumenAreaMeasurement:
mark = "LUMEN";
break;
@ -499,7 +509,7 @@ public class IVUS_OCTExportService(IRepository<ReadingQuestionCriterionTrial> _r
if (mark.IsNotNullOrEmpty())
{
var oct = CreatOCT(task, pNo);
var oct = CreatOCT(task, pNo, translateDataList);
// 测量标识 阅片人_斑块号_表格_行号
@ -630,7 +640,7 @@ public class IVUS_OCTExportService(IRepository<ReadingQuestionCriterionTrial> _r
if (findAngle != null)
{
var oct = CreatOCT(task, pNo);
var oct = CreatOCT(task, pNo, translateDataList);
// 测量标识
@ -698,15 +708,20 @@ public class IVUS_OCTExportService(IRepository<ReadingQuestionCriterionTrial> _r
}
private OctExportDto CreatOCT(IVUS_OCTBaseDto task, string pNo)
private OctExportDto CreatOCT(IVUS_OCTBaseDto task, string pNo, Dictionary<string, List<BasicDicSelectCopy>> translateDataList)
{
var isEn_US = CultureInfo.CurrentCulture.Name == StaticData.CultureInfo.en_US;
var oct = _mapper.Map<OctExportDto>(task);
//靶段
//靶段
oct.TARGETV = task.QuestionAnswerList.Where(t => t.QuestionType == QuestionType.TargetSegment).FirstOrDefault()?.QuestionValue ?? string.Empty;
var target = task.QuestionAnswerList.Where(t => t.QuestionType == QuestionType.TargetSegment).FirstOrDefault();
oct.TARGETV = translateDataList[target?.TranslateDicName].Where(t => t.Code.ToLower() == target?.QuestionValue?.ToLower()).Select(t => isEn_US ? t.Value : t.ValueCN).FirstOrDefault() ?? String.Empty;
var marks = task.QuestionAnswerList.Where(t => t.QuestionType == QuestionType.TargetSegmentRemarks).FirstOrDefault()?.QuestionValue ?? string.Empty;
@ -723,7 +738,44 @@ public class IVUS_OCTExportService(IRepository<ReadingQuestionCriterionTrial> _r
&& t.LessionAnswerList.Any(t => t.QuestionMark == QuestionMark.PlaqueNumber && t.QuestionValue == pNo)).FirstOrDefault();
// 斑块类型
oct.PLATYPE = findLession?.LessionAnswerList.Where(t => t.QuestionMark == QuestionMark.Undetermined).FirstOrDefault()?.QuestionValue ?? string.Empty;
var undetermined = findLession?.LessionAnswerList.Where(t => t.QuestionMark == QuestionMark.Undetermined).FirstOrDefault();
if (undetermined?.OptionTypeEnum == OptionType.Multiple)
{
var qValue = undetermined?.QuestionValue;
int[] enumValues = new int[0];
// 1. 反序列化 JSON 数组 (字符串枚举)
if (!qValue.StartsWith("[") || !qValue.EndsWith("]"))
{
enumValues = new int[1] { int.Parse(qValue) };
}
else
{
enumValues = JsonConvert.DeserializeObject<int[]>(qValue) ?? new int[0];
}
// 2. 翻译每一项并输出逗号拼接字符串
var tValue = string.Join(",",
enumValues.Select(code =>
translateDataList[undetermined.TranslateDicName]
.FirstOrDefault(t =>
string.Equals(code.ToString(), t.Code, StringComparison.OrdinalIgnoreCase)
) is var r && r != null
? (isEn_US ? r.Value : r.ValueCN)
: string.Empty
));
oct.PLATYPE = tValue;
}
else
{
oct.PLATYPE = translateDataList[undetermined?.TranslateDicName].Where(t => t.Code.ToLower() == undetermined?.QuestionValue?.ToLower()).Select(t => isEn_US ? t.Value : t.ValueCN).FirstOrDefault() ?? String.Empty;
}
// 匹配动脉段最小FCT
oct.MINFCT = findLession?.LessionAnswerList.Where(t => t.QuestionMark == QuestionMark.MiniMumFCT).FirstOrDefault()?.QuestionValue ?? string.Empty;
// 平均最小FCT