diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
index 1234e3753..a2ef8eae1 100644
--- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
+++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
@@ -937,6 +937,13 @@
+
+
+ 邮件事件消息列表
+
+
+
+
重新发布失败的事件消息
@@ -12734,6 +12741,22 @@
+
+
+ meditor send 的时候,请求流会先到消费者,返回后才会执行后续代码
+ publish 请求流不会先到消费者,发布后,直接执行后续代码
+
+
+
+
+
+
+ meditor send 的时候,请求流会先到消费者,返回后才会执行后续代码
+ publish 请求流不会先到消费者,发布后,直接执行后续代码
+
+
+
+
加急的医学反馈任务 通知MIM
diff --git a/IRaCIS.Core.Application/MassTransit/Consumer/SiteSurverEmailConsumer.cs b/IRaCIS.Core.Application/MassTransit/Consumer/SiteSurverEmailConsumer.cs
index 8829d3620..0719184d8 100644
--- a/IRaCIS.Core.Application/MassTransit/Consumer/SiteSurverEmailConsumer.cs
+++ b/IRaCIS.Core.Application/MassTransit/Consumer/SiteSurverEmailConsumer.cs
@@ -13,6 +13,7 @@ using MassTransit;
using Microsoft.AspNetCore.Components.Routing;
using Microsoft.Extensions.Options;
using MimeKit;
+using NPOI.SS.Formula.Functions;
using System;
using System.Collections.Generic;
using System.Globalization;
@@ -45,56 +46,62 @@ public class UserSiteSurveySubmitedEventConsumer(
var trialId = siteSurveyInfo.TrialId;
- var hasSPMOrCPM = await _trialSiteSurveyRepository.AnyAsync(t => t.TrialId == siteSurveyInfo.TrialId && t.Trial.TrialUserList.Any(u => u.User.UserTypeEnum == UserTypeEnum.SPM || u.User.UserTypeEnum == UserTypeEnum.CPM));
+ var trialUserList = await _trialSiteSurveyRepository.Where(t => t.TrialId == siteSurveyInfo.TrialId ).SelectMany(t=>t.Trial.TrialUserList)
+ .Where(t=> t.User.UserTypeEnum == UserTypeEnum.SPM || t.User.UserTypeEnum == UserTypeEnum.CPM || t.User.UserTypeEnum == UserTypeEnum.ProjectManager)
+ .Select(t=>new {t.User.FullName,t.User.EMail,t.User.UserTypeEnum}).ToListAsync();
+ var sPMOrCPMList = trialUserList.Where(t => t.UserTypeEnum == UserTypeEnum.SPM || t.UserTypeEnum == UserTypeEnum.CPM).ToList();
+ var pmList = trialUserList.Where(t => t.UserTypeEnum == UserTypeEnum.ProjectManager || t.UserTypeEnum == UserTypeEnum.APM).ToList();
var messageToSend = new MimeMessage();
+ var toUserName = string.Empty;
- var userName = siteSurveyInfo.UserName;
- var email = siteSurveyInfo.Email;
- var phone = siteSurveyInfo.Phone;
-
- if (hasSPMOrCPM)
+ //有SPM
+ if (sPMOrCPMList.Count>0)
{
- var user = await _userRepository.FirstOrDefaultAsync(t => t.Id == siteSurveyInfo.PreliminaryUserId);
+ foreach (var user in sPMOrCPMList)
+ {
+ messageToSend.To.Add(new MailboxAddress(user.FullName, user.EMail));
+ }
- userName = user.FullName;
- email = user.EMail;
- phone = user.Phone;
+ toUserName = string.Join('、', sPMOrCPMList.Select(t => t.FullName));
- messageToSend.To.Add(new MailboxAddress(String.Empty, user.EMail));
}
else
{
- messageToSend.To.Add(new MailboxAddress(String.Empty, siteSurveyInfo.Email));
+ foreach (var user in pmList)
+ {
+ messageToSend.To.Add(new MailboxAddress(user.FullName, user.EMail));
+ }
+
+ toUserName = string.Join('、', pmList.Select(t => t.FullName));
}
var trialInfo = await _trialRepository.FirstOrDefaultAsync(t => t.Id == trialId);
var siteInfo = await _trialSiteRepository.FirstOrDefaultAsync(t => t.TrialId == trialId && t.Id == siteSurveyInfo.TrialSiteId, true);
-
var companyName = isEn_US ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN;
-
Func<(string topicStr, string htmlBodyStr), (string topicStr, string htmlBodyStr)> emailConfigFunc = input =>
{
- var topicStr = string.Format(input.topicStr, companyName, trialInfo.ResearchProgramNo);
+ var topicStr = string.Format(input.topicStr, trialInfo.ResearchProgramNo);
var htmlBodyStr = string.Format(CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, input.htmlBodyStr),
-
+ toUserName,
siteInfo.TrialSiteCode,
siteInfo.TrialSiteAliasName,
- userName,
- email,
- phone,
+
+ siteSurveyInfo.UserName,
+ siteSurveyInfo.Email,
+ siteSurveyInfo.Phone,
_systemEmailConfig.SiteUrl
);
return (topicStr, htmlBodyStr);
};
- await CommonEmailHelper.GetEmailSubejctAndHtmlInfoAndBuildAsync(_emailNoticeConfigrepository, EmailBusinessScenario.SiteSurveyReject, messageToSend, emailConfigFunc);
+ await CommonEmailHelper.GetEmailSubejctAndHtmlInfoAndBuildAsync(_emailNoticeConfigrepository, EmailBusinessScenario.Approval_SubmitSiteSurvey, messageToSend, emailConfigFunc);
await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig);
diff --git a/IRaCIS.Core.Domain.Share/Common/EmailScenarioEnum.cs b/IRaCIS.Core.Domain.Share/Common/EmailScenarioEnum.cs
index fca247f42..64594296b 100644
--- a/IRaCIS.Core.Domain.Share/Common/EmailScenarioEnum.cs
+++ b/IRaCIS.Core.Domain.Share/Common/EmailScenarioEnum.cs
@@ -96,6 +96,146 @@ namespace IRaCIS.Core.Domain.Share
TrialSubjectVisitFeedBack = 28,
+ ///
+ /// 入组确认-质控任务待领取
+ ///
+ EligibilityVerification_PendingClaim = 29,
+
+ ///
+ /// 入组确认-质控任务待审核
+ ///
+ EligibilityVerification_PendingImageQC = 30,
+
+ ///
+ /// PD确认-质控任务待领取
+ ///
+ PDVerification_PendingImageQCClaim = 31,
+
+ ///
+ /// PD确认-质控任务待审核
+ ///
+ PDVerification_PendingImageQC = 32,
+
+ ///
+ /// 入组确认-QC质疑待处理
+ ///
+ EligibilityVerification_Pending = 33,
+
+ ///
+ /// 审批(提交调研表)
+ ///
+ Approval_SubmitSiteSurvey = 34,
+
+ ///
+ /// 审批(更新调研表)
+ ///
+ Approval_UpdateSiteSurvey = 35,
+
+ ///
+ /// 中心调研审批
+ ///
+ SiteSurveyApproval = 36,
+
+ ///
+ /// 入组确认-QC质疑待处理
+ ///
+ EligibilityVerification_UnderQCQuery = 37,
+
+ ///
+ /// PD确认-QC质疑待处理
+ ///
+ PDVerification_UnderQCQuery = 38,
+
+ ///
+ /// 入组确认-影像质疑待处理
+ ///
+ EligibilityVerification_ImageQuery = 39,
+
+ ///
+ /// PD确认-影像质疑待处理
+ ///
+ PDVerification_ImageQuery = 40,
+
+ ///
+ /// 入组确认-核查质疑待处理
+ ///
+ EligibilityVerification_UnderDR = 41,
+
+ ///
+ /// PD确认-核查质疑待处理
+ ///
+ PDVerification_UnderDR = 42,
+
+ ///
+ /// 加急阅片
+ ///
+ ExpeditedReading = 43,
+
+ ///
+ /// 加急医学反馈
+ ///
+ ExpeditedMedicalQCToIR = 44,
+
+ ///
+ /// 入组确认-医学审核
+ ///
+ EligibilityVerification_MedicalQC = 45,
+
+ ///
+ /// PD确认-医学审核
+ ///
+ PDVerification_MedicalQC = 46,
+
+ ///
+ /// 入组确认-医学反馈
+ ///
+ EligibilityVerification_MedicalQCFeedback = 47,
+
+ ///
+ /// PD确认-医学反馈
+ ///
+ PDVerification_MedicalQCFeedback = 48,
+
+ ///
+ /// 入组确认-一致性核查
+ ///
+ EligibilityVerification_DR = 49,
+
+ ///
+ /// PD确认-一致性核查
+ ///
+ PDVerification_DR = 50,
+
+ ///
+ /// 入组确认-核查质疑
+ ///
+ EligibilityVerification_UnderDRForPMOrAPM = 51,
+
+ ///
+ /// PD确认-核查质疑
+ ///
+ PDVerification_UnderDRForPMOrAPM = 52,
+
+ ///
+ /// 阅片人重阅审批
+ ///
+ ReReadFromIRApproval = 53,
+
+ ///
+ /// 项目组申请重阅审批
+ ///
+ ReReadFromPMApproval = 54,
+
+ ///
+ /// 入组确认-加急医学反馈回复
+ ///
+ EligibilityVerification_ExpeditedMedicalQCResponse = 55,
+
+ ///
+ /// PD确认-加急医学反馈回复
+ ///
+ PDVerification_ExpeditedMedicalQCResponse = 56
+
}
diff --git a/IRaCIS.Core.Infra.EFCore/Interceptor/AddDomainExt.cs b/IRaCIS.Core.Infra.EFCore/Interceptor/AddDomainExt.cs
index 3a3ce07b2..080570706 100644
--- a/IRaCIS.Core.Infra.EFCore/Interceptor/AddDomainExt.cs
+++ b/IRaCIS.Core.Infra.EFCore/Interceptor/AddDomainExt.cs
@@ -48,6 +48,7 @@ public static class DBContext_Ext
{
trialSiteSurvey.AddDomainEvent(new SiteSurverRejectedEvent() { TrialSiteSurveyId = trialSiteSurvey.Id, IsHaveSPMOrCPM = trialSiteSurvey.State == TrialSiteSurveyEnum.CRCSubmitted });
}
+ //SPM 驳回
else if (trialSiteSurvey.State == TrialSiteSurveyEnum.ToSubmit && originState == TrialSiteSurveyEnum.CRCSubmitted)
{
trialSiteSurvey.AddDomainEvent(new SiteSurverRejectedEvent() { TrialSiteSurveyId = trialSiteSurvey.Id, IsHaveSPMOrCPM = true });