diff --git a/IRaCIS.Core.Application/MassTransit/Consumer/CommonEmailHelper.cs b/IRaCIS.Core.Application/MassTransit/Consumer/CommonEmailHelper.cs index 449fea5a4..c175b10d1 100644 --- a/IRaCIS.Core.Application/MassTransit/Consumer/CommonEmailHelper.cs +++ b/IRaCIS.Core.Application/MassTransit/Consumer/CommonEmailHelper.cs @@ -23,7 +23,8 @@ public static class CommonEmailHelper if (configInfo == null) { - throw new BusinessValidationFailedException("系统未找到当前场景邮件配置信息,请联系运维人员核查"); + //"系统未找到当前场景邮件配置信息,请联系运维人员核查" + throw new BusinessValidationFailedException(I18n.T("CommonEmail_NotFoundConfig")); } @@ -36,8 +37,9 @@ public static class CommonEmailHelper } catch (Exception ex) { + //"邮件模板内容有误,填充内容出现问题,请联系运维人员核查" - throw new BusinessValidationFailedException("邮件模板内容有误,填充内容出现问题,请联系运维人员核查"); + throw new BusinessValidationFailedException(I18n.T("CommonEmail_ConfigError")); } @@ -52,6 +54,49 @@ public static class CommonEmailHelper return configInfo; } + public static async Task GetTrialEmailSubejctAndHtmlInfoAndBuildAsync(IRepository _trialEmailNoticeConfigrepository, EmailBusinessScenario scenario, MimeMessage messageToSend, + Func<(string topicStr, string htmlBodyStr), (string topicStr, string htmlBodyStr)> emailFunc) + { + var isEn_US = CultureInfo.CurrentCulture.Name == StaticData.CultureInfo.en_US; + + var configInfo = await _trialEmailNoticeConfigrepository.Where(t => t.BusinessScenarioEnum == scenario && t.IsAutoSend && t.IsEnable).FirstOrDefaultAsync(); + + if (configInfo == null) + { + //"系统未找到当前场景邮件配置信息,请联系运维人员核查" + throw new BusinessValidationFailedException(I18n.T("CommonEmail_NotFoundConfig")); + } + + + var (topicStr, htmlBodyStr) = isEn_US ? (configInfo.EmailTopic, configInfo.EmailHtmlContent) : (configInfo.EmailTopicCN, configInfo.EmailHtmlContentCN); + + try + { + //每个场景修改主题 和body的逻辑不一样 + (topicStr, htmlBodyStr) = emailFunc((topicStr, htmlBodyStr)); + } + catch (Exception ex) + { + //"邮件模板内容有误,填充内容出现问题,请联系运维人员核查" + + throw new BusinessValidationFailedException(I18n.T("CommonEmail_ConfigError")); + } + + + messageToSend.Subject = topicStr; + + var builder = new BodyBuilder(); + + builder.HtmlBody = htmlBodyStr; + + messageToSend.Body = builder.ToMessageBody(); + + return configInfo; + } + + + + public static string ReplaceCompanyName(SystemEmailSendConfig _systemEmailConfig, string needDealtxt) { var isEn_US = CultureInfo.CurrentCulture.Name == StaticData.CultureInfo.en_US; @@ -74,12 +119,13 @@ public static class CommonEmailHelper var enumValueList = inDto.DictionaryList.Select(x => x.EnumValue).ToList(); - var dicList =await inDto.DictionaryRepository.Where(x => dictionaryCodelist.Contains(x.Parent.Code) && enumValueList.Contains(x.Code)).Select(x=>new DictionaryData() { - - DictionaryCode=x.Parent.Code, - EnumValue=x.Code, - Value=x.Value, - ValueCN=x.ValueCN + var dicList = await inDto.DictionaryRepository.Where(x => dictionaryCodelist.Contains(x.Parent.Code) && enumValueList.Contains(x.Code)).Select(x => new DictionaryData() + { + + DictionaryCode = x.Parent.Code, + EnumValue = x.Code, + Value = x.Value, + ValueCN = x.ValueCN }).ToListAsync(); diff --git a/IRaCIS.Core.Application/MassTransit/Consumer/SiteSurverEmailConsumer.cs b/IRaCIS.Core.Application/MassTransit/Consumer/SiteSurverEmailConsumer.cs index 3072bc632..dbedc2915 100644 --- a/IRaCIS.Core.Application/MassTransit/Consumer/SiteSurverEmailConsumer.cs +++ b/IRaCIS.Core.Application/MassTransit/Consumer/SiteSurverEmailConsumer.cs @@ -32,7 +32,7 @@ public class UserSiteSurveySubmitedEventConsumer( IRepository _trialSiteRepository, IRepository _trialUserRoleRepository, IRepository _trialSiteSurveyRepository, - IRepository _emailNoticeConfigrepository, + IRepository _trialEmailNoticeConfigrepository, IOptionsMonitor systemEmailConfig ) : IConsumer { @@ -47,75 +47,81 @@ public class UserSiteSurveySubmitedEventConsumer( var trialId = siteSurveyInfo.TrialId; - var trialUserList = await _trialUserRoleRepository.Where(t => t.TrialId == siteSurveyInfo.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.FullName, t.UserRole.IdentityUser.EMail, t.UserRole.UserTypeEnum }).ToListAsync(); - - 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 messageToSend = new MimeMessage(); - - var toUserName = string.Empty; - - //有SPM - if (sPMOrCPMList.Count > 0) - { - foreach (var user in sPMOrCPMList) - { - messageToSend.To.Add(new MailboxAddress(user.FullName, user.EMail)); - } - - toUserName = string.Join('、', sPMOrCPMList.Select(t => t.FullName)); - - foreach (var user in pmAndAPMList) - { - messageToSend.Cc.Add(new MailboxAddress(user.FullName, user.EMail)); - } - - } - else - { - foreach (var user in pmAndAPMList) - { - messageToSend.To.Add(new MailboxAddress(user.FullName, user.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); - }; - var scenario = _trialSiteSurveyRepository.Where(t => t.Id != trialSiteSurveyId && t.TrialId == siteSurveyInfo.TrialId && t.TrialSiteId == siteSurveyInfo.TrialSiteId).IgnoreQueryFilters().Any() ? - EmailBusinessScenario.Approval_UpdateSiteSurvey : EmailBusinessScenario.Approval_SubmitSiteSurvey; + EmailBusinessScenario.Approval_UpdateSiteSurvey : EmailBusinessScenario.Approval_SubmitSiteSurvey; - await CommonEmailHelper.GetEmailSubejctAndHtmlInfoAndBuildAsync(_emailNoticeConfigrepository, scenario, messageToSend, emailConfigFunc); - await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig); + if (_trialEmailNoticeConfigrepository.Where(t => t.BusinessScenarioEnum == scenario && t.IsAutoSend && t.IsEnable).Any()) + { + + var trialUserList = await _trialUserRoleRepository.Where(t => t.TrialId == siteSurveyInfo.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.FullName, t.UserRole.IdentityUser.EMail, t.UserRole.UserTypeEnum }).ToListAsync(); + + 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 messageToSend = new MimeMessage(); + + var toUserName = string.Empty; + + //有SPM + if (sPMOrCPMList.Count > 0) + { + foreach (var user in sPMOrCPMList) + { + messageToSend.To.Add(new MailboxAddress(user.FullName, user.EMail)); + } + + toUserName = string.Join('、', sPMOrCPMList.Select(t => t.FullName)); + + foreach (var user in pmAndAPMList) + { + messageToSend.Cc.Add(new MailboxAddress(user.FullName, user.EMail)); + } + + } + else + { + foreach (var user in pmAndAPMList) + { + messageToSend.To.Add(new MailboxAddress(user.FullName, user.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, scenario, messageToSend, emailConfigFunc); + + await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig); + } } } @@ -143,6 +149,9 @@ public class SiteSurveySPMSubmitedEventConsumer( var trialId = siteSurveyInfo.TrialId; + + + var messageToSend = new MimeMessage(); var trialUserList = _trialUserRoleRepository.Where(t => t.TrialId == trialId)