临时提交
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
parent
5570c56b1e
commit
68845ae44b
|
@ -13,11 +13,13 @@ using Microsoft.AspNetCore.Authorization;
|
||||||
using Microsoft.AspNetCore.Hosting;
|
using Microsoft.AspNetCore.Hosting;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using Microsoft.EntityFrameworkCore.Metadata.Internal;
|
using Microsoft.EntityFrameworkCore.Metadata.Internal;
|
||||||
|
using NPOI.HPSF;
|
||||||
using NPOI.POIFS.Properties;
|
using NPOI.POIFS.Properties;
|
||||||
using NPOI.SS.Formula.Functions;
|
using NPOI.SS.Formula.Functions;
|
||||||
using NPOI.XSSF.UserModel;
|
using NPOI.XSSF.UserModel;
|
||||||
using System.ComponentModel.Design;
|
using System.ComponentModel.Design;
|
||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using static IRaCIS.Core.Application.Service.ExcelExportHelper;
|
using static IRaCIS.Core.Application.Service.ExcelExportHelper;
|
||||||
using IDictionaryService = IRaCIS.Application.Interfaces.IDictionaryService;
|
using IDictionaryService = IRaCIS.Application.Interfaces.IDictionaryService;
|
||||||
|
@ -2200,6 +2202,8 @@ namespace IRaCIS.Core.Application.Service.Common
|
||||||
|
|
||||||
var list = new List<CommonEvaluationExport>();
|
var list = new List<CommonEvaluationExport>();
|
||||||
|
|
||||||
|
var taskList = new List<CommonLessionExport>();
|
||||||
|
|
||||||
#region 区分导表类型
|
#region 区分导表类型
|
||||||
|
|
||||||
var removeColumnIndexList = new List<int>() { };
|
var removeColumnIndexList = new List<int>() { };
|
||||||
|
@ -2285,78 +2289,7 @@ namespace IRaCIS.Core.Application.Service.Common
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
|
||||||
var taskList = await query.ProjectTo<CommonLessionExport>(_mapper.ConfigurationProvider,
|
taskList = await query.ProjectTo<CommonLessionExport>(_mapper.ConfigurationProvider,
|
||||||
new
|
|
||||||
{
|
|
||||||
readingExportType = inQuery.ReadingExportType,
|
|
||||||
criterionType = criterion.CriterionType,
|
|
||||||
arbitrationRule = criterion.ArbitrationRule,
|
|
||||||
trialReadingCriterionId = inQuery.TrialReadingCriterionId,
|
|
||||||
isEn_Us = _userInfo.IsEn_Us
|
|
||||||
}).ToListAsync();
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//最终的病灶列表 要把裁判的也要加进去,需要处理裁判标记
|
|
||||||
list = new List<CommonEvaluationExport>();
|
|
||||||
|
|
||||||
|
|
||||||
foreach (var item in taskList.OrderBy(t => t.SubjectCode).ThenBy(t => t.ArmEnum).ThenBy(t => t.VisitTaskNum))
|
|
||||||
{
|
|
||||||
if (item.LesionList.Count > 0)
|
|
||||||
{
|
|
||||||
foreach (var lession in item.LesionList.OrderBy(t => t.LessionType).ThenBy(t => t.LessionCode))
|
|
||||||
{
|
|
||||||
|
|
||||||
var addLessionInfoList = new List<CommonQuesionInfo>();
|
|
||||||
|
|
||||||
if (criterion.CriterionType == CriterionType.RECIST1Point1 || criterion.CriterionType == CriterionType.RECIST1Pointt1_MB
|
|
||||||
|| criterion.CriterionType == CriterionType.IRECIST1Point1 || criterion.CriterionType == CriterionType.Lugano2014 || criterion.CriterionType == CriterionType.Lugano2014WithoutPET)
|
|
||||||
{
|
|
||||||
//病灶编号 和病灶类型没有配置,但是需要有的
|
|
||||||
addLessionInfoList.Add(new CommonQuesionInfo() { QuestionName = _userInfo.IsEn_Us ? "Lesion ID" : "病灶编号", QuestionValue = lession.LessionCode });
|
|
||||||
addLessionInfoList.Add(new CommonQuesionInfo() { QuestionName = _userInfo.IsEn_Us ? "Lesion Type" : "病灶类型", QuestionValue = lession.LessionType, TranslateDicName = "LesionType" });
|
|
||||||
|
|
||||||
}
|
|
||||||
else if (criterion.CriterionType == CriterionType.PCWG3)
|
|
||||||
{
|
|
||||||
addLessionInfoList.Add(new CommonQuesionInfo() { QuestionName = _userInfo.IsEn_Us ? "Lesion Type" : "病灶类型", QuestionValue = lession.LessionType, TranslateDicName = "LesionType" });
|
|
||||||
}
|
|
||||||
|
|
||||||
var dynamicPartialLessionInfoList = lession.LessionAnswerList.Select(t => new CommonQuesionInfo() { QuestionName = t.QuestionName, QuestionValue = t.QuestionValue, TranslateDicName = t.TranslateDicName });
|
|
||||||
|
|
||||||
//有三部分组成 外层问题+ 没有配置病灶编号和类型+ 动态的表格问题
|
|
||||||
var dynamicLessionInfoList = addLessionInfoList.Union(dynamicPartialLessionInfoList).Union(item.QuestionAnswerList).ToList();
|
|
||||||
|
|
||||||
//OCT 多个表格,但是只导出一个表格,有的问题答案就是空的
|
|
||||||
if (dynamicLessionInfoList.Count > 0)
|
|
||||||
{
|
|
||||||
|
|
||||||
var cloneItem = item.Clone();
|
|
||||||
cloneItem.QuestionAnswerList = dynamicLessionInfoList;
|
|
||||||
|
|
||||||
list.Add(cloneItem);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
//要把裁判任务加进去 裁判任务上没有病灶
|
|
||||||
|
|
||||||
list.Add(item);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
// 非肿瘤标准 包括自定义,以及系统非肿瘤 会配置到表格层级 问题名称是 表格名称_表格子问题名
|
|
||||||
else if (
|
|
||||||
criterion.CriterionGroup == CriterionGroup.Nontumorous && inQuery.ReadingExportType != ExportResult.CDISC
|
|
||||||
)
|
|
||||||
{
|
|
||||||
|
|
||||||
// 配置在外层问题 或者表格问题上
|
|
||||||
var taskList = await query.ProjectTo<CommonLessionExport>(_mapper.ConfigurationProvider,
|
|
||||||
new
|
new
|
||||||
{
|
{
|
||||||
readingExportType = inQuery.ReadingExportType,
|
readingExportType = inQuery.ReadingExportType,
|
||||||
|
@ -2366,53 +2299,23 @@ namespace IRaCIS.Core.Application.Service.Common
|
||||||
isEn_Us = _userInfo.IsEn_Us
|
isEn_Us = _userInfo.IsEn_Us
|
||||||
}).ToListAsync();
|
}).ToListAsync();
|
||||||
|
|
||||||
//动态列,以不同的病灶配置的问题取并集
|
}
|
||||||
var lessionAnserList = taskList.Where(t => t.LesionList.Count() > 0).FirstOrDefault()?.LesionList.FirstOrDefault()?.LessionAnswerList ?? new List<CommonLessionQuestionAnswerInfo>();
|
// 非肿瘤标准 包括自定义,以及系统非肿瘤 会配置到表格层级 问题名称是 表格名称_表格子问题名
|
||||||
|
else if (
|
||||||
|
criterion.CriterionGroup == CriterionGroup.Nontumorous && inQuery.ReadingExportType != ExportResult.CDISC
|
||||||
|
)
|
||||||
|
{
|
||||||
|
|
||||||
//通过问题标识取并集
|
// 配置在外层问题 或者表格问题上
|
||||||
|
taskList = await query.ProjectTo<CommonLessionExport>(_mapper.ConfigurationProvider,
|
||||||
var dynamicTitleList = lessionAnserList.Select(t => new DymamicQuestionInfo { QuestionMark = t.QuestionMark, QuestionName = t.QuestionName, TranslateDicName = t.TranslateDicName }).Distinct().ToList();
|
new
|
||||||
|
{
|
||||||
//最终的病灶列表 要把裁判的也要加进去,需要处理裁判标记
|
readingExportType = inQuery.ReadingExportType,
|
||||||
list = new List<CommonEvaluationExport>();
|
criterionType = criterion.CriterionType,
|
||||||
|
arbitrationRule = criterion.ArbitrationRule,
|
||||||
foreach (var item in taskList.OrderBy(t => t.SubjectCode).ThenBy(t => t.ArmEnum).ThenBy(t => t.VisitTaskNum))
|
trialReadingCriterionId = inQuery.TrialReadingCriterionId,
|
||||||
{
|
isEn_Us = _userInfo.IsEn_Us
|
||||||
//有病灶,并且至少配置了一个病灶问题
|
}).ToListAsync();
|
||||||
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 firstLessionAnser = lession.LessionAnswerList.FirstOrDefault();
|
|
||||||
var addLessionInfoList = new List<CommonQuesionInfo>();
|
|
||||||
|
|
||||||
addLessionInfoList.Add(new CommonQuesionInfo() { QuestionName = _userInfo.IsEn_Us ? "Table Name" : "表格名称", QuestionValue = firstLessionAnser.TableName });
|
|
||||||
|
|
||||||
var dynamicPartialLessionInfoList = lession.LessionAnswerList.Select(t => new CommonQuesionInfo() { QuestionName = t.TableName + "_" + t.QuestionName, QuestionValue = t.QuestionValue, TranslateDicName = t.TranslateDicName, CDISCCode = t.CDISCCode });
|
|
||||||
|
|
||||||
//有三部分组成 外层问题+ 固定列表格名称 + 动态的表格问题
|
|
||||||
var dynamicLessionInfoList = item.QuestionAnswerList.Union(addLessionInfoList).Union(dynamicPartialLessionInfoList).ToList();
|
|
||||||
|
|
||||||
|
|
||||||
var cloneItem = item.Clone();
|
|
||||||
cloneItem.QuestionAnswerList = dynamicLessionInfoList;
|
|
||||||
list.Add(cloneItem);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
//要把裁判任务加进去 裁判任务上没有病灶
|
|
||||||
|
|
||||||
list.Add(item);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
// CDISC 导出 只管到 外层问题层级 和阅片结果表是保持一致
|
// CDISC 导出 只管到 外层问题层级 和阅片结果表是保持一致
|
||||||
|
@ -2433,98 +2336,8 @@ namespace IRaCIS.Core.Application.Service.Common
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
list = list.OrderBy(t => t.SubjectCode).ThenBy(t => t.ArmEnum).ThenBy(t => t.VisitTaskNum).ToList();
|
|
||||||
|
|
||||||
//处理裁判标记
|
|
||||||
list = DealJudgeMark(criterion.ArbitrationRule, criterion.IsGlobalReading, list);
|
|
||||||
|
|
||||||
|
|
||||||
if (export_Template == StaticData.Export.CommonJudgeReadingDetail_Export)
|
|
||||||
{
|
|
||||||
//裁判产生标记为空的数据过滤掉
|
|
||||||
list = list.Where(t => t.IsTrigerJudge != null).ToList();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#region 肿瘤评估标准,并且非 CDISC 需要合并列
|
|
||||||
|
|
||||||
if (criterion.CriterionGroup == CriterionGroup.Tumor && inQuery.ReadingExportType != ExportResult.CDISC)
|
|
||||||
{
|
|
||||||
#region 系统标准处理整体肿瘤评估合并
|
|
||||||
|
|
||||||
//针对1.1 整体肿瘤评估 有的两列要合并一列
|
|
||||||
if (criterion.CriterionType == CriterionType.RECIST1Point1 || criterion.CriterionType == CriterionType.RECIST1Pointt1_MB || criterion.CriterionType == CriterionType.IRECIST1Point1)
|
|
||||||
{
|
|
||||||
foreach (var item in list)
|
|
||||||
{
|
|
||||||
//处理合并表头
|
|
||||||
|
|
||||||
var questionType = item.IsBaseline == true ? QuestionType.ExistDisease : QuestionType.Tumor;
|
|
||||||
|
|
||||||
var findItem = item.QuestionAnswerList.Where(t => t.QuestionType == questionType).FirstOrDefault();
|
|
||||||
|
|
||||||
if (findItem != null)
|
|
||||||
{
|
|
||||||
findItem.QuestionName = _userInfo.IsEn_Us ? "Overall Response" : "整体肿瘤评估";
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if (item.IsBaseline == true)
|
|
||||||
{
|
|
||||||
item.QuestionAnswerList = item.QuestionAnswerList.Where(t => t.QuestionType != QuestionType.Tumor).ToList();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
item.QuestionAnswerList = item.QuestionAnswerList.Where(t => t.QuestionType != QuestionType.ExistDisease).ToList();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (criterion.CriterionType == CriterionType.Lugano2014 || criterion.CriterionType == CriterionType.Lugano2014WithoutPET)
|
|
||||||
{
|
|
||||||
|
|
||||||
foreach (var item in list)
|
|
||||||
{
|
|
||||||
//处理合并表头
|
|
||||||
|
|
||||||
var questionType = item.IsBaseline == true ? QuestionType.ExistDisease : QuestionType.ImgOncology;
|
|
||||||
|
|
||||||
var findItem = item.QuestionAnswerList.Where(t => t.QuestionType == questionType).FirstOrDefault();
|
|
||||||
|
|
||||||
if (findItem != null)
|
|
||||||
{
|
|
||||||
findItem.QuestionName = _userInfo.IsEn_Us ? "Overall Response" : "整体肿瘤评估";
|
|
||||||
}
|
|
||||||
|
|
||||||
if (item.IsBaseline == true)
|
|
||||||
{
|
|
||||||
item.QuestionAnswerList = item.QuestionAnswerList.Where(t => t.QuestionType != QuestionType.ImgOncology).ToList();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
item.QuestionAnswerList = item.QuestionAnswerList.Where(t => t.QuestionType != QuestionType.ExistDisease).ToList();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (criterion.CriterionType == CriterionType.PCWG3)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
|
|
||||||
var exportInfo = (await _trialRepository.Where(t => t.Id == inQuery.TrialId).IgnoreQueryFilters().ProjectTo<ExcelExportInfo>(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException();
|
|
||||||
exportInfo.CriterionName = criterion.CriterionName;
|
|
||||||
|
|
||||||
exportInfo.List = ExportExcelConverterDate.ConvertToClientTimeInObject(list.Where(t => t.ReadingCategory != ReadingCategory.Global).ToList(), _userInfo.TimeZoneId);
|
|
||||||
exportInfo.CurrentTime = ExportExcelConverterDate.DateTimeInternationalToString(DateTime.Now, _userInfo.TimeZoneId);
|
|
||||||
|
|
||||||
|
|
||||||
#region 问题名称字典 列名
|
|
||||||
|
|
||||||
var dynamicColumnConfig = new DynamicColumnConfig();
|
var dynamicColumnConfig = new DynamicColumnConfig();
|
||||||
|
|
||||||
|
@ -2539,8 +2352,6 @@ namespace IRaCIS.Core.Application.Service.Common
|
||||||
TranslateDicName = t.DictionaryCode
|
TranslateDicName = t.DictionaryCode
|
||||||
}).ToList();
|
}).ToList();
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
|
|
||||||
if (inQuery.ReadingExportType != ExportResult.CDISC)
|
if (inQuery.ReadingExportType != ExportResult.CDISC)
|
||||||
{
|
{
|
||||||
|
@ -2566,6 +2377,7 @@ namespace IRaCIS.Core.Application.Service.Common
|
||||||
|
|
||||||
var fistLeveLNameList = new List<string>();
|
var fistLeveLNameList = new List<string>();
|
||||||
|
|
||||||
|
//肿瘤评估,非CDISC 导出
|
||||||
if (criterion.CriterionGroup == CriterionGroup.Tumor)
|
if (criterion.CriterionGroup == CriterionGroup.Tumor)
|
||||||
{
|
{
|
||||||
if (criterion.CriterionType == CriterionType.RECIST1Point1 || criterion.CriterionType == CriterionType.RECIST1Pointt1_MB || criterion.CriterionType == CriterionType.IRECIST1Point1)
|
if (criterion.CriterionType == CriterionType.RECIST1Point1 || criterion.CriterionType == CriterionType.RECIST1Pointt1_MB || criterion.CriterionType == CriterionType.IRECIST1Point1)
|
||||||
|
@ -2574,6 +2386,31 @@ namespace IRaCIS.Core.Application.Service.Common
|
||||||
fistLeveLNameList = trialConfigQuestionList.Select(t =>
|
fistLeveLNameList = trialConfigQuestionList.Select(t =>
|
||||||
(t.QuestionType == QuestionType.ExistDisease || t.QuestionType == QuestionType.Tumor) ? (_userInfo.IsEn_Us ? "Overall Response" : "整体肿瘤评估") : t.QuestionName).Distinct().ToList();
|
(t.QuestionType == QuestionType.ExistDisease || t.QuestionType == QuestionType.Tumor) ? (_userInfo.IsEn_Us ? "Overall Response" : "整体肿瘤评估") : t.QuestionName).Distinct().ToList();
|
||||||
|
|
||||||
|
//针对1.1 整体肿瘤评估 有的两列要合并一列
|
||||||
|
foreach (var item in list)
|
||||||
|
{
|
||||||
|
//处理合并表头
|
||||||
|
|
||||||
|
var questionType = item.IsBaseline == true ? QuestionType.ExistDisease : QuestionType.Tumor;
|
||||||
|
|
||||||
|
var findItem = item.QuestionAnswerList.Where(t => t.QuestionType == questionType).FirstOrDefault();
|
||||||
|
|
||||||
|
if (findItem != null)
|
||||||
|
{
|
||||||
|
findItem.QuestionName = _userInfo.IsEn_Us ? "Overall Response" : "整体肿瘤评估";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (item.IsBaseline == true)
|
||||||
|
{
|
||||||
|
item.QuestionAnswerList = item.QuestionAnswerList.Where(t => t.QuestionType != QuestionType.Tumor).ToList();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
item.QuestionAnswerList = item.QuestionAnswerList.Where(t => t.QuestionType != QuestionType.ExistDisease).ToList();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
else if (criterion.CriterionType == CriterionType.Lugano2014 || criterion.CriterionType == CriterionType.Lugano2014WithoutPET)
|
else if (criterion.CriterionType == CriterionType.Lugano2014 || criterion.CriterionType == CriterionType.Lugano2014WithoutPET)
|
||||||
|
@ -2581,6 +2418,30 @@ namespace IRaCIS.Core.Application.Service.Common
|
||||||
fistLeveLNameList = trialConfigQuestionList.Select(t =>
|
fistLeveLNameList = trialConfigQuestionList.Select(t =>
|
||||||
(t.QuestionType == QuestionType.ExistDisease || t.QuestionType == QuestionType.ImgOncology) ? (_userInfo.IsEn_Us ? "Overall Response" : "整体肿瘤评估") : t.QuestionName).Distinct().ToList();
|
(t.QuestionType == QuestionType.ExistDisease || t.QuestionType == QuestionType.ImgOncology) ? (_userInfo.IsEn_Us ? "Overall Response" : "整体肿瘤评估") : t.QuestionName).Distinct().ToList();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
foreach (var item in list)
|
||||||
|
{
|
||||||
|
//处理合并表头
|
||||||
|
|
||||||
|
var questionType = item.IsBaseline == true ? QuestionType.ExistDisease : QuestionType.ImgOncology;
|
||||||
|
|
||||||
|
var findItem = item.QuestionAnswerList.Where(t => t.QuestionType == questionType).FirstOrDefault();
|
||||||
|
|
||||||
|
if (findItem != null)
|
||||||
|
{
|
||||||
|
findItem.QuestionName = _userInfo.IsEn_Us ? "Overall Response" : "整体肿瘤评估";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (item.IsBaseline == true)
|
||||||
|
{
|
||||||
|
item.QuestionAnswerList = item.QuestionAnswerList.Where(t => t.QuestionType != QuestionType.ImgOncology).ToList();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
item.QuestionAnswerList = item.QuestionAnswerList.Where(t => t.QuestionType != QuestionType.ExistDisease).ToList();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (criterion.CriterionType == CriterionType.PCWG3)
|
else if (criterion.CriterionType == CriterionType.PCWG3)
|
||||||
{
|
{
|
||||||
|
@ -2592,6 +2453,7 @@ namespace IRaCIS.Core.Application.Service.Common
|
||||||
translateDicNameList = trialConfigQuestionList.Union(trialConfigTableQuestionList).Where(t => t.TranslateDicName.IsNotNullOrEmpty()).Select(t => t.TranslateDicName).Union(exTralDicNameList).Distinct().ToList();
|
translateDicNameList = trialConfigQuestionList.Union(trialConfigTableQuestionList).Where(t => t.TranslateDicName.IsNotNullOrEmpty()).Select(t => t.TranslateDicName).Union(exTralDicNameList).Distinct().ToList();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
//非肿瘤评估,非CDISC 导出
|
||||||
{
|
{
|
||||||
fistLeveLNameList = trialConfigQuestionList.Select(t => t.QuestionName).ToList();
|
fistLeveLNameList = trialConfigQuestionList.Select(t => t.QuestionName).ToList();
|
||||||
|
|
||||||
|
@ -2630,6 +2492,61 @@ namespace IRaCIS.Core.Application.Service.Common
|
||||||
|
|
||||||
configCoumNameList = fistLeveLNameList.Union(extralNameList).Union(tableNameList).ToList();
|
configCoumNameList = fistLeveLNameList.Union(extralNameList).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)
|
||||||
|
{
|
||||||
|
foreach (var lession in item.LesionList.OrderBy(t => t.LessionType).ThenBy(t => t.LessionCode))
|
||||||
|
{
|
||||||
|
|
||||||
|
var addLessionInfoList = new List<CommonQuesionInfo>();
|
||||||
|
|
||||||
|
if (criterion.CriterionType == CriterionType.RECIST1Point1 || criterion.CriterionType == CriterionType.RECIST1Pointt1_MB
|
||||||
|
|| criterion.CriterionType == CriterionType.IRECIST1Point1 || criterion.CriterionType == CriterionType.Lugano2014 || criterion.CriterionType == CriterionType.Lugano2014WithoutPET)
|
||||||
|
{
|
||||||
|
//病灶编号 和病灶类型没有配置,但是需要有的
|
||||||
|
addLessionInfoList.Add(new CommonQuesionInfo() { QuestionName = _userInfo.IsEn_Us ? "Lesion ID" : "病灶编号", QuestionValue = lession.LessionCode });
|
||||||
|
addLessionInfoList.Add(new CommonQuesionInfo() { QuestionName = _userInfo.IsEn_Us ? "Lesion Type" : "病灶类型", QuestionValue = lession.LessionType, TranslateDicName = "LesionType" });
|
||||||
|
|
||||||
|
}
|
||||||
|
else if (criterion.CriterionType == CriterionType.PCWG3)
|
||||||
|
{
|
||||||
|
addLessionInfoList.Add(new CommonQuesionInfo() { QuestionName = _userInfo.IsEn_Us ? "Lesion Type" : "病灶类型", QuestionValue = lession.LessionType, TranslateDicName = "LesionType" });
|
||||||
|
}
|
||||||
|
|
||||||
|
var dynamicPartialLessionInfoList = lession.LessionAnswerList.Select(t => new CommonQuesionInfo() { QuestionName = t.QuestionName, QuestionValue = t.QuestionValue, TranslateDicName = t.TranslateDicName });
|
||||||
|
|
||||||
|
//有三部分组成 外层问题+ 没有配置病灶编号和类型+ 动态的表格问题
|
||||||
|
var dynamicLessionInfoList = addLessionInfoList.Union(dynamicPartialLessionInfoList).Union(item.QuestionAnswerList).ToList();
|
||||||
|
|
||||||
|
//OCT 多个表格,但是只导出一个表格,有的问题答案就是空的
|
||||||
|
if (dynamicLessionInfoList.Count > 0)
|
||||||
|
{
|
||||||
|
|
||||||
|
var cloneItem = item.Clone();
|
||||||
|
cloneItem.QuestionAnswerList = dynamicLessionInfoList;
|
||||||
|
|
||||||
|
list.Add(cloneItem);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//要把裁判任务加进去 裁判任务上没有病灶
|
||||||
|
|
||||||
|
list.Add(item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
}
|
}
|
||||||
//非肿瘤的 问题名称是 表格名称_表格子问题名
|
//非肿瘤的 问题名称是 表格名称_表格子问题名
|
||||||
else
|
else
|
||||||
|
@ -2639,6 +2556,50 @@ namespace IRaCIS.Core.Application.Service.Common
|
||||||
var tableNameList = trialConfigTableQuestionList.Select(t => t.TableName + "_" + t.QuestionName).ToList();
|
var tableNameList = trialConfigTableQuestionList.Select(t => t.TableName + "_" + t.QuestionName).ToList();
|
||||||
|
|
||||||
configCoumNameList = fistLeveLNameList.Union(extralNameList).Union(tableNameList).ToList();
|
configCoumNameList = fistLeveLNameList.Union(extralNameList).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 lession in item.LesionList.OrderBy(t => t.LessionType).ThenBy(t => t.LessionCode))
|
||||||
|
{
|
||||||
|
//病灶配置了问题 才进行导出
|
||||||
|
if (lession.LessionAnswerList.Count > 0)
|
||||||
|
{
|
||||||
|
var firstLessionAnser = lession.LessionAnswerList.FirstOrDefault();
|
||||||
|
var addLessionInfoList = new List<CommonQuesionInfo>();
|
||||||
|
|
||||||
|
addLessionInfoList.Add(new CommonQuesionInfo() { QuestionName = _userInfo.IsEn_Us ? "Table Name" : "表格名称", QuestionValue = firstLessionAnser.TableName });
|
||||||
|
|
||||||
|
var dynamicPartialLessionInfoList = lession.LessionAnswerList.Select(t => new CommonQuesionInfo() { QuestionName = t.TableName + "_" + t.QuestionName, QuestionValue = t.QuestionValue, TranslateDicName = t.TranslateDicName, CDISCCode = t.CDISCCode });
|
||||||
|
|
||||||
|
//有三部分组成 外层问题+ 固定列表格名称 + 动态的表格问题
|
||||||
|
var dynamicLessionInfoList = item.QuestionAnswerList.Union(addLessionInfoList).Union(dynamicPartialLessionInfoList).ToList();
|
||||||
|
|
||||||
|
|
||||||
|
var cloneItem = item.Clone();
|
||||||
|
cloneItem.QuestionAnswerList = dynamicLessionInfoList;
|
||||||
|
list.Add(cloneItem);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//要把裁判任务加进去 裁判任务上没有病灶
|
||||||
|
|
||||||
|
list.Add(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -2652,13 +2613,6 @@ namespace IRaCIS.Core.Application.Service.Common
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//暂时不用,因为肿瘤标准添加了列,同时多表格的,列名会加上表格名,这里还没有最终确认
|
|
||||||
|
|
||||||
//之前从问题答案取 合并之后获取最后的列名
|
|
||||||
//var columNameList = list.SelectMany(t => t.QuestionAnswerList).Where(t => t.QuestionName.IsNotNullOrEmpty()).Select(t => t.QuestionName).Distinct().ToList();
|
|
||||||
|
|
||||||
dynamicColumnConfig = new DynamicColumnConfig()
|
dynamicColumnConfig = new DynamicColumnConfig()
|
||||||
{
|
{
|
||||||
AutoColumnTitleRowIndex = 2,
|
AutoColumnTitleRowIndex = 2,
|
||||||
|
@ -2673,12 +2627,7 @@ namespace IRaCIS.Core.Application.Service.Common
|
||||||
TranslateDicNameList = translateDicNameList
|
TranslateDicNameList = translateDicNameList
|
||||||
};
|
};
|
||||||
|
|
||||||
var (memoryStream, fileName) = await ExcelExportHelper.DataExport_NpoiTestAsync(export_Template, exportInfo, _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(CommonEvaluationExport), criterion.CriterionType, dynamicColumnConfig);
|
|
||||||
|
|
||||||
return new FileStreamResult(memoryStream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
|
|
||||||
{
|
|
||||||
FileDownloadName = $"{exportInfo.ResearchProgramNo}_{exportInfo.CriterionName}_{fileName}_{DateTime.Now.ToString("yyyyMMddHHmmss")}.xlsx"
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2694,12 +2643,6 @@ namespace IRaCIS.Core.Application.Service.Common
|
||||||
|
|
||||||
var cdiscCodeList = totalConfigCoumNameList.Select(t => t.CDISCCode).ToList();
|
var cdiscCodeList = totalConfigCoumNameList.Select(t => t.CDISCCode).ToList();
|
||||||
|
|
||||||
#region 之前从问题答案取
|
|
||||||
|
|
||||||
//var nameList = list.SelectMany(t => t.QuestionAnswerList).Where(t => t.QuestionName.IsNotNullOrEmpty() && t.CDISCCode.IsNotNullOrEmpty()).Select(t => new { t.QuestionName, t.CDISCCode }).Distinct().ToList();
|
|
||||||
//var columNameList = nameList.Select(t => t.QuestionName).Distinct().ToList();
|
|
||||||
//var cdiscCodeList = nameList.Select(t => t.CDISCCode).Distinct().ToList();
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
dynamicColumnConfig = new DynamicColumnConfig()
|
dynamicColumnConfig = new DynamicColumnConfig()
|
||||||
{
|
{
|
||||||
|
@ -2716,16 +2659,57 @@ namespace IRaCIS.Core.Application.Service.Common
|
||||||
TranslateDicNameList = translateDicList
|
TranslateDicNameList = translateDicList
|
||||||
};
|
};
|
||||||
|
|
||||||
var (memoryStream, fileName) = await ExcelExportHelper.CDISC_DataExport_Async(export_Template, exportInfo, _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(CommonEvaluationExport), criterion.CriterionType, dynamicColumnConfig);
|
|
||||||
|
|
||||||
return new FileStreamResult(memoryStream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
|
|
||||||
{
|
|
||||||
FileDownloadName = $"{exportInfo.ResearchProgramNo}_{exportInfo.CriterionName}_{fileName}_{DateTime.Now.ToString("yyyyMMddHHmmss")}.xlsx"
|
}
|
||||||
};
|
|
||||||
|
|
||||||
|
#region 最终导出参数处理
|
||||||
|
|
||||||
|
list = list.OrderBy(t => t.SubjectCode).ThenBy(t => t.ArmEnum).ThenBy(t => t.VisitTaskNum).ToList();
|
||||||
|
|
||||||
|
//处理裁判标记
|
||||||
|
list = DealJudgeMark(criterion.ArbitrationRule, criterion.IsGlobalReading, list);
|
||||||
|
|
||||||
|
|
||||||
|
if (export_Template == StaticData.Export.CommonJudgeReadingDetail_Export)
|
||||||
|
{
|
||||||
|
//裁判产生标记为空的数据过滤掉
|
||||||
|
list = list.Where(t => t.IsTrigerJudge != null).ToList();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
var exportInfo = (await _trialRepository.Where(t => t.Id == inQuery.TrialId).IgnoreQueryFilters().ProjectTo<ExcelExportInfo>(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException();
|
||||||
|
exportInfo.CriterionName = criterion.CriterionName;
|
||||||
|
|
||||||
|
exportInfo.CurrentTime = ExportExcelConverterDate.DateTimeInternationalToString(DateTime.Now, _userInfo.TimeZoneId);
|
||||||
|
|
||||||
|
exportInfo.List = ExportExcelConverterDate.ConvertToClientTimeInObject(list.Where(t => t.ReadingCategory != ReadingCategory.Global).ToList(), _userInfo.TimeZoneId);
|
||||||
|
|
||||||
|
|
||||||
|
MemoryStream? memoryStream = null;
|
||||||
|
|
||||||
|
string fileName = "";
|
||||||
|
|
||||||
|
if (inQuery.ReadingExportType == ExportResult.CDISC)
|
||||||
|
{
|
||||||
|
(memoryStream, fileName) = await ExcelExportHelper.CDISC_DataExport_Async(export_Template, exportInfo, _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(CommonEvaluationExport), criterion.CriterionType, dynamicColumnConfig);
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
(memoryStream, fileName) = await ExcelExportHelper.DataExport_NpoiTestAsync(export_Template, exportInfo, _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(CommonEvaluationExport), criterion.CriterionType, dynamicColumnConfig);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return new FileStreamResult(memoryStream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
|
||||||
|
{
|
||||||
|
FileDownloadName = $"{exportInfo.ResearchProgramNo}_{exportInfo.CriterionName}_{fileName}_{DateTime.Now.ToString("yyyyMMddHHmmss")}.xlsx"
|
||||||
|
};
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue