From 5e0513ebcb35b24d7c8c8afd662bafea712cb7de Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Mon, 15 Dec 2025 15:35:24 +0800 Subject: [PATCH 1/8] =?UTF-8?q?uat-ivus-oct-=E5=86=8D=E6=AC=A1=E4=BF=AE?= =?UTF-8?q?=E6=94=B91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ImageAndDoc/DownloadAndUploadService.cs | 56 +++++++++---------- .../Service/Visit/SubjectVisitService.cs | 38 ++++++------- 2 files changed, 45 insertions(+), 49 deletions(-) diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs index 88be734c7..bfa2e5479 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs @@ -1367,8 +1367,8 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc { var subjectVisitIdList = list.Select(t => t.SourceSubjectVisitId).Distinct().ToList(); - var preDicomStudyList = _subjectVisitRepository.Where(t => subjectVisitIdList.Contains(t.Id)).SelectMany(t => t.TaskStudyList) - .ProjectTo(_mapper.ConfigurationProvider).ToList(); + //var preDicomStudyList = _subjectVisitRepository.Where(t => subjectVisitIdList.Contains(t.Id)).SelectMany(t => t.TaskStudyList) + // .ProjectTo(_mapper.ConfigurationProvider).ToList(); var preNoneDicomStudyList = _subjectVisitRepository.Where(t => subjectVisitIdList.Contains(t.Id)) .SelectMany(t => t.NoneDicomStudyList) @@ -1378,7 +1378,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc { var dicomList = item.DicomStudyList.Where(t => inQuery.IsImageSegmentLabel == false ? t.ModalityForEdit == "XA" || t.ModalityForEdit == "OCT" : true).ToList(); - dicomList.AddRange(preDicomStudyList.Where(t => t.SubjectVisitId == item.SourceSubjectVisitId).ToList()); + //dicomList.AddRange(preDicomStudyList.Where(t => t.SubjectVisitId == item.SourceSubjectVisitId).ToList()); item.DicomStudyList = dicomList; @@ -1627,32 +1627,32 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc }).ToList() }).ToList(), - TaskStudyList = - sv.TaskStudyList.Where(t => isQueryDicom ? inQuery.DicomStudyIdList.Contains(t.Id) : false) - //.Where(t => info.IsImageFilter ? ("|" + info.CriterionModalitys + "|").Contains("|" + t.ModalityForEdit + "|") : true) - .Select(u => new DownloadDicomStudyDto() - { - PatientId = u.PatientId, - StudyTime = u.StudyTime, - StudyCode = u.StudyCode, - StudyInstanceUid = u.StudyInstanceUid, - StudyDIRPath = u.StudyDIRPath, + //TaskStudyList = + //sv.TaskStudyList.Where(t => isQueryDicom ? inQuery.DicomStudyIdList.Contains(t.Id) : false) + ////.Where(t => info.IsImageFilter ? ("|" + info.CriterionModalitys + "|").Contains("|" + t.ModalityForEdit + "|") : true) + //.Select(u => new DownloadDicomStudyDto() + //{ + // PatientId = u.PatientId, + // StudyTime = u.StudyTime, + // StudyCode = u.StudyCode, + // StudyInstanceUid = u.StudyInstanceUid, + // StudyDIRPath = u.StudyDIRPath, - SeriesList = u.SeriesList.Select(z => new DownloadDicomSeriesDto() - { - Modality = z.Modality, + // SeriesList = u.SeriesList.Select(z => new DownloadDicomSeriesDto() + // { + // Modality = z.Modality, - InstanceList = z.InstanceList.Select(k => new DownloadDicomInstanceDto() - { - IsEncapsulated = k.IsEncapsulated, - InstanceId = k.Id, - FileName = string.Empty, - Path = k.Path, - FileSize = k.FileSize - }).ToList() - }).ToList() - }).ToList() - , + // InstanceList = z.InstanceList.Select(k => new DownloadDicomInstanceDto() + // { + // IsEncapsulated = k.IsEncapsulated, + // InstanceId = k.Id, + // FileName = string.Empty, + // Path = k.Path, + // FileSize = k.FileSize + // }).ToList() + // }).ToList() + //}).ToList() + //, NoneDicomStudyList = inQuery.IsImageSegmentLabel != false ? sv.NoneDicomStudyList.Where(t => isQueryNoneDicom ? inQuery.NoneDicomStudyIdList.Contains(t.Id) : false) .Where(t => info.IsImageFilter ? ("|" + info.CriterionModalitys + "|").Contains("|" + t.Modality + "|") : true) @@ -1699,7 +1699,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc //靶段标注处理 if (inQuery.IsImageSegmentLabel == false) { - result.StudyList.AddRange(result.TaskStudyList); + //result.StudyList.AddRange(result.TaskStudyList); } foreach (var item in result.StudyList.SelectMany(t => t.SeriesList).SelectMany(t => t.InstanceList)) diff --git a/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs b/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs index f2663d7ec..fc4e11bfd 100644 --- a/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs +++ b/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs @@ -305,18 +305,18 @@ namespace IRaCIS.Core.Application.Services //预览靶段标注上传的影像 if (isImageSegmentLabel == true && isVisitTask) { - var taskStudyList = await _taskStudyRepository.Where(t => t.SubjectVisitId == sujectVisitId) - .WhereIf(isImageFilter, t => ("|" + criterionModalitys + "|").Contains("|" + t.ModalityForEdit + "|")) - .ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); + //var taskStudyList = await _taskStudyRepository.Where(t => t.SubjectVisitId == sujectVisitId) + // .WhereIf(isImageFilter, t => ("|" + criterionModalitys + "|").Contains("|" + t.ModalityForEdit + "|")) + // .ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); - foreach (var study in taskStudyList) - { - study.SeriesList = study.SeriesList.OrderBy(s => s.SeriesNumber).ThenBy(s => s.SeriesTime).ToList(); + //foreach (var study in taskStudyList) + //{ + // study.SeriesList = study.SeriesList.OrderBy(s => s.SeriesNumber).ThenBy(s => s.SeriesTime).ToList(); - study.InstanceCount = study.SeriesList.SelectMany(t => t.InstanceInfoList).Count(); - } + // study.InstanceCount = study.SeriesList.SelectMany(t => t.InstanceInfoList).Count(); + //} - studyList.AddRange(taskStudyList); + //studyList.AddRange(taskStudyList); } @@ -515,7 +515,7 @@ namespace IRaCIS.Core.Application.Services //是否有了后处理的NoneDicom检查 IsHaveTaskNoneDicomStudyFile = t.SourceSubjectVisit.NoneDicomStudyList.SelectMany(c => c.TaskNoneDicomFileList.Where(t => t.VisitTaskId == indto.VisitTaskId)).Any(), //是否有了标注的dicom检查 - IsMarkDicomStudy = t.SourceSubjectVisit.TaskStudyList.Any(), + //IsMarkDicomStudy = t.SourceSubjectVisit.TaskStudyList.Any(), //是否有了标注的NoneDicom检查 IsMarkNoneDicomStudy = t.SourceSubjectVisit.NoneDicomStudyList.SelectMany(c => c.ImageLabelNoneDicomFileList).Any() @@ -533,19 +533,15 @@ namespace IRaCIS.Core.Application.Services .WhereIf(taskInfo.IsImageFilter == true, t => ("|" + taskInfo.CriterionModalitys + "|").Contains("|" + t.ModalityForEdit + "|")) .WhereIf(isManualGenerate, t => t.SubjectCriteriaEvaluationVisitStudyFilterList.Any(t => t.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId && t.IsConfirmed && t.IsReading)) //影像后处理 上传了新的影像 还要原始dsa - .WhereIf(taskInfo.IsHaveTaskStudy - && (taskInfo.CriterionType == CriterionType.OCT || taskInfo.CriterionType == CriterionType.IVUS), + .WhereIf(taskInfo.IsHaveTaskStudy && taskInfo.CriterionType == CriterionType.OCT, t => t.ModalityForEdit == "XA") - .WhereIf(taskInfo.IsHaveTaskStudy == false && taskInfo.IsMarkDicomStudy && taskInfo.CriterionType == CriterionType.IVUS, - t => t.ModalityForEdit == "XA" ) - - .WhereIf(taskInfo.IsHaveTaskStudy == false && taskInfo.IsMarkDicomStudy && taskInfo.CriterionType == CriterionType.OCT, + .WhereIf(taskInfo.CriterionType == CriterionType.IVUS, + t => t.ModalityForEdit == "XA" || t.ModalityForEdit == "IVUS") + + .WhereIf(taskInfo.IsHaveTaskStudy == false && taskInfo.CriterionType == CriterionType.OCT, t => t.ModalityForEdit == "XA" || t.ModalityForEdit == "OCT") - .WhereIf(taskInfo.IsHaveTaskStudy == false && taskInfo.IsMarkDicomStudy == false - && (taskInfo.CriterionType == CriterionType.OCT || taskInfo.CriterionType == CriterionType.IVUS), - t => t.ModalityForEdit == "XA" || t.ModalityForEdit == "OCT" || t.ModalityForEdit == "IVUS") //其他 不应该看原始影像 .WhereIf(taskInfo.IsHaveTaskStudy && (taskInfo.CriterionType != CriterionType.OCT && taskInfo.CriterionType != CriterionType.IVUS), t => false) @@ -611,12 +607,12 @@ namespace IRaCIS.Core.Application.Services } //影像后处理 上传了新的影像 - if (taskInfo.IsHaveTaskStudy || taskInfo.IsMarkDicomStudy || taskInfo.IsMarkNoneDicomStudy) + if (taskInfo.IsHaveTaskStudy /*|| taskInfo.IsMarkDicomStudy*/ || taskInfo.IsMarkNoneDicomStudy) { var taskStudyList = await _taskStudyRepository.Where(t => t.TrialId == indto.TrialId) .WhereIf(taskInfo.IsHaveTaskStudy, t => t.VisitTaskId == indto.VisitTaskId) - .WhereIf(taskInfo.IsHaveTaskStudy == false && (taskInfo.IsMarkDicomStudy || taskInfo.IsMarkNoneDicomStudy), t => t.SubjectVisitId == indto.SujectVisitId) + .WhereIf(taskInfo.IsHaveTaskStudy == false && (/*taskInfo.IsMarkDicomStudy ||*/ taskInfo.IsMarkNoneDicomStudy), t => t.SubjectVisitId == indto.SujectVisitId) .WhereIf(taskInfo.IsImageFilter == true, t => ("|" + taskInfo.CriterionModalitys + "|").Contains("|" + t.ModalityForEdit + "|")) .ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); From a065f4533ca230606edda81db72cf056697db495 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Mon, 15 Dec 2025 16:00:46 +0800 Subject: [PATCH 2/8] =?UTF-8?q?uat-ivus-oct-=E5=86=8D=E6=AC=A1=E4=BF=AE?= =?UTF-8?q?=E6=94=B92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/ImageAndDoc/DownloadAndUploadService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs index bfa2e5479..682bc7bf6 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs @@ -1655,7 +1655,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc //, NoneDicomStudyList = inQuery.IsImageSegmentLabel != false ? sv.NoneDicomStudyList.Where(t => isQueryNoneDicom ? inQuery.NoneDicomStudyIdList.Contains(t.Id) : false) - .Where(t => info.IsImageFilter ? ("|" + info.CriterionModalitys + "|").Contains("|" + t.Modality + "|") : true) + //.Where(t => info.IsImageFilter ? ("|" + info.CriterionModalitys + "|").Contains("|" + t.Modality + "|") : true) .Where(t => t.IsReading) .Select(nd => new DownloadNoneDicomStudyDto() { From 84bf6d914549325a19a83016b4d503dfddaa991f Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Mon, 15 Dec 2025 16:22:51 +0800 Subject: [PATCH 3/8] =?UTF-8?q?uat-ivus-oct-=E5=86=8D=E6=AC=A1=E4=BF=AE?= =?UTF-8?q?=E6=94=B93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/ImageAndDoc/DownloadAndUploadService.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs index 682bc7bf6..dcb166cff 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs @@ -1602,7 +1602,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc VisitName = sv.VisitName, TaskBlindName = leftVisitTask.TaskBlindName, StudyList = sv.StudyList.Where(t => isQueryDicom ? inQuery.DicomStudyIdList.Contains(t.Id) : false) - .Where(t => info.IsImageFilter ? ("|" + info.CriterionModalitys + "|").Contains("|" + t.ModalityForEdit + "|") : true) + .Where(t => info.IsImageFilter && inQuery.IsImageSegmentLabel == null ? ("|" + info.CriterionModalitys + "|").Contains("|" + t.ModalityForEdit + "|") : true) .Where(t => inQuery.IsImageSegmentLabel == false ? t.ModalityForEdit == "XA" || t.ModalityForEdit == "OCT" : true) .Select(u => new DownloadDicomStudyDto() { @@ -1655,7 +1655,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc //, NoneDicomStudyList = inQuery.IsImageSegmentLabel != false ? sv.NoneDicomStudyList.Where(t => isQueryNoneDicom ? inQuery.NoneDicomStudyIdList.Contains(t.Id) : false) - //.Where(t => info.IsImageFilter ? ("|" + info.CriterionModalitys + "|").Contains("|" + t.Modality + "|") : true) + .Where(t => info.IsImageFilter && inQuery.IsImageSegmentLabel==null ? ("|" + info.CriterionModalitys + "|").Contains("|" + t.Modality + "|") : true) .Where(t => t.IsReading) .Select(nd => new DownloadNoneDicomStudyDto() { From edd562183db876dbb47538b57abd62818a637d4e Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Mon, 15 Dec 2025 16:32:16 +0800 Subject: [PATCH 4/8] =?UTF-8?q?uat-ivus-oct-=E5=86=8D=E6=AC=A1=E4=BF=AE?= =?UTF-8?q?=E6=94=B94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/ImageAndDoc/DownloadAndUploadService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs index dcb166cff..44055be94 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs @@ -1475,7 +1475,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc { 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) - .Where(t => info.IsImageFilter ? ("|" + info.CriterionModalitys + "|").Contains("|" + t.ModalityForEdit + "|") : true) + .Where(t => info.IsImageFilter && inQuery.IsImageSegmentLabel == null ? ("|" + info.CriterionModalitys + "|").Contains("|" + t.ModalityForEdit + "|") : true) .Where(t => inQuery.IsImageSegmentLabel == false ? t.ModalityForEdit == "XA" || t.ModalityForEdit == "OCT" : true) .SelectMany(t => t.InstanceList.Where(t => t.IsReading && t.DicomSerie.IsReading)) .Select(t => new StudyDIRInfo() From 64fec97864c1d5594f9999e5a3dc0d994be75d76 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Tue, 16 Dec 2025 09:30:41 +0800 Subject: [PATCH 5/8] =?UTF-8?q?uat-ivus-oct-=E5=86=8D=E6=AC=A1=E4=BF=AE?= =?UTF-8?q?=E6=94=B95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Document/TrialEmailNoticeConfigService.cs | 24 ++++---- .../ImageAndDoc/DownloadAndUploadService.cs | 61 ++++++++++++++++++- 2 files changed, 70 insertions(+), 15 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Document/TrialEmailNoticeConfigService.cs b/IRaCIS.Core.Application/Service/Document/TrialEmailNoticeConfigService.cs index 8a81eb8cd..d2637703a 100644 --- a/IRaCIS.Core.Application/Service/Document/TrialEmailNoticeConfigService.cs +++ b/IRaCIS.Core.Application/Service/Document/TrialEmailNoticeConfigService.cs @@ -1763,22 +1763,22 @@ x.ReadingTableQuestionTrial.QuestionMark == QuestionMark.LesionNumber && x.Readi await _trialEmailNoticeConfigRepository.SaveChangesAsync(); - var cronInfo = await _trialEmailNoticeConfigRepository.Where(t => t.Id == addOrEditTrialEmailNoticeConfig.Id) - .Select(t => new { t.Id, t.Code, TrialCode = t.Trial.TrialCode, t.EmailCron, t.BusinessScenarioEnum, t.TrialId }) - .FirstAsync(); + // var cronInfo = await _trialEmailNoticeConfigRepository.Where(t => t.Id == addOrEditTrialEmailNoticeConfig.Id) + //.Select(t => new { t.Id, t.Code, TrialCode = t.Trial.TrialCode, t.EmailCron, t.BusinessScenarioEnum, t.TrialId }) + //.FirstAsync(); - var jobId = $"{cronInfo.TrialId}({cronInfo.TrialCode})_({cronInfo.BusinessScenarioEnum})"; + // var jobId = $"{cronInfo.TrialId}({cronInfo.TrialCode})_({cronInfo.BusinessScenarioEnum})"; - if (addOrEditTrialEmailNoticeConfig.IsAutoSend) - { - HangfireJobHelper.AddOrUpdateTrialCronJob(jobId, addOrEditTrialEmailNoticeConfig.TrialId, addOrEditTrialEmailNoticeConfig.BusinessScenarioEnum, addOrEditTrialEmailNoticeConfig.EmailCron); + // if (addOrEditTrialEmailNoticeConfig.IsAutoSend) + // { + // HangfireJobHelper.AddOrUpdateTrialCronJob(jobId, addOrEditTrialEmailNoticeConfig.TrialId, addOrEditTrialEmailNoticeConfig.BusinessScenarioEnum, addOrEditTrialEmailNoticeConfig.EmailCron); - } - else - { - HangfireJobHelper.RemoveCronJob(jobId); - } + // } + // else + // { + // HangfireJobHelper.RemoveCronJob(jobId); + // } return ResponseOutput.Ok(); } diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs index 44055be94..71fa83622 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs @@ -901,7 +901,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc /// /// [HttpPost] - public async Task>> GetIRUploadTaskNoneDicomStudyList(IRUploadStudyQuery inQuery) + public async Task>> GetIRUploadTaskNoneDicomStudyList([FromServices] INoneDicomStudyService _noneDicomStudyService, IRUploadStudyQuery inQuery) { var subjectCode = inQuery.SubjectCode; var subjectId = inQuery.SubjectId; @@ -926,7 +926,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc } var info = await _readingQuestionCriterionTrialRepository.Where(t => t.Id == inQuery.TrialReadingCriterionId) - .Select(t => new { t.IsImageFilter, t.CriterionModalitys, t.IsReadingTaskViewInOrder }).FirstNotNullAsync(); + .Select(t => new { t.IsImageFilter, t.CriterionType, t.TrialId, t.CriterionModalitys, t.IsReadingTaskViewInOrder }).FirstNotNullAsync(); var config = await _subjectRepository.Where(t => t.Id == subjectId).Select(t => new { t.Trial.ImageFormatList, t.Trial.StudyNameList, t.Trial.IsShowStudyName }).FirstOrDefaultAsync(); @@ -934,6 +934,61 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc //靶段标注上传,查看访视级别,上传绑定访视级别 if (inQuery.IsImageSegmentLabel == true) { + //存在ivus 和oct 这两种的项目 + if (_readingQuestionCriterionTrialRepository.Where(t => t.TrialId == info.TrialId && + (t.CriterionType == CriterionType.IVUS || t.CriterionType == CriterionType.OCT)).Distinct().Count() > 2 + && !_noneDicomStudyReposiotry.Any(t => t.SubjectId == inQuery.SubjectId && t.Modality != "IVUS")) + { + #region ivus 自动创建非dicom检查 + + var addList = await _dicomStudyRepository.Where(t => t.SubjectId == inQuery.SubjectId) + .Select(t => new NoneDicomStudyAddOrEdit() + { + TrialId = t.TrialId, + SubjectId = t.SubjectId, + SubjectVisitId = t.SubjectVisitId, + + ImageDate = (DateTime)t.StudyTime, + BodyPart = t.BodyPartForEdit, + BodyPartForEditOther = t.BodyPartForEditOther, + Modality = "IVUS" + + }).ToListAsync(); + + + var @lock = _distributedLockProvider.CreateLock($"NoneDicomCode"); + + using (await @lock.AcquireAsync()) + { + + var trialId = addList.FirstOrDefault().TrialId; + //默认会是0 + var code = await _noneDicomStudyReposiotry.Where(t => t.TrialId == trialId).Select(x => x.Code).DefaultIfEmpty().MaxAsync(); + + foreach (var g in addList.GroupBy(t => t.SubjectVisitId)) + { + var addOrEditNoneDicomStudy = g.First(); + + var optEntity = await _noneDicomStudyReposiotry.InsertFromDTOAsync(addOrEditNoneDicomStudy); + + optEntity.Code = code + 1; + + + optEntity.StudyCode = AppSettings.GetCodeStr(optEntity.Code, nameof(NoneDicomStudy)); + + code++; + } + + await _noneDicomStudyReposiotry.SaveChangesAsync(); + } + + #endregion + } + + + + + var list = _noneDicomStudyReposiotry.Where(t => t.SubjectId == subjectId) .WhereIf(inQuery.SubjectVisitId != null, t => t.SubjectVisitId == inQuery.SubjectVisitId) //.WhereIf(info.IsImageFilter, t => ("|" + info.CriterionModalitys + "|").Contains("|" + t.Modality + "|")) @@ -1655,7 +1710,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc //, NoneDicomStudyList = inQuery.IsImageSegmentLabel != false ? sv.NoneDicomStudyList.Where(t => isQueryNoneDicom ? inQuery.NoneDicomStudyIdList.Contains(t.Id) : false) - .Where(t => info.IsImageFilter && inQuery.IsImageSegmentLabel==null ? ("|" + info.CriterionModalitys + "|").Contains("|" + t.Modality + "|") : true) + .Where(t => info.IsImageFilter && inQuery.IsImageSegmentLabel == null ? ("|" + info.CriterionModalitys + "|").Contains("|" + t.Modality + "|") : true) .Where(t => t.IsReading) .Select(nd => new DownloadNoneDicomStudyDto() { From c1d0bf891488e75a0e5df38e60b4264c4e1aa804 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Tue, 16 Dec 2025 09:30:41 +0800 Subject: [PATCH 6/8] =?UTF-8?q?uat-ivus-oct-=E5=86=8D=E6=AC=A1=E4=BF=AE?= =?UTF-8?q?=E6=94=B96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Consumer/ConsistencyCheckConsumer.cs | 2 +- .../Document/TrialEmailNoticeConfigService.cs | 24 ++++---- .../ImageAndDoc/DownloadAndUploadService.cs | 61 ++++++++++++++++++- .../ImageAndDoc/NoneDicomStudyService.cs | 11 +++- 4 files changed, 81 insertions(+), 17 deletions(-) diff --git a/IRaCIS.Core.Application/MassTransit/Consumer/ConsistencyCheckConsumer.cs b/IRaCIS.Core.Application/MassTransit/Consumer/ConsistencyCheckConsumer.cs index b3d9e35ff..326233218 100644 --- a/IRaCIS.Core.Application/MassTransit/Consumer/ConsistencyCheckConsumer.cs +++ b/IRaCIS.Core.Application/MassTransit/Consumer/ConsistencyCheckConsumer.cs @@ -86,7 +86,7 @@ namespace IRaCIS.Core.Application.MassTransit.Consumer var noneDicomQuey = from sv in _subjectVisitRepository.Where(subjectVisitLambda) join subject in _subjectRepository.AsQueryable() on sv.SubjectId equals subject.Id - join noneDicomStudy in _noneDicomStudyRepository.AsQueryable() on sv.Id equals noneDicomStudy.SubjectVisitId + join noneDicomStudy in _noneDicomStudyRepository.Where(t => t.FileCount > 0) on sv.Id equals noneDicomStudy.SubjectVisitId select new CheckDBModel() { SubjectVisitId = sv.Id, diff --git a/IRaCIS.Core.Application/Service/Document/TrialEmailNoticeConfigService.cs b/IRaCIS.Core.Application/Service/Document/TrialEmailNoticeConfigService.cs index 8a81eb8cd..d2637703a 100644 --- a/IRaCIS.Core.Application/Service/Document/TrialEmailNoticeConfigService.cs +++ b/IRaCIS.Core.Application/Service/Document/TrialEmailNoticeConfigService.cs @@ -1763,22 +1763,22 @@ x.ReadingTableQuestionTrial.QuestionMark == QuestionMark.LesionNumber && x.Readi await _trialEmailNoticeConfigRepository.SaveChangesAsync(); - var cronInfo = await _trialEmailNoticeConfigRepository.Where(t => t.Id == addOrEditTrialEmailNoticeConfig.Id) - .Select(t => new { t.Id, t.Code, TrialCode = t.Trial.TrialCode, t.EmailCron, t.BusinessScenarioEnum, t.TrialId }) - .FirstAsync(); + // var cronInfo = await _trialEmailNoticeConfigRepository.Where(t => t.Id == addOrEditTrialEmailNoticeConfig.Id) + //.Select(t => new { t.Id, t.Code, TrialCode = t.Trial.TrialCode, t.EmailCron, t.BusinessScenarioEnum, t.TrialId }) + //.FirstAsync(); - var jobId = $"{cronInfo.TrialId}({cronInfo.TrialCode})_({cronInfo.BusinessScenarioEnum})"; + // var jobId = $"{cronInfo.TrialId}({cronInfo.TrialCode})_({cronInfo.BusinessScenarioEnum})"; - if (addOrEditTrialEmailNoticeConfig.IsAutoSend) - { - HangfireJobHelper.AddOrUpdateTrialCronJob(jobId, addOrEditTrialEmailNoticeConfig.TrialId, addOrEditTrialEmailNoticeConfig.BusinessScenarioEnum, addOrEditTrialEmailNoticeConfig.EmailCron); + // if (addOrEditTrialEmailNoticeConfig.IsAutoSend) + // { + // HangfireJobHelper.AddOrUpdateTrialCronJob(jobId, addOrEditTrialEmailNoticeConfig.TrialId, addOrEditTrialEmailNoticeConfig.BusinessScenarioEnum, addOrEditTrialEmailNoticeConfig.EmailCron); - } - else - { - HangfireJobHelper.RemoveCronJob(jobId); - } + // } + // else + // { + // HangfireJobHelper.RemoveCronJob(jobId); + // } return ResponseOutput.Ok(); } diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs index 44055be94..291419561 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs @@ -901,7 +901,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc /// /// [HttpPost] - public async Task>> GetIRUploadTaskNoneDicomStudyList(IRUploadStudyQuery inQuery) + public async Task>> GetIRUploadTaskNoneDicomStudyList([FromServices] INoneDicomStudyService _noneDicomStudyService, IRUploadStudyQuery inQuery) { var subjectCode = inQuery.SubjectCode; var subjectId = inQuery.SubjectId; @@ -926,7 +926,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc } var info = await _readingQuestionCriterionTrialRepository.Where(t => t.Id == inQuery.TrialReadingCriterionId) - .Select(t => new { t.IsImageFilter, t.CriterionModalitys, t.IsReadingTaskViewInOrder }).FirstNotNullAsync(); + .Select(t => new { t.IsImageFilter, t.CriterionType, t.TrialId, t.CriterionModalitys, t.IsReadingTaskViewInOrder }).FirstNotNullAsync(); var config = await _subjectRepository.Where(t => t.Id == subjectId).Select(t => new { t.Trial.ImageFormatList, t.Trial.StudyNameList, t.Trial.IsShowStudyName }).FirstOrDefaultAsync(); @@ -934,6 +934,61 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc //靶段标注上传,查看访视级别,上传绑定访视级别 if (inQuery.IsImageSegmentLabel == true) { + //存在ivus 和oct 这两种的项目 + if (_readingQuestionCriterionTrialRepository.Where(t => t.TrialId == info.TrialId && + (t.CriterionType == CriterionType.IVUS || t.CriterionType == CriterionType.OCT)).Distinct().Count() == 2 + && !_noneDicomStudyReposiotry.Any(t => t.SubjectId == inQuery.SubjectId && t.Modality != "IVUS")) + { + #region ivus 自动创建非dicom检查 + + var addList = await _dicomStudyRepository.Where(t => t.SubjectId == inQuery.SubjectId) + .Select(t => new NoneDicomStudyAddOrEdit() + { + TrialId = t.TrialId, + SubjectId = t.SubjectId, + SubjectVisitId = t.SubjectVisitId, + + ImageDate = (DateTime)t.StudyTime, + BodyPart = t.BodyPartForEdit, + BodyPartForEditOther = t.BodyPartForEditOther, + Modality = "IVUS" + + }).ToListAsync(); + + + var @lock = _distributedLockProvider.CreateLock($"NoneDicomCode"); + + using (await @lock.AcquireAsync()) + { + + var trialId = addList.FirstOrDefault().TrialId; + //默认会是0 + var code = await _noneDicomStudyReposiotry.Where(t => t.TrialId == trialId).Select(x => x.Code).DefaultIfEmpty().MaxAsync(); + + foreach (var g in addList.GroupBy(t => t.SubjectVisitId)) + { + var addOrEditNoneDicomStudy = g.First(); + + var optEntity = await _noneDicomStudyReposiotry.InsertFromDTOAsync(addOrEditNoneDicomStudy); + + optEntity.Code = code + 1; + + + optEntity.StudyCode = AppSettings.GetCodeStr(optEntity.Code, nameof(NoneDicomStudy)); + + code++; + } + + await _noneDicomStudyReposiotry.SaveChangesAsync(); + } + + #endregion + } + + + + + var list = _noneDicomStudyReposiotry.Where(t => t.SubjectId == subjectId) .WhereIf(inQuery.SubjectVisitId != null, t => t.SubjectVisitId == inQuery.SubjectVisitId) //.WhereIf(info.IsImageFilter, t => ("|" + info.CriterionModalitys + "|").Contains("|" + t.Modality + "|")) @@ -1655,7 +1710,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc //, NoneDicomStudyList = inQuery.IsImageSegmentLabel != false ? sv.NoneDicomStudyList.Where(t => isQueryNoneDicom ? inQuery.NoneDicomStudyIdList.Contains(t.Id) : false) - .Where(t => info.IsImageFilter && inQuery.IsImageSegmentLabel==null ? ("|" + info.CriterionModalitys + "|").Contains("|" + t.Modality + "|") : true) + .Where(t => info.IsImageFilter && inQuery.IsImageSegmentLabel == null ? ("|" + info.CriterionModalitys + "|").Contains("|" + t.Modality + "|") : true) .Where(t => t.IsReading) .Select(nd => new DownloadNoneDicomStudyDto() { diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/NoneDicomStudyService.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/NoneDicomStudyService.cs index bf23ed095..41faa94a0 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/NoneDicomStudyService.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/NoneDicomStudyService.cs @@ -3,6 +3,7 @@ // 生成时间 2021-12-06 10:54:55 // 对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。 //-------------------------------------------------------------------- +using DocumentFormat.OpenXml.EMMA; using IRaCIS.Core.Application.Filter; using IRaCIS.Core.Application.Service.Reading.Dto; using IRaCIS.Core.Domain.Models; @@ -96,8 +97,16 @@ namespace IRaCIS.Core.Application.Contracts } + var isFilterIVUSNoneDicom = false; + if (_subjectVisitRepository.Where(t => t.Id == subjectVisitId).SelectMany(t => t.Trial.TrialReadingCriterionList) + .Where(t => t.CriterionType == CriterionType.IVUS || t.CriterionType == CriterionType.OCT).Distinct().Count() == 2 + ) + { + isFilterIVUSNoneDicom = true; + } - var list = await noneDicomStudyQueryable.OrderBy(x => x.ImageDate).ThenBy(x => x.CreateTime).ToListAsync(); + var list = await noneDicomStudyQueryable.Where(t => isFilterIVUSNoneDicom ? t.Modality != "IVUS" : true) + .OrderBy(x => x.ImageDate).ThenBy(x => x.CreateTime).ToListAsync(); var config = await _subjectVisitRepository.Where(t => t.Id == subjectVisitId).Select(t => new { t.Trial.ImageFormatList, t.Trial.StudyNameList, t.Trial.IsShowStudyName, AuditState = qcAuditState }).FirstOrDefaultAsync(); return ResponseOutput.Ok(list, config); From dd1da21738d7b5fc6f2e1762483014aa847d18bd Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Tue, 16 Dec 2025 10:16:33 +0800 Subject: [PATCH 7/8] =?UTF-8?q?uat-ivus-oct-=E5=86=8D=E6=AC=A1=E4=BF=AE?= =?UTF-8?q?=E6=94=B97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/ImageAndDoc/DownloadAndUploadService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs index 291419561..2e7799e4b 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs @@ -937,7 +937,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc //存在ivus 和oct 这两种的项目 if (_readingQuestionCriterionTrialRepository.Where(t => t.TrialId == info.TrialId && (t.CriterionType == CriterionType.IVUS || t.CriterionType == CriterionType.OCT)).Distinct().Count() == 2 - && !_noneDicomStudyReposiotry.Any(t => t.SubjectId == inQuery.SubjectId && t.Modality != "IVUS")) + && !_noneDicomStudyReposiotry.Any(t => t.SubjectId == inQuery.SubjectId && t.Modality == "IVUS")) { #region ivus 自动创建非dicom检查 From 8fe84cd2add53ab15930f632f3a13ea88ed1bbcc Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Tue, 16 Dec 2025 11:20:30 +0800 Subject: [PATCH 8/8] =?UTF-8?q?uat-ivus-oct-=E5=86=8D=E6=AC=A1=E4=BF=AE?= =?UTF-8?q?=E6=94=B98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/Common/Export/IVUS_OCTExportService.cs | 14 ++++++++++++++ IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs | 6 ++++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Common/Export/IVUS_OCTExportService.cs b/IRaCIS.Core.Application/Service/Common/Export/IVUS_OCTExportService.cs index 105f3c365..1ab731631 100644 --- a/IRaCIS.Core.Application/Service/Common/Export/IVUS_OCTExportService.cs +++ b/IRaCIS.Core.Application/Service/Common/Export/IVUS_OCTExportService.cs @@ -147,6 +147,8 @@ public class IvusExportDto : IVUS_OCTBaseDto /// PAV (如无可不填) public string PAV { get; set; } + + public string DOST { get; set; } } /// @@ -154,6 +156,11 @@ public class IvusExportDto : IVUS_OCTBaseDto /// public class OctExportDto : IVUS_OCTBaseDto { + /// + /// 斑块到血管开口的距离 + /// + public string DOST { get; set; } + /// 靶段 public string TARGETV { get; set; } @@ -444,6 +451,11 @@ public class IVUS_OCTExportService(IRepository _r ivus.PAV = findPAVLession?.LessionAnswerList.Where(t => t.QuestionMark == QuestionMark.PAV).FirstOrDefault()?.QuestionValue ?? string.Empty; + + ivus.DOST = findPAVLession?.LessionAnswerList.Where(t => t.QuestionMark == QuestionMark.PlaqueToOstiumDistance).FirstOrDefault()?.QuestionValue ?? string.Empty; + + + ivusList.Add(ivus); } @@ -785,6 +797,8 @@ public class IVUS_OCTExportService(IRepository _r } + // 斑块到血管开口的距离 + oct.DOST = findLession?.LessionAnswerList.Where(t => t.QuestionMark == QuestionMark.PlaqueToOstiumDistance).FirstOrDefault()?.QuestionValue ?? string.Empty; // 匹配动脉段最小FCT oct.MINFCT = findLession?.LessionAnswerList.Where(t => t.QuestionMark == QuestionMark.MiniMumFCT).FirstOrDefault()?.QuestionValue ?? string.Empty; diff --git a/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs b/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs index e95738f52..f3588bcb7 100644 --- a/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs +++ b/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs @@ -2444,8 +2444,10 @@ namespace IRaCIS.Core.Domain.Share /// LumenAreaMeasurement = 1030, - - + /// + /// 斑块到血管开口的距离 + /// + PlaqueToOstiumDistance=1031, /// /// 第一次测量