修改CDISC 多表导出

Temp_Event_IRC_Met8
hang 2025-06-04 10:20:47 +08:00
parent e4ad1c0653
commit 2cb196200a
6 changed files with 211 additions and 3 deletions

View File

@ -243,6 +243,7 @@ public static class ExcelExportHelper
}
public class DynamicColumnConfig
{
/// <summary>

View File

@ -2880,13 +2880,184 @@ namespace IRaCIS.Core.Application.Service.Common
TranslateDicNameList = translateDicNameList
};
if (export_Template == StaticData.Export.ReadingLession_Export || export_Template == StaticData.Export.CommonJudgeReadingDetail_Export)
{
dynamicColumnConfig.TempalteLastColumnIndex = 8;
}
}
else
{
//CDISC 导出 只到外层问题级别 使用Id 填充Excel
if (criterion.CriterionType == CriterionType.SelfDefine)
{
//最终EXCEL 列
var configCoumNameList = new List<DynamicColumnConfig.ColumItem>();
//表格全问题名
var trialConfigTableQuestionList = _trialReadingTableQuestionRepository.Where(t => t.TrialId == trialId && t.TrialCriterionId == trialReadingCriterionId).Where(t => t.ExportResultStr.Contains(((int)inQuery.ReadingExportType).ToString()))
.Select(t => new ExportQuestionBasicInfo()
{
QuestionId = t.Id,
TableName = _userInfo.IsEn_Us ? t.ReadingQuestionTrial.QuestionEnName : t.ReadingQuestionTrial.QuestionName,
QuestionName = _userInfo.IsEn_Us ? t.QuestionEnName : t.QuestionName,
CDISCCode = t.CDISCCode,
TranslateDicName = t.DictionaryCode,
ShowOrder = t.ShowOrder
}).OrderBy(t => t.TableName).ThenBy(t => t.ShowOrder).ToList();
var isMutiTable = trialConfigTableQuestionList.Select(t => t.TableName).Distinct().Count() > 1;
//外层问题处理
var fistLeveLNameList = trialConfigQuestionList.Select(t => new DynamicColumnConfig.ColumItem()
{
Id = t.QuestionId,
Name = t.QuestionName,
CDISCCode = t.CDISCCode
}).ToList();
var translateDicNameList = trialConfigQuestionList.Union(trialConfigTableQuestionList).Where(t => t.TranslateDicName.IsNotNullOrEmpty()).Select(t => t.TranslateDicName).Distinct().ToList();
//单表格问题(直接用表格问题名称) 或者没有表格问题
if (isMutiTable == false)
{
//一个表格,或者没有表格
var tableNameList = trialConfigTableQuestionList.Select(t => new DynamicColumnConfig.ColumItem() { Id = t.QuestionId, Name = t.QuestionName, CDISCCode = t.CDISCCode }).ToList();
configCoumNameList = fistLeveLNameList.Union(tableNameList).ToList();
//最终的病灶列表 要把裁判的也要加进去,需要处理裁判标记
foreach (var item in taskList.OrderBy(t => t.SubjectCode).ThenBy(t => t.ArmEnum).ThenBy(t => t.VisitTaskNum))
{
//有病灶,并且至少配置了一个病灶问题
if (item.LesionList.Count > 0 && item.LesionList.SelectMany(t => t.LessionAnswerList).Any())
{
foreach (var lession in item.LesionList.OrderBy(t => t.LessionType).ThenBy(t => t.LessionCode))
{
//病灶配置了问题 才进行导出
if (lession.LessionAnswerList.Count > 0)
{
var dynamicLessionInfoList = new List<CommonQuesionInfo>();
var dynamicPartialLessionInfoList = lession.LessionAnswerList.Select(t => new CommonQuesionInfo() { QuestionId = t.TableQuesionId, QuestionName = t.QuestionName, QuestionValue = t.QuestionValue, TranslateDicName = t.TranslateDicName, CDISCCode = t.CDISCCode });
//两部分组成 外层问题+ 动态的表格问题
dynamicLessionInfoList = item.QuestionAnswerList.Union(dynamicPartialLessionInfoList).ToList();
var cloneItem = item.Clone();
cloneItem.QuestionAnswerList = dynamicLessionInfoList;
list.Add(cloneItem);
}
}
}
else
{
//要把裁判任务加进去 裁判任务上没有病灶
list.Add(item);
}
}
}
else
{
//多表格问题,需要用新的模板,并且用行的方式展示 不是之前表格名称_表格子问题名的方式
export_Template = StaticData.Export.CDISC_MutiTable_Reading_Export;
configCoumNameList = fistLeveLNameList.ToList();
var translateUnitList = await _dictionaryService.GetBasicDataSelect("ValueUnit");
foreach (var item in taskList.OrderBy(t => t.SubjectCode).ThenBy(t => t.ArmEnum).ThenBy(t => t.VisitTaskNum))
{
//有病灶,并且至少配置了一个病灶问题
if (item.LesionList.Count > 0 && item.LesionList.SelectMany(t => t.LessionAnswerList).Any())
{
foreach (var lession in item.LesionList.OrderBy(t => t.LessionType).ThenBy(t => t.LessionCode))
{
//病灶配置了问题 才进行导出
if (lession.LessionAnswerList.Count > 0)
{
//遍历病灶的每个问题
foreach (var lessionItem in lession.LessionAnswerList)
{
var cloneItem = item.Clone();
string unitText = lessionItem.Unit switch
{
ValueUnit.Custom => lessionItem.CustomUnit,
null => "",
_ => _userInfo.IsEn_Us ? translateUnitList.FirstOrDefault(t => t.Code == ((int)lessionItem.Unit).ToString())?.Value ?? ""
: translateUnitList.FirstOrDefault(t => t.Code == ((int)lessionItem.Unit).ToString())?.ValueCN ?? ""
};
cloneItem.Group = lessionItem.TableName;
cloneItem.TRLINKID = lessionItem.RowId.ToString();
cloneItem.TRORRES = lessionItem.CDISCCode;
cloneItem.TRTEST = lessionItem.QuestionValue;
cloneItem.TRORRESU = unitText;
list.Add(cloneItem);
}
//var dynamicLessionInfoList = new List<CommonQuesionInfo>();
//var dynamicPartialLessionInfoList = lession.LessionAnswerList.Select(t => new CommonQuesionInfo() { QuestionId = t.TableQuesionId, QuestionName = t.QuestionName, QuestionValue = t.QuestionValue, TranslateDicName = t.TranslateDicName, CDISCCode = t.CDISCCode });
////两部分组成 外层问题+ 动态的表格问题
//dynamicLessionInfoList = item.QuestionAnswerList.Union(dynamicPartialLessionInfoList).ToList();
}
}
}
else
{
//要把裁判任务加进去 裁判任务上没有病灶
list.Add(item);
}
}
}
dynamicColumnConfig = new DynamicColumnConfig()
{
AutoColumnTitleRowIndex = 1,
AutoColumnStartIndex = 6,
TempalteLastColumnIndex = 15,
DynamicItemDicName = "TranslateDicName",
DynamicItemValueName = "QuestionValue",
DynamicItemTitleName = "QuestionName",
DynamicItemTitleId = "QuestionId",
DynamicListName = "QuestionAnswerList",
RemoveColunmIndexList = removeColumnIndexList,
ColumnIdNameList = configCoumNameList,
IsCDISCExport = true,
//CDISCList = cdiscCodeList,
TranslateDicNameList = translateDicNameList
};
}
else
{
//CDISC 导出 只到外层问题级别 使用Id 填充Excel
var totalConfigCoumNameList = trialConfigQuestionList.ToList();

View File

@ -31,5 +31,7 @@ namespace IRaCIS.Application.Interfaces
Task<Dictionary<string, List<BasicDicSelectCopy>>> GetBasicDataSelect(string[] searchArray);
Task<List<BasicDicSelect>> GetBasicDataSelect(string searchKey);
}
}

