diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml index 0eacc2605..fffbbb828 100644 --- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml +++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml @@ -14204,7 +14204,7 @@ 用户提交 发送邮件 通知SPM 或者PM - + 用户提交 发送邮件 通知SPM 或者PM @@ -14214,7 +14214,7 @@ 调研表初审通过,进行复审发送邮件 - + 调研表初审通过,进行复审发送邮件 @@ -14224,7 +14224,7 @@ 调研表驳回发送邮件 之前已有,需要迁移过来 - + 调研表驳回发送邮件 之前已有,需要迁移过来 diff --git a/IRaCIS.Core.Application/MassTransit/Consumer/SiteSurverEmailConsumer.cs b/IRaCIS.Core.Application/MassTransit/Consumer/SiteSurverEmailConsumer.cs index dbedc2915..4fedca631 100644 --- a/IRaCIS.Core.Application/MassTransit/Consumer/SiteSurverEmailConsumer.cs +++ b/IRaCIS.Core.Application/MassTransit/Consumer/SiteSurverEmailConsumer.cs @@ -134,7 +134,7 @@ public class SiteSurveySPMSubmitedEventConsumer( IRepository _trialUserRoleRepository, IRepository _trialSiteRepository, IRepository _trialSiteSurveyRepository, - IRepository _emailNoticeConfigrepository, + IRepository _trialEmailNoticeConfigrepository, IOptionsMonitor systemEmailConfig) : IConsumer { private readonly SystemEmailSendConfig _systemEmailConfig = systemEmailConfig.CurrentValue; @@ -149,58 +149,63 @@ public class SiteSurveySPMSubmitedEventConsumer( var trialId = siteSurveyInfo.TrialId; + var scenario = EmailBusinessScenario.Approval_SubmitSiteSurvey; - - - var messageToSend = new MimeMessage(); - - var trialUserList = _trialUserRoleRepository.Where(t => t.TrialId == trialId) - .Where(t => t.UserRole.UserTypeEnum == UserTypeEnum.SPM || t.UserRole.UserTypeEnum == UserTypeEnum.CPM || t.UserRole.UserTypeEnum == UserTypeEnum.ProjectManager || t.UserRole.UserTypeEnum == UserTypeEnum.APM) - .Select(t => new { t.UserRole.IdentityUser.EMail, t.UserRole.FullName, t.UserRole.UserTypeEnum }).ToList(); - - var sPMOrCPMList = trialUserList.Where(t => t.UserTypeEnum == UserTypeEnum.SPM || t.UserTypeEnum == UserTypeEnum.CPM).ToList(); - var pmAndAPMList = trialUserList.Where(t => t.UserTypeEnum == UserTypeEnum.ProjectManager || t.UserTypeEnum == UserTypeEnum.APM).ToList(); - - var toUserName = string.Empty; - - foreach (var item in pmAndAPMList) + if (_trialEmailNoticeConfigrepository.Where(t => t.BusinessScenarioEnum == scenario && t.IsAutoSend && t.IsEnable).Any()) { - messageToSend.To.Add(new MailboxAddress(item.FullName, item.EMail)); + var messageToSend = new MimeMessage(); - toUserName = string.Join('、', pmAndAPMList.Select(t => t.FullName)); + var trialUserList = _trialUserRoleRepository.Where(t => t.TrialId == trialId) + .Where(t => t.UserRole.UserTypeEnum == UserTypeEnum.SPM || t.UserRole.UserTypeEnum == UserTypeEnum.CPM || t.UserRole.UserTypeEnum == UserTypeEnum.ProjectManager || t.UserRole.UserTypeEnum == UserTypeEnum.APM) + .Select(t => new { t.UserRole.IdentityUser.EMail, t.UserRole.FullName, t.UserRole.UserTypeEnum }).ToList(); + + var sPMOrCPMList = trialUserList.Where(t => t.UserTypeEnum == UserTypeEnum.SPM || t.UserTypeEnum == UserTypeEnum.CPM).ToList(); + var pmAndAPMList = trialUserList.Where(t => t.UserTypeEnum == UserTypeEnum.ProjectManager || t.UserTypeEnum == UserTypeEnum.APM).ToList(); + + var toUserName = string.Empty; + + foreach (var item in pmAndAPMList) + { + messageToSend.To.Add(new MailboxAddress(item.FullName, item.EMail)); + + toUserName = string.Join('、', pmAndAPMList.Select(t => t.FullName)); + } + + //发件地址 + messageToSend.From.Add(new MailboxAddress(_systemEmailConfig.FromName, _systemEmailConfig.FromEmail)); + + 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, trialInfo.ResearchProgramNo); + var htmlBodyStr = string.Format(CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, input.htmlBodyStr), + toUserName, + siteInfo.TrialSiteCode, + siteInfo.TrialSiteAliasName, + + siteSurveyInfo.UserName, + siteSurveyInfo.Email, + siteSurveyInfo.Phone, + _systemEmailConfig.SiteUrl + ); + + return (topicStr, htmlBodyStr); + }; + + await CommonEmailHelper.GetTrialEmailSubejctAndHtmlInfoAndBuildAsync(_trialEmailNoticeConfigrepository, EmailBusinessScenario.Approval_SubmitSiteSurvey, messageToSend, emailConfigFunc); + + await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig); } - //发件地址 - messageToSend.From.Add(new MailboxAddress(_systemEmailConfig.FromName, _systemEmailConfig.FromEmail)); - 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, trialInfo.ResearchProgramNo); - var htmlBodyStr = string.Format(CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, input.htmlBodyStr), - toUserName, - siteInfo.TrialSiteCode, - siteInfo.TrialSiteAliasName, - - siteSurveyInfo.UserName, - siteSurveyInfo.Email, - siteSurveyInfo.Phone, - _systemEmailConfig.SiteUrl - ); - - return (topicStr, htmlBodyStr); - }; - - await CommonEmailHelper.GetEmailSubejctAndHtmlInfoAndBuildAsync(_emailNoticeConfigrepository, EmailBusinessScenario.Approval_SubmitSiteSurvey, messageToSend, emailConfigFunc); - - await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig); + } } @@ -213,7 +218,7 @@ public class SiteSurverRejectedEventConsumer( IRepository _trialRepository, IRepository _trialSiteRepository, IRepository _trialSiteSurveyRepository, - IRepository _emailNoticeConfigrepository, + IRepository _trialEmailNoticeConfigrepository, IOptionsMonitor systemEmailConfig ) : IConsumer { @@ -225,83 +230,90 @@ public class SiteSurverRejectedEventConsumer( var trialSiteSurveyId = context.Message.TrialSiteSurveyId; - var siteSurveyInfo = _trialSiteSurveyRepository.Where(t => t.Id == trialSiteSurveyId).FirstOrDefault().IfNullThrowException(); + var scenario = EmailBusinessScenario.Approval_SubmitSiteSurvey; - var trialId = siteSurveyInfo.TrialId; - - var messageToSend = new MimeMessage(); - - var toUserName = siteSurveyInfo.UserName; - - if (context.Message.IsHaveSPMOrCPM) + if (_trialEmailNoticeConfigrepository.Where(t => t.BusinessScenarioEnum == scenario && t.IsAutoSend && t.IsEnable).Any()) { - //PM 驳回到SPM - if (siteSurveyInfo.State == TrialSiteSurveyEnum.CRCSubmitted) + var siteSurveyInfo = _trialSiteSurveyRepository.Where(t => t.Id == trialSiteSurveyId).FirstOrDefault().IfNullThrowException(); + + var trialId = siteSurveyInfo.TrialId; + + var messageToSend = new MimeMessage(); + + var toUserName = siteSurveyInfo.UserName; + + if (context.Message.IsHaveSPMOrCPM) { - //var user = await _userRoleRepository.FirstOrDefaultAsync(t => t.Id == siteSurveyInfo.PreliminaryUserId); - - //name = user.FullName; - - var sPMOrCPMList = _trialUserRoleRepository.Where(t => t.TrialId == trialId) - .Where(t => t.UserRole.UserTypeEnum == UserTypeEnum.SPM || t.UserRole.UserTypeEnum == UserTypeEnum.CPM) - .Select(t => new { t.UserRole.IdentityUser.EMail, t.UserRole.FullName, t.UserRole.UserTypeEnum }).ToList(); - - - foreach (var user in sPMOrCPMList) + //PM 驳回到SPM + if (siteSurveyInfo.State == TrialSiteSurveyEnum.CRCSubmitted) { - messageToSend.To.Add(new MailboxAddress(user.FullName, user.EMail)); + //var user = await _userRoleRepository.FirstOrDefaultAsync(t => t.Id == siteSurveyInfo.PreliminaryUserId); + + //name = user.FullName; + + var sPMOrCPMList = _trialUserRoleRepository.Where(t => t.TrialId == trialId) + .Where(t => t.UserRole.UserTypeEnum == UserTypeEnum.SPM || t.UserRole.UserTypeEnum == UserTypeEnum.CPM) + .Select(t => new { t.UserRole.IdentityUser.EMail, t.UserRole.FullName, t.UserRole.UserTypeEnum }).ToList(); + + + foreach (var user in sPMOrCPMList) + { + messageToSend.To.Add(new MailboxAddress(user.FullName, user.EMail)); + } + + toUserName = string.Join('、', sPMOrCPMList.Select(t => t.FullName)); + + } + //SPM 驳回到CRC + else if (siteSurveyInfo.State == TrialSiteSurveyEnum.ToSubmit) + { + messageToSend.To.Add(new MailboxAddress(toUserName, siteSurveyInfo.Email)); } - toUserName = string.Join('、', sPMOrCPMList.Select(t => t.FullName)); - } - //SPM 驳回到CRC - else if (siteSurveyInfo.State == TrialSiteSurveyEnum.ToSubmit) + else { - messageToSend.To.Add(new MailboxAddress(toUserName, siteSurveyInfo.Email)); + //没有SPM PM驳回到CRC + + messageToSend.To.Add(new MailboxAddress(String.Empty, siteSurveyInfo.Email)); } - } - else - { - //没有SPM PM驳回到CRC + //发件地址 + messageToSend.From.Add(new MailboxAddress(_systemEmailConfig.FromName, _systemEmailConfig.FromEmail)); - messageToSend.To.Add(new MailboxAddress(String.Empty, siteSurveyInfo.Email)); + + 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, trialInfo.ResearchProgramNo); + var htmlBodyStr = string.Format(CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, input.htmlBodyStr), + toUserName, + trialInfo.TrialCode, + trialInfo.ResearchProgramNo, + trialInfo.ExperimentName, + siteInfo.TrialSiteCode, + siteInfo.TrialSiteAliasName, + siteSurveyInfo.LatestBackReason, + _systemEmailConfig.SiteUrl, + (siteSurveyInfo.State == TrialSiteSurveyEnum.ToSubmit ? "inline - block" : "none") + ); + + return (topicStr, htmlBodyStr); + }; + + await CommonEmailHelper.GetTrialEmailSubejctAndHtmlInfoAndBuildAsync(_trialEmailNoticeConfigrepository, EmailBusinessScenario.SiteSurveyReject, messageToSend, emailConfigFunc); + + await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig); } - //发件地址 - messageToSend.From.Add(new MailboxAddress(_systemEmailConfig.FromName, _systemEmailConfig.FromEmail)); - - - 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, trialInfo.ResearchProgramNo); - var htmlBodyStr = string.Format(CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, input.htmlBodyStr), - toUserName, - trialInfo.TrialCode, - trialInfo.ResearchProgramNo, - trialInfo.ExperimentName, - siteInfo.TrialSiteCode, - siteInfo.TrialSiteAliasName, - siteSurveyInfo.LatestBackReason, - _systemEmailConfig.SiteUrl, - (siteSurveyInfo.State == TrialSiteSurveyEnum.ToSubmit ? "inline - block" : "none") - ); - - return (topicStr, htmlBodyStr); - }; - - await CommonEmailHelper.GetEmailSubejctAndHtmlInfoAndBuildAsync(_emailNoticeConfigrepository, EmailBusinessScenario.SiteSurveyReject, messageToSend, emailConfigFunc); - - await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig); + }