diff --git a/IRaCIS.Core.Application/Helper/DicomDIRHelper.cs b/IRaCIS.Core.Application/Helper/DicomDIRHelper.cs index 6defc237e..96de86624 100644 --- a/IRaCIS.Core.Application/Helper/DicomDIRHelper.cs +++ b/IRaCIS.Core.Application/Helper/DicomDIRHelper.cs @@ -100,11 +100,11 @@ namespace IRaCIS.Core.Application.Helper var dicomFile = new DicomFile(dataset); // 文件名递增格式:IM_00001, IM_00002, ... - string filename = $@"IMAGE/IM_{index:D5}"; // :D5 表示补足5位 + string filename = $@"IMAGE\IM_{index:D5}"; // :D5 表示补足5位 mappings.Add($"{filename} => {item.InstanceId}"); - dic.Add(item.InstanceId.ToString(), Path.GetFileName(filename)); + dic.Add(item.InstanceId.ToString(), filename.TrimEnd('/', '\\').Split('/', '\\').Last()); dicomDir.AddFile(dicomFile, filename); diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml index 2bbfe2ad7..731955b54 100644 --- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml +++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml @@ -15707,7 +15707,7 @@ - 删除某个目录的文件 + 删除某个目录的文件 (包含单个文件,oss单个文件需要去除前缀/) diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs index d5ff743d4..900e69687 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs @@ -159,7 +159,8 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc if (inQuery.IsImageSegmentLabel == true) { - var querySV = _subjectVisitRepository.WhereIf(inQuery.SubjectVisitId != null, t => t.Id == inQuery.SubjectVisitId) + var querySV = _subjectVisitRepository.Where(t => t.CheckState == CheckStateEnum.CVPassed) + .WhereIf(inQuery.SubjectVisitId != null, t => t.Id == inQuery.SubjectVisitId) .WhereIf(inQuery.SubjectId != null, t => t.SubjectId == inQuery.SubjectId) .Select(u => new SubjectVisitMarkUploadDto() { @@ -230,7 +231,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc - var query = _visitTaskRepository.Where(t => t.SubjectId == subjectId && t.TrialReadingCriterionId == inQuery.TrialReadingCriterionId && t.SourceSubjectVisitId != null + var query = _visitTaskRepository.Where(t => t.SubjectId == subjectId && t.TrialReadingCriterionId == inQuery.TrialReadingCriterionId && t.SourceSubjectVisit.CheckState == CheckStateEnum.CVPassed && t.DoctorUserId == _userInfo.UserRoleId && t.TaskState == TaskState.Effect) //满足 有序,或者随机只看到当前任务的dicom 非dicom检查 .WhereIf(criterionInfo.IsReadingTaskViewInOrder != ReadingOrder.SubjectRandom && inQuery.VisitTaskId != null, t => t.Id == inQuery.VisitTaskId) @@ -989,7 +990,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc - var list = _noneDicomStudyReposiotry.Where(t => t.SubjectId == subjectId) + var list = _noneDicomStudyReposiotry.Where(t => t.SubjectId == subjectId && t.SubjectVisit.CheckState == CheckStateEnum.CVPassed) .WhereIf(inQuery.SubjectVisitId != null, t => t.SubjectVisitId == inQuery.SubjectVisitId) //.WhereIf(info.IsImageFilter, t => ("|" + info.CriterionModalitys + "|").Contains("|" + t.Modality + "|")) .Select(u => new TaskNoneDicomStudyDTO() @@ -1047,7 +1048,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc else { var query = from u in _visitTaskRepository.Where(t => t.SubjectId == subjectId && t.TrialReadingCriterionId == inQuery.TrialReadingCriterionId - && t.SourceSubjectVisitId != null && t.DoctorUserId == doctorUserId && t.TaskState == TaskState.Effect) + && t.SourceSubjectVisit.CheckState == CheckStateEnum.CVPassed && t.DoctorUserId == doctorUserId && t.TaskState == TaskState.Effect) //满足 有序,或者随机只看到当前任务的dicom 非dicom检查 .WhereIf(info.IsReadingTaskViewInOrder != ReadingOrder.SubjectRandom && inQuery.VisitTaskId != null, t => t.Id == inQuery.VisitTaskId) join ns in _noneDicomStudyReposiotry.Where(t => t.SubjectId == subjectId).WhereIf(info.IsImageFilter, t => ("|" + info.CriterionModalitys + "|").Contains("|" + t.Modality + "|")) @@ -1137,6 +1138,8 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc var dirDic = new Dictionary(); #region DIR处理导出文件名,并将对应关系上传到OSS里面存储 + var info = await _subjectVisitRepository.Where(t => t.Id == inQuery.SubjectVisitId).Select(t => new { t.Trial.TrialCode }).FirstOrDefaultAsync(); + //有传输语法值的导出 才生成DIR if (_subjectVisitRepository.Where(t => t.Id == inQuery.SubjectVisitId).SelectMany(t => t.StudyList.SelectMany(t => t.InstanceList)).All(c => c.TransferSytaxUID != string.Empty)) { @@ -1148,7 +1151,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc DicomStudyId = t.DicomStudy.Id, - PatientId = t.DicomStudy.PatientId, + PatientId = info.TrialCode + "-" + t.DicomStudy.PatientId, PatientName = t.DicomStudy.PatientName, PatientBirthDate = t.DicomStudy.PatientBirthDate, PatientSex = t.DicomStudy.PatientSex, @@ -1329,7 +1332,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc if (inQuery.IsImageSegmentLabel == true) { - var list = await _subjectVisitRepository + var list = await _subjectVisitRepository.Where(t => t.CheckState == CheckStateEnum.CVPassed) .WhereIf(inQuery.SubjectId != null, t => t.SubjectId == inQuery.SubjectId) .ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); @@ -1404,7 +1407,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc } var query = _visitTaskRepository.Where(t => t.SubjectId == subjectId && t.TrialReadingCriterionId == inQuery.TrialReadingCriterionId - && t.SourceSubjectVisitId != null && t.DoctorUserId == doctorUserId) + && t.SourceSubjectVisit.CheckState == CheckStateEnum.CVPassed && t.DoctorUserId == doctorUserId) //满足 有序,或者随机只看到当前任务的dicom 非dicom检查 .WhereIf(inQuery.VisitTaskId == null, t => t.TaskState == TaskState.Effect)//从待阅列表进入,要筛选出有效的,任务可能重阅了,也要看到该任务的 .WhereIf(criterionInfo.IsReadingTaskViewInOrder != ReadingOrder.SubjectRandom && inQuery.VisitTaskId != null, t => t.Id == inQuery.VisitTaskId) @@ -1508,7 +1511,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc public async Task GetIRReadingDownloadStudyInfo(IRDownloadQuery inQuery) { var info = await _readingQuestionCriterionTrialRepository.Where(t => t.Id == inQuery.TrialReadingCriterionId) - .Select(t => new { t.IsImageFilter, t.CriterionModalitys, t.TrialId, t.IsReadingTaskViewInOrder }).FirstNotNullAsync(); + .Select(t => new { t.IsImageFilter, t.CriterionModalitys, t.TrialId, t.IsReadingTaskViewInOrder, t.Trial.TrialCode }).FirstNotNullAsync(); var isQueryDicom = inQuery.DicomStudyIdList.Count > 0; var isQueryNoneDicom = inQuery.NoneDicomStudyIdList.Count > 0; @@ -1526,7 +1529,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc #region 在下载前先处理DIR文件 //有传输语法值的导出 才生成DIR - if (_subjectVisitRepository.Where(t => t.SubjectId == inQuery.SubjectId).SelectMany(t => t.StudyList.SelectMany(t => t.InstanceList)).All(c => c.TransferSytaxUID != string.Empty)) + if (_subjectVisitRepository.Where(t => t.SubjectId == inQuery.SubjectId && t.CheckState == CheckStateEnum.CVPassed).SelectMany(t => t.StudyList.SelectMany(t => t.InstanceList)).All(c => c.TransferSytaxUID != string.Empty)) { var dirInfolist = _subjectRepository.Where(t => t.Id == inQuery.SubjectId).SelectMany(t => t.SubjectVisitList.Where(t => subjectVisitIdList.Contains(t.Id))).SelectMany(t => t.StudyList) .Where(t => isQueryDicom ? inQuery.DicomStudyIdList.Contains(t.Id) : false) @@ -1539,7 +1542,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc DicomStudyId = t.DicomStudy.Id, - PatientId = t.DicomStudy.PatientId, + PatientId = info.TrialCode + "-" + t.DicomStudy.PatientId, PatientName = t.DicomStudy.PatientName, PatientBirthDate = t.DicomStudy.PatientBirthDate, PatientSex = t.DicomStudy.PatientSex, @@ -1579,7 +1582,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc DicomStudyId = t.TaskStudy.Id, - PatientId = t.TaskStudy.PatientId, + PatientId = info.TrialCode + "-" + t.TaskStudy.PatientId, PatientName = t.TaskStudy.PatientName, PatientBirthDate = t.TaskStudy.PatientBirthDate, PatientSex = t.TaskStudy.PatientSex, @@ -1642,7 +1645,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc #endregion - var query = from sv in _subjectRepository.Where(t => t.Id == inQuery.SubjectId).SelectMany(t => t.SubjectVisitList.Where(t => subjectVisitIdList.Contains(t.Id))) + var query = from sv in _subjectRepository.Where(t => t.Id == inQuery.SubjectId).SelectMany(t => t.SubjectVisitList.Where(t => subjectVisitIdList.Contains(t.Id) && t.CheckState == CheckStateEnum.CVPassed)) //一致性分析,导致查询出来两条数据 join visitTask in _visitTaskRepository.Where(t => taskIdList.Contains(t.Id)) on sv.Id equals visitTask.SourceSubjectVisitId into cc from leftVisitTask in cc.DefaultIfEmpty() @@ -2248,7 +2251,6 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc } else { - #region 在下载前先处理DIR文件 //有传输语法值的导出 才生成DIR @@ -2263,7 +2265,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc DicomStudyId = t.DicomStudy.Id, - PatientId = t.DicomStudy.PatientId, + PatientId = t.Trial.TrialCode + "-" + t.DicomStudy.PatientId, PatientName = t.DicomStudy.PatientName, PatientBirthDate = t.DicomStudy.PatientBirthDate, PatientSex = t.DicomStudy.PatientSex, @@ -2406,16 +2408,16 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc SubjectCode = t.Code, IsUrgent = t.IsUrgent, - VisitCount = t.SubjectVisitList.Where(t => t.SubmitState == SubmitStateEnum.Submitted).Count(), + VisitCount = t.SubjectVisitList.Where(t => t.SubmitState == SubmitStateEnum.Submitted && t.CheckState == CheckStateEnum.CVPassed).Count(), - MarkIVUSVisitCount = t.SubjectVisitList.Where(t => t.SubmitState == SubmitStateEnum.Submitted).Count(t => t.NoneDicomStudyList.Where(t => t.Modality == "IVUS").SelectMany(c => c.ImageLabelNoneDicomFileList).Any()), + MarkIVUSVisitCount = t.SubjectVisitList.Where(t => t.SubmitState == SubmitStateEnum.Submitted && t.CheckState == CheckStateEnum.CVPassed).Count(t => t.NoneDicomStudyList.Where(t => t.Modality == "IVUS").SelectMany(c => c.ImageLabelNoneDicomFileList).Any()), - MarkOCTVisitCount = t.SubjectVisitList.Where(t => t.SubmitState == SubmitStateEnum.Submitted).Count(t => t.NoneDicomStudyList.Where(t => t.Modality == "OCT").SelectMany(c => c.ImageLabelNoneDicomFileList).Any()), + MarkOCTVisitCount = t.SubjectVisitList.Where(t => t.SubmitState == SubmitStateEnum.Submitted && t.CheckState == CheckStateEnum.CVPassed).Count(t => t.NoneDicomStudyList.Where(t => t.Modality == "OCT").SelectMany(c => c.ImageLabelNoneDicomFileList).Any()), - DicomStudyCount = t.SubjectVisitList.Where(t => t.SubmitState == SubmitStateEnum.Submitted).SelectMany(t => t.StudyList).Count(), + DicomStudyCount = t.SubjectVisitList.Where(t => t.SubmitState == SubmitStateEnum.Submitted && t.CheckState == CheckStateEnum.CVPassed).SelectMany(t => t.StudyList).Count(), //MarkDicomStudyCount = t.SubjectVisitList.Where(t => t.SubmitState == SubmitStateEnum.Submitted).SelectMany(t => t.TaskStudyList).Count(), - NoneDicomStudyCount = t.SubjectVisitList.Where(t => t.SubmitState == SubmitStateEnum.Submitted).SelectMany(t => t.NoneDicomStudyList).Count(), + NoneDicomStudyCount = t.SubjectVisitList.Where(t => t.SubmitState == SubmitStateEnum.Submitted && t.CheckState == CheckStateEnum.CVPassed).SelectMany(t => t.NoneDicomStudyList).Count(), //MarkNoneDicomStudyCount = t.SubjectVisitList.Where(t => t.SubmitState == SubmitStateEnum.Submitted).SelectMany(t => t.NoneDicomStudyList).Where(t => t.ImageLabelNoneDicomFileList.Any()).Count(), }).ToPagedListAsync(inQuery); diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/TrialStatViewModel.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/TrialStatViewModel.cs index 1244fe508..b0df38be2 100644 --- a/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/TrialStatViewModel.cs +++ b/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/TrialStatViewModel.cs @@ -91,17 +91,48 @@ namespace IRaCIS.Core.Application.ViewModel public Guid? TrialSiteId { get; set; } } + public class FirstPdInfo + { + public string SubjectCode { get; set; } + + public DateTime? EarliestScanDate { get; set; } + + public DateTime? BaseLineLatestScanDate { get; set; } + + + // 新增属性:天数差 + public double? DaysDiff + { + get + { + if (BaseLineLatestScanDate.HasValue && EarliestScanDate.HasValue) + { + return (EarliestScanDate.Value - BaseLineLatestScanDate.Value).TotalDays; + } + return null; + } + } + } + public class EfficacyEvaluationStatViewModel { public string? DictionaryCode { get; set; } + + public string Code { get; set; } public string OverallTumorEvaluation { get; set; } - public int SubjectCount { get; set; } + public int SubjectCount => SubjectCodeList.Count(); + + public List SubjectCodeList { get; set; } } public class EfficacyEvaluationExport { + public DateTime? EarliestScanDate { get; set; } + + public DateTime? LatestScanDate { get; set; } + public Guid Id { get; set; } diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialStatService.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialStatService.cs index b5b7b15db..3eb13abe8 100644 --- a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialStatService.cs +++ b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialStatService.cs @@ -113,18 +113,18 @@ public class TrialStatService( /// /// [HttpPost] - public async Task> GetTrialEfficacyEvaluationStatList(EfficacyEvaluationQuery inQuery) + public async Task>> GetTrialEfficacyEvaluationStatList(EfficacyEvaluationQuery inQuery) { var trialReadingCriterionId = inQuery.TrialReadingCriterionId; //每次查询必须是单标准的 - var criterion = await _readingQuestionCriterionTrialRepository.Where(t => t.Id == trialReadingCriterionId).Select(t => new { t.CriterionType, t.CriterionGroup, t.IsGlobalReading, t.IsArbitrationReading, t.IsOncologyReading, t.CriterionName, t.ArbitrationRule,t.TrialId }).FirstNotNullAsync(); + var criterion = await _readingQuestionCriterionTrialRepository.Where(t => t.Id == trialReadingCriterionId).Select(t => new { t.CriterionType, t.CriterionGroup, t.IsGlobalReading, t.IsArbitrationReading, t.IsOncologyReading, t.CriterionName, t.ArbitrationRule, t.TrialId }).FirstNotNullAsync(); if (criterion.CriterionGroup == CriterionGroup.Nontumorous) { - return new List(); + return ResponseOutput.Ok(new List()); } @@ -132,15 +132,18 @@ public class TrialStatService( if (criterion.CriterionType == CriterionType.RECIST1Point1 || criterion.CriterionType == CriterionType.RECIST1Pointt1_MB || criterion.CriterionType == CriterionType.IRECIST1Point1 || criterion.CriterionType == CriterionType.mRECISTHCC) { - questionType = QuestionType.Tumor; - + //iresist pfs 是icpd } - else if (criterion.CriterionType == CriterionType.Lugano2014 || criterion.CriterionType == CriterionType.Lugano2014WithoutPET) + else if (criterion.CriterionType == CriterionType.Lugano2014) { questionType = QuestionType.ImgOncology; } + else if (criterion.CriterionType == CriterionType.Lugano2014WithoutPET) + { + questionType = QuestionType.CTandMRI; + } else if (criterion.CriterionType == CriterionType.PCWG3) { @@ -164,6 +167,8 @@ public class TrialStatService( ReadingCategory = t.ReadingCategory, ArmEnum = t.ArmEnum, JudgeArmEnum = t.JudgeResultTask.ArmEnum, + LatestScanDate = t.SourceSubjectVisit.LatestScanDate, + EarliestScanDate = t.SourceSubjectVisit.EarliestScanDate, IsTrigerJudge = criterion.ArbitrationRule == ArbitrationRule.Visit ? t.JudgeVisitTaskId != null : (criterion.ArbitrationRule == ArbitrationRule.Reading ? @@ -176,7 +181,7 @@ public class TrialStatService( DictionaryCode = t.ReadingTaskQuestionAnswerList.Where(c => c.ReadingQuestionTrial.QuestionType == questionType).Select(t => t.ReadingQuestionTrial.DictionaryCode).FirstOrDefault(), //整体肿瘤评估答案 - OverallTumorEvaluation = t.ReadingTaskQuestionAnswerList.Where(c => c.ReadingQuestionTrial.QuestionType == questionType).FirstOrDefault()!.Answer + OverallTumorEvaluation = t.ReadingTaskQuestionAnswerList.Where(c => c.ReadingQuestionTrial.QuestionType == questionType).Select(t => t.IsGlobalChange ? t.GlobalChangeAnswer : t.Answer).FirstOrDefault() }); @@ -201,6 +206,24 @@ public class TrialStatService( //处理裁判标记 list = DealJudgeMark(criterion.ArbitrationRule, criterion.IsGlobalReading, list); + //基线(最晚拍片日期)-首次PD(所有触发PD的病灶的检查的最早拍片日期)的中位数,单位是天 + + // 构建字典:SubjectCode -> LatestScanDate + var baseLineDict = list.Where(t => t.VisitTaskNum == 0).GroupBy(t => t.SubjectCode) + .ToDictionary( + g => g.Key, + g => g.First().LatestScanDate // 如果同一个 SubjectCode 有多条记录,只取第一条 + ); + + //一定要两个人做完了,产生了裁判并且有结果的,否则就不算,并且排除基线 + list = list.Where(t => t.IsJudgeSelect == true && t.VisitTaskNum != 0 && t.ReadingCategory==ReadingCategory.Visit)//全局的答案已经放在对应访视上了 + .GroupBy(t => t.SubjectCode).Select(g => g.OrderByDescending(t => t.VisitTaskNum).First()).ToList(); + + + //总subject 数量 + var totalSubjectCount = list.Select(t => t.SubjectId).Distinct().Count(); + + //判断subject的逻辑需要确认,这么多次访视任务,有的符合,有的不符合,准则是什么? @@ -208,30 +231,69 @@ public class TrialStatService( { DictionaryCode = g.FirstOrDefault()?.DictionaryCode, OverallTumorEvaluation = g.Key, - SubjectCount = g.Select(t => t.SubjectId).Distinct().Count() + Code = g.Key, + SubjectCodeList = g.Select(t => t.SubjectCode).Distinct().ToList() }).ToList(); // 先把 resultList 转成内存字典 - var resultDict = resultList.ToDictionary(r => r.OverallTumorEvaluation, r => r.SubjectCount); + var resultDict = resultList.ToDictionary(r => r.OverallTumorEvaluation, r => r.SubjectCodeList); // 查询字典表,先把数据拉出来到内存,再合并 - var dicList = _dictionaryRepository + var translateList = _dictionaryRepository .Where(t => t.Parent.Code == dicName) .Select(t => new { - t.Code + t.Code, + t.Value, }) - .ToList() + .ToList() .Select(t => new EfficacyEvaluationStatViewModel { DictionaryCode = dicName, - OverallTumorEvaluation = t.Code, - SubjectCount = resultDict.ContainsKey(t.Code) ? resultDict[t.Code] : 0 + Code = t.Code, //方便找到首次PD的日期 + OverallTumorEvaluation = t.Value,//翻译后的值 + SubjectCodeList = resultDict.ContainsKey(t.Code) ? resultDict[t.Code] : new List() }) .ToList(); - return dicList; + // (cr +pr) /总人数 + + var crAddPr = translateList.Where(t => t.OverallTumorEvaluation == "PR" || t.OverallTumorEvaluation == "CR").Sum(t => t.SubjectCount); + + var orrPercent = totalSubjectCount > 0 + ? ((decimal)crAddPr / totalSubjectCount * 100).ToString("0.00") + "%" + : "0.00%"; + + var pdInfo = translateList + .WhereIf(criterion.CriterionType == CriterionType.IRECIST1Point1, t => t.OverallTumorEvaluation == "ICPD") + .WhereIf(criterion.CriterionType == CriterionType.IRECIST1Point1, t => t.OverallTumorEvaluation == "PD") + .FirstOrDefault(); + + var firstPdList = new List(); + if (pdInfo != null) + { + firstPdList = list.Where(t => t.OverallTumorEvaluation == pdInfo.Code).GroupBy(t => t.SubjectCode) + .Select(g => new FirstPdInfo + { + SubjectCode = g.Key, + EarliestScanDate = g.Where(t => t.OverallTumorEvaluation == pdInfo.Code).OrderBy(t => t.VisitTaskNum).First().EarliestScanDate + }) + .ToList(); + + foreach (var item in firstPdList) + { + if (baseLineDict.TryGetValue(item.SubjectCode, out var latestScanDate)) + { + item.BaseLineLatestScanDate = latestScanDate; + } + } + + + } + + + return ResponseOutput.Ok(translateList, new { PDList = firstPdList, ORR = orrPercent }); } diff --git a/IRaCIS.Core.Domain/Image/DicomInstance.cs b/IRaCIS.Core.Domain/Image/DicomInstance.cs index ad2cdc3c1..7f2615629 100644 --- a/IRaCIS.Core.Domain/Image/DicomInstance.cs +++ b/IRaCIS.Core.Domain/Image/DicomInstance.cs @@ -13,6 +13,10 @@ public class DicomInstance : BaseFullDeleteAuditEntity, IEntitySeqId [ForeignKey("StudyId")] public DicomStudy DicomStudy { get; set; } + [JsonIgnore] + [ForeignKey("TrialId")] + public Trial Trial { get; set; } + [JsonIgnore] public List ReadingTableAnswerRowInfoList { get; set; } #endregion diff --git a/IRaCIS.Core.Domain/Image/DicomStudy.cs b/IRaCIS.Core.Domain/Image/DicomStudy.cs index e625c6e1f..5bee7fab7 100644 --- a/IRaCIS.Core.Domain/Image/DicomStudy.cs +++ b/IRaCIS.Core.Domain/Image/DicomStudy.cs @@ -21,6 +21,7 @@ public class DicomStudy : BaseFullDeleteAuditEntity, IEntitySeqId [ForeignKey("SubjectVisitId")] public SubjectVisit SubjectVisit { get; set; } + [JsonIgnore] public List ReadingClinicalDataList { get; set; }