From b5e756ffa34c3031cf15ca7170b26f8d275d9a1c Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Thu, 26 Sep 2024 17:34:21 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E9=A2=86=E5=9F=9F=E4=BA=8B=E4=BB=B6?= =?UTF-8?q?=E9=A2=84=E5=A4=87=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- IRaCIS.Core.API/Progranm.cs | 13 ++++++- .../Consumer/AddSubjectConsumer.cs | 38 +++++++++++++++++++ IRaCIS.Core.Domain/BaseModel/Entity.cs | 2 + .../_DomainEvent/AddSubjectEvent.cs | 12 ++++++ .../Interceptor/AddDomainEvent.cs | 31 +++++++++++++++ .../Interceptor/AuditEntityInterceptor.cs | 3 ++ 6 files changed, 98 insertions(+), 1 deletion(-) create mode 100644 IRaCIS.Core.Application/MassTransit/Consumer/AddSubjectConsumer.cs create mode 100644 IRaCIS.Core.Domain/_DomainEvent/AddSubjectEvent.cs create mode 100644 IRaCIS.Core.Infra.EFCore/Interceptor/AddDomainEvent.cs diff --git a/IRaCIS.Core.API/Progranm.cs b/IRaCIS.Core.API/Progranm.cs index c06f45d52..ef03b3be1 100644 --- a/IRaCIS.Core.API/Progranm.cs +++ b/IRaCIS.Core.API/Progranm.cs @@ -151,9 +151,20 @@ builder.Services.AddMediator(cfg => cfg.AddConsumer(); }); +// 添加 MassTransit 和 InMemory 传输 builder.Services.AddMassTransit(cfg => { - cfg.UsingInMemory(); + // 注册消费者 + cfg.AddConsumer(); // 替换为你的消费者类 + + // 使用 InMemory 作为消息传递机制 + cfg.UsingInMemory((context, cfg) => + { + // 这里可以进行额外的配置 + cfg.ConfigureEndpoints(context); // 自动配置所有消费者的端点 + }); + + }); #endregion diff --git a/IRaCIS.Core.Application/MassTransit/Consumer/AddSubjectConsumer.cs b/IRaCIS.Core.Application/MassTransit/Consumer/AddSubjectConsumer.cs new file mode 100644 index 000000000..f0c5e41ae --- /dev/null +++ b/IRaCIS.Core.Application/MassTransit/Consumer/AddSubjectConsumer.cs @@ -0,0 +1,38 @@ + + +using AutoMapper; +using IRaCIS.Core.Domain; +using MassTransit; + +namespace IRaCIS.Core.Application.MassTransit.Consumer; + +public class AddSubjectConsumer(IRepository _subjectVisitRepository, + + IRepository _visitStageRepository, + IRepository _trialRepository, + IMapper _mapper) : IConsumer +{ + public async Task Consume(ConsumeContext context) + { + var addSubjectEvent= context.Message; + + //添加受试者的时候,获取访视计划列表,添加到受试者访视表。 + var visitPlanList = await _visitStageRepository.Where(t => t.TrialId == addSubjectEvent.TrialId && t.IsConfirmed).ToListAsync(); + + var svList = _mapper.Map>(visitPlanList); + + var IsEnrollementQualificationConfirm = await _trialRepository.Where(t => t.Id == addSubjectEvent.TrialId).Select(u => u.IsEnrollementQualificationConfirm).FirstOrDefaultAsync(); + + svList.ForEach(t => + { + t.SubjectId = addSubjectEvent.SubjectId; + t.TrialId = addSubjectEvent.TrialId; + t.TrialSiteId = addSubjectEvent.TrialSiteId; + t.IsEnrollmentConfirm = t.IsBaseLine ? IsEnrollementQualificationConfirm : false; + t.Id = NewId.NextGuid(); + + }); + + await _subjectVisitRepository.AddRangeAsync(svList); + } +} diff --git a/IRaCIS.Core.Domain/BaseModel/Entity.cs b/IRaCIS.Core.Domain/BaseModel/Entity.cs index f30d88e48..eecd81ff9 100644 --- a/IRaCIS.Core.Domain/BaseModel/Entity.cs +++ b/IRaCIS.Core.Domain/BaseModel/Entity.cs @@ -21,6 +21,7 @@ public abstract class Entity : IEntity public Guid Id { get; set; } #region 领域事件 仅仅允许通过提供的方法进行操作 + [JsonIgnore] private readonly List _domainEvents = []; @@ -41,6 +42,7 @@ public abstract class Entity : IEntity { _domainEvents.Clear(); } + #endregion } #region 减少实体属性,增加基类 diff --git a/IRaCIS.Core.Domain/_DomainEvent/AddSubjectEvent.cs b/IRaCIS.Core.Domain/_DomainEvent/AddSubjectEvent.cs new file mode 100644 index 000000000..0a23e13c4 --- /dev/null +++ b/IRaCIS.Core.Domain/_DomainEvent/AddSubjectEvent.cs @@ -0,0 +1,12 @@ + +using IRaCIS.Core.Domain.BaseModel; + +namespace IRaCIS.Core.Domain; + +public class AddSubjectEvent : DomainEvent +{ + public Guid SubjectId { get; set; } + public Guid TrialId { get; set; } + + public Guid TrialSiteId { get; set; } +} diff --git a/IRaCIS.Core.Infra.EFCore/Interceptor/AddDomainEvent.cs b/IRaCIS.Core.Infra.EFCore/Interceptor/AddDomainEvent.cs new file mode 100644 index 000000000..5519ece20 --- /dev/null +++ b/IRaCIS.Core.Infra.EFCore/Interceptor/AddDomainEvent.cs @@ -0,0 +1,31 @@ + + +using IRaCIS.Core.Domain; +using IRaCIS.Core.Domain.Models; +using Microsoft.EntityFrameworkCore.ChangeTracking; + +namespace IRaCIS.Core.Infra.EFCore; + + + +public static class DBContext_Ext +{ + public static void AddDomainEvents(this DbContext context) + { + var changeTracker = context.ChangeTracker; + + // 遍历 ChangeTracker 中的实体 + foreach (var entry in changeTracker.Entries()) + { + var subject = entry.Entity; + + if (entry.State == EntityState.Added) + { + // 受试者添加 触发访视自动添加 + var addedEvent = new AddSubjectEvent { SubjectId = subject.Id, TrialId = subject.TrialId, TrialSiteId = subject.TrialSiteId }; + + subject.AddDomainEvent(addedEvent); + } + } + } +} \ No newline at end of file diff --git a/IRaCIS.Core.Infra.EFCore/Interceptor/AuditEntityInterceptor.cs b/IRaCIS.Core.Infra.EFCore/Interceptor/AuditEntityInterceptor.cs index c851f0f65..7c3b36322 100644 --- a/IRaCIS.Core.Infra.EFCore/Interceptor/AuditEntityInterceptor.cs +++ b/IRaCIS.Core.Infra.EFCore/Interceptor/AuditEntityInterceptor.cs @@ -22,6 +22,9 @@ public class AuditEntityInterceptor(IUserInfo _userInfo, ILogger> SavingChangesAsync(DbContextEventData eventData, InterceptionResult result, CancellationToken cancellationToken = default) { + //测试领域事件 + eventData.Context.AddDomainEvents(); + //审计时间 AuditEntities(eventData.Context); From 2461646d5f1232de402875e336889c6dcfec271a Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Fri, 27 Sep 2024 09:54:16 +0800 Subject: [PATCH 2/4] =?UTF-8?q?MassTransit=20=20Command=20=E6=B5=8B?= =?UTF-8?q?=E8=AF=95=E9=A2=84=E5=A4=87=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- IRaCIS.Core.API/Progranm.cs | 2 +- .../_ServiceExtensions/AutoMapperSetup.cs | 1 + ...nsumer.cs => AddSubjectTriggerConsumer.cs} | 6 +- IRaCIS.Core.Domain/BaseModel/DomainEvent.cs | 15 +++++ IRaCIS.Core.Domain/BaseModel/Entity.cs | 25 +++++++++ IRaCIS.Core.Domain/IRaCIS.Core.Domain.csproj | 4 ++ .../AddSubjectTriggerCommand.cs} | 5 +- .../{AddDomainEvent.cs => AddDomainExt.cs} | 15 ++++- .../Interceptor/AuditEntityInterceptor.cs | 55 ++++++++++++++++++- .../DispatchDomainEventsInterceptor.cs | 8 ++- 10 files changed, 125 insertions(+), 11 deletions(-) rename IRaCIS.Core.Application/MassTransit/Consumer/{AddSubjectConsumer.cs => AddSubjectTriggerConsumer.cs} (83%) rename IRaCIS.Core.Domain/{_DomainEvent/AddSubjectEvent.cs => _DomainCommand/AddSubjectTriggerCommand.cs} (63%) rename IRaCIS.Core.Infra.EFCore/Interceptor/{AddDomainEvent.cs => AddDomainExt.cs} (64%) diff --git a/IRaCIS.Core.API/Progranm.cs b/IRaCIS.Core.API/Progranm.cs index ef03b3be1..3a017e98b 100644 --- a/IRaCIS.Core.API/Progranm.cs +++ b/IRaCIS.Core.API/Progranm.cs @@ -155,7 +155,7 @@ builder.Services.AddMediator(cfg => builder.Services.AddMassTransit(cfg => { // 注册消费者 - cfg.AddConsumer(); // 替换为你的消费者类 + cfg.AddConsumer(); // 替换为你的消费者类 // 使用 InMemory 作为消息传递机制 cfg.UsingInMemory((context, cfg) => diff --git a/IRaCIS.Core.API/_ServiceExtensions/AutoMapperSetup.cs b/IRaCIS.Core.API/_ServiceExtensions/AutoMapperSetup.cs index 70ef3e5d5..788f420de 100644 --- a/IRaCIS.Core.API/_ServiceExtensions/AutoMapperSetup.cs +++ b/IRaCIS.Core.API/_ServiceExtensions/AutoMapperSetup.cs @@ -18,6 +18,7 @@ namespace IRaCIS.Core.API // 全局忽略 DomainEvents 属性 automapper.AddGlobalIgnore(nameof(Entity.DomainEvents)); + automapper.AddGlobalIgnore(nameof(Entity.DomainCommands)); #region 会使 IncludeMembers 失效 不能全局使用 //mapping an EntityFramework Core DbContext-object. diff --git a/IRaCIS.Core.Application/MassTransit/Consumer/AddSubjectConsumer.cs b/IRaCIS.Core.Application/MassTransit/Consumer/AddSubjectTriggerConsumer.cs similarity index 83% rename from IRaCIS.Core.Application/MassTransit/Consumer/AddSubjectConsumer.cs rename to IRaCIS.Core.Application/MassTransit/Consumer/AddSubjectTriggerConsumer.cs index f0c5e41ae..646a0b38d 100644 --- a/IRaCIS.Core.Application/MassTransit/Consumer/AddSubjectConsumer.cs +++ b/IRaCIS.Core.Application/MassTransit/Consumer/AddSubjectTriggerConsumer.cs @@ -6,13 +6,13 @@ using MassTransit; namespace IRaCIS.Core.Application.MassTransit.Consumer; -public class AddSubjectConsumer(IRepository _subjectVisitRepository, +public class AddSubjectTriggerConsumer(IRepository _subjectVisitRepository, IRepository _visitStageRepository, IRepository _trialRepository, - IMapper _mapper) : IConsumer + IMapper _mapper) : IConsumer { - public async Task Consume(ConsumeContext context) + public async Task Consume(ConsumeContext context) { var addSubjectEvent= context.Message; diff --git a/IRaCIS.Core.Domain/BaseModel/DomainEvent.cs b/IRaCIS.Core.Domain/BaseModel/DomainEvent.cs index 35964354e..95303ffc4 100644 --- a/IRaCIS.Core.Domain/BaseModel/DomainEvent.cs +++ b/IRaCIS.Core.Domain/BaseModel/DomainEvent.cs @@ -1,12 +1,27 @@ using System.ComponentModel; namespace IRaCIS.Core.Domain.BaseModel; + +/// +/// 事件 不影响数据库提交事务的,不会记录稽查 +/// +/// 比如 添加subject 自动添加访视,不适合作为事件,否则自动添加访视后,记录稽查,当前请求url 都不知道 +/// [Description("领域实体事件基类")] public abstract class DomainEvent { } +/// +/// 命令,触发一些操作,在当前事务一起提交 +/// +[Description("领域实体命令基类")] +public abstract class DomainCommand +{ + +} + public class FailedDomainEvent { public Guid Id { get; set; } diff --git a/IRaCIS.Core.Domain/BaseModel/Entity.cs b/IRaCIS.Core.Domain/BaseModel/Entity.cs index eecd81ff9..4aa529c86 100644 --- a/IRaCIS.Core.Domain/BaseModel/Entity.cs +++ b/IRaCIS.Core.Domain/BaseModel/Entity.cs @@ -44,6 +44,31 @@ public abstract class Entity : IEntity } #endregion + + #region 领域命令 当前事务一起处理的,触发操作 + + [JsonIgnore] + private readonly List _domainCommands = []; + + [JsonIgnore] + [NotMapped] + public IReadOnlyCollection DomainCommands => _domainCommands.AsReadOnly(); + public void AddDomainCommand(DomainCommand domainCommand) + { + _domainCommands.Add(domainCommand); + } + + public void RemoveDomainCommand(DomainCommand domainCommand) + { + _domainCommands.Remove(domainCommand); + } + + public void ClearDomainCommands() + { + _domainCommands.Clear(); + } + + #endregion } #region 减少实体属性,增加基类 diff --git a/IRaCIS.Core.Domain/IRaCIS.Core.Domain.csproj b/IRaCIS.Core.Domain/IRaCIS.Core.Domain.csproj index fefabf7ba..57b96fb35 100644 --- a/IRaCIS.Core.Domain/IRaCIS.Core.Domain.csproj +++ b/IRaCIS.Core.Domain/IRaCIS.Core.Domain.csproj @@ -19,4 +19,8 @@ + + + + diff --git a/IRaCIS.Core.Domain/_DomainEvent/AddSubjectEvent.cs b/IRaCIS.Core.Domain/_DomainCommand/AddSubjectTriggerCommand.cs similarity index 63% rename from IRaCIS.Core.Domain/_DomainEvent/AddSubjectEvent.cs rename to IRaCIS.Core.Domain/_DomainCommand/AddSubjectTriggerCommand.cs index 0a23e13c4..d2b7de732 100644 --- a/IRaCIS.Core.Domain/_DomainEvent/AddSubjectEvent.cs +++ b/IRaCIS.Core.Domain/_DomainCommand/AddSubjectTriggerCommand.cs @@ -3,7 +3,10 @@ using IRaCIS.Core.Domain.BaseModel; namespace IRaCIS.Core.Domain; -public class AddSubjectEvent : DomainEvent +/// +/// 添加Subject 触发命令 +/// +public class AddSubjectTriggerCommand : DomainCommand { public Guid SubjectId { get; set; } public Guid TrialId { get; set; } diff --git a/IRaCIS.Core.Infra.EFCore/Interceptor/AddDomainEvent.cs b/IRaCIS.Core.Infra.EFCore/Interceptor/AddDomainExt.cs similarity index 64% rename from IRaCIS.Core.Infra.EFCore/Interceptor/AddDomainEvent.cs rename to IRaCIS.Core.Infra.EFCore/Interceptor/AddDomainExt.cs index 5519ece20..0d724746a 100644 --- a/IRaCIS.Core.Infra.EFCore/Interceptor/AddDomainEvent.cs +++ b/IRaCIS.Core.Infra.EFCore/Interceptor/AddDomainExt.cs @@ -14,6 +14,15 @@ public static class DBContext_Ext { var changeTracker = context.ChangeTracker; + + } + + + + public static void AddDomainCommands(this DbContext context) + { + var changeTracker = context.ChangeTracker; + // 遍历 ChangeTracker 中的实体 foreach (var entry in changeTracker.Entries()) { @@ -22,10 +31,12 @@ public static class DBContext_Ext if (entry.State == EntityState.Added) { // 受试者添加 触发访视自动添加 - var addedEvent = new AddSubjectEvent { SubjectId = subject.Id, TrialId = subject.TrialId, TrialSiteId = subject.TrialSiteId }; + var addedEvent = new AddSubjectTriggerCommand { SubjectId = subject.Id, TrialId = subject.TrialId, TrialSiteId = subject.TrialSiteId }; - subject.AddDomainEvent(addedEvent); + subject.AddDomainCommand(addedEvent); } } } + + } \ No newline at end of file diff --git a/IRaCIS.Core.Infra.EFCore/Interceptor/AuditEntityInterceptor.cs b/IRaCIS.Core.Infra.EFCore/Interceptor/AuditEntityInterceptor.cs index 7c3b36322..370b76f02 100644 --- a/IRaCIS.Core.Infra.EFCore/Interceptor/AuditEntityInterceptor.cs +++ b/IRaCIS.Core.Infra.EFCore/Interceptor/AuditEntityInterceptor.cs @@ -2,6 +2,8 @@ using IRaCIS.Core.Domain.Models; using IRaCIS.Core.Domain.Share; using IRaCIS.Core.Infra.EFCore.Common; +using MassTransit; +using MassTransit.Transports; using Microsoft.EntityFrameworkCore.Diagnostics; using Microsoft.Extensions.Logging; using System.Data; @@ -9,7 +11,10 @@ using System.Data; namespace IRaCIS.Core.Infra.EFCore; -public class AuditEntityInterceptor(IUserInfo _userInfo, ILogger _logger) : SaveChangesInterceptor +public class AuditEntityInterceptor(IUserInfo _userInfo, + ILogger _logger + //,ISendEndpoint _sendEndpoint + ) : SaveChangesInterceptor { /// @@ -22,7 +27,12 @@ public class AuditEntityInterceptor(IUserInfo _userInfo, ILogger> SavingChangesAsync(DbContextEventData eventData, InterceptionResult result, CancellationToken cancellationToken = default) { - //测试领域事件 + //领域命令 (同一个事务提交的一些逻辑,类似Trigger 保存事务之前执行的一些逻辑) + eventData.Context.AddDomainCommands(); + + //DispatchDomainCommands(eventData.Context).GetAwaiter().GetResult(); + + //领域事件 eventData.Context.AddDomainEvents(); //审计时间 @@ -35,8 +45,18 @@ public class AuditEntityInterceptor(IUserInfo _userInfo, ILogger SavingChanges(DbContextEventData eventData, InterceptionResult result) { + //领域命令 (同一个事务提交的一些逻辑,类似Trigger 保存事务之前执行的一些逻辑) + eventData.Context.AddDomainCommands(); + + //领域事件 + eventData.Context.AddDomainEvents(); + + //审计时间 AuditEntities(eventData.Context); + //IRC稽查 放在savechange 之前 不影响之前的逻辑 + IRCDataInspection(eventData.Context); + return base.SavingChanges(eventData, result); } public void AuditEntities(DbContext? context) @@ -143,6 +163,11 @@ public class AuditEntityInterceptor(IUserInfo _userInfo, ILogger() + // .Where(e => e.Entity.DomainCommands.Any()) + // .Select(e => e.Entity) + // .ToList(); + + // var domainCommands = entities + // .SelectMany(e => e.DomainCommands) + // .ToList(); + + // entities.ForEach(e => e.ClearDomainCommands()); + + // foreach (var domainCommand in domainCommands) + // { + // await _sendEndpoint.Send(domainCommand.GetType(), domainCommand); + // } + //} + #endregion } \ No newline at end of file diff --git a/IRaCIS.Core.Infra.EFCore/Interceptor/DispatchDomainEventsInterceptor.cs b/IRaCIS.Core.Infra.EFCore/Interceptor/DispatchDomainEventsInterceptor.cs index d7f0ec974..195d1c710 100644 --- a/IRaCIS.Core.Infra.EFCore/Interceptor/DispatchDomainEventsInterceptor.cs +++ b/IRaCIS.Core.Infra.EFCore/Interceptor/DispatchDomainEventsInterceptor.cs @@ -1,4 +1,5 @@ -using IRaCIS.Core.Domain.Models; +using IRaCIS.Core.Domain; +using IRaCIS.Core.Domain.Models; using MassTransit; using Microsoft.EntityFrameworkCore.Diagnostics; using System.Data; @@ -48,7 +49,10 @@ namespace IRaCIS.Core.Infra.EFCore.Interceptor foreach (var domainEvent in domainEvents) { - await publishEndpoint.Publish(domainEvent); + //这种方式会导致消息没处理 + //await publishEndpoint.Publish(domainEvent); + + await publishEndpoint.Publish(domainEvent.GetType(), domainEvent); } } From da6746beea7a2ca4054b2c620a38b2665fbe56fa Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Fri, 27 Sep 2024 10:12:29 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E5=BD=B1=E5=93=8D=E7=AD=9B=E9=80=89?= =?UTF-8?q?=E8=BF=87=E6=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ImageAndDoc/DownloadAndUploadService.cs | 84 ++++++++++--------- 1 file changed, 46 insertions(+), 38 deletions(-) diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs index aae51c18c..2a07b7b93 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs @@ -117,7 +117,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc //要根据标准阅片顺序,确定是否查询单个任务的,还是查询所有的 var criterionInfo = await _readingQuestionCriterionTrialRepository.Where(t => t.Id == inQuery.TrialReadingCriterionId) - .Select(t => new { t.IsReadingTaskViewInOrder }).FirstNotNullAsync(); + .Select(t => new { t.IsReadingTaskViewInOrder }).FirstNotNullAsync(); var subjectCode = string.Empty; var subjectId = inQuery.SubjectId; @@ -129,9 +129,10 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc throw new Exception("无序阅片,前端参数传递错误"); } //考虑到一致性分析,必须要这个编号进行过滤 - var taskInfo = _visitTaskRepository.Where(t => t.Id == inQuery.VisitTaskId).Select(t => new { - SubjectCode= t.IsAnalysisCreate ? t.BlindSubjectCode : t.Subject.Code, - SubjectId= t.SubjectId, + var taskInfo = _visitTaskRepository.Where(t => t.Id == inQuery.VisitTaskId).Select(t => new + { + SubjectCode = t.IsAnalysisCreate ? t.BlindSubjectCode : t.Subject.Code, + SubjectId = t.SubjectId, }).FirstOrDefault(); subjectId = taskInfo.SubjectId; subjectCode = taskInfo.SubjectCode; @@ -658,7 +659,8 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc //考虑到一致性分析,必须要这个编号进行过滤 //医学审核查看下载按钮,这个时候需要知道医生 - var taskInfo = await _visitTaskRepository.Where(t => t.Id == inQuery.VisitTaskId).Select(t => new { + 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, @@ -847,7 +849,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc { throw new Exception("无序阅片,前端参数传递错误"); } - + } else { @@ -859,13 +861,14 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc //考虑到一致性分析,必须要这个编号进行过滤 subjectCode = inQuery.SubjectCode; } - + if (inQuery.VisitTaskId != null) { //考虑到一致性分析,必须要这个编号进行过滤 //医学审核查看下载按钮,这个时候需要知道医生 - var taskInfo = await _visitTaskRepository.Where(t => t.Id == inQuery.VisitTaskId).Select(t => new { + 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, @@ -1047,39 +1050,44 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc [HttpPost] public async Task GetTaskUploadedDicomStudyList(IRTaskUploadedDicomStudyQuery inQuery) { - var query = _taskStudyRepository.Where(t => t.VisitTaskId == inQuery.VisitTaskId).Select(t => new - { - StudyId = t.Id, - t.Modalities, - t.InstanceCount, - t.SeriesCount, - t.StudyCode, - SeriesList = t.SeriesList.OrderBy(s => s.SeriesNumber).ThenBy(s => s.SeriesTime).Select(u => new + var info = await _visitTaskRepository.Where(t => t.Id == inQuery.VisitTaskId) + .Select(t => new { t.TrialReadingCriterion.IsImageFilter, t.TrialReadingCriterion.CriterionModalitys }).FirstNotNullAsync(); + + var query = _taskStudyRepository.Where(t => t.VisitTaskId == inQuery.VisitTaskId) + .Where(t => info.IsImageFilter ? ("|" + info.CriterionModalitys + "|").Contains("|" + t.ModalityForEdit + "|") : true) + .Select(t => new { - u.SeriesTime, - u.InstanceCount, - u.ImageResizePath, - u.Modality, - u.Description, - u.SeriesInstanceUid, - u.SeriesNumber, - u.SliceThickness, - u.StudyInstanceUid, - - IsExistMutiFrames = u.InstanceList.Any(t => t.NumberOfFrames > 1), - - InstanceInfoList = u.InstanceList.OrderBy(t => t.InstanceNumber).Select(k => - new InstanceBasicInfo() + StudyId = t.Id, + t.Modalities, + t.InstanceCount, + t.SeriesCount, + t.StudyCode, + SeriesList = t.SeriesList.OrderBy(s => s.SeriesNumber).ThenBy(s => s.SeriesTime).Select(u => new { - Id = k.Id, - NumberOfFrames = k.NumberOfFrames, - HtmlPath = k.HtmlPath, - Path = k.Path, - InstanceNumber = k.InstanceNumber, + u.SeriesTime, + u.InstanceCount, + u.ImageResizePath, + u.Modality, + u.Description, + u.SeriesInstanceUid, + u.SeriesNumber, + u.SliceThickness, + u.StudyInstanceUid, - }).ToList() - }) - }); + IsExistMutiFrames = u.InstanceList.Any(t => t.NumberOfFrames > 1), + + InstanceInfoList = u.InstanceList.OrderBy(t => t.InstanceNumber).Select(k => + new InstanceBasicInfo() + { + Id = k.Id, + NumberOfFrames = k.NumberOfFrames, + HtmlPath = k.HtmlPath, + Path = k.Path, + InstanceNumber = k.InstanceNumber, + + }).ToList() + }) + }); var list = await query.ToListAsync(); return ResponseOutput.Ok(list); From 654fb7116b2f4c7fa15dd0a01f5ed68a100d3caf Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Fri, 27 Sep 2024 10:24:54 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E4=BF=AE=E6=94=B9bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/ImageAndDoc/DownloadAndUploadService.cs | 2 +- .../Interceptor/AuditEntityInterceptor.cs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs index 2a07b7b93..70e3455d0 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/DownloadAndUploadService.cs @@ -650,7 +650,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc [HttpPost] public async Task> GetIRUploadTaskNoneDicomStudyList(IRUploadStudyQuery inQuery) { - var subjectCode = string.Empty; + var subjectCode = inQuery.SubjectCode; var subjectId = inQuery.SubjectId; var doctorUserId = _userInfo.Id; diff --git a/IRaCIS.Core.Infra.EFCore/Interceptor/AuditEntityInterceptor.cs b/IRaCIS.Core.Infra.EFCore/Interceptor/AuditEntityInterceptor.cs index 370b76f02..68d3242a5 100644 --- a/IRaCIS.Core.Infra.EFCore/Interceptor/AuditEntityInterceptor.cs +++ b/IRaCIS.Core.Infra.EFCore/Interceptor/AuditEntityInterceptor.cs @@ -13,7 +13,7 @@ namespace IRaCIS.Core.Infra.EFCore; public class AuditEntityInterceptor(IUserInfo _userInfo, ILogger _logger - //,ISendEndpoint _sendEndpoint + //, IBus _bus ) : SaveChangesInterceptor { @@ -248,7 +248,7 @@ public class AuditEntityInterceptor(IUserInfo _userInfo, // foreach (var domainCommand in domainCommands) // { - // await _sendEndpoint.Send(domainCommand.GetType(), domainCommand); + // await _bus.Send(domainCommand.GetType(), domainCommand); // } //} #endregion