diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/UnionStudyViewDodel.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/UnionStudyViewDodel.cs index c9835af4a..79dc28127 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/UnionStudyViewDodel.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/UnionStudyViewDodel.cs @@ -514,14 +514,12 @@ namespace IRaCIS.Core.Application.Contracts public class IRReadingDownloadQuery : SortInput { - [NotDefault] - public Guid SubjectId { get; set; } + public Guid? SubjectId { get; set; } [NotDefault] public Guid TrialReadingCriterionId { get; set; } - [NotDefault] - public string SubjectCode { get; set; } + public string? SubjectCode { get; set; } public Guid? VisitTaskId { get; set; } } diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs index 0fcf86880..7ec7a0ce6 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs @@ -1,4 +1,5 @@ -using FellowOakDicom; +using DocumentFormat.OpenXml.EMMA; +using FellowOakDicom; using IRaCIS.Core.Application.Contracts; using IRaCIS.Core.Application.Contracts.Dicom.DTO; using IRaCIS.Core.Application.Filter; @@ -806,32 +807,62 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc [HttpPost] public async Task> GetSubjectImageDownloadSelectList(IRReadingDownloadQuery inQuery) { + + var doctorUserId = _userInfo.Id; + var isAnalysisCreate = false; + //要根据标准阅片顺序,确定是否查询单个任务的,还是查询所有的 var criterionInfo = await _readingQuestionCriterionTrialRepository.Where(t => t.Id == inQuery.TrialReadingCriterionId) .Select(t => new { t.IsReadingTaskViewInOrder }).FirstNotNullAsync(); + var subjectCode = string.Empty; + var subjectId = inQuery.SubjectId; - var doctorUserId = _userInfo.Id; + if (criterionInfo.IsReadingTaskViewInOrder == ReadingOrder.Random) + { + if (inQuery.VisitTaskId == null) + { + throw new Exception("无序阅片,前端参数传递错误"); + } + + } + else + { + if (inQuery.SubjectId == null || inQuery.SubjectCode == null) + { + throw new Exception("有序阅片,前端参数传递错误"); + } - var isAnalysisCreate = false; - - //医学审核查看下载按钮,这个时候需要知道医生 + //考虑到一致性分析,必须要这个编号进行过滤 + subjectCode = inQuery.SubjectCode; + } + if (inQuery.VisitTaskId != null) { - var info = await _visitTaskRepository.Where(t => t.Id == inQuery.VisitTaskId).Select(t => new { t.DoctorUserId, t.IsAnalysisCreate }).FirstNotNullAsync(); + //考虑到一致性分析,必须要这个编号进行过滤 + //医学审核查看下载按钮,这个时候需要知道医生 - doctorUserId = (Guid)info.DoctorUserId!; - isAnalysisCreate = info.IsAnalysisCreate; + var taskInfo = await _visitTaskRepository.Where(t => t.Id == inQuery.VisitTaskId).Select(t => new { + SubjectCode = t.IsAnalysisCreate ? t.BlindSubjectCode : t.Subject.Code, + SubjectId = t.SubjectId, + t.DoctorUserId, + t.IsAnalysisCreate + }).FirstNotNullAsync(); + + subjectId = taskInfo.SubjectId; + subjectCode = taskInfo.SubjectCode; + doctorUserId = (Guid)taskInfo.DoctorUserId!; + isAnalysisCreate = taskInfo.IsAnalysisCreate; } - var query = _visitTaskRepository.Where(t => t.SubjectId == inQuery.SubjectId && t.TrialReadingCriterionId == inQuery.TrialReadingCriterionId + var query = _visitTaskRepository.Where(t => t.SubjectId == subjectId && t.TrialReadingCriterionId == inQuery.TrialReadingCriterionId && t.SourceSubjectVisitId != null && t.DoctorUserId == doctorUserId && t.TaskState == TaskState.Effect) //满足 有序,或者随机只看到当前任务的dicom 非dicom检查 .WhereIf(criterionInfo.IsReadingTaskViewInOrder != ReadingOrder.SubjectRandom && inQuery.VisitTaskId != null, t => t.Id == inQuery.VisitTaskId) .ProjectTo(_mapper.ConfigurationProvider); //这里过滤是否是一致性分析的 - var list = await query.Where(t => t.SubjectCode == inQuery.SubjectCode).ToListAsync(); + var list = await query.Where(t => t.SubjectCode == subjectCode).ToListAsync(); foreach (var item in list) { diff --git a/IRaCIS.Core.Domain/BaseModel/Entity.cs b/IRaCIS.Core.Domain/BaseModel/Entity.cs index b7ec076a2..f30d88e48 100644 --- a/IRaCIS.Core.Domain/BaseModel/Entity.cs +++ b/IRaCIS.Core.Domain/BaseModel/Entity.cs @@ -19,6 +19,7 @@ public abstract class Entity : IEntity [DatabaseGenerated(DatabaseGeneratedOption.None)] public Guid Id { get; set; } + #region 领域事件 仅仅允许通过提供的方法进行操作 [JsonIgnore] private readonly List _domainEvents = []; diff --git a/IRaCIS.Core.Domain/Reading/AdditionalEvaluate/SubjectCriteriaEvaluation.cs b/IRaCIS.Core.Domain/Reading/AdditionalEvaluate/SubjectCriteriaEvaluation.cs index dc95e11a4..9fb8bfe76 100644 --- a/IRaCIS.Core.Domain/Reading/AdditionalEvaluate/SubjectCriteriaEvaluation.cs +++ b/IRaCIS.Core.Domain/Reading/AdditionalEvaluate/SubjectCriteriaEvaluation.cs @@ -12,8 +12,6 @@ public class SubjectCriteriaEvaluation : BaseFullAuditEntity [ForeignKey("TrialReadingCriterionId")] public ReadingQuestionCriterionTrial TrialReadingCriterion { get; set; } - [JsonIgnore] - public List SubjectCriteriaEvaluationVisitFilterList { get; set; } #endregion public Guid SubjectId { get; set; } diff --git a/IRaCIS.Core.Domain/Reading/AdditionalEvaluate/SubjectCriteriaEvaluationVisitFilter.cs b/IRaCIS.Core.Domain/Reading/AdditionalEvaluate/SubjectCriteriaEvaluationVisitFilter.cs index b4df6e090..8e77ea563 100644 --- a/IRaCIS.Core.Domain/Reading/AdditionalEvaluate/SubjectCriteriaEvaluationVisitFilter.cs +++ b/IRaCIS.Core.Domain/Reading/AdditionalEvaluate/SubjectCriteriaEvaluationVisitFilter.cs @@ -10,8 +10,6 @@ public class SubjectCriteriaEvaluationVisitFilter : BaseFullAuditEntity [JsonIgnore] [ForeignKey("TrialReadingCriterionId")] public ReadingQuestionCriterionTrial TrialReadingCriterion { get; set; } - [JsonIgnore] - public SubjectCriteriaEvaluation SubjectCriteriaEvaluation { get; set; } [JsonIgnore] diff --git a/IRaCIS.Core.Infra.EFCore/EntityConfigration/ImageConfigration.cs b/IRaCIS.Core.Infra.EFCore/EntityConfigration/ImageConfigration.cs new file mode 100644 index 000000000..bcd285ab1 --- /dev/null +++ b/IRaCIS.Core.Infra.EFCore/EntityConfigration/ImageConfigration.cs @@ -0,0 +1,81 @@ +using IRaCIS.Core.Domain.Models; +using Microsoft.EntityFrameworkCore.Metadata.Builders; + +namespace IRaCIS.Core.Infra.EFCore.EntityConfigration; + +/// +/// 医学影像 数据量大,主键是 SeqId ,Id 是自己算的,也可以作为Id,但是不是有序的,数据量大,会导致性能很差,所以是逻辑主键 +/// + +public class DicomStudyConfigration : IEntityTypeConfiguration +{ + public void Configure(EntityTypeBuilder builder) + { + builder.HasKey(e => e.SeqId); + } +} + +public class DicomSeriesConfigration : IEntityTypeConfiguration +{ + public void Configure(EntityTypeBuilder builder) + { + builder.HasKey(e => e.SeqId); + } +} + +public class DicomInstanceConfigration : IEntityTypeConfiguration +{ + public void Configure(EntityTypeBuilder builder) + { + builder.HasKey(e => e.SeqId); + } +} + +public class TaskStudyConfigration : IEntityTypeConfiguration +{ + public void Configure(EntityTypeBuilder builder) + { + builder.HasKey(e => e.SeqId); + } +} + +public class TaskSeriesConfigration : IEntityTypeConfiguration +{ + public void Configure(EntityTypeBuilder builder) + { + builder.HasKey(e => e.SeqId); + } +} + +public class TaskInstanceConfigration : IEntityTypeConfiguration +{ + public void Configure(EntityTypeBuilder builder) + { + builder.HasKey(e => e.SeqId); + } +} + + +public class SCPStudyConfigration : IEntityTypeConfiguration +{ + public void Configure(EntityTypeBuilder builder) + { + builder.HasKey(e => e.SeqId); + } +} + +public class SCPSeriesConfigration : IEntityTypeConfiguration +{ + public void Configure(EntityTypeBuilder builder) + { + builder.HasKey(e => e.SeqId); + } +} + +public class SCPInstanceConfigration : IEntityTypeConfiguration +{ + public void Configure(EntityTypeBuilder builder) + { + builder.HasKey(e => e.SeqId); + } +} diff --git a/IRaCIS.Core.Infra.EFCore/EntityConfigration/TrialUserConfigration.cs b/IRaCIS.Core.Infra.EFCore/EntityConfigration/TrialUserConfigration.cs deleted file mode 100644 index 7449ba29e..000000000 --- a/IRaCIS.Core.Infra.EFCore/EntityConfigration/TrialUserConfigration.cs +++ /dev/null @@ -1,22 +0,0 @@ -using IRaCIS.Core.Domain.Models; -using Microsoft.EntityFrameworkCore.Metadata.Builders; - -namespace IRaCIS.Core.Infra.EFCore.EntityConfigration -{ - - public class SubjectCriteriaEvaluationConfigration : IEntityTypeConfiguration - { - - public void Configure(EntityTypeBuilder builder) - { - builder - .HasMany(s => s.SubjectCriteriaEvaluationVisitFilterList) - .WithOne(c => c.SubjectCriteriaEvaluation) - .HasForeignKey(s => new { s.SubjectId, s.TrialReadingCriterionId }) - .HasPrincipalKey(c => new { c.SubjectId, c.TrialReadingCriterionId }); - - } - } - - -}