diff --git a/IRaCIS.Core.Application/Service/Common/Export/RESISTExportService.cs b/IRaCIS.Core.Application/Service/Common/Export/RESISTExportService.cs index 29fd17424..2f702048a 100644 --- a/IRaCIS.Core.Application/Service/Common/Export/RESISTExportService.cs +++ b/IRaCIS.Core.Application/Service/Common/Export/RESISTExportService.cs @@ -20,6 +20,7 @@ using NPOI.SS.Formula.Functions; using NPOI.Util; using System; using System.Collections.Generic; +using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -303,7 +304,7 @@ public class Tumor_CDISC_ExportService(IRepository t.RowMark).Select(c => new TumorLessionInfo() { - Id=c.Id, + Id = c.Id, LessionType = c.ReadingQuestionTrial.LesionType, LessionCode = c.RowMark, SplitRowId = c.SplitRowId, @@ -430,7 +431,7 @@ public class Tumor_CDISC_ExportService(IRepositoryt.LessionType)) { #region tu 表处理部分 @@ -444,38 +445,89 @@ public class Tumor_CDISC_ExportService(IRepository() { QuestionMark.State }; - if (lesion.LessionAnswerList.Any(t => t.QuestionMark == QuestionMark.IsLymph && t.QuestionValue == "1")) + foreach (var lessionAnswer in lesion.LessionAnswerList) { - targetMarks.AddRange(new List() { QuestionMark.ShortAxis, }); - } - else if (lesion.LessionAnswerList.FirstOrDefault(t => t.QuestionMark == QuestionMark.MajorAxis)?.QuestionValue.IsNotNullOrEmpty() == true) - { - targetMarks.AddRange(new List() { QuestionMark.MajorAxis }); + var trLessionIndex = -1; + + List trValueList = new List(); + + if (criterion.CriterionType == CriterionType.RECIST1Point1) + { + trLessionIndex = Get_Resist_TR_Lession_Index(lesion, lessionAnswer); + + trValueList = RESIST_TRFixed.TRValueList; + + } + else if (criterion.CriterionType == CriterionType.Lugano2014) + { + trLessionIndex = Get_Luganno_TR_Lession_Index(task, lesion, lessionAnswer); + + trValueList = Lugano_TRFixed.TRValueList; + } + + + if (trLessionIndex != -1) + { + var tr = CreatNewTRExport(task, tr_subjectIndexNoDic, tu); + + if (lessionAnswer.TranslateDicName.IsNotNullOrEmpty()) + { + tr.OriginalMeasurements = translateDataList[lessionAnswer.TranslateDicName].Where(t => t.Code.ToLower() == lessionAnswer.QuestionValue?.ToLower()).Select(t => isEn_Us ? t.Value : t.ValueCN).FirstOrDefault() ?? String.Empty; + } + else + { + tr.OriginalMeasurements = lessionAnswer.QuestionValue; + } + + tr.OriginalUnit = translateDataList["ValueUnit"].Where(t => t.Code.ToLower() == ((int?)lessionAnswer.Unit)?.ToString().ToLower()).Select(t => isEn_Us ? t.Value : t.ValueCN).FirstOrDefault() ?? String.Empty; + + + + //填充固定信息 + Fill_TR_IndexValue(tr, trLessionIndex, trValueList); + + trList.Add(tr); + } } - //状态 和长径、短径 - foreach (var lessionAnswer in lesion.LessionAnswerList.Where(t => targetMarks.Any(c => c == t.QuestionMark))) - { - - var tr = CreatNewTRExport(task, tr_subjectIndexNoDic, tu); - //填充固定信息 - Fill_TR_Resist_Fixed_Value(tr, lessionAnswer, translateDataList, isEn_Us); - trList.Add(tr); - } + + #region RECIST1Point1 废弃 tr 处理部分1 病灶状态和测量值 + + //var targetMarks = new List() { QuestionMark.State }; + + //if (lesion.LessionAnswerList.Any(t => t.QuestionMark == QuestionMark.IsLymph && t.QuestionValue == "1")) + //{ + // targetMarks.AddRange(new List() { QuestionMark.ShortAxis, }); + //} + //else if (lesion.LessionAnswerList.FirstOrDefault(t => t.QuestionMark == QuestionMark.MajorAxis)?.QuestionValue.IsNotNullOrEmpty() == true) + //{ + // targetMarks.AddRange(new List() { QuestionMark.MajorAxis }); + //} + + + ////状态 和长径、短径 + //foreach (var lessionAnswer in lesion.LessionAnswerList.Where(t => targetMarks.Any(c => c == t.QuestionMark))) + //{ + + // var tr = CreatNewTRExport(task, tr_subjectIndexNoDic, tu); + + + // //填充固定信息 + // Fill_TR_Resist_Fixed_Value(tr, lessionAnswer, translateDataList, isEn_Us); + + // trList.Add(tr); + //} + #endregion - - } foreach (var questionAnswer in task.QuestionAnswerList) @@ -483,7 +535,24 @@ public class Tumor_CDISC_ExportService(IRepository trValueList = new List(); + + if (criterion.CriterionType == CriterionType.RECIST1Point1) + { + trValueTypeIndex = Get_Resist_TR_Visit_Index(task, questionAnswer); + + trValueList = RESIST_TRFixed.TRValueList; + + } + else if (criterion.CriterionType == CriterionType.Lugano2014) + { + trValueTypeIndex = Get_Lugano_TR_Visit_Index(task, questionAnswer); + + trValueList = Lugano_TRFixed.TRValueList; + } + if (trValueTypeIndex != -1) { @@ -501,8 +570,6 @@ public class Tumor_CDISC_ExportService(IRepository t.Code.ToLower() == ((int?)questionAnswer.Unit)?.ToString().ToLower()).Select(t => isEn_Us ? t.Value : t.ValueCN).FirstOrDefault() ?? String.Empty; - //填充固定信息 - Fill_TR_IndexValue(tr, trValueTypeIndex, RESIST_TRFixed.TRValueList); trList.Add(tr); } @@ -515,13 +582,30 @@ public class Tumor_CDISC_ExportService(IRepository 0) { - var rsValueTypeIndex = Get_Resist_RS_VisitFixed_Index(task, questionAnswer); + var rsValueTypeIndex = -1; + + List rsValueList = new List(); + + if (criterion.CriterionType == CriterionType.RECIST1Point1) + { + rsValueTypeIndex = Get_Resist_RS_VisitFixed_Index(task, questionAnswer); + + rsValueList = RESIST_RSFixed.RSValueList; + + } + else if (criterion.CriterionType == CriterionType.Lugano2014) + { + trValueTypeIndex = Get_Lugano_RS_VisitFixed_Index(task, questionAnswer); + + rsValueList = Lugano_RSFixed.RSValueList; + } + if (rsValueTypeIndex != -1) { var rs = CreatNewRSExport(task, questionAnswer, rs_subjectIndexNoDic, translateDataList, isEn_Us); - Fill_RS_IndexValue(rs, rsValueTypeIndex, RESIST_RSFixed.RSValueList); + Fill_RS_IndexValue(rs, rsValueTypeIndex, rsValueList); if (questionAnswer.TranslateDicName.IsNotNullOrEmpty()) @@ -745,6 +829,347 @@ public class Tumor_CDISC_ExportService(IRepository 0) + { + switch (lessionAnswer.QuestionMark) + { + case QuestionMark.MajorAxis: + trValueTypeIndex = 0; + break; + case QuestionMark.ShortAxis: + trValueTypeIndex = 1; + break; + + case QuestionMark.PPD: + trValueTypeIndex = 2; + break; + case QuestionMark.State: + trValueTypeIndex = 3; + break; + case QuestionMark.SUVmax: + trValueTypeIndex = 4; + break; + + //PPDFNAD + case QuestionMark.NadirPPD: + trValueTypeIndex = 5; + break; + + //PRECNPPD + case QuestionMark.LowPPDAddPercent: + trValueTypeIndex = 6; + break; + + //LDIFNAD + case QuestionMark.LowPPDLDi: + trValueTypeIndex = 7; + break; + + //SDIFNAD + case QuestionMark.LowPPDSDi: + trValueTypeIndex = 8; + break; + + + //ABSCNLDI + case QuestionMark.LowPPDLDiAdded: + trValueTypeIndex = 9; + break; + + //ABSCNSDI + case QuestionMark.LowPPDSDiAdded: + trValueTypeIndex = 10; + + break; + + //NADIR + case QuestionMark.LowPPDVisit: + trValueTypeIndex = 11; + + break; + + } + } + //基线任务 + else + { + switch (lessionAnswer.QuestionMark) + { + case QuestionMark.MajorAxis: + trValueTypeIndex = 0; + break; + case QuestionMark.ShortAxis: + trValueTypeIndex = 1; + break; + + case QuestionMark.PPD: + trValueTypeIndex = 2; + break; + case QuestionMark.State: + trValueTypeIndex = 3; + break; + case QuestionMark.SUVmax: + trValueTypeIndex = 4; + break; + + } + } + + return trValueTypeIndex; + + + } + + private int Get_Lugano_TR_Visit_Index(TumorExportBaseModel task, TumorCommonQustionInfo questionAnswer) + { + var trValueTypeIndex = -1; + //非基线任务 + if (task.VisitTaskNum > 0) + { + + switch (questionAnswer.QuestionType) + { + + //LIVESTAT + case QuestionType.LiverState: + trValueTypeIndex = 12; + break; + + case QuestionType.SplenicTopPosition: + trValueTypeIndex = 13; + break; + case QuestionType.SplenicBottomPosition: + trValueTypeIndex = 14; + break; + case QuestionType.SpleenLength: + trValueTypeIndex = 15; + break; + + case QuestionType.SplenicStatus: + trValueTypeIndex = 16; + break; + + case QuestionType.ExistPET: + trValueTypeIndex = 17; + break; + + case QuestionType.MediastinumSUVmax: + trValueTypeIndex = 18; + break; + case QuestionType.LiverSUVmax: + trValueTypeIndex = 19; + break; + + case QuestionType.SUVmax: + trValueTypeIndex = 20; + break; + case QuestionType.SUVmaxLesion: + trValueTypeIndex = 21; + break; + + case QuestionType.PET5PS: + trValueTypeIndex = 22; + break; + case QuestionType.UptakeChange: + trValueTypeIndex = 23; + break; + case QuestionType.EvidenceFocalFDG: + trValueTypeIndex = 24; + break; + case QuestionType.SPD: + trValueTypeIndex = 25; + break; + + case QuestionType.SPDChange: + trValueTypeIndex = 26; + break; + case QuestionType.SplenoncusChange: + trValueTypeIndex = 27; + break; + case QuestionType.SplenoncusAdd: + trValueTypeIndex = 28; + break; + case QuestionType.SplenoncusDiameterChange: + trValueTypeIndex = 29; + break; + + case QuestionType.LowestSplenoncusVisit: + trValueTypeIndex = 30; + break; + + + } + + + + } + //基线任务 + else + { + switch (questionAnswer.QuestionType) + { + //LIVESTAT + case QuestionType.LiverState: + trValueTypeIndex = 12; + break; + + case QuestionType.SplenicTopPosition: + trValueTypeIndex = 13; + break; + case QuestionType.SplenicBottomPosition: + trValueTypeIndex = 14; + break; + case QuestionType.SpleenLength: + trValueTypeIndex = 15; + break; + + case QuestionType.SplenicStatus: + trValueTypeIndex = 16; + break; + + case QuestionType.ExistPET: + trValueTypeIndex = 17; + break; + + case QuestionType.MediastinumSUVmax: + trValueTypeIndex = 18; + break; + case QuestionType.LiverSUVmax: + trValueTypeIndex = 19; + break; + + case QuestionType.SUVmax: + trValueTypeIndex = 20; + break; + case QuestionType.SUVmaxLesion: + trValueTypeIndex = 21; + break; + + case QuestionType.PET5PS: + trValueTypeIndex = 22; + break; + + case QuestionType.EvidenceFocalFDG: + trValueTypeIndex = 24; + break; + case QuestionType.SPD: + trValueTypeIndex = 25; + break; + + + } + } + + return trValueTypeIndex; + } + + private int Get_Lugano_RS_VisitFixed_Index(TumorExportBaseModel task, TumorCommonQustionInfo questionAnswer) + { + var rsValueTypeIndex = -1; + + switch (questionAnswer.QuestionType) + { + case QuestionType.TargetLesion: + rsValueTypeIndex = 0; + break; + case QuestionType.NoTargetLesion: + rsValueTypeIndex = 1; + break; + case QuestionType.NewLesions: + rsValueTypeIndex = 2; + break; + + + case QuestionType.LiverAssessment: + rsValueTypeIndex = 3; + break; + + case QuestionType.SplenicEvaluation: + rsValueTypeIndex = 4; + break; + + + case QuestionType.CTandMRI: + rsValueTypeIndex = 5; + break; + + case QuestionType.LastFDGPET: + rsValueTypeIndex = 6; + break; + + case QuestionType.FDGPET: + rsValueTypeIndex = 7; + break; + + case QuestionType.ImgOncology: + rsValueTypeIndex = 8; + break; + + case QuestionType.Tumor: + rsValueTypeIndex = 3; + break; + + } + + return rsValueTypeIndex; + } + + #endregion + + + private TR_Export Fill_TR_IndexValue(TR_Export tr, int trValueTypeIndex, List TRValueList) + { + tr.ValueType = TRValueList[trValueTypeIndex].TRValueType; + tr.TumorAssessmentSimpleName = TRValueList[trValueTypeIndex].TumorAssessmentSimpleName; + tr.TumorAssessmentFullName = TRValueList[trValueTypeIndex].TumorAssessmentFullName; + return tr; + } + private TU_Export Fill_Resisit_Lugano_TUExport(TU_Export tu, TumorLessionInfo lesion) + { + var lesionTypeIndex = -1; + + //分裂的病灶 + if (lesion.SplitRowId != null) + { + lesionTypeIndex = 3; + } + else + { + + switch (lesion.LessionType) + { + case LesionType.TargetLesion: + lesionTypeIndex = 0; + break; + + case LesionType.NonTargetLesions: + lesionTypeIndex = 1; + break; + + case LesionType.NewLesions: + lesionTypeIndex = 2; + break; + } + } + + if (lesionTypeIndex != -1) + { + tu.ValueType = RESIST_Lugano_TUFixed.TUValueList[lesionTypeIndex].TUValueType; + tu.TumorIdentificationSimple = RESIST_Lugano_TUFixed.TUValueList[lesionTypeIndex].TumorIdentificationSimple; + tu.TumorIdentificationFullName = RESIST_Lugano_TUFixed.TUValueList[lesionTypeIndex].TumorIdentificationFullName; + tu.TumorIdentificationResult = RESIST_Lugano_TUFixed.TUValueList[lesionTypeIndex].TumorIdentificationResult; + tu.TumorIdentificationResultType = RESIST_Lugano_TUFixed.TUValueList[lesionTypeIndex].TumorIdentificationResultType; + } + + return tu; + } #region Resist CDISC 文档逻辑 @@ -779,10 +1204,43 @@ public class Tumor_CDISC_ExportService(IRepository t.QuestionMark == QuestionMark.IsLymph && t.QuestionValue == "1")) + { + + + trValueTypeIndex = 0; + + } + //非淋巴结 并且长径有值 + else if (lessionAnswer.QuestionMark == QuestionMark.MajorAxis + && lesion.LessionAnswerList.Any(t => t.QuestionMark == QuestionMark.IsLymph && t.QuestionValue == "0") + && lesion.LessionAnswerList.FirstOrDefault(t => t.QuestionMark == QuestionMark.MajorAxis)?.QuestionValue.IsNotNullOrEmpty() == true) + { + trValueTypeIndex = 0; + } + + return trValueTypeIndex; + + + } + private int Get_Resist_TR_Visit_Index(TumorExportBaseModel task, TumorCommonQustionInfo questionAnswer) { var trValueTypeIndex = -1; @@ -852,15 +1310,7 @@ public class Tumor_CDISC_ExportService(IRepository TRValueList) - { - tr.ValueType = TRValueList[trValueTypeIndex].TRValueType; - tr.TumorAssessmentSimpleName = TRValueList[trValueTypeIndex].TumorAssessmentSimpleName; - tr.TumorAssessmentFullName = TRValueList[trValueTypeIndex].TumorAssessmentFullName; - return tr; - } - - + [Obsolete] private TR_Export Fill_TR_Resist_Fixed_Value(TR_Export tr, TumorLessionAnswerInfo lessionAnswer, Dictionary> translateDataList, bool isEn_Us) { var trValueTypeIndex = -1; @@ -890,6 +1340,7 @@ public class Tumor_CDISC_ExportService(IRepository t.Code.ToLower() == ((int?)lessionAnswer.Unit)?.ToString().ToLower()).Select(t => isEn_Us ? t.Value : t.ValueCN).FirstOrDefault() ?? String.Empty; + } @@ -899,45 +1350,6 @@ public class Tumor_CDISC_ExportService(IRepository