diff --git a/IRaCIS.Core.Application/Service/Common/Export/CDISCExportBaseModel.cs b/IRaCIS.Core.Application/Service/Common/Export/CDISCExportBaseModel.cs index 7c00bfad6..822de893b 100644 --- a/IRaCIS.Core.Application/Service/Common/Export/CDISCExportBaseModel.cs +++ b/IRaCIS.Core.Application/Service/Common/Export/CDISCExportBaseModel.cs @@ -74,6 +74,7 @@ public class TumorGlobalQuestionAnserInfo [Comment("原任务ID")] public Guid TaskId { get; set; } + public GlobalAnswerType GlobalAnswerType { get; set; } [Comment("问题答案")] public string Answer { get; set; } = string.Empty; @@ -89,6 +90,8 @@ public class TumorExportBaseModel : TU_TR_RSBaseModel #region 后续处理额外添加字段 + + public DateTime? JudgeSignTime { get; set; } public Guid? SourceSubjectVisitId { get; set; } @@ -204,7 +207,9 @@ public class TU_TR_RSBaseModel #endregion + public DateTime? SignTime { get; set; } + public string TaskName { get; set; } #region 额外翻译字段 diff --git a/IRaCIS.Core.Application/Service/Common/Export/RESISTExportService.cs b/IRaCIS.Core.Application/Service/Common/Export/TumorExportService.cs similarity index 92% rename from IRaCIS.Core.Application/Service/Common/Export/RESISTExportService.cs rename to IRaCIS.Core.Application/Service/Common/Export/TumorExportService.cs index 7dc30e311..d9c286224 100644 --- a/IRaCIS.Core.Application/Service/Common/Export/RESISTExportService.cs +++ b/IRaCIS.Core.Application/Service/Common/Export/TumorExportService.cs @@ -1,5 +1,6 @@ using Amazon.Runtime.Internal.Transform; using DocumentFormat.OpenXml.Bibliography; +using DocumentFormat.OpenXml.Office2010.CustomUI; using DocumentFormat.OpenXml.Office2021.DocumentTasks; using DocumentFormat.OpenXml.Spreadsheet; using IRaCIS.Application.Contracts; @@ -253,6 +254,8 @@ public class Tumor_CDISC_ExportService(IRepository c.ReadingQuestionTrial.QuestionType == QuestionType.AdjustReason).FirstOrDefault()!.Answer, - GlobalResultList = t.GlobalVisitResultList.Where(t => t.GlobalAnswerType == GlobalAnswerType.Reason).Select(t => new TumorGlobalQuestionAnserInfo() + GlobalResultList = t.GlobalVisitResultList.Where(t => t.GlobalAnswerType == GlobalAnswerType.Reason || t.GlobalAnswerType == GlobalAnswerType.UpdateType).Select(t => new TumorGlobalQuestionAnserInfo() { TaskId = t.TaskId, + GlobalAnswerType = t.GlobalAnswerType, Answer = t.Answer }).ToList(), @@ -379,7 +383,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" }) + .Union(new List() { "ArmEnum", "ValueUnit", "GlobalAssessType", "ImageQualityIssues" }) .Distinct().ToArray(); //翻译字典 @@ -405,13 +409,51 @@ public class Tumor_CDISC_ExportService(IRepository t.Code.ToLower() == ((int)task.ArmEnum).ToString().ToLower()).Select(t => isEn_Us ? t.Value : t.ValueCN).FirstOrDefault() ?? String.Empty; - #region 初始化 - if (task.SourceSubjectVisitId == null) + + if (task.ReadingCategory == ReadingCategory.Judge) { continue; } + if (task.ReadingCategory == ReadingCategory.Global) + { + // co 处理部分 处理部分3 全局修改备注 + foreach (var vTaskGroup in task.GlobalResultList.Where(t => t.GlobalAnswerType == GlobalAnswerType.Reason).GroupBy(t => t.TaskId)) + { + var visiTaskId = vTaskGroup.Key; + + var globalVisitName = tuList.Where(t => t.VisitNum == task.VisitNum - ReadingCommon.TaskNumDic[ReadingCategory.Global]).FirstOrDefault()?.VisitName ?? ""; + + var reason = vTaskGroup.FirstOrDefault()?.Answer ?? ""; + + var firstTuTask = tuList.FirstOrDefault(t => t.VisitTaskId == visiTaskId); + + if (reason.IsNotNullOrEmpty() && firstTuTask != null) + { + + var co = CreatNewCOExport(task, coList.Count + 1); + + co.RemarksQuote = $"{co.ArmEnumStr}_{globalVisitName}_ GLOBAL_COMMENTS"; + + co.VisitNum = firstTuTask.VisitNum; + + co.Remarks = reason; + + co.CODTC = firstTuTask.SignTime?.ToString("yyyy-MM-dd"); + + coList.Add(co); + } + + } + + continue; + } + + #region 初始化 + + //处理按照访视维度 给出索引号 var subjectVisitId = (Guid)task.SourceSubjectVisitId; @@ -430,7 +472,7 @@ public class Tumor_CDISC_ExportService(IRepository t.Code.ToLower() == ((int)task.ArmEnum).ToString().ToLower()).Select(t => isEn_Us ? t.Value : t.ValueCN).FirstOrDefault() ?? String.Empty; + #endregion @@ -579,7 +621,7 @@ public class Tumor_CDISC_ExportService(IRepository t.Code.ToLower() == questionAnswer.QuestionValue?.ToLower()).Select(t => isEn_Us ? t.Value : t.ValueCN).FirstOrDefault() ?? String.Empty; + } + else + { + co.Remarks = questionAnswer.QuestionValue; + } + + co.CODTC = task.SignTime?.ToString("yyyy-MM-dd"); + + coList.Add(co); + } + + #endregion } - #region co 处理部分 + #region co 处理部分 处理部分2 访视点,裁判备注 //非基线 if (task.VisitNum > 0) @@ -682,50 +763,67 @@ public class Tumor_CDISC_ExportService(IRepository t.VisitTaskId == task.VisitTaskId && t.IsOveralResponse == true).FirstOrDefault(); - if (rs_Tumor != null) + //访视点备注必须有值才导出 + if (rs_Tumor != null && task.VisitNote.IsNotNullOrEmpty()) { var co = CreatNewCOExport(task, coList.Count + 1); co.RDOMAIN = "RS"; co.IdentificationVariable = "RSSEQ"; co.Identification = rs_Tumor.RSSEQ.ToString(); - co.RemarksQuote = $"{co.ArmEnum} {co.VisitName}"; + co.RemarksQuote = $"{co.ArmEnumStr}_VISIT_COMMENTS"; co.Remarks = task.VisitNote; coList.Add(co); } - if (task.IsTrigerJudge == true && task.IsJudgeSelect == true) - { - var co = CreatNewCOExport(task, coList.Count + 1); - - co.RemarksQuote = $"{co.ArmEnum} {co.VisitName}"; - co.Remarks = task.JudgeNote; - co.CODTC = task.JudgeSignTime?.ToString("yyyy-MM-dd"); - - coList.Add(co); - } - } + if (task.IsTrigerJudge == true && task.IsJudgeSelect == true && task.JudgeNote.IsNotNullOrEmpty()) + { + var co = CreatNewCOExport(task, coList.Count + 1); + + co.RemarksQuote = $"{co.VisitName}_ADJUDICATION_COMMENTS"; + co.Remarks = task.JudgeNote; + co.CODTC = task.JudgeSignTime?.ToString("yyyy-MM-dd"); + + coList.Add(co); + } #endregion } #region 全局更新数据--rs 全局更新原因 - foreach (var task in taskList.Where(t => t.ReadingCategory == ReadingCategory.Global)) + //var globalList = taskList.Where(t => t.ReadingCategory == ReadingCategory.Global).GroupBy(t => new { t.SubjectCode, t.ArmEnum }).Select(g => g.OrderByDescending(t => t.VisitNum).FirstOrDefault()).ToList(); + + + + + //全局会对每个访视的结果进行更改 rs表只取最新的一次全局 + foreach (var task in taskList.Where(t => t.ReadingCategory == ReadingCategory.Global).GroupBy(t => new { t.SubjectCode, t.ArmEnum }).Select(g => g.OrderByDescending(t => t.VisitNum).FirstOrDefault())) { - var globalReson = task.GlobalResultList.FirstOrDefault(); - if (globalReson != null) + foreach (var vTaskGroup in task.GlobalResultList.GroupBy(t => t.TaskId)) { + var visiTaskId = vTaskGroup.Key; - foreach (var item in rsList.Where(t => t.VisitTaskId == globalReson.TaskId)) + var type = vTaskGroup.FirstOrDefault(t => t.GlobalAnswerType == GlobalAnswerType.UpdateType)?.Answer ?? ""; + + + var updateType = translateDataList["GlobalAssessType"].Where(t => t.Code.ToLower() == (type)?.ToString().ToLower()).Select(t => isEn_Us ? t.Value : t.ValueCN).FirstOrDefault() ?? String.Empty; + + var reason = vTaskGroup.FirstOrDefault(t => t.GlobalAnswerType == GlobalAnswerType.Reason)?.Answer ?? ""; + + + if (reason.IsNotNullOrEmpty()) { - item.UpdateAssessmentReason = globalReson.Answer; + foreach (var item in rsList.Where(t => t.VisitTaskId == visiTaskId)) + { + item.UpdateAssessmentReason = $"{updateType} {reason}"; + + } } } - } #endregion diff --git a/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs b/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs index 291619cb4..542480da4 100644 --- a/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs +++ b/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs @@ -2793,6 +2793,11 @@ public enum SUVChangeVSBaseline /// ImageQualityProblem = 67, + /// + /// 影像质量问题备注 + /// + ImageQualityProblemComment = 68, + /// /// 斑块1-PAV ///