View File

@ -1310,6 +1310,7 @@ namespace IRaCIS.Core.Application.Contracts
//阅片完成时间
public DateTime? SignTime { get; set; }
#endregion
#region 肿瘤学结果
@ -1322,6 +1323,23 @@ namespace IRaCIS.Core.Application.Contracts
public string OncologyUserName { get; set; }
#endregion
#region CDISC 固定字段
//组
public string Group { get; set; }
//行标识
public string TRLINKID { get; set; }
//列名
public string TRTEST { get; set; }
//值
public string TRORRES { get; set; }
//单位
public string TRORRESU { get; set; }
#endregion
}
public class CommonLessionExport : CommonEvaluationExport
@ -1356,6 +1374,17 @@ namespace IRaCIS.Core.Application.Contracts
public string CDISCCode { get; set; }
//病灶Id
public Guid RowId { get; set; }
//如果是4 就取CustomUnit 否则就是字典翻译
[Comment("单位")]
public ValueUnit? Unit { get; set; }
[Comment("自定义单位")]
public string CustomUnit { get; set; } = string.Empty;
#endregion

View File

@ -299,8 +299,11 @@ namespace IRaCIS.Core.Application.Service
CreateMap<ReadingTableQuestionAnswer, CommonLessionQuestionAnswerInfo>()
//.ForMember(o => o.LessionCode, t => t.MapFrom(u => u.Lesion.RowMark))
//.ForMember(o => o.LessionType, t => t.MapFrom(u => (int?)u.ReadingQuestionTrial.LesionType))
.ForMember(o => o.CustomUnit, t => t.MapFrom(u => u.ReadingTableQuestionTrial.CustomUnit))
.ForMember(o => o.Unit, t => t.MapFrom(u => u.ReadingTableQuestionTrial.Unit))
.ForMember(o => o.TableQuesionId, t => t.MapFrom(u => u.ReadingTableQuestionTrial.Id))
.ForMember(o => o.QuestionMark, t => t.MapFrom(u => u.ReadingTableQuestionTrial.QuestionMark))
.ForMember(o => o.TableQuesionId, t => t.MapFrom(u => u.ReadingTableQuestionTrial.Id))
.ForMember(o => o.QuestionName, t => t.MapFrom(u => isEn_Us ? u.ReadingTableQuestionTrial.QuestionEnName : u.ReadingTableQuestionTrial.QuestionName))
.ForMember(o => o.QuestionValue, t => t.MapFrom(u => u.Answer))
.ForMember(o => o.CDISCCode, t => t.MapFrom(u => u.ReadingTableQuestionTrial.CDISCCode))

View File

@ -287,7 +287,9 @@ public static class StaticData
public const string OCT_ReadingLession_Export = "OCT_ReadingLession_Export";
public const string CDISC_Reading_Export = "CDISC_Reading_Export";
public const string CDISC_MutiTable_Reading_Export = "CDISC_MutiTable_Reading_Export";
public const string IVUSTheMeasuredValueOfEachMatchedFragment = "IVUS_TheMeasuredValueOfEachMatchedFragment";