diff --git a/IRaCIS.Core.Application/Service/Common/Export/CDISCExportBaseModel.cs b/IRaCIS.Core.Application/Service/Common/Export/CDISCExportBaseModel.cs index 0bf2ef489..ebcebb267 100644 --- a/IRaCIS.Core.Application/Service/Common/Export/CDISCExportBaseModel.cs +++ b/IRaCIS.Core.Application/Service/Common/Export/CDISCExportBaseModel.cs @@ -121,7 +121,23 @@ public class TumorExportBaseModel : TU_TR_RSBaseModel public string VisitNote { get; set; } #endregion + #region 肿瘤学结果 + + public List OncologyResultList { get; set; } + + //public string OncologyUserName { get; set; } + + #endregion +} + +public class OncologyExportInfo +{ + public decimal? VisitTaskNum { get; set; } + public string VisitName { get; set; } + public string OncologyResult { get; set; } = string.Empty; + + public string OncologyReason { get; set; } = string.Empty; } diff --git a/IRaCIS.Core.Application/Service/Common/Export/TumorExportService.cs b/IRaCIS.Core.Application/Service/Common/Export/TumorExportService.cs index 405792e5a..124df9c38 100644 --- a/IRaCIS.Core.Application/Service/Common/Export/TumorExportService.cs +++ b/IRaCIS.Core.Application/Service/Common/Export/TumorExportService.cs @@ -240,7 +240,7 @@ public class Tumor_CDISC_ExportService(IRepository t.TrialId == inQuery.TrialId && t.IsAnalysisCreate == false && (t.TaskState == TaskState.Effect || t.TaskState == TaskState.Freeze)) //访视和全局查询已签名完成的,裁判可以是未签名,未完成的 - .Where(t => (t.ReadingTaskState == ReadingTaskState.HaveSigned && (t.ReadingCategory == ReadingCategory.Visit || t.ReadingCategory == ReadingCategory.Global)) || t.ReadingCategory == ReadingCategory.Judge) + .Where(t => (t.ReadingTaskState == ReadingTaskState.HaveSigned && (t.ReadingCategory == ReadingCategory.Visit || t.ReadingCategory == ReadingCategory.Global || t.ReadingCategory == ReadingCategory.Oncology)) || t.ReadingCategory == ReadingCategory.Judge) .WhereIf(inQuery.TrialReadingCriterionId != null, t => t.TrialReadingCriterionId == inQuery.TrialReadingCriterionId) .WhereIf(inQuery.TrialSiteId != null, t => t.Subject.TrialSiteId == inQuery.TrialSiteId) @@ -335,7 +335,18 @@ public class Tumor_CDISC_ExportService(IRepository new OncologyExportInfo() + { + VisitName = t.VisitTask.TaskName, + VisitTaskNum = t.VisitTask.VisitTaskNum, + OncologyReason = t.EvaluationReason, + OncologyResult = t.EvaluationResult + }).ToList() : new List() + + + }); @@ -386,7 +397,7 @@ public class Tumor_CDISC_ExportService(IRepository 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() { "ArmEnum", "ValueUnit", "GlobalAssessType", "ImageQualityIssues" }) + .Union(new List() { "ArmEnum", "ValueUnit", "GlobalAssessType", "ImageQualityIssues", "OncologyAssessType" }) .Distinct().ToArray(); var trialOrganDic = _trialOrganRepository.Where(t => t.TrialCriterionId == criterion.Id).Select(t => new { t.OrganInfoId, t.Part, t.PartEN }).ToDictionary( @@ -484,6 +495,78 @@ public class Tumor_CDISC_ExportService(IRepository t.SubjectCode == task.SubjectCode && t.ReadingCategory == ReadingCategory.Oncology) + .OrderByDescending(c => c.VisitTaskNum).First().VisitTaskId) + { + continue; + } + + foreach (var OncologyResult in task.OncologyResultList) + { + if (OncologyResult.OncologyReason.IsNotNullOrEmpty()) + { + + var co = CreatNewCOExport(task, coList.Count + 1); + + co.RemarksQuote = $"{OncologyResult?.VisitName}_ONCOLOGY_COMMENTS"; + + co.VisitNum = OncologyResult?.VisitTaskNum; + + co.VisitName = OncologyResult?.VisitName; + + co.Remarks = OncologyResult.OncologyReason; + + + + co.CODTC = task.SignTime?.ToString("yyyy-MM-dd"); + + coList.Add(co); + } + + if (OncologyResult.OncologyResult.IsNotNullOrEmpty()) + { + + var visitTask = taskList.Where(t => t.VisitNum == OncologyResult?.VisitTaskNum && t.SubjectCode==task.SubjectCode).FirstOrDefault(); + + var rs = CreatNewRSExport(task, rs_subjectIndexNoDic); + + rs.ARM_VisitName = $"{task.ArmEnumStr}_{OncologyResult?.VisitName}"; + + rs.VisitNum = OncologyResult?.VisitTaskNum; + + rs.VisitName = OncologyResult?.VisitName; + + rs.LatestScanDate = visitTask?.LatestScanDate; + rs.EarliestScanDate = visitTask?.EarliestScanDate; + + + Fill_RS_IndexValue(rs, 9, Lugano_RSFixed.RSValueList); + + + rs.RespondEfficacyAssessment = translateDataList["OncologyAssessType"].Where(t => t.Code.ToLower() == OncologyResult.OncologyResult?.ToLower()).Select(t => isEn_Us ? t.Value : t.ValueCN).FirstOrDefault() ?? String.Empty; ; + + var findTask = reReadingList.FirstOrDefault(t => t.UserName == rs.UserName && t.ArmEnum == rs.ArmEnum && t.VisitTaskNum == rs.VisitNum); + + if (findTask != null) + { + rs.ReAssessmentReason = findTask.RequestReReadingReason; + } + + rsList.Add(rs); + } + } + + + continue; } @@ -707,7 +790,7 @@ public class Tumor_CDISC_ExportService(IRepository t.ReadingCategory == ReadingCategory.Global).GroupBy(t => new { t.SubjectCode, t.ArmEnum }).Select(g => g.OrderByDescending(t => t.VisitNum).FirstOrDefault()).ToList(); //RS表 整体肿瘤评估了,其他病灶评估输出的也是最早的日期 @@ -940,7 +1020,7 @@ public class Tumor_CDISC_ExportService(IRepository subjectIndexNoDic, Dictionary> translateDataList, bool isEn_Us) + private RS_Export CreatNewRSExport(TumorExportBaseModel task, Dictionary subjectIndexNoDic) { subjectIndexNoDic[task.SubjectCode]++; @@ -1309,9 +1389,6 @@ public class Tumor_CDISC_ExportService(IRepository OncologyResultList { get; set; } + + [JsonIgnore] public List ReadingNoneDicomMarkList { get; set; } diff --git a/IRaCIS.Core.Infra.EFCore/EntityConfigration/VisitTaskConfigration.cs b/IRaCIS.Core.Infra.EFCore/EntityConfigration/VisitTaskConfigration.cs index 194c7d1b8..f1d86f367 100644 --- a/IRaCIS.Core.Infra.EFCore/EntityConfigration/VisitTaskConfigration.cs +++ b/IRaCIS.Core.Infra.EFCore/EntityConfigration/VisitTaskConfigration.cs @@ -26,6 +26,9 @@ namespace IRaCIS.Core.Infra.EFCore.EntityConfigration builder.HasMany(t => t.LesionList).WithOne(s => s.VisitTask).HasForeignKey(t => t.VisitTaskId); + //肿瘤学任务存在重阅 + builder.HasMany(t => t.OncologyResultList).WithOne(s => s.OncologyVisitTask).HasForeignKey(t => t.OncologyTaskId); + } }