diff --git a/IRaCIS.Core.Application/Helper/FileDocProcess/ExcelExportHelper.cs b/IRaCIS.Core.Application/Helper/FileDocProcess/ExcelExportHelper.cs index 5732f30e2..acb545038 100644 --- a/IRaCIS.Core.Application/Helper/FileDocProcess/ExcelExportHelper.cs +++ b/IRaCIS.Core.Application/Helper/FileDocProcess/ExcelExportHelper.cs @@ -243,6 +243,7 @@ public static class ExcelExportHelper } + public class DynamicColumnConfig { /// diff --git a/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs b/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs index faf0a5e7c..5d7f36088 100644 --- a/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs +++ b/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs @@ -2900,6 +2900,9 @@ namespace IRaCIS.Core.Application.Service.Common 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() { @@ -2910,96 +2913,128 @@ namespace IRaCIS.Core.Application.Service.Common var translateDicNameList = trialConfigQuestionList.Union(trialConfigTableQuestionList).Where(t => t.TranslateDicName.IsNotNullOrEmpty()).Select(t => t.TranslateDicName).Distinct().ToList(); - #region 表格问题处理 问题名称是 表格名称_表格子问题名 - - var isMutiTable = trialConfigTableQuestionList.Select(t => t.TableName).Distinct().Count() > 1; - - //多表格问题 - if (isMutiTable) + //单表格问题(直接用表格问题名称) 或者没有表格问题 + if (isMutiTable == false) { - //多表格,增加的一列,就用Guid.Empty 标识 - //var extralNameList = new List() { new DynamicColumnConfig.ColumItem() { Id = Guid.Empty, Name = _userInfo.IsEn_Us ? "Table Name" : "表格名称" } }; - - var tableQuestionNameList = trialConfigTableQuestionList.Select(t => new DynamicColumnConfig.ColumItem() { Id = t.QuestionId, Name = t.TableName + "_" + t.QuestionName, CDISCCode = t.CDISCCode }).ToList(); - - configCoumNameList = fistLeveLNameList/*.Union(extralNameList)*/.Union(tableQuestionNameList).ToList(); - } - else - { - //单表格问题(直接用表格问题名称) 或者没有表格问题 - + //一个表格,或者没有表格 var tableNameList = trialConfigTableQuestionList.Select(t => new DynamicColumnConfig.ColumItem() { Id = t.QuestionId, Name = t.QuestionName, CDISCCode = t.CDISCCode }).ToList(); configCoumNameList = fistLeveLNameList.Union(tableNameList).ToList(); - } - - - - #region 扩展表格问题 - - - //最终的病灶列表 要把裁判的也要加进去,需要处理裁判标记 - 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 item in taskList.OrderBy(t => t.SubjectCode).ThenBy(t => t.ArmEnum).ThenBy(t => t.VisitTaskNum)) { - foreach (var lession in item.LesionList.OrderBy(t => t.LessionType).ThenBy(t => t.LessionCode)) + //有病灶,并且至少配置了一个病灶问题 + if (item.LesionList.Count > 0 && item.LesionList.SelectMany(t => t.LessionAnswerList).Any()) { - //病灶配置了问题 才进行导出 - if (lession.LessionAnswerList.Count > 0) + foreach (var lession in item.LesionList.OrderBy(t => t.LessionType).ThenBy(t => t.LessionCode)) { - var firstLessionAnser = lession.LessionAnswerList.FirstOrDefault(); - - var dynamicLessionInfoList = new List(); - - if (isMutiTable) + //病灶配置了问题 才进行导出 + if (lession.LessionAnswerList.Count > 0) { - var addLessionInfoList = new List(); - //addLessionInfoList.Add(new CommonQuesionInfo() { QuestionId = Guid.Empty, QuestionName = _userInfo.IsEn_Us ? "Table Name" : "表格名称", QuestionValue = firstLessionAnser.TableName }); + var dynamicLessionInfoList = new List(); - var dynamicPartialLessionInfoList = lession.LessionAnswerList.Select(t => new CommonQuesionInfo() { QuestionId = t.TableQuesionId, QuestionName = t.TableName + "_" + t.QuestionName, QuestionValue = t.QuestionValue, TranslateDicName = t.TranslateDicName, CDISCCode = t.CDISCCode }); - //有三部分组成 外层问题+ 固定列表格名称 + 动态的表格问题 - dynamicLessionInfoList = item.QuestionAnswerList.Union(addLessionInfoList).Union(dynamicPartialLessionInfoList).ToList(); - } - else - { 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); } - - - var cloneItem = item.Clone(); - cloneItem.QuestionAnswerList = dynamicLessionInfoList; - list.Add(cloneItem); } - } - } - else - { - //要把裁判任务加进去 裁判任务上没有病灶 + else + { + //要把裁判任务加进去 裁判任务上没有病灶 + + list.Add(item); + } - 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(); + + //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); + } + + } + } - #endregion - #endregion dynamicColumnConfig = new DynamicColumnConfig() { AutoColumnTitleRowIndex = 1, AutoColumnStartIndex = 6, - TempalteLastColumnIndex = 10, + TempalteLastColumnIndex = 15, DynamicItemDicName = "TranslateDicName", DynamicItemValueName = "QuestionValue", DynamicItemTitleName = "QuestionName", diff --git a/IRaCIS.Core.Application/Service/Common/Interface/IDictionaryService.cs b/IRaCIS.Core.Application/Service/Common/Interface/IDictionaryService.cs index 7054cfc80..502af8f0c 100644 --- a/IRaCIS.Core.Application/Service/Common/Interface/IDictionaryService.cs +++ b/IRaCIS.Core.Application/Service/Common/Interface/IDictionaryService.cs @@ -31,5 +31,7 @@ namespace IRaCIS.Application.Interfaces Task>> GetBasicDataSelect(string[] searchArray); + Task> GetBasicDataSelect(string searchKey); + } } diff --git a/IRaCIS.Core.Application/Service/QC/DTO/QCListViewModel.cs b/IRaCIS.Core.Application/Service/QC/DTO/QCListViewModel.cs index b41592535..4970b0210 100644 --- a/IRaCIS.Core.Application/Service/QC/DTO/QCListViewModel.cs +++ b/IRaCIS.Core.Application/Service/QC/DTO/QCListViewModel.cs @@ -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 diff --git a/IRaCIS.Core.Application/Service/QC/_MapConfig.cs b/IRaCIS.Core.Application/Service/QC/_MapConfig.cs index f47db5d29..75a1b5933 100644 --- a/IRaCIS.Core.Application/Service/QC/_MapConfig.cs +++ b/IRaCIS.Core.Application/Service/QC/_MapConfig.cs @@ -299,8 +299,11 @@ namespace IRaCIS.Core.Application.Service CreateMap() //.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)) diff --git a/IRaCIS.Core.Infrastructure/_IRaCIS/_Config/_StaticData.cs b/IRaCIS.Core.Infrastructure/_IRaCIS/_Config/_StaticData.cs index 0495a2375..d32a8ca2a 100644 --- a/IRaCIS.Core.Infrastructure/_IRaCIS/_Config/_StaticData.cs +++ b/IRaCIS.Core.Infrastructure/_IRaCIS/_Config/_StaticData.cs @@ -284,7 +284,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";