From e1bd659dc5862f520434c2474fbd30982354fae5 Mon Sep 17 00:00:00 2001
From: he <109787524@qq.com>
Date: Wed, 13 May 2026 17:54:48 +0800
Subject: [PATCH] =?UTF-8?q?=E8=BF=87=E6=9C=9F=E9=82=AE=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
---
.../Recurring/SystemDocumentConsumer.cs | 313 +++++++++---------
1 file changed, 162 insertions(+), 151 deletions(-)
diff --git a/IRaCIS.Core.Application/MassTransit/Recurring/SystemDocumentConsumer.cs b/IRaCIS.Core.Application/MassTransit/Recurring/SystemDocumentConsumer.cs
index 4497bf8f6..ddf05061d 100644
--- a/IRaCIS.Core.Application/MassTransit/Recurring/SystemDocumentConsumer.cs
+++ b/IRaCIS.Core.Application/MassTransit/Recurring/SystemDocumentConsumer.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.Options;
using MimeKit;
@@ -84,203 +85,213 @@ 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.GeneralTraining_ExpirationNotification;
+ var emailConfig = _emailNoticeConfigrepository.Where(t => t.BusinessScenarioEnum == scenario && t.IsAutoSend && t.IsEnable).FirstOrDefault();
+ if (emailConfig == null)
+ {
+ return;
+ }
+
+ var userWorkLanguageList = userinfoList.Select(x => x.UserWorkLanguage).Distinct().ToList();
+ foreach (var workLanguage in userWorkLanguageList)
{
try
{
- Console.WriteLine($"{index}发送定时过期提醒,邮箱:{userinfo.EMail},姓名{userinfo.UserName}");
- index++;
+ var langUserInfoList = userinfoList.Where(x => x.UserWorkLanguage == workLanguage).ToList();
+ if (!langUserInfoList.Any())
+ {
+ continue;
+ }
+
+ 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 = userIsEn_US ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN;
+ var userNames = langUserInfoList.Select(x => x.UserName).ToList();
- 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);
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.GeneralTraining_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, _systemEmailConfig);
- }
-
-
+ await CommonEmailHelper.GetEmailSubejctAndHtmlInfoAndBuildAsync(emailConfig, messageToSend, emailConfigFunc, workLanguage);
+ await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig);
}
catch (Exception)
{
-
}
-
}
-
}
- }
- ///
- /// 生效通知
- ///
- public class SystemDocumentPublishEventConsumer(
- IRepository _trialReadingCriterionRepository,
- IRepository _visitTaskRepository,
- IRepository _systemDocumentRepository,
- IRepository _identityUserRepository,
- IRepository _systemDocConfirmedUserRepository,
- IRepository _dictionaryRepository,
- IRepository _trialUserRoleRepository,
- IRepository _emailNoticeConfigrepository,
+ ///
+ /// 生效通知
+ ///
+ public class SystemDocumentPublishEventConsumer(
+ IRepository _trialReadingCriterionRepository,
+ IRepository _visitTaskRepository,
+ IRepository _systemDocumentRepository,
+ IRepository _identityUserRepository,
+ IRepository _systemDocConfirmedUserRepository,
+ IRepository _dictionaryRepository,
+ IRepository _trialUserRoleRepository,
+ IRepository _emailNoticeConfigrepository,
- IOptionsMonitor systemEmailConfig) : IConsumer
- {
- private readonly SystemEmailSendConfig _systemEmailConfig = systemEmailConfig.CurrentValue;
-
- public async Task Consume(ConsumeContext context)
+ IOptionsMonitor systemEmailConfig) : IConsumer
{
- var isEn_US = context.Message.CultureInfoName == StaticData.CultureInfo.en_US;
+ private readonly SystemEmailSendConfig _systemEmailConfig = systemEmailConfig.CurrentValue;
- //设置当前事件传递过来的语言
- var culture = context.Message.CultureInfoName;
- CultureInfo.CurrentCulture = new CultureInfo(culture);
-
- // 记录是否只发送给新增角色的日志
- if (context.Message.NewUserTypeIds != null && context.Message.NewUserTypeIds.Any())
+ public async Task Consume(ConsumeContext context)
{
- Console.WriteLine($"只发送给新增的角色,角色数量: {context.Message.NewUserTypeIds.Count}");
- }
- // 构建查询
- IQueryable systemDocQuery;
+ var isEn_US = context.Message.CultureInfoName == StaticData.CultureInfo.en_US;
- if (context.Message.NewUserTypeIds != null && context.Message.NewUserTypeIds.Any())
- {
- // 只查询新增角色的用户
- systemDocQuery =
- from sysDoc in _systemDocumentRepository.AsQueryable(false).Where(x => context.Message.Ids.Contains(x.Id))
- from identityUser in _identityUserRepository.AsQueryable(false)
- .Where(t => t.Status == UserStateEnum.Enable &&
- t.UserRoleList.Where(t => t.IsUserRoleDisabled == false)
- .Any(t => context.Message.NewUserTypeIds.Contains(t.UserTypeId) &&
- sysDoc.NeedConfirmedUserTypeList.AsQueryable().Any(c => c.NeedConfirmUserTypeId == t.UserTypeId)))
- select new UnionDocumentWithConfirmInfoView()
+ //设置当前事件传递过来的语言
+ var culture = context.Message.CultureInfoName;
+ CultureInfo.CurrentCulture = new CultureInfo(culture);
+
+ // 记录是否只发送给新增角色的日志
+ if (context.Message.NewUserTypeIds != null && context.Message.NewUserTypeIds.Any())
{
- IsSystemDoc = true,
- Id = sysDoc.Id,
- CreateTime = sysDoc.CreateTime,
- IsDeleted = sysDoc.IsDeleted,
- SignViewMinimumMinutes = sysDoc.SignViewMinimumMinutes,
- Name = sysDoc.Name,
- Path = sysDoc.Path,
- FileTypeId = sysDoc.FileTypeId,
- UpdateTime = sysDoc.UpdateTime,
- ConfirmUserId = identityUser.Id,
- RealName = identityUser.FullName,
- UserName = identityUser.UserName,
- IsNeedSendEmial = identityUser.IsZhiZhun || (!identityUser.IsZhiZhun && sysDoc.DocUserSignType == DocUserSignType.InnerAndOuter),
- FullFilePath = sysDoc.Path
- };
- }
- else
- {
- // 查询所有相关角色的用户
- systemDocQuery =
- from sysDoc in _systemDocumentRepository.AsQueryable(false).Where(x => context.Message.Ids.Contains(x.Id))
- from identityUser in _identityUserRepository.AsQueryable(false)
- .Where(t => t.Status == UserStateEnum.Enable &&
- t.UserRoleList.Where(t => t.IsUserRoleDisabled == false)
- .Any(t => sysDoc.NeedConfirmedUserTypeList.AsQueryable().Any(c => c.NeedConfirmUserTypeId == t.UserTypeId)))
- select new UnionDocumentWithConfirmInfoView()
+ Console.WriteLine($"只发送给新增的角色,角色数量: {context.Message.NewUserTypeIds.Count}");
+ }
+ // 构建查询
+ IQueryable systemDocQuery;
+
+ if (context.Message.NewUserTypeIds != null && context.Message.NewUserTypeIds.Any())
{
- IsSystemDoc = true,
- Id = sysDoc.Id,
- CreateTime = sysDoc.CreateTime,
- IsDeleted = sysDoc.IsDeleted,
- SignViewMinimumMinutes = sysDoc.SignViewMinimumMinutes,
- Name = sysDoc.Name,
- Path = sysDoc.Path,
- FileTypeId = sysDoc.FileTypeId,
- UpdateTime = sysDoc.UpdateTime,
- ConfirmUserId = identityUser.Id,
- RealName = identityUser.FullName,
- UserName = identityUser.UserName,
- IsNeedSendEmial = identityUser.IsZhiZhun || (!identityUser.IsZhiZhun && sysDoc.DocUserSignType == DocUserSignType.InnerAndOuter),
- FullFilePath = sysDoc.Path
- };
- }
- var datalist = await systemDocQuery.IgnoreQueryFilters().Where(x => x.IsNeedSendEmial).ToListAsync();
-
- 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)
- {
- string msg = $"{index}生效通知,邮箱:{userinfo.EMail},姓名{userinfo.UserName},";
- index++;
- try
- {
-
- var messageToSend = new MimeMessage();
- //发件地址
- messageToSend.From.Add(new MailboxAddress(_systemEmailConfig.FromName, _systemEmailConfig.FromEmail));
- messageToSend.To.Add(new MailboxAddress(userinfo.FullName, userinfo.EMail));
-
-
-
- var companyName = isEn_US ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN;
- Func<(string topicStr, string htmlBodyStr), (string topicStr, string htmlBodyStr)> emailConfigFunc = input =>
+ // 只查询新增角色的用户
+ systemDocQuery =
+ from sysDoc in _systemDocumentRepository.AsQueryable(false).Where(x => context.Message.Ids.Contains(x.Id))
+ from identityUser in _identityUserRepository.AsQueryable(false)
+ .Where(t => t.Status == UserStateEnum.Enable &&
+ t.UserRoleList.Where(t => t.IsUserRoleDisabled == false)
+ .Any(t => context.Message.NewUserTypeIds.Contains(t.UserTypeId) &&
+ sysDoc.NeedConfirmedUserTypeList.AsQueryable().Any(c => c.NeedConfirmUserTypeId == t.UserTypeId)))
+ select new UnionDocumentWithConfirmInfoView()
{
- var topicStr = string.Format(input.topicStr, companyName);
-
- var htmlBodyStr = string.Format(
- CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, input.htmlBodyStr),
- userinfo.UserName, // 用户名 {0}
- _systemEmailConfig.SiteUrl
- );
-
- return (topicStr, htmlBodyStr);
+ IsSystemDoc = true,
+ Id = sysDoc.Id,
+ CreateTime = sysDoc.CreateTime,
+ IsDeleted = sysDoc.IsDeleted,
+ SignViewMinimumMinutes = sysDoc.SignViewMinimumMinutes,
+ Name = sysDoc.Name,
+ Path = sysDoc.Path,
+ FileTypeId = sysDoc.FileTypeId,
+ UpdateTime = sysDoc.UpdateTime,
+ ConfirmUserId = identityUser.Id,
+ RealName = identityUser.FullName,
+ UserName = identityUser.UserName,
+ IsNeedSendEmial = identityUser.IsZhiZhun || (!identityUser.IsZhiZhun && sysDoc.DocUserSignType == DocUserSignType.InnerAndOuter),
+ FullFilePath = sysDoc.Path
};
-
- var scenario = EmailBusinessScenario.GeneralTraining_EffectiveNotification;
-
- var emailConfig = _emailNoticeConfigrepository.Where(t => t.BusinessScenarioEnum == scenario && t.IsAutoSend && t.IsEnable).FirstOrDefault();
-
- if (emailConfig != null)
+ }
+ else
+ {
+ // 查询所有相关角色的用户
+ systemDocQuery =
+ from sysDoc in _systemDocumentRepository.AsQueryable(false).Where(x => context.Message.Ids.Contains(x.Id))
+ from identityUser in _identityUserRepository.AsQueryable(false)
+ .Where(t => t.Status == UserStateEnum.Enable &&
+ t.UserRoleList.Where(t => t.IsUserRoleDisabled == false)
+ .Any(t => sysDoc.NeedConfirmedUserTypeList.AsQueryable().Any(c => c.NeedConfirmUserTypeId == t.UserTypeId)))
+ select new UnionDocumentWithConfirmInfoView()
{
- await CommonEmailHelper.GetEmailSubejctAndHtmlInfoAndBuildAsync(emailConfig, messageToSend, emailConfigFunc);
+ IsSystemDoc = true,
+ Id = sysDoc.Id,
+ CreateTime = sysDoc.CreateTime,
+ IsDeleted = sysDoc.IsDeleted,
+ SignViewMinimumMinutes = sysDoc.SignViewMinimumMinutes,
+ Name = sysDoc.Name,
+ Path = sysDoc.Path,
+ FileTypeId = sysDoc.FileTypeId,
+ UpdateTime = sysDoc.UpdateTime,
+ ConfirmUserId = identityUser.Id,
+ RealName = identityUser.FullName,
+ UserName = identityUser.UserName,
+ IsNeedSendEmial = identityUser.IsZhiZhun || (!identityUser.IsZhiZhun && sysDoc.DocUserSignType == DocUserSignType.InnerAndOuter),
+ FullFilePath = sysDoc.Path
+ };
+ }
+ var datalist = await systemDocQuery.IgnoreQueryFilters().Where(x => x.IsNeedSendEmial).ToListAsync();
+ var confirmUserIdList = datalist.Select(t => t.ConfirmUserId).Distinct().ToList();
+ var userinfoList = await _identityUserRepository.Where(x => confirmUserIdList.Contains(x.Id)).ToListAsync();
+
+ var scenario = EmailBusinessScenario.GeneralTraining_EffectiveNotification;
+ var emailConfig = _emailNoticeConfigrepository.Where(t => t.BusinessScenarioEnum == scenario && t.IsAutoSend && t.IsEnable).FirstOrDefault();
+ if (emailConfig == null)
+ {
+ return;
+ }
+
+ var userWorkLanguageList = userinfoList.Select(x => x.UserWorkLanguage).Distinct().ToList();
+ foreach (var workLanguage in userWorkLanguageList)
+ {
+ var langUserInfoList = userinfoList.Where(x => x.UserWorkLanguage == workLanguage).ToList();
+ if (!langUserInfoList.Any())
+ {
+ continue;
+ }
+
+ string msg = $"{langUserInfoList.Count}生效通知,";
+ try
+ {
+ var messageToSend = new MimeMessage();
+ messageToSend.From.Add(new MailboxAddress(_systemEmailConfig.FromName, _systemEmailConfig.FromEmail));
+
+ foreach (var userinfo in langUserInfoList)
+ {
+ messageToSend.To.Add(new MailboxAddress(userinfo.FullName, userinfo.EMail));
+ }
+
+ 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, workLanguage),
+ string.Join(',', userNames),
+ _systemEmailConfig.SiteUrl
+ );
+
+ return (topicStr, htmlBodyStr);
+ };
+ await CommonEmailHelper.GetEmailSubejctAndHtmlInfoAndBuildAsync(emailConfig, messageToSend, emailConfigFunc, workLanguage);
await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig);
msg += "发送成功";
+
+ }
+ catch (Exception)
+ {
+ msg += "发送失败";
+
}
- }
- catch (Exception)
- {
- msg += "发送失败";
-
+ Console.WriteLine(msg);
}
-
- Console.WriteLine(msg);
}
-
}
}
}