From 2ee34b8e7c5a02e9fb6fa8f5e7a81adeda99126e Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Fri, 11 Oct 2024 14:35:53 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A2=86=E5=9F=9F=E4=BA=8B=E4=BB=B6=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Interceptor/AddDomainExt.cs | 134 ++++++++++-------- .../Interceptor/AuditEntityInterceptor.cs | 2 +- .../DispatchDomainEventsInterceptor.cs | 2 +- 3 files changed, 75 insertions(+), 63 deletions(-) diff --git a/IRaCIS.Core.Infra.EFCore/Interceptor/AddDomainExt.cs b/IRaCIS.Core.Infra.EFCore/Interceptor/AddDomainExt.cs index 9086b2510..45d8f4467 100644 --- a/IRaCIS.Core.Infra.EFCore/Interceptor/AddDomainExt.cs +++ b/IRaCIS.Core.Infra.EFCore/Interceptor/AddDomainExt.cs @@ -50,7 +50,7 @@ public static class DBContext_Ext } //添加进记录 - eventStoreList.AddRange(trialSiteSurvey.DomainEvents.Select(t => new EventStoreRecord() { Id=t.EventId, EventType = t.GetType().Name, EventData = t.ToJsonStr() })); + eventStoreList.AddRange(trialSiteSurvey.DomainEvents.Select(t => new EventStoreRecord() { Id = t.EventId, EventType = t.GetType().Name, EventData = t.ToJsonStr() })); } @@ -63,17 +63,13 @@ public static class DBContext_Ext { var subjectVisit = entry.Entity; - ////跟踪的方式查询 不会查询数据库多次 - //var findTrial = dbContext.Trial.Find(subjectVisit.TrialId); + var originSubmitState = entry.Property(p => p.SubmitState).OriginalValue; + var originAuditState = entry.Property(p => p.AuditState).OriginalValue; + var originCheckState = entry.Property(p => p.CheckState).OriginalValue; //入组或者PD 才执行下面的逻辑 - if (/*findTrial != null && findTrial.IsEnrollementQualificationConfirm && findTrial.IsPDProgressView && */ - (subjectVisit.IsEnrollmentConfirm || subjectVisit.PDState == PDStateEnum.PDProgress)) + if ((subjectVisit.IsEnrollmentConfirm || subjectVisit.PDState == PDStateEnum.PDProgress)) { - var originSubmitState = entry.Property(p => p.SubmitState).OriginalValue; - var originAuditState = entry.Property(p => p.AuditState).OriginalValue; - var originCheckState = entry.Property(p => p.CheckState).OriginalValue; - //质控状态变为待审核的时候 if (originSubmitState == SubmitStateEnum.ToSubmit && subjectVisit.SubmitState == SubmitStateEnum.Submitted && @@ -102,9 +98,8 @@ public static class DBContext_Ext { var qCChallengeDialog = entry.Entity; - //跟踪的方式查询 不会查询数据库多次 - var findSubjectVisit = dbContext.SubjectVisit.Find(qCChallengeDialog.SubjectVisitId).IfNullThrowException(); - //var findTrial = dbContext.Trial.Find(findSubjectVisit.TrialId); + var findSubjectVisit = dbContext.SubjectVisit.Where(t => t.Id == qCChallengeDialog.SubjectVisitId) + .Select(t => new { IsEnrollmentConfirm = t.IsEnrollmentConfirm, PDState = t.PDState, t.Id, t.TrialId }).FirstOrDefault().IfNullThrowException(); //入组或者PD 才执行下面的逻辑 if ((findSubjectVisit.IsEnrollmentConfirm || findSubjectVisit.PDState == PDStateEnum.PDProgress)) @@ -122,7 +117,7 @@ public static class DBContext_Ext } //添加进记录 - eventStoreList.AddRange(qCChallengeDialog.DomainEvents.Select(t => new EventStoreRecord() {Id = t.EventId, EventType = t.GetType().Name, EventData = t.ToJsonStr() })); + eventStoreList.AddRange(qCChallengeDialog.DomainEvents.Select(t => new EventStoreRecord() { Id = t.EventId, EventType = t.GetType().Name, EventData = t.ToJsonStr() })); } } @@ -131,8 +126,8 @@ public static class DBContext_Ext { var checkChallengeDialog = entry.Entity; - //跟踪的方式查询 不会查询数据库多次 - var findSubjectVisit = dbContext.SubjectVisit.Find(checkChallengeDialog.SubjectVisitId).IfNullThrowException(); + var findSubjectVisit = dbContext.SubjectVisit.Where(t => t.Id == checkChallengeDialog.SubjectVisitId) + .Select(t => new { IsEnrollmentConfirm = t.IsEnrollmentConfirm, PDState = t.PDState, t.Id, t.TrialId }).FirstOrDefault().IfNullThrowException(); //入组或者PD 才执行下面的逻辑 if ((findSubjectVisit.IsEnrollmentConfirm || findSubjectVisit.PDState == PDStateEnum.PDProgress)) @@ -159,34 +154,35 @@ public static class DBContext_Ext { var taskMedicalReview = entry.Entity; - //跟踪的方式查询 不会查询数据库多次 - var findVisitTask = dbContext.VisitTask.Find(taskMedicalReview.VisitTaskId).IfNullThrowException(); - - var findSubjectVisit = new SubjectVisit(); - if (findVisitTask.SourceSubjectVisitId != null) + if (entry.State == EntityState.Added) { - findSubjectVisit = dbContext.SubjectVisit.Find(findVisitTask.SourceSubjectVisitId); - } - else - { - var readMoudule = dbContext.ReadModule.Find(findVisitTask.SouceReadModuleId); - findSubjectVisit = dbContext.SubjectVisit.Find(readMoudule.SubjectVisitId); - } + var findVisitTask = dbContext.VisitTask.Where(t => t.Id == taskMedicalReview.VisitTaskId).Select(t => new { t.SourceSubjectVisitId, t.SouceReadModuleId }).FirstOrDefault().IfNullThrowException(); - - //入组或者PD 才执行下面的逻辑 - if (findSubjectVisit.IsEnrollmentConfirm || findSubjectVisit.PDState == PDStateEnum.PDProgress) - { - - if (entry.State == EntityState.Added) + var findSubjectVisit = new EnrollmentConfirmAndPD(); + if (findVisitTask.SourceSubjectVisitId != null) { - taskMedicalReview.AddDomainEvent(new UrgentMedicalReviewAddedEvent() { MedicalReviewId = taskMedicalReview.Id, VisitTaskId = taskMedicalReview.VisitTaskId }); + findSubjectVisit = dbContext.SubjectVisit.Where(t => t.Id == findVisitTask.SourceSubjectVisitId) + .Select(t => new EnrollmentConfirmAndPD { IsEnrollmentConfirm = t.IsEnrollmentConfirm, PDState = t.PDState }).FirstOrDefault(); + } + else + { + var subjectVisitId = dbContext.ReadModule.Where(t => t.Id == findVisitTask.SouceReadModuleId).Select(t => t.SubjectVisitId).FirstOrDefault(); + + findSubjectVisit = dbContext.SubjectVisit.Where(t => t.Id == subjectVisitId) + .Select(t => new EnrollmentConfirmAndPD { IsEnrollmentConfirm = t.IsEnrollmentConfirm, PDState = t.PDState }).FirstOrDefault(); } - //添加进记录 - eventStoreList.AddRange(taskMedicalReview.DomainEvents.Select(t => new EventStoreRecord() { Id = t.EventId, EventType = t.GetType().Name, EventData = t.ToJsonStr() })); - } + //入组或者PD 才执行下面的逻辑 + if (findSubjectVisit.IsEnrollmentConfirm || findSubjectVisit.PDState == PDStateEnum.PDProgress) + { + + taskMedicalReview.AddDomainEvent(new UrgentMedicalReviewAddedEvent() { MedicalReviewId = taskMedicalReview.Id, VisitTaskId = taskMedicalReview.VisitTaskId }); + + //添加进记录 + eventStoreList.AddRange(taskMedicalReview.DomainEvents.Select(t => new EventStoreRecord() { Id = t.EventId, EventType = t.GetType().Name, EventData = t.ToJsonStr() })); + } + } } //医学反馈 @@ -194,17 +190,22 @@ public static class DBContext_Ext { var readingMedicalReviewDialog = entry.Entity; - //跟踪的方式查询 不会查询数据库多次 - var findVisitTask = dbContext.VisitTask.Find(readingMedicalReviewDialog.VisitTaskId).IfNullThrowException(); - var findSubjectVisit = new SubjectVisit(); + + + var findVisitTask = dbContext.VisitTask.Where(t => t.Id == readingMedicalReviewDialog.VisitTaskId).Select(t => new { t.SourceSubjectVisitId, t.SouceReadModuleId }).FirstOrDefault().IfNullThrowException(); + + var findSubjectVisit = new EnrollmentConfirmAndPD(); if (findVisitTask.SourceSubjectVisitId != null) { - findSubjectVisit = dbContext.SubjectVisit.Find(findVisitTask.SourceSubjectVisitId); + findSubjectVisit = dbContext.SubjectVisit.Where(t => t.Id == findVisitTask.SourceSubjectVisitId) + .Select(t => new EnrollmentConfirmAndPD { IsEnrollmentConfirm = t.IsEnrollmentConfirm, PDState = t.PDState }).FirstOrDefault(); } else { - var readMoudule = dbContext.ReadModule.Find(findVisitTask.SouceReadModuleId); - findSubjectVisit = dbContext.SubjectVisit.Find(readMoudule.SubjectVisitId); + var subjectVisitId = dbContext.ReadModule.Where(t => t.Id == findVisitTask.SouceReadModuleId).Select(t => t.SubjectVisitId).FirstOrDefault(); + + findSubjectVisit = dbContext.SubjectVisit.Where(t => t.Id == subjectVisitId) + .Select(t => new EnrollmentConfirmAndPD { IsEnrollmentConfirm = t.IsEnrollmentConfirm, PDState = t.PDState }).FirstOrDefault(); } //入组或者PD 才执行下面的逻辑 @@ -231,39 +232,50 @@ public static class DBContext_Ext { var visitTask = entry.Entity; - var findSubjectVisit = new SubjectVisit(); - if (visitTask.SourceSubjectVisitId != null) - { - findSubjectVisit = dbContext.SubjectVisit.Find(visitTask.SourceSubjectVisitId).IfNullThrowException(); - } - else - { - var readMoudule = dbContext.ReadModule.Find(visitTask.SouceReadModuleId).IfNullThrowException(); - findSubjectVisit = dbContext.SubjectVisit.Find(readMoudule.SubjectVisitId).IfNullThrowException(); - } + var originReReadingApplyState = entry.Property(p => p.ReReadingApplyState).OriginalValue; - //入组或者PD 才执行下面的逻辑 - if (findSubjectVisit.IsEnrollmentConfirm || findSubjectVisit.PDState == PDStateEnum.PDProgress) + if (originReReadingApplyState == ReReadingApplyState.Default && visitTask.ReReadingApplyState == ReReadingApplyState.DocotorHaveApplyed) { - var originReReadingApplyState = entry.Property(p => p.ReReadingApplyState).OriginalValue; + var findSubjectVisit = new EnrollmentConfirmAndPD(); - if (originReReadingApplyState == ReReadingApplyState.Default && visitTask.ReReadingApplyState == ReReadingApplyState.DocotorHaveApplyed) + if (visitTask.SourceSubjectVisitId != null) { - visitTask.AddDomainEvent(new UrgentIRApplyedReReading() { VisitTaskId = visitTask.Id }); + findSubjectVisit = dbContext.SubjectVisit.Where(t => t.Id == visitTask.SourceSubjectVisitId) + .Select(t => new EnrollmentConfirmAndPD { IsEnrollmentConfirm = t.IsEnrollmentConfirm, PDState = t.PDState }).FirstOrDefault(); + } + else + { + var subjectVisitId = dbContext.ReadModule.Where(t => t.Id == visitTask.SouceReadModuleId).Select(t => t.SubjectVisitId).FirstOrDefault(); + + findSubjectVisit = dbContext.SubjectVisit.Where(t => t.Id == subjectVisitId) + .Select(t => new EnrollmentConfirmAndPD { IsEnrollmentConfirm = t.IsEnrollmentConfirm, PDState = t.PDState }).FirstOrDefault(); } - //添加进记录 - eventStoreList.AddRange(visitTask.DomainEvents.Select(t => new EventStoreRecord() { Id = t.EventId, EventType = t.GetType().Name, EventData = t.ToJsonStr() })); + //入组或者PD 才执行下面的逻辑 + if (findSubjectVisit.IsEnrollmentConfirm || findSubjectVisit.PDState == PDStateEnum.PDProgress) + { + + visitTask.AddDomainEvent(new UrgentIRApplyedReReading() { VisitTaskId = visitTask.Id }); + + //添加进记录 + eventStoreList.AddRange(visitTask.DomainEvents.Select(t => new EventStoreRecord() { Id = t.EventId, EventType = t.GetType().Name, EventData = t.ToJsonStr() })); + } } } - #endregion //跟随事务一起保存数据库 dbContext.EventStoreRecord.AddRange(eventStoreList); } + + public class EnrollmentConfirmAndPD + { + public bool IsEnrollmentConfirm { get; set; } + + public PDStateEnum PDState { get; set; } + } #region 暂时废弃 /// /// 暂时废弃,没有场景使用 diff --git a/IRaCIS.Core.Infra.EFCore/Interceptor/AuditEntityInterceptor.cs b/IRaCIS.Core.Infra.EFCore/Interceptor/AuditEntityInterceptor.cs index 167f8aa7e..bb37a9a52 100644 --- a/IRaCIS.Core.Infra.EFCore/Interceptor/AuditEntityInterceptor.cs +++ b/IRaCIS.Core.Infra.EFCore/Interceptor/AuditEntityInterceptor.cs @@ -48,7 +48,7 @@ public class AuditEntityInterceptor(IUserInfo _userInfo, //}; //领域事件 - //eventData.Context.AddDomainEvents(); + eventData.Context.AddDomainEvents(); //审计时间 AuditEntities(eventData.Context); diff --git a/IRaCIS.Core.Infra.EFCore/Interceptor/DispatchDomainEventsInterceptor.cs b/IRaCIS.Core.Infra.EFCore/Interceptor/DispatchDomainEventsInterceptor.cs index 993a7bdaa..a89eaacdd 100644 --- a/IRaCIS.Core.Infra.EFCore/Interceptor/DispatchDomainEventsInterceptor.cs +++ b/IRaCIS.Core.Infra.EFCore/Interceptor/DispatchDomainEventsInterceptor.cs @@ -60,7 +60,7 @@ namespace IRaCIS.Core.Infra.EFCore.Interceptor if (domainEvent.IsScheduleEvent) { - await _scheduler.SchedulePublish(DateTime.Now.AddSeconds(domainEvent.DelaySeconds), domainEvent); + await _scheduler.SchedulePublish(DateTime.Now.AddSeconds(domainEvent.DelaySeconds), (object)domainEvent); } await _mediator.Publish(domainEvent.GetType(), domainEvent);