diff --git a/IRaCIS.Core.Application/MassTransit/Recurring/TrialDocumentConsumer.cs b/IRaCIS.Core.Application/MassTransit/Recurring/TrialDocumentConsumer.cs index a0e2607c7..57e78cd53 100644 --- a/IRaCIS.Core.Application/MassTransit/Recurring/TrialDocumentConsumer.cs +++ b/IRaCIS.Core.Application/MassTransit/Recurring/TrialDocumentConsumer.cs @@ -5,6 +5,7 @@ using IRaCIS.Core.Application.Helper; using IRaCIS.Core.Application.MassTransit.Consumer; using IRaCIS.Core.Application.Service.Reading.Dto; using IRaCIS.Core.Domain.Models; +using IRaCIS.Core.Domain.Share; using MassTransit; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; @@ -108,46 +109,65 @@ namespace IRaCIS.Core.Application.MassTransit.Recurring var userinfoList = await _identityUserRepository.Where(x => confirmUserIdList.Contains(x.Id)).ToListAsync(); Console.WriteLine("发送定时项目过期提醒:人员数量" + userinfoList.Count); - int index = 1; - foreach (var userinfo in userinfoList) + + var scenario = EmailBusinessScenario.TrialTraining_ExpirationNotification; + var emailConfig = _emailNoticeConfigrepository.Where(t => t.BusinessScenarioEnum == scenario && t.IsAutoSend && t.IsEnable).FirstOrDefault(); + if (emailConfig == null) + { + return; + } + + var userTrialIdList = datalist.Select(t => new { t.ConfirmUserId, t.TrialId }).Distinct().ToList(); + var userWithTrialList = (from ut in userTrialIdList + join u in userinfoList on ut.ConfirmUserId equals u.Id + select new { ut.TrialId, User = u }).ToList(); + + var groupedList = userWithTrialList.GroupBy(x => new { x.TrialId, x.User.UserWorkLanguage }).ToList(); + foreach (var groupItem in groupedList) { try { - Console.WriteLine($"{index}发送定时过期提醒,邮箱:{userinfo.EMail},姓名{userinfo.UserName}"); - index++; - var trialInfo = _trialRepository.Where(x => x.Id == userinfo.TrialId).FirstOrDefault(); + var langUserInfoList = groupItem.Select(x => x.User).Distinct().ToList(); + if (!langUserInfoList.Any()) + { + continue; + } + + Console.WriteLine($"发送定时过期提醒,数量:{langUserInfoList.Count}"); + + var trialInfo = await _trialRepository.Where(x => x.Id == groupItem.Key.TrialId).FirstOrDefaultAsync(); + if (trialInfo == null) + { + continue; + } + + var workLanguage = groupItem.Key.UserWorkLanguage; + var userIsEn_US = workLanguage == UserWorkLanguage.US; var messageToSend = new MimeMessage(); - //发件地址 messageToSend.From.Add(new MailboxAddress(_systemEmailConfig.FromName, _systemEmailConfig.FromEmail)); - messageToSend.To.Add(new MailboxAddress(userinfo.FullName, userinfo.EMail)); + foreach (var userinfo in langUserInfoList) + { + messageToSend.To.Add(new MailboxAddress(userinfo.FullName, userinfo.EMail)); + } - - var companyName = isEn_US ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN; + var companyName = userIsEn_US ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN; + var userNames = langUserInfoList.Select(x => x.UserName).ToList(); Func<(string topicStr, string htmlBodyStr), (string topicStr, string htmlBodyStr)> emailConfigFunc = input => { var topicStr = string.Format(input.topicStr, companyName); var htmlBodyStr = string.Format( - CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, input.htmlBodyStr), - userinfo.UserName, // 用户名 {0} + CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, input.htmlBodyStr, workLanguage), + string.Join(',', userNames), _systemEmailConfig.SiteUrl ); return (topicStr, htmlBodyStr); }; - var scenario = EmailBusinessScenario.TrialTraining_ExpirationNotification; - - var emailConfig = _emailNoticeConfigrepository.Where(t => t.BusinessScenarioEnum == scenario && t.IsAutoSend && t.IsEnable).FirstOrDefault(); - - if (emailConfig != null) - { - await CommonEmailHelper.GetEmailSubejctAndHtmlInfoAndBuildAsync(emailConfig, messageToSend, emailConfigFunc); - - await SendEmailHelper.SendEmailAsync(messageToSend, trialInfo); - } - + await CommonEmailHelper.GetEmailSubejctAndHtmlInfoAndBuildAsync(emailConfig, messageToSend, emailConfigFunc, workLanguage); + await SendEmailHelper.SendEmailAsync(messageToSend, trialInfo); } catch (Exception) @@ -264,52 +284,65 @@ namespace IRaCIS.Core.Application.MassTransit.Recurring var confirmUserIdList = datalist.Select(t => t.ConfirmUserId).Distinct().ToList(); var userinfoList = await _identityUserRepository.Where(x => confirmUserIdList.Contains(x.Id)).ToListAsync(); - int index = 1; - foreach (var userinfo in userinfoList) + + var scenario = EmailBusinessScenario.TrialTraining_EffectiveNotification; + var emailConfig = _emailNoticeConfigrepository.Where(t => t.BusinessScenarioEnum == scenario && t.IsEnable).FirstOrDefault(); + if (emailConfig == null) { - string msg = $"{index}项目生效通知,邮箱:{userinfo.EMail},姓名{userinfo.UserName},"; - index++; + return; + } + + var userTrialIdList = datalist.Select(t => new { t.ConfirmUserId, t.TrialId }).Distinct().ToList(); + var userWithTrialList = (from ut in userTrialIdList + join u in userinfoList on ut.ConfirmUserId equals u.Id + select new { ut.TrialId, User = u }).ToList(); + + var groupedList = userWithTrialList.GroupBy(x => new { x.TrialId, x.User.UserWorkLanguage }).ToList(); + foreach (var groupItem in groupedList) + { + var langUserInfoList = groupItem.Select(x => x.User).Distinct().ToList(); + if (!langUserInfoList.Any()) + { + continue; + } + + string msg = $"{langUserInfoList.Count}项目生效通知,"; try { - var messageToSend = new MimeMessage(); - //发件地址 messageToSend.From.Add(new MailboxAddress(_systemEmailConfig.FromName, _systemEmailConfig.FromEmail)); - messageToSend.To.Add(new MailboxAddress(userinfo.FullName, userinfo.EMail)); + foreach (var userinfo in langUserInfoList) + { + messageToSend.To.Add(new MailboxAddress(userinfo.FullName, userinfo.EMail)); + } - - var companyName = isEn_US ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN; + var workLanguage = groupItem.Key.UserWorkLanguage; + var userIsEn_US = workLanguage == UserWorkLanguage.US; + var companyName = userIsEn_US ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN; + var userNames = langUserInfoList.Select(x => x.UserName).ToList(); Func<(string topicStr, string htmlBodyStr), (string topicStr, string htmlBodyStr)> emailConfigFunc = input => { var topicStr = string.Format(input.topicStr, companyName); var htmlBodyStr = string.Format( - CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, input.htmlBodyStr), - userinfo.UserName, // 用户名 {0} + CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, input.htmlBodyStr, workLanguage), + string.Join(',', userNames), _systemEmailConfig.SiteUrl ); return (topicStr, htmlBodyStr); }; + await CommonEmailHelper.GetEmailSubejctAndHtmlInfoAndBuildAsync(emailConfig, messageToSend, emailConfigFunc, workLanguage); - var scenario = EmailBusinessScenario.TrialTraining_EffectiveNotification; - - var emailConfig = _emailNoticeConfigrepository.Where(t => t.BusinessScenarioEnum == scenario && t.IsEnable).FirstOrDefault(); - - if (emailConfig != null) + var trialInfo = await _trialRepository.Where(x => x.Id == groupItem.Key.TrialId).FirstOrDefaultAsync(); + if (trialInfo == null) { - await CommonEmailHelper.GetEmailSubejctAndHtmlInfoAndBuildAsync(emailConfig, messageToSend, emailConfigFunc); - - var trial = datalist.Where(x => x.ConfirmUserId == userinfo.Id).FirstOrDefault(); - - var trialInfo = await _trialRepository.Where(x=>x.Id==trial.TrialId).FirstNotNullAsync(); - - - await SendEmailHelper.SendEmailAsync(messageToSend, trialInfo); - msg += "发送成功"; + continue; } + await SendEmailHelper.SendEmailAsync(messageToSend, trialInfo); + msg += "发送成功"; } catch (Exception)