From 9f4e43e20a628d0abcd07326b48ac3031c17f1da Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Tue, 27 Aug 2024 16:57:56 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BD=B1=E5=83=8F=E4=B8=8B=E8=BD=BD=E5=92=8C?= =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E5=85=A5=E5=8F=A3=E5=A2=9E=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ImageAndDoc/DTO/DownloadAndUploadDTO.cs | 57 +++++++++++++++- .../ImageAndDoc/DTO/UnionStudyViewDodel.cs | 25 ++++++- .../ImageAndDoc/DownloadAndUploadService.cs | 65 +++++++++++-------- .../Service/ImageAndDoc/_MapConfig.cs | 26 +++++--- IRaCIS.Core.Domain/Image/NoneDicomStudy.cs | 4 ++ .../Image/NoneDicomStudyFile.cs | 10 ++- .../Context/IRaCISDBContext.cs | 2 + 7 files changed, 145 insertions(+), 44 deletions(-) diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/DownloadAndUploadDTO.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/DownloadAndUploadDTO.cs index 6f3910b2d..0032537e4 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/DownloadAndUploadDTO.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/DownloadAndUploadDTO.cs @@ -22,7 +22,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc.DTO public string TaskName { get; set; } public bool IsImageFilter { get; set; } - public string CriterionModalitys { get; set; } + public string CriterionModalitys { get; set; } public Guid? SourceSubjectVisitId { get; set; } public PackState PackState { get; set; } @@ -33,7 +33,40 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc.DTO } - public class StudyBasicInfo + + + + public class StudyBasicInfo : DicomStudyBasicInfo + { + + public List SopInstanceUidList { get; set; } + } + + + public class SubjectCRCImageUploadedDto + { + public Guid VisitTaskId { get; set; } + + public Guid SubjectId { get; set; } + + public string SubjectCode { get; set; } + + public string TaskBlindName { get; set; } + + public string TaskName { get; set; } + + public bool IsImageFilter { get; set; } + public string CriterionModalitys { get; set; } + + public Guid? SourceSubjectVisitId { get; set; } + + public List DicomStudyList { get; set; } + + public List NoneDicomStudyList { get; set; } + } + + + public class DicomStudyBasicInfo { public Guid Id { get; set; } public string StudyInstanceUid { get; set; } @@ -54,8 +87,26 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc.DTO public string Description { get; set; } public int SeriesCount { get; set; } public int InstanceCount { get; set; } + } - public List SopInstanceUidList { get; set; } + public class NoneDicomStudyBasicInfo + { + public Guid Id { get; set; } + + public string StudyCode { get; set; } = string.Empty; + + public int FileCount { get; set; } + + public string BodyPart { get; set; } + + public string Modality { get; set; } + + public DateTime ImageDate { get; set; } + + public string Description { get; set; } = string.Empty; + + + } } diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/UnionStudyViewDodel.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/UnionStudyViewDodel.cs index 2a2f45b16..ef8e2f10a 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/UnionStudyViewDodel.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/UnionStudyViewDodel.cs @@ -377,7 +377,30 @@ namespace IRaCIS.Core.Application.Contracts public class IRReadingDownloadQuery { [NotDefault] - public Guid VisitTaskId { get; set; } + public Guid SubjectId { get; set; } + + [NotDefault] + public Guid TrialReadingCriterionId { get; set; } + + public string SubjectCode { get; set; } + } + + + public class IRDownloadQuery + { + [NotDefault] + public Guid SubjectId { get; set; } + + [NotDefault] + public Guid TrialReadingCriterionId { get; set; } + + public string SubjectCode { get; set; } + + public List SubjectVisitIdList { get; set; } + + public List DicomStudyIdList { get; set; } + + public List NoneDicomStudyIdList { get; set; } } } diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs index 6ddf4bbf1..3c3f7127c 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs @@ -914,8 +914,8 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc SubjectCode = sv.Subject.Code, VisitName = sv.VisitName, - StudyList = sv.StudyList.Where(t => isQueryDicom ? inQuery.DicomStudyIdList.Contains(t.Id):false) - + StudyList = sv.StudyList.Where(t => isQueryDicom ? inQuery.DicomStudyIdList.Contains(t.Id) : false) + .Select(u => new { u.PatientId, @@ -935,8 +935,8 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc }).ToList(), - NoneDicomStudyList = sv.NoneDicomStudyList.Where( t => isQueryNoneDicom?inQuery.NoneDicomStudyIdList.Contains(t.Id):false) - + NoneDicomStudyList = sv.NoneDicomStudyList.Where(t => isQueryNoneDicom ? inQuery.NoneDicomStudyIdList.Contains(t.Id) : false) + .Select(nd => new { nd.Modality, @@ -952,44 +952,53 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc }).ToList() }; - var result = query.ToList(); + var result = query.FirstOrDefault(); return ResponseOutput.Ok(result); } /// - /// IR 阅片页面获取下载检查的信息 会根据标准进行过滤检查,(后端要考虑到一致性分析 subjectCode的问题) + /// IR 阅片页面 和IR 任务列表页面下载 勾选下载列表(后端要考虑到一致性分析 subjectCode的问题) /// /// /// - [HttpPost] - public async Task GetIRReadingDownloadStudyInfo(IRReadingDownloadQuery inQuery) + public async Task> GetSubjectImageDownloadSelectList(IRReadingDownloadQuery inQuery) { - var taskInfo = await _visitTaskRepository.Where(t => t.Id == inQuery.VisitTaskId) - .Select(t => new - { - t.BlindSubjectCode, - t.IsAnalysisCreate, - t.SourceSubjectVisitId, - t.TrialReadingCriterion.IsImageFilter, - t.TrialReadingCriterion.CriterionModalitys - }) - .FirstNotNullAsync(); - if (taskInfo.SourceSubjectVisitId == null) - { - return ResponseOutput.NotOk("请开发核实传递的参数,该查询任务关联访视Id没有值"); - } + var query = _visitTaskRepository.Where(t => t.SubjectId == inQuery.SubjectId && t.TrialReadingCriterionId == inQuery.TrialReadingCriterionId + && t.SourceSubjectVisitId != null && t.DoctorUserId == _userInfo.Id && t.TaskState == TaskState.Effect) + .ProjectTo(_mapper.ConfigurationProvider); - var query = from sv in _subjectVisitRepository.Where(t => t.Id == taskInfo.SourceSubjectVisitId) + + var list = await query.Where(t=>t.SubjectCode==inQuery.SubjectCode).ToListAsync(); + return list; + + } + + /// + /// IR 阅片页面获取下载检查的信息 会根据标准进行过滤检查,(后端要考虑到一致性分析 subjectCode的问题) + /// + /// + /// + /// + [HttpPost] + public async Task GetIRReadingDownloadStudyInfo(IRDownloadQuery inQuery, [FromServices] IRepository _subjectRepository) + { + var info = await _readingQuestionCriterionTrialRepository.Where(t => t.Id == inQuery.TrialReadingCriterionId) + .Select(t => new { t.IsImageFilter, t.CriterionModalitys }).FirstNotNullAsync(); + + var isQueryDicom = inQuery.DicomStudyIdList.Count > 0; + var isQueryNoneDicom = inQuery.NoneDicomStudyIdList.Count > 0; + + var query = from sv in _subjectRepository.Where(t => t.Id == inQuery.SubjectId).SelectMany(t => t.SubjectVisitList.Where(t=>inQuery.SubjectVisitIdList.Contains(t.Id))) select new { SubjectCode = sv.Subject.Code, VisitName = sv.VisitName, - StudyList = sv.StudyList.AsQueryable().WhereIf(taskInfo.IsImageFilter, t => ("|" + taskInfo.CriterionModalitys + "|").Contains("|" + t.ModalityForEdit + "|")) + StudyList = sv.StudyList.Where(t => isQueryDicom ? inQuery.DicomStudyIdList.Contains(t.Id) : false) .Select(u => new { u.PatientId, @@ -1008,7 +1017,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc }), - NoneDicomStudyList = sv.NoneDicomStudyList.AsQueryable().WhereIf(taskInfo.IsImageFilter, t => ("|" + taskInfo.CriterionModalitys + "|").Contains("|" + t.Modality + "|")) + NoneDicomStudyList = sv.NoneDicomStudyList.Where(t => isQueryNoneDicom ? inQuery.NoneDicomStudyIdList.Contains(t.Id) : false) .Select(nd => new { nd.Modality, @@ -1024,7 +1033,11 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc }) }; - return ResponseOutput.Ok(); + + + var result = await query.FirstOrDefaultAsync(); + + return ResponseOutput.Ok(result); } } diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/_MapConfig.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/_MapConfig.cs index 8e41acc53..372bc020c 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/_MapConfig.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/_MapConfig.cs @@ -3,6 +3,7 @@ using IRaCIS.Application.Contracts; using IRaCIS.Core.Application.Contracts; using IRaCIS.Core.Application.Contracts.Dicom.DTO; using IRaCIS.Core.Application.Contracts.DTO; +using IRaCIS.Core.Application.Service.ImageAndDoc.DTO; using IRaCIS.Core.Application.ViewModel; using IRaCIS.Core.Domain.Models; @@ -60,17 +61,17 @@ namespace IRaCIS.Core.Application.Service .ForMember(o => o.StudyTime, t => t.MapFrom(u => u.DicomStudy.StudyTime)) .ForMember(o => o.StudyCode, t => t.MapFrom(u => u.DicomStudy.StudyCode)) - //.ForMember(o => o.InstanceList, t => t.MapFrom(u => u.DicomInstanceList.Select(t=>t.Id).ToArray())) - // .ForMember(o => o.InstancePathList, t => t.MapFrom(u => u.DicomInstanceList.OrderBy(t=>t.InstanceNumber).Select(t => t.Path))) + //.ForMember(o => o.InstanceList, t => t.MapFrom(u => u.DicomInstanceList.Select(t=>t.Id).ToArray())) + // .ForMember(o => o.InstancePathList, t => t.MapFrom(u => u.DicomInstanceList.OrderBy(t=>t.InstanceNumber).Select(t => t.Path))) ; CreateMap() - .ForMember(o => o.IsCompleteClinicalData, t => t.MapFrom(u => !u.ReadingClinicalDataList.Any(x=>x.ReadingClinicalDataPDFList.Count()==0))) - .ForMember(o => o.UploadedTime, t => t.MapFrom(u => u.CreateTime)) + .ForMember(o => o.IsCompleteClinicalData, t => t.MapFrom(u => !u.ReadingClinicalDataList.Any(x => x.ReadingClinicalDataPDFList.Count() == 0))) + .ForMember(o => o.UploadedTime, t => t.MapFrom(u => u.CreateTime)) .ForMember(o => o.Uploader, t => t.MapFrom(u => u.Uploader.LastName + " / " + u.Uploader.FirstName)) .ForMember(o => o.StudyId, t => t.MapFrom(u => u.Id)) - .ForMember(o => o.IsHaveUploadFailed, t => t.MapFrom(u => u.DicomStudyMonitorList.Any(t=>t.FailedFileCount>0))) - .ForMember(o => o.Modalities, t => t.MapFrom(u => string.Join('、', u.SeriesList.Select(t => t.Modality).Distinct()) )); + .ForMember(o => o.IsHaveUploadFailed, t => t.MapFrom(u => u.DicomStudyMonitorList.Any(t => t.FailedFileCount > 0))) + .ForMember(o => o.Modalities, t => t.MapFrom(u => string.Join('、', u.SeriesList.Select(t => t.Modality).Distinct()))); @@ -124,10 +125,19 @@ namespace IRaCIS.Core.Application.Service .ForMember(d => d.VisitNum, u => u.MapFrom(s => s.SubjectVisit.VisitNum)) .ForMember(d => d.VisitName, u => u.MapFrom(s => s.SubjectVisit.VisitName)); - + CreateMap(); + CreateMap(); + CreateMap() + .ForMember(d => d.VisitTaskId, u => u.MapFrom(s => s.Id)) + .ForMember(d => d.IsImageFilter, u => u.MapFrom(s => s.TrialReadingCriterion.IsImageFilter)) + .ForMember(d => d.CriterionModalitys, u => u.MapFrom(s => s.TrialReadingCriterion.CriterionModalitys)) + .ForMember(d => d.SubjectCode, u => u.MapFrom(u => u.IsSelfAnalysis == true ? u.BlindSubjectCode : u.Subject.Code)) + .ForMember(d => d.DicomStudyList, u => u.MapFrom(s => s.SourceSubjectVisit.StudyList)) + .ForMember(d => d.NoneDicomStudyList, u => u.MapFrom(s => s.SourceSubjectVisit.NoneDicomStudyList)) + ; } } - + } diff --git a/IRaCIS.Core.Domain/Image/NoneDicomStudy.cs b/IRaCIS.Core.Domain/Image/NoneDicomStudy.cs index 61b17b548..900b2f720 100644 --- a/IRaCIS.Core.Domain/Image/NoneDicomStudy.cs +++ b/IRaCIS.Core.Domain/Image/NoneDicomStudy.cs @@ -18,6 +18,10 @@ namespace IRaCIS.Core.Domain.Models #region 导航属性 [JsonIgnore] public List NoneDicomFileList { get; set; } + + [JsonIgnore] + public List TaskNoneDicomFileList { get; set; } + [JsonIgnore] public SubjectVisit SubjectVisit { get; set; } [JsonIgnore] diff --git a/IRaCIS.Core.Domain/Image/NoneDicomStudyFile.cs b/IRaCIS.Core.Domain/Image/NoneDicomStudyFile.cs index ecd0a58d1..c7c286986 100644 --- a/IRaCIS.Core.Domain/Image/NoneDicomStudyFile.cs +++ b/IRaCIS.Core.Domain/Image/NoneDicomStudyFile.cs @@ -8,9 +8,7 @@ using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; namespace IRaCIS.Core.Domain.Models { - /// - ///NoneDicomStudyFile - /// + [Table("NoneDicomStudyFile")] public class NoneDicomStudyFile : BaseAddAuditEntity { @@ -23,9 +21,9 @@ namespace IRaCIS.Core.Domain.Models [JsonIgnore] public VisitTask VisitTask { get; set; } - //[ForeignKey("OriginNoneDicomStudyId")] - //[JsonIgnore] - //public NoneDicomStudy OriginNoneDicomStudy { get; set; } + [ForeignKey("OriginNoneDicomStudyId")] + [JsonIgnore] + public NoneDicomStudy OriginNoneDicomStudy { get; set; } #endregion diff --git a/IRaCIS.Core.Infra.EFCore/Context/IRaCISDBContext.cs b/IRaCIS.Core.Infra.EFCore/Context/IRaCISDBContext.cs index 15414fe37..931eb9a6e 100644 --- a/IRaCIS.Core.Infra.EFCore/Context/IRaCISDBContext.cs +++ b/IRaCIS.Core.Infra.EFCore/Context/IRaCISDBContext.cs @@ -72,6 +72,8 @@ namespace IRaCIS.Core.Infra.EFCore builder.HasNoKey(); }); + modelBuilder.Entity().HasMany(t => t.NoneDicomFileList).WithOne(s => s.NoneDicomStudy).HasForeignKey(t => t.NoneDicomStudyId); + modelBuilder.Entity().HasMany(t => t.TaskNoneDicomFileList).WithOne(s => s.OriginNoneDicomStudy).HasForeignKey(t => t.OriginNoneDicomStudyId); modelBuilder.Entity().HasQueryFilter(p => p.IsAdditional == false);