自身和组件一致性分析修改
parent
fcaa6339c6
commit
c0de59b3aa
|
@ -803,16 +803,6 @@
|
||||||
<param name="_trialRepository"></param>
|
<param name="_trialRepository"></param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
<member name="M:IRaCIS.Core.Application.Service.Common.ExcelExportService.GetDetailedOfEvaluatedLesion_Export(IRaCIS.Core.Application.ViewModel.VisitTaskQuery,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.CommonDocument},IRaCIS.Application.Interfaces.IDictionaryService,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.Trial})">
|
|
||||||
<summary>
|
|
||||||
评估病灶明细表 (目前仅仅 RECIST1.1 RECIST1.1 PGW3 表都是不同的)
|
|
||||||
</summary>
|
|
||||||
<param name="inQuery"></param>
|
|
||||||
<param name="_commonDocumentRepository"></param>
|
|
||||||
<param name="_dictionaryService"></param>
|
|
||||||
<param name="_trialRepository"></param>
|
|
||||||
<returns></returns>
|
|
||||||
</member>
|
|
||||||
<member name="M:IRaCIS.Core.Application.Service.Common.ExcelExportService.GetTrialReadingCriterionCanExportDocumentList(System.Guid)">
|
<member name="M:IRaCIS.Core.Application.Service.Common.ExcelExportService.GetTrialReadingCriterionCanExportDocumentList(System.Guid)">
|
||||||
<summary>
|
<summary>
|
||||||
获取阅片标准可以导出的列表
|
获取阅片标准可以导出的列表
|
||||||
|
@ -14869,6 +14859,21 @@
|
||||||
组件一致性和原Arm2是否有差异
|
组件一致性和原Arm2是否有差异
|
||||||
</summary>
|
</summary>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Contracts.AnalysisDynamicCommonExport.IsAnalysisDiffToOriginalData">
|
||||||
|
<summary>
|
||||||
|
自身一致性分析任务上会有这个值
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Contracts.AnalysisDynamicCommonExport.IsGroupDiffArm1">
|
||||||
|
<summary>
|
||||||
|
组件一致性和原Arm1是否有差异
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:IRaCIS.Core.Application.Contracts.AnalysisDynamicCommonExport.IsGroupDiffArm2">
|
||||||
|
<summary>
|
||||||
|
组件一致性和原Arm2是否有差异
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
<member name="P:IRaCIS.Core.Application.Contracts.CommonLessionExport.LessionAnswerList">
|
<member name="P:IRaCIS.Core.Application.Contracts.CommonLessionExport.LessionAnswerList">
|
||||||
<summary>
|
<summary>
|
||||||
最终导出的病灶信息
|
最终导出的病灶信息
|
||||||
|
|
|
@ -1572,8 +1572,10 @@ namespace IRaCIS.Core.Application.Service.Common
|
||||||
|
|
||||||
|
|
||||||
return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialGroupAnalysisList_Export, exportInfo, $"{exportInfo.ResearchProgramNo}_{exportInfo.CriterionName}", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(GroupAnalysisExport));
|
return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialGroupAnalysisList_Export, exportInfo, $"{exportInfo.ResearchProgramNo}_{exportInfo.CriterionName}", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(GroupAnalysisExport));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#region 导表公用
|
||||||
|
|
||||||
public class ExportDocumentDes
|
public class ExportDocumentDes
|
||||||
{
|
{
|
||||||
|
@ -1727,10 +1729,15 @@ namespace IRaCIS.Core.Application.Service.Common
|
||||||
return resultExceptJudgeList;
|
return resultExceptJudgeList;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region 通用阅片结果导出
|
||||||
|
|
||||||
#region 历史单独导出废弃
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 评估病灶明细表 (目前仅仅 RECIST1.1 RECIST1.1 PGW3 表都是不同的)
|
/// 一致性分析结果导出 9 10 分别是自身 和组件一致性
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="inQuery"></param>
|
/// <param name="inQuery"></param>
|
||||||
/// <param name="_commonDocumentRepository"></param>
|
/// <param name="_commonDocumentRepository"></param>
|
||||||
|
@ -1738,131 +1745,225 @@ namespace IRaCIS.Core.Application.Service.Common
|
||||||
/// <param name="_trialRepository"></param>
|
/// <param name="_trialRepository"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
public async Task<IActionResult> GetDetailedOfEvaluatedLesion_Export(VisitTaskQuery inQuery,
|
public async Task<IActionResult> GetAnalysisTaskList_Export(VisitTaskQuery inQuery,
|
||||||
[FromServices] IRepository<CommonDocument> _commonDocumentRepository,
|
[FromServices] IRepository<CommonDocument> _commonDocumentRepository,
|
||||||
[FromServices] IDictionaryService _dictionaryService,
|
[FromServices] IDictionaryService _dictionaryService,
|
||||||
[FromServices] IRepository<Trial> _trialRepository)
|
[FromServices] IRepository<Trial> _trialRepository)
|
||||||
{
|
{
|
||||||
|
|
||||||
//每次查询必须是单标准的
|
//每次查询必须是单标准的
|
||||||
var criterion = await _readingQuestionCriterionTrialRepository.Where(t => t.Id == inQuery.TrialReadingCriterionId).Select(t => new { t.CriterionType, t.CriterionName, t.ArbitrationRule }).FirstOrDefaultAsync();
|
var criterion = await _readingQuestionCriterionTrialRepository.Where(t => t.Id == inQuery.TrialReadingCriterionId).Select(t => new { t.CriterionType, t.CriterionName, t.ArbitrationRule }).FirstNotNullAsync();
|
||||||
|
|
||||||
var query = _visitTaskRepository.Where(t => t.TrialId == inQuery.TrialId && t.TaskState == TaskState.Effect && t.IsAnalysisCreate == false && t.ReadingTaskState == ReadingTaskState.HaveSigned)
|
|
||||||
|
|
||||||
|
var query = _visitTaskRepository.Where(t => t.TrialId == inQuery.TrialId && (t.TaskState == TaskState.Effect || t.TaskState == TaskState.Freeze))
|
||||||
|
|
||||||
|
//自身一致性分析
|
||||||
|
.WhereIf(inQuery.ReadingExportType == ExportResult.SelfAnalysis, t => t.IsSelfAnalysis == true || t.IsSelfAnalysis == null)
|
||||||
|
.WhereIf(inQuery.ReadingExportType == ExportResult.GroupAnalysis, t => t.IsSelfAnalysis == false || t.IsSelfAnalysis == null)
|
||||||
|
|
||||||
|
//访视和全局查询已签名完成的,裁判可以是未签名,未完成的
|
||||||
|
.Where(t => (t.ReadingTaskState == ReadingTaskState.HaveSigned && (t.ReadingCategory == ReadingCategory.Visit || t.ReadingCategory == ReadingCategory.Global)) || t.ReadingCategory == ReadingCategory.Judge)
|
||||||
.WhereIf(inQuery.TrialReadingCriterionId != null, t => t.TrialReadingCriterionId == inQuery.TrialReadingCriterionId)
|
.WhereIf(inQuery.TrialReadingCriterionId != null, t => t.TrialReadingCriterionId == inQuery.TrialReadingCriterionId)
|
||||||
.WhereIf(inQuery.TrialSiteId != null, t => t.Subject.TrialSiteId == inQuery.TrialSiteId)
|
.WhereIf(inQuery.TrialSiteId != null, t => t.Subject.TrialSiteId == inQuery.TrialSiteId)
|
||||||
|
|
||||||
.WhereIf(inQuery.IsUrgent != null, t => t.IsUrgent == inQuery.IsUrgent)
|
.WhereIf(inQuery.IsUrgent != null, t => t.IsUrgent == inQuery.IsUrgent)
|
||||||
.WhereIf(inQuery.DoctorUserId != null, t => t.DoctorUserId == inQuery.DoctorUserId)
|
.WhereIf(inQuery.DoctorUserId != null, t => t.DoctorUserId == inQuery.DoctorUserId)
|
||||||
.WhereIf(inQuery.ReadingCategory != null, t => t.ReadingCategory == inQuery.ReadingCategory)
|
.WhereIf(inQuery.ReadingCategory != null, t => t.ReadingCategory == inQuery.ReadingCategory)
|
||||||
.WhereIf(inQuery.ReadingTaskState != null, t => t.ReadingTaskState == inQuery.ReadingTaskState)
|
//.WhereIf(inQuery.ReadingTaskState != null, t => t.ReadingTaskState == inQuery.ReadingTaskState)
|
||||||
.WhereIf(inQuery.TaskAllocationState != null, t => t.TaskAllocationState == inQuery.TaskAllocationState)
|
.WhereIf(inQuery.TaskAllocationState != null, t => t.TaskAllocationState == inQuery.TaskAllocationState)
|
||||||
.WhereIf(inQuery.ArmEnum != null, t => t.ArmEnum == inQuery.ArmEnum)
|
.WhereIf(inQuery.ArmEnum != null, t => t.ArmEnum == inQuery.ArmEnum)
|
||||||
.WhereIf(!string.IsNullOrEmpty(inQuery.TrialSiteCode), t => (t.BlindTrialSiteCode.Contains(inQuery.TrialSiteCode!) && t.IsAnalysisCreate) || (t.Subject.TrialSite.TrialSiteCode.Contains(inQuery.TrialSiteCode!) && t.IsAnalysisCreate == false))
|
.WhereIf(!string.IsNullOrEmpty(inQuery.TrialSiteCode), t => (t.BlindTrialSiteCode.Contains(inQuery.TrialSiteCode!) && t.IsAnalysisCreate) || (t.Subject.TrialSite.TrialSiteCode.Contains(inQuery.TrialSiteCode!) && t.IsAnalysisCreate == false))
|
||||||
.WhereIf(!string.IsNullOrEmpty(inQuery.TaskName), t => t.TaskName.Contains(inQuery.TaskName) || t.TaskBlindName.Contains(inQuery.TaskName))
|
.WhereIf(!string.IsNullOrEmpty(inQuery.TaskName), t => t.TaskName.Contains(inQuery.TaskName) || t.TaskBlindName.Contains(inQuery.TaskName))
|
||||||
.WhereIf(!string.IsNullOrEmpty(inQuery.SubjectCode), t => t.Subject.Code.Contains(inQuery.SubjectCode))
|
.WhereIf(!string.IsNullOrEmpty(inQuery.SubjectCode), t => t.Subject.Code.Contains(inQuery.SubjectCode))
|
||||||
.WhereIf(inQuery.BeginAllocateDate != null, t => t.AllocateTime > inQuery.BeginAllocateDate)
|
.WhereIf(inQuery.BeginAllocateDate != null, t => t.AllocateTime > inQuery.BeginAllocateDate)
|
||||||
.WhereIf(inQuery.EndAllocateDate != null, t => t.AllocateTime < inQuery.EndAllocateDate!.Value.AddDays(1));
|
.WhereIf(inQuery.EndAllocateDate != null, t => t.AllocateTime < inQuery.EndAllocateDate);
|
||||||
|
|
||||||
|
var list = await query.ProjectTo<AnalysisDynamicCommonExport>(_mapper.ConfigurationProvider,
|
||||||
|
new
|
||||||
|
{
|
||||||
|
readingExportType = inQuery.ReadingExportType,
|
||||||
|
criterionType = criterion.CriterionType,
|
||||||
|
trialReadingCriterionId = inQuery.TrialReadingCriterionId,
|
||||||
|
isEn_Us = _userInfo.IsEn_Us
|
||||||
|
}).ToListAsync();
|
||||||
|
|
||||||
|
list = list.OrderBy(t => t.SubjectCode).ThenBy(t => t.ArmEnum).ThenBy(t => t.VisitTaskNum).ToList();
|
||||||
|
|
||||||
|
|
||||||
var exportInfo = (await _trialRepository.Where(t => t.Id == inQuery.TrialId).IgnoreQueryFilters().ProjectTo<ExcelExportInfo>(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException();
|
var exportInfo = (await _trialRepository.Where(t => t.Id == inQuery.TrialId).IgnoreQueryFilters().ProjectTo<ExcelExportInfo>(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException();
|
||||||
exportInfo.CriterionName = criterion.CriterionName;
|
exportInfo.CriterionName = criterion.CriterionName;
|
||||||
|
|
||||||
if (criterion.CriterionType == CriterionType.RECIST1Point1 || criterion.CriterionType == CriterionType.RECIST1Pointt1_MB)
|
#region 处理系统标准存在疾病和整体肿瘤合并
|
||||||
|
|
||||||
|
//如果是以合并后的找翻译字典,会少,所以必须放在前面
|
||||||
|
var translateDicNameList = list.SelectMany(t => t.QuestionAnswerList).Where(t => t.TranslateDicName.IsNotNullOrEmpty()).Select(t => t.TranslateDicName).Distinct().ToList();
|
||||||
|
|
||||||
|
//针对1.1 整体肿瘤评估 有的两列要合并一列
|
||||||
|
if (criterion.CriterionType == CriterionType.RECIST1Point1 || criterion.CriterionType == CriterionType.RECIST1Pointt1_MB || criterion.CriterionType == CriterionType.IRECIST1Point1)
|
||||||
{
|
{
|
||||||
var list = await query.ProjectTo<RECIST1Point1DetailedOfEvaluatedLesionExport>(_mapper.ConfigurationProvider, new { criterionType = criterion.CriterionType, arbitrationRule = criterion.ArbitrationRule, trialReadingCriterionId = inQuery.TrialReadingCriterionId, isEn_Us = _userInfo.IsEn_Us }).ToListAsync();
|
foreach (var item in list)
|
||||||
|
|
||||||
list = list.OrderBy(t => t.SubjectCode).ThenBy(t => t.ArmEnum).ThenBy(t => t.VisitTaskNum).ToList();
|
|
||||||
|
|
||||||
var exportList = list.SelectMany(c =>
|
|
||||||
{
|
{
|
||||||
|
//处理合并表头
|
||||||
|
|
||||||
return c.LesionList.Select(u =>
|
var questionType = item.IsBaseline == true ? QuestionType.ExistDisease : QuestionType.Tumor;
|
||||||
|
|
||||||
|
var findItem = item.QuestionAnswerList.Where(t => t.QuestionType == questionType).FirstOrDefault();
|
||||||
|
|
||||||
|
if (findItem != null)
|
||||||
{
|
{
|
||||||
var clone = c.Clone();
|
findItem.QuestionName = _userInfo.IsEn_Us ? "Overall Response" : "整体肿瘤评估";
|
||||||
clone.LessionCode = u.LessionCode;
|
}
|
||||||
clone.LessionType = u.LessionType;
|
|
||||||
clone.BeforeTranslateLessionTypeValue = u.LessionType;
|
|
||||||
|
|
||||||
clone.IsLymph = u.IsLymph;
|
|
||||||
|
|
||||||
clone.LessionLocation = u.LessionLocation;
|
|
||||||
clone.LessionOrgan = u.LessionOrgan;
|
|
||||||
clone.BodyPartDescription = u.BodyPartDescription;
|
|
||||||
|
|
||||||
//clone.MeasurementResult = u.MeasurementResult;
|
|
||||||
clone.LongDiameter = u.LongDiameter;
|
|
||||||
clone.ShortDiameter = u.ShortDiameter;
|
|
||||||
clone.LessionState = u.LessionState;
|
|
||||||
|
|
||||||
return clone;
|
|
||||||
});
|
|
||||||
}).ToList();
|
|
||||||
|
|
||||||
//处理裁判标记
|
|
||||||
//list = DealJudgeMark(criterion.ArbitrationRule, list);
|
|
||||||
exportInfo.List = ExportExcelConverterDate.ConvertToClientTimeInObject(exportList, _userInfo.TimeZoneId);
|
|
||||||
exportInfo.CurrentTime = ExportExcelConverterDate.DateTimeInternationalToString(DateTime.Now, _userInfo.TimeZoneId);
|
|
||||||
|
|
||||||
|
|
||||||
return await ExcelExportHelper.DataExportAsync(StaticData.Export.RECIST1Point1DetailedOfEvaluatedLesion_Export, exportInfo, $"{exportInfo.ResearchProgramNo}", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(RECIST1Point1DetailedOfEvaluatedLesionExport), criterion.CriterionType);
|
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)
|
else if (criterion.CriterionType == CriterionType.PCWG3)
|
||||||
{
|
{
|
||||||
var list = await query.ProjectTo<PCWG3DetailedOfEvaluatedLesionExport>(_mapper.ConfigurationProvider, new { criterionType = criterion.CriterionType, arbitrationRule = criterion.ArbitrationRule, trialReadingCriterionId = inQuery.TrialReadingCriterionId, isEn_Us = _userInfo.IsEn_Us }).ToListAsync();
|
|
||||||
|
|
||||||
|
|
||||||
var exportList = list.SelectMany(c =>
|
|
||||||
{
|
|
||||||
|
|
||||||
return c.LesionList.Select(u =>
|
|
||||||
{
|
|
||||||
var clone = c.Clone();
|
|
||||||
clone.LessionCode = u.LessionCode;
|
|
||||||
clone.LessionType = u.LessionType;
|
|
||||||
|
|
||||||
clone.LessionOrgan = u.LessionOrgan;
|
|
||||||
clone.LessionLocation = u.LessionLocation;
|
|
||||||
clone.BodyPartDescription = u.BodyPartDescription;
|
|
||||||
|
|
||||||
clone.LessionState = u.LessionState;
|
|
||||||
|
|
||||||
return clone;
|
|
||||||
});
|
|
||||||
}).ToList();
|
|
||||||
|
|
||||||
//处理裁判标记
|
|
||||||
//list = DealJudgeMark(criterion.ArbitrationRule, list);
|
|
||||||
|
|
||||||
exportInfo.List = ExportExcelConverterDate.ConvertToClientTimeInObject(exportList, _userInfo.TimeZoneId); ;
|
|
||||||
exportInfo.CurrentTime = ExportExcelConverterDate.DateTimeInternationalToString(DateTime.Now, _userInfo.TimeZoneId);
|
|
||||||
|
|
||||||
|
|
||||||
return await ExcelExportHelper.DataExportAsync(StaticData.Export.PCWG3Point1DetailedOfEvaluatedLesion_Export, exportInfo, $"{exportInfo.ResearchProgramNo}", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(PCWG3DetailedOfEvaluatedLesionExport), criterion.CriterionType);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
var export_Template = StaticData.Export.TrialSelfAnalysisList_Export;
|
||||||
|
|
||||||
|
if (inQuery.ReadingExportType == ExportResult.SelfAnalysis)
|
||||||
|
{
|
||||||
|
//找到非一致性分析的任务
|
||||||
|
var selfExportList = list.Where(t => t.IsSelfAnalysis == null).ToList();
|
||||||
|
|
||||||
|
//处理一致性分析结果是否和原始阅片是否一致
|
||||||
|
foreach (var item in selfExportList)
|
||||||
|
{
|
||||||
|
//找到一致性分析的结果
|
||||||
|
var selfAnalysisTask = list.Where(t => t.IsSelfAnalysis == true && t.SubjectCode == item.SubjectCode && t.VisitTaskNum == item.VisitTaskNum && t.TaskName == t.TaskName && t.UserName == item.UserName).FirstOrDefault();
|
||||||
|
|
||||||
|
//将自身一致性分析的字段 赋值到访视任务这个字段
|
||||||
|
item.IsAnalysisDiffToOriginalData = selfAnalysisTask?.IsAnalysisDiffToOriginalData;
|
||||||
|
|
||||||
|
//处理再次阅片人的结果
|
||||||
|
if (selfAnalysisTask != null)
|
||||||
|
{
|
||||||
|
foreach (var qItem in selfAnalysisTask.QuestionAnswerList)
|
||||||
|
{
|
||||||
|
qItem.QuestionName = qItem.QuestionName + $"{(_userInfo.IsEn_Us ? "(Again)" : "再次")}";
|
||||||
|
}
|
||||||
|
|
||||||
|
item.QuestionAnswerList = item.QuestionAnswerList.Union(selfAnalysisTask?.QuestionAnswerList).ToList();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
list = selfExportList;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//---当前标准导出还未支持
|
export_Template = StaticData.Export.TrialGroupAnalysisList_Export;
|
||||||
throw new Exception(_localizer["ExcelExport_UnsupportedExport"]);
|
|
||||||
|
var newList = new List<AnalysisDynamicCommonExport>();
|
||||||
|
|
||||||
|
foreach (var group in list.GroupBy(t => new { t.SubjectCode, t.VisitTaskNum, t.TaskName }).OrderBy(g => g.Key.SubjectCode).ThenBy(g => g.Key.VisitTaskNum))
|
||||||
|
{
|
||||||
|
var subjectVisitGroupList = group.ToList();
|
||||||
|
|
||||||
|
|
||||||
|
//找到当前访视组间一致性分析的任务结果
|
||||||
|
|
||||||
|
var groupOtherTaskList = subjectVisitGroupList.Where(t => t.IsSelfAnalysis == false).ToList();
|
||||||
|
|
||||||
|
foreach (var subjectVisitTaskArm in subjectVisitGroupList.Where(t => t.IsSelfAnalysis == null).OrderBy(t => t.ArmEnum))
|
||||||
|
{
|
||||||
|
foreach (var otherTask in groupOtherTaskList)
|
||||||
|
{
|
||||||
|
//非一致性分析任务
|
||||||
|
var cloneObj = subjectVisitTaskArm.Clone();
|
||||||
|
|
||||||
|
|
||||||
|
foreach (var qItem in otherTask.QuestionAnswerList)
|
||||||
|
{
|
||||||
|
qItem.QuestionName = qItem.QuestionName + $"{(_userInfo.IsEn_Us ? "(Again)" : "(再次)")}";
|
||||||
|
}
|
||||||
|
|
||||||
|
//处理 再次阅片人,再次阅片人角色 两列
|
||||||
|
var addQuestionList = new List<CommonQuesionInfo>();
|
||||||
|
|
||||||
|
addQuestionList.Add(new CommonQuesionInfo() { QuestionName = _userInfo.IsEn_Us ? "Reviwer(Again)" : "阅片人(再次)", QuestionValue = otherTask.UserName });
|
||||||
|
addQuestionList.Add(new CommonQuesionInfo() { QuestionName = _userInfo.IsEn_Us ? "Reviwer Role(Again)" : "阅片人角色(再次)", QuestionValue = ((int)otherTask.ArmEnum).ToString(), TranslateDicName = "ArmEnum" });
|
||||||
|
|
||||||
|
|
||||||
|
cloneObj.QuestionAnswerList = cloneObj.QuestionAnswerList.Union(otherTask.QuestionAnswerList).ToList();
|
||||||
|
|
||||||
|
|
||||||
|
cloneObj.IsGroupAnalysisDiffToOriginalData = cloneObj.ArmEnum == Arm.DoubleReadingArm1 ? otherTask.IsGroupDiffArm1 : otherTask.IsGroupDiffArm2;
|
||||||
|
|
||||||
|
newList.Add(cloneObj);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
list = newList;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var columNameList = list.SelectMany(t => t.QuestionAnswerList).Where(t => t.QuestionName.IsNotNullOrEmpty()).Select(t => t.QuestionName).Distinct().ToList();
|
||||||
|
|
||||||
|
exportInfo.List = ExportExcelConverterDate.ConvertToClientTimeInObject(list, _userInfo.TimeZoneId);
|
||||||
|
exportInfo.CurrentTime = ExportExcelConverterDate.DateTimeInternationalToString(DateTime.Now, _userInfo.TimeZoneId);
|
||||||
|
|
||||||
|
var dynamicColumnConfig = new DynamicColumnConfig()
|
||||||
|
{
|
||||||
|
AutoColumnTitleRowIndex = 2,
|
||||||
|
AutoColumnStartIndex = 5,
|
||||||
|
TempalteLastColumnIndex = 4,
|
||||||
|
DynamicItemDicName = "TranslateDicName",
|
||||||
|
DynamicItemValueName = "QuestionValue",
|
||||||
|
DynamicItemTitleName = "QuestionName",
|
||||||
|
DynamicListName = "QuestionAnswerList",
|
||||||
|
RemoveColunmIndexList = new List<int>() { },
|
||||||
|
ColumnNameList = columNameList ?? new List<string>(),
|
||||||
|
TranslateDicNameList = translateDicNameList ?? new List<string>()
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
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"
|
||||||
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
#endregion
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region 通用阅片结果导出
|
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -2009,6 +2110,7 @@ namespace IRaCIS.Core.Application.Service.Common
|
||||||
export_Template = StaticData.Export.ReadingLession_Export;
|
export_Template = StaticData.Export.ReadingLession_Export;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//病灶明细表 需要单独处理
|
||||||
if (inQuery.ReadingExportType != ExportResult.DetailedTableOfLesions)
|
if (inQuery.ReadingExportType != ExportResult.DetailedTableOfLesions)
|
||||||
{
|
{
|
||||||
list = await query.ProjectTo<CommonEvaluationExport>(_mapper.ConfigurationProvider,
|
list = await query.ProjectTo<CommonEvaluationExport>(_mapper.ConfigurationProvider,
|
||||||
|
@ -2023,6 +2125,7 @@ namespace IRaCIS.Core.Application.Service.Common
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
//其他可以统一处理
|
||||||
var taskList = await query.ProjectTo<CommonLessionExport>(_mapper.ConfigurationProvider,
|
var taskList = await query.ProjectTo<CommonLessionExport>(_mapper.ConfigurationProvider,
|
||||||
new
|
new
|
||||||
{
|
{
|
||||||
|
@ -2091,7 +2194,7 @@ namespace IRaCIS.Core.Application.Service.Common
|
||||||
var dynamicPartialLessionInfoList = lession.LessionAnswerList.Select(t => new CommonQuesionInfo() { QuestionName = t.QuestionName, QuestionValue = t.QuestionValue, TranslateDicName = t.TranslateDicName });
|
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();
|
var dynamicLessionInfoList = addLessionInfoList.Union(dynamicPartialLessionInfoList).Union(item.QuestionAnswerList).ToList();
|
||||||
|
|
||||||
var cloneItem = item.Clone();
|
var cloneItem = item.Clone();
|
||||||
|
@ -2102,7 +2205,7 @@ namespace IRaCIS.Core.Application.Service.Common
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//要把裁判任务加进去
|
//要把裁判任务加进去 裁判任务上没有病灶
|
||||||
|
|
||||||
list.Add(item);
|
list.Add(item);
|
||||||
}
|
}
|
||||||
|
@ -2354,7 +2457,7 @@ namespace IRaCIS.Core.Application.Service.Common
|
||||||
FullName = g.Key.FullName,
|
FullName = g.Key.FullName,
|
||||||
|
|
||||||
//触发裁判的阅片期的数量
|
//触发裁判的阅片期的数量
|
||||||
TotalJudgeCount = g.Where(t => t.ReadingCategory == ReadingCategory.Global && t.SouceReadModuleId != null && t.JudgeVisitTaskId != null && t.JudgeVisitTask.ReadingTaskState==ReadingTaskState.HaveSigned).Select(t => t.SouceReadModuleId).Distinct().Count(),
|
TotalJudgeCount = g.Where(t => t.ReadingCategory == ReadingCategory.Global && t.SouceReadModuleId != null && t.JudgeVisitTaskId != null && t.JudgeVisitTask.ReadingTaskState == ReadingTaskState.HaveSigned).Select(t => t.SouceReadModuleId).Distinct().Count(),
|
||||||
|
|
||||||
JudgeAgreeCount = g.Where(t => t.ReadingCategory == ReadingCategory.Global && t.JudgeVisitTaskId != null && t.JudgeVisitTask.JudgeResultTaskId == t.Id)
|
JudgeAgreeCount = g.Where(t => t.ReadingCategory == ReadingCategory.Global && t.JudgeVisitTaskId != null && t.JudgeVisitTask.JudgeResultTaskId == t.Id)
|
||||||
.Select(t => t.SouceReadModuleId).Distinct().Count(),
|
.Select(t => t.SouceReadModuleId).Distinct().Count(),
|
||||||
|
|
|
@ -995,6 +995,9 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
public string ImageSizeStr => (FileSize / Math.Pow(1024, 2)).ToString("F3") + 'M';
|
public string ImageSizeStr => (FileSize / Math.Pow(1024, 2)).ToString("F3") + 'M';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public class AnalysisExortCommon
|
public class AnalysisExortCommon
|
||||||
{
|
{
|
||||||
public Guid Id { get; set; }
|
public Guid Id { get; set; }
|
||||||
|
@ -1062,6 +1065,68 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class AnalysisDynamicCommonExport
|
||||||
|
{
|
||||||
|
public Guid Id { get; set; }
|
||||||
|
public string TaskName { get; set; }
|
||||||
|
public string TaskBlindName { get; set; }
|
||||||
|
|
||||||
|
public decimal VisitTaskNum { get; set; }
|
||||||
|
public bool? IsSelfAnalysis { get; set; }
|
||||||
|
|
||||||
|
public string TrialReadingCriterionName { get; set; }
|
||||||
|
|
||||||
|
public CriterionType CriterionType { get; set; }
|
||||||
|
|
||||||
|
public String TrialSiteCode { get; set; } = String.Empty;
|
||||||
|
public string SubjectCode { get; set; } = String.Empty;
|
||||||
|
|
||||||
|
[DictionaryTranslateAttribute("ArmEnum")]
|
||||||
|
public Arm ArmEnum { get; set; }
|
||||||
|
public string UserName { get; set; }
|
||||||
|
public bool? IsBaseline { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 自身一致性分析任务上会有这个值
|
||||||
|
/// </summary>
|
||||||
|
[DictionaryTranslateAttribute("YesOrNo")]
|
||||||
|
public bool? IsAnalysisDiffToOriginalData { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
public List<CommonQuesionInfo> QuestionAnswerList { get; set; }
|
||||||
|
|
||||||
|
#region 组件一致性额外加的
|
||||||
|
public bool? IsGroupAnalysisDiffToOriginalData { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 组件一致性和原Arm1是否有差异
|
||||||
|
/// </summary>
|
||||||
|
public bool? IsGroupDiffArm1 { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 组件一致性和原Arm2是否有差异
|
||||||
|
/// </summary>
|
||||||
|
public bool? IsGroupDiffArm2 { get; set; }
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//public class GroupAnalysisDynamicCommonExport: AnalysisDynamicCommonExport
|
||||||
|
//{
|
||||||
|
// public bool? IsGroupAnalysisDiffToOriginalData { get; set; }
|
||||||
|
|
||||||
|
// /// <summary>
|
||||||
|
// /// 组件一致性和原Arm1是否有差异
|
||||||
|
// /// </summary>
|
||||||
|
// public bool? IsGroupDiffArm1 { get; set; }
|
||||||
|
|
||||||
|
// /// <summary>
|
||||||
|
// /// 组件一致性和原Arm2是否有差异
|
||||||
|
// /// </summary>
|
||||||
|
// public bool? IsGroupDiffArm2 { get; set; }
|
||||||
|
|
||||||
|
//}
|
||||||
public class DymamicQuestionInfo
|
public class DymamicQuestionInfo
|
||||||
{
|
{
|
||||||
public QuestionMark? QuestionMark { get; set; }
|
public QuestionMark? QuestionMark { get; set; }
|
||||||
|
|
|
@ -227,6 +227,23 @@ namespace IRaCIS.Core.Application.Service
|
||||||
.ForMember(o => o.SubjectCode, t => t.MapFrom(u => u.Subject.Code))
|
.ForMember(o => o.SubjectCode, t => t.MapFrom(u => u.Subject.Code))
|
||||||
.ForMember(o => o.UserName, t => t.MapFrom(u => u.DoctorUser.UserName));
|
.ForMember(o => o.UserName, t => t.MapFrom(u => u.DoctorUser.UserName));
|
||||||
|
|
||||||
|
CreateMap<VisitTask, AnalysisDynamicCommonExport>()
|
||||||
|
.ForMember(o => o.IsBaseline, t => t.MapFrom(u => u.SourceSubjectVisit.IsBaseLine))
|
||||||
|
.ForMember(o => o.TrialSiteCode, t => t.MapFrom(u => u.Subject.TrialSite.TrialSiteCode))
|
||||||
|
.ForMember(o => o.SubjectCode, t => t.MapFrom(u => u.Subject.Code))
|
||||||
|
.ForMember(o => o.UserName, t => t.MapFrom(u => u.DoctorUser.UserName))
|
||||||
|
.ForMember(o => o.QuestionAnswerList, t => t.MapFrom(u => u.ReadingTaskQuestionAnswerList
|
||||||
|
.Where(c => c.ReadingQuestionTrial.ExportResultStr.Contains(((int)readingExportType).ToString()))
|
||||||
|
.OrderBy(k => k.ReadingQuestionTrial.ShowOrder)
|
||||||
|
.Select(c => new CommonQuesionInfo()
|
||||||
|
{
|
||||||
|
QuestionType = c.ReadingQuestionTrial.QuestionType,
|
||||||
|
QuestionName = isEn_Us ? c.ReadingQuestionTrial.QuestionEnName : c.ReadingQuestionTrial.QuestionName,
|
||||||
|
QuestionValue = c.IsGlobalChange ? c.GlobalChangeAnswer : c.Answer,
|
||||||
|
TranslateDicName = c.ReadingQuestionTrial.DictionaryCode
|
||||||
|
})))
|
||||||
|
;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
CreateMap<VisitTask, CommonEvaluationExport>()
|
CreateMap<VisitTask, CommonEvaluationExport>()
|
||||||
|
|
|
@ -449,6 +449,10 @@ namespace IRaCIS.Core.Domain.Share
|
||||||
//阅片期一致率
|
//阅片期一致率
|
||||||
ReadingPeriodJudgeRatio_Export = 8,
|
ReadingPeriodJudgeRatio_Export = 8,
|
||||||
|
|
||||||
|
SelfAnalysis = 9,
|
||||||
|
|
||||||
|
GroupAnalysis = 10
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue