From fdb124b12e8069c2f44879e9ac14aa97b17ebab8 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Wed, 13 May 2026 11:05:22 +0800 Subject: [PATCH] =?UTF-8?q?=E9=82=AE=E4=BB=B6=E6=A0=B9=E6=8D=AE=E6=8E=A5?= =?UTF-8?q?=E6=94=B6=E4=BA=BA=E5=B7=A5=E4=BD=9C=E8=AF=AD=E8=A8=80=EF=BC=8C?= =?UTF-8?q?=E5=8A=A8=E6=80=81=E8=AE=BE=E7=BD=AE=E9=82=AE=E4=BB=B6=E6=A8=A1?= =?UTF-8?q?=E6=9D=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../IRaCIS.Core.Application.xml | 25 +- .../MassTransit/Consumer/CommonEmailHelper.cs | 15 +- .../Consumer/SiteSurverEmailConsumer.cs | 357 ++++++++++-------- .../SubjectVisitQCAndCheckConsumer.cs | 226 ++++++----- .../Service/Common/MailService.cs | 33 +- .../Service/Document/SystemDocumentService.cs | 35 +- .../Service/Document/TrialDocumentService.cs | 62 +-- 7 files changed, 403 insertions(+), 350 deletions(-) diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml index 90964da2d..3ce0e5ae7 100644 --- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml +++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml @@ -1696,6 +1696,17 @@ + + + 获取邮件主题和html 通用封装 以用户语言为主,没有的就用当前的请求语言_userInfo.IsEn_Us + + + + + + + + Reviewer简历录入 发送验证码 @@ -16455,23 +16466,25 @@ 全量一致性核查 - + 系统默认邮件 + 项目默认邮件 (不用添加到项目邮件配置中,才发送) + - + 项目手动邮件 (需要添加到项目邮件配置中,才发送) + @@ -17429,17 +17442,17 @@ - ���� + 质疑 - һ���Ժ˲� + 一致性核查 - ���� + 复制 @@ -19970,7 +19983,7 @@ TrialDocumentService - + TrialDocumentService diff --git a/IRaCIS.Core.Application/MassTransit/Consumer/CommonEmailHelper.cs b/IRaCIS.Core.Application/MassTransit/Consumer/CommonEmailHelper.cs index f02d835e0..af3e85843 100644 --- a/IRaCIS.Core.Application/MassTransit/Consumer/CommonEmailHelper.cs +++ b/IRaCIS.Core.Application/MassTransit/Consumer/CommonEmailHelper.cs @@ -21,12 +21,14 @@ public static class CommonEmailHelper /// /// /// + /// /// /// public static async Task GetEmailSubejctAndHtmlInfoAndBuildAsync(EmailNoticeConfig configInfo, MimeMessage messageToSend, -Func<(string topicStr, string htmlBodyStr), (string topicStr, string htmlBodyStr)> emailFunc) +Func<(string topicStr, string htmlBodyStr), (string topicStr, string htmlBodyStr)> emailFunc, UserWorkLanguage? userWorkLanguage = null) { - var isEn_US = CultureInfo.CurrentCulture.Name == StaticData.CultureInfo.en_US; + + bool isEn_US = userWorkLanguage.HasValue ? userWorkLanguage.Value == UserWorkLanguage.US : CultureInfo.CurrentCulture.Name == StaticData.CultureInfo.en_US; var (topicStr, htmlBodyStr) = isEn_US ? (configInfo.EmailTopic, configInfo.EmailHtmlContent) : (configInfo.EmailTopicCN, configInfo.EmailHtmlContentCN); @@ -60,13 +62,14 @@ Func<(string topicStr, string htmlBodyStr), (string topicStr, string htmlBodyStr /// /// /// + /// /// /// public static async Task GetTrialEmailSubejctAndHtmlInfoAndBuildAsync(TrialEmailNoticeConfig configInfo, MimeMessage messageToSend, - Func<(string topicStr, string htmlBodyStr), (string topicStr, string htmlBodyStr)> emailFunc) + Func<(string topicStr, string htmlBodyStr), (string topicStr, string htmlBodyStr)> emailFunc, UserWorkLanguage? userWorkLanguage = null) { - var isEn_US = CultureInfo.CurrentCulture.Name == StaticData.CultureInfo.en_US; + bool isEn_US = userWorkLanguage.HasValue ? userWorkLanguage.Value == UserWorkLanguage.US : CultureInfo.CurrentCulture.Name == StaticData.CultureInfo.en_US; var (topicStr, htmlBodyStr) = isEn_US ? (configInfo.EmailTopic, configInfo.EmailHtmlContent) : (configInfo.EmailTopicCN, configInfo.EmailHtmlContentCN); @@ -97,9 +100,9 @@ Func<(string topicStr, string htmlBodyStr), (string topicStr, string htmlBodyStr - public static string ReplaceCompanyName(SystemEmailSendConfig _systemEmailConfig, string needDealtxt) + public static string ReplaceCompanyName(SystemEmailSendConfig _systemEmailConfig, string needDealtxt, UserWorkLanguage? userWorkLanguage = null) { - var isEn_US = CultureInfo.CurrentCulture.Name == StaticData.CultureInfo.en_US; + var isEn_US = userWorkLanguage.HasValue ? userWorkLanguage.Value == UserWorkLanguage.US : CultureInfo.CurrentCulture.Name == StaticData.CultureInfo.en_US; var str = needDealtxt.Replace("{company}", isEn_US ? _systemEmailConfig.CompanyName : _systemEmailConfig.CompanyNameCN) .Replace("{company abbreviation}", isEn_US ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN); diff --git a/IRaCIS.Core.Application/MassTransit/Consumer/SiteSurverEmailConsumer.cs b/IRaCIS.Core.Application/MassTransit/Consumer/SiteSurverEmailConsumer.cs index 327cf090b..0a4a7eb4f 100644 --- a/IRaCIS.Core.Application/MassTransit/Consumer/SiteSurverEmailConsumer.cs +++ b/IRaCIS.Core.Application/MassTransit/Consumer/SiteSurverEmailConsumer.cs @@ -57,73 +57,85 @@ public class UserSiteSurveySubmitedEventConsumer( if (emailConfig != null) { var trialInfo = await _trialRepository.FirstOrDefaultAsync(t => t.Id == trialId); + var siteInfo = await _trialSiteRepository.FirstOrDefaultAsync(t => t.TrialId == trialId && t.Id == siteSurveyInfo.TrialSiteId, true); + var trialUserList = await _trialUserRoleRepository.Where(t => t.TrialId == siteSurveyInfo.TrialId && t.TrialUser.IsDeleted == false) .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(); + .Select(t => new { t.UserRole.FullName, t.UserRole.IdentityUser.EMail, t.UserRole.UserTypeEnum, t.UserRole.IdentityUser.UserWorkLanguage }).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 (trialInfo.IsSPMJoinSiteSurvey && sPMOrCPMList.Count > 0) + // 遍历语言枚举 在底层判断收件人是否为空,决定是否跳过邮件发送,避免每个邮件场景的地方都重复判断 + foreach (UserWorkLanguage workLanguage in Enum.GetValues()) { - foreach (var user in sPMOrCPMList) + //重新设置当前发送邮件的语言 + isEn_US = workLanguage == UserWorkLanguage.US; + + var messageToSend = new MimeMessage(); + + var toUserName = string.Empty; + + //有SPM 并且参与 + if (trialInfo.IsSPMJoinSiteSurvey && sPMOrCPMList.Count > 0) { - messageToSend.To.Add(new MailboxAddress(user.FullName, user.EMail)); + var lan_SPMOrCPMList = sPMOrCPMList.Where(t => t.UserWorkLanguage == workLanguage); + + foreach (var user in lan_SPMOrCPMList) + { + messageToSend.To.Add(new MailboxAddress(user.FullName, user.EMail)); + } + + toUserName = string.Join('、', lan_SPMOrCPMList.Select(t => t.FullName)); + + foreach (var user in pmAndAPMList) + { + messageToSend.Cc.Add(new MailboxAddress(user.FullName, user.EMail)); + } + + } + else + { + var lan_pmAndAPMList = pmAndAPMList.Where(t => t.UserWorkLanguage == workLanguage); + + foreach (var user in lan_pmAndAPMList) + { + messageToSend.To.Add(new MailboxAddress(user.FullName, user.EMail)); + } + + toUserName = string.Join('、', lan_pmAndAPMList.Select(t => t.FullName)); } - toUserName = string.Join('、', sPMOrCPMList.Select(t => t.FullName)); + //发件地址 + messageToSend.From.Add(new MailboxAddress(_systemEmailConfig.FromName, _systemEmailConfig.FromEmail)); - foreach (var user in pmAndAPMList) + + var companyName = isEn_US ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN; + + Func<(string topicStr, string htmlBodyStr), (string topicStr, string htmlBodyStr)> emailConfigFunc = input => { - messageToSend.Cc.Add(new MailboxAddress(user.FullName, user.EMail)); - } + var topicStr = string.Format(input.topicStr, trialInfo.ResearchProgramNo); + var htmlBodyStr = string.Format(CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, input.htmlBodyStr, workLanguage), + toUserName, + siteInfo.TrialSiteCode, + siteInfo.TrialSiteAliasName, + siteSurveyInfo.UserName, + siteSurveyInfo.Email, + siteSurveyInfo.Phone, + _systemEmailConfig.SiteUrl + ); + + return (topicStr, htmlBodyStr); + }; + + + await CommonEmailHelper.GetEmailSubejctAndHtmlInfoAndBuildAsync(emailConfig, messageToSend, emailConfigFunc, workLanguage); + + await SendEmailHelper.SendEmailAsync(messageToSend, trialInfo); } - 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 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(emailConfig, messageToSend, emailConfigFunc); - - await SendEmailHelper.SendEmailAsync(messageToSend, trialInfo); } } @@ -152,61 +164,74 @@ public class SiteSurveySPMSubmitedEventConsumer( var trialId = siteSurveyInfo.TrialId; + var trialInfo = await _trialRepository.FirstOrDefaultAsync(t => t.Id == trialId); + + var siteInfo = await _trialSiteRepository.FirstOrDefaultAsync(t => t.TrialId == trialId && t.Id == siteSurveyInfo.TrialSiteId, true); + + var trialUserList = _trialUserRoleRepository.Where(t => t.TrialId == trialId && t.TrialUser.IsDeleted == false) + .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, t.UserRole.IdentityUser.UserWorkLanguage }).ToList(); + var scenario = EmailBusinessScenario.Approval_SubmitSiteSurvey; var emailConfig = _emailNoticeConfigrepository.Where(t => t.BusinessScenarioEnum == scenario && t.IsAutoSend && t.IsEnable).FirstOrDefault(); if (emailConfig != null) { - var messageToSend = new MimeMessage(); - var trialUserList = _trialUserRoleRepository.Where(t => t.TrialId == trialId && t.TrialUser.IsDeleted == false) - .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) + // 遍历语言枚举 在底层判断收件人是否为空,决定是否跳过邮件发送,避免每个邮件场景的地方都重复判断 + foreach (UserWorkLanguage workLanguage in Enum.GetValues()) { - messageToSend.To.Add(new MailboxAddress(item.FullName, item.EMail)); + //重新设置当前发送邮件的语言 + isEn_US = workLanguage == UserWorkLanguage.US; + + + 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; + + var lan_pmAndAPMList = pmAndAPMList.Where(t => t.UserWorkLanguage == workLanguage); + + foreach (var item in lan_pmAndAPMList) + { + messageToSend.To.Add(new MailboxAddress(item.FullName, item.EMail)); + + toUserName = string.Join('、', lan_pmAndAPMList.Select(t => t.FullName)); + } + + //发件地址 + messageToSend.From.Add(new MailboxAddress(_systemEmailConfig.FromName, _systemEmailConfig.FromEmail)); + + 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, workLanguage), + toUserName, + siteInfo.TrialSiteCode, //中心编号 + siteInfo.TrialSiteAliasName,//中心名称 + + siteSurveyInfo.UserName, //联系人 + siteSurveyInfo.Email, //联系邮箱 + siteSurveyInfo.Phone, //联系电话 + _systemEmailConfig.SiteUrl + ); + + return (topicStr, htmlBodyStr); + }; + + await CommonEmailHelper.GetEmailSubejctAndHtmlInfoAndBuildAsync(emailConfig, messageToSend, emailConfigFunc, workLanguage); + + await SendEmailHelper.SendEmailAsync(messageToSend, trialInfo); - 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.GetEmailSubejctAndHtmlInfoAndBuildAsync(emailConfig, messageToSend, emailConfigFunc); - - await SendEmailHelper.SendEmailAsync(messageToSend, trialInfo); } @@ -235,92 +260,108 @@ public class SiteSurverRejectedEventConsumer( var trialSiteSurveyId = context.Message.TrialSiteSurveyId; - var siteSurveyInfo = _trialSiteSurveyRepository.Where(t => t.Id == trialSiteSurveyId ,ignoreQueryFilters:true).FirstOrDefault().IfNullThrowException(); + var siteSurveyInfo = _trialSiteSurveyRepository.Where(t => t.Id == trialSiteSurveyId, ignoreQueryFilters: true).FirstOrDefault().IfNullThrowException(); var trialId = siteSurveyInfo.TrialId; + var trialInfo = await _trialRepository.FirstOrDefaultAsync(t => t.Id == trialId); + + var siteInfo = await _trialSiteRepository.FirstOrDefaultAsync(t => t.TrialId == trialId && t.Id == siteSurveyInfo.TrialSiteId, true); + var scenario = EmailBusinessScenario.SiteSurveyReject; var emailConfig = _emailNoticeConfigrepository.Where(t => t.BusinessScenarioEnum == scenario && t.IsAutoSend && t.IsEnable).FirstOrDefault(); if (emailConfig != null) { - - - var messageToSend = new MimeMessage(); - - var toUserName = siteSurveyInfo.UserName; - - if (context.Message.IsHaveSPMOrCPM) + // 遍历语言枚举 在底层判断收件人是否为空,决定是否跳过邮件发送,避免每个邮件场景的地方都重复判断 + foreach (UserWorkLanguage workLanguage in Enum.GetValues()) { - //PM 驳回到SPM - if (siteSurveyInfo.State == TrialSiteSurveyEnum.CRCSubmitted) + //重新设置当前发送邮件的语言 + isEn_US = workLanguage == UserWorkLanguage.US; + + + 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 && t.TrialUser.IsDeleted == false) - .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 sPMOrCPMList = _trialUserRoleRepository.Where(t => t.TrialId == trialId && t.TrialUser.IsDeleted == false) + .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, t.UserRole.IdentityUser.UserWorkLanguage }).ToList(); + + var lan_SPMOrCPMList = sPMOrCPMList.Where(t => t.UserWorkLanguage == workLanguage); + + foreach (var user in lan_SPMOrCPMList) + { + messageToSend.To.Add(new MailboxAddress(user.FullName, user.EMail)); + } + + toUserName = string.Join('、', lan_SPMOrCPMList.Select(t => t.FullName)); + + } + //SPM 驳回到CRC + else if (siteSurveyInfo.State == TrialSiteSurveyEnum.ToSubmit) + { + //使用中心国家语言 一致才发送 + if ((siteInfo.Country == StaticData.SiteCountry.US && isEn_US) || (siteInfo.Country == StaticData.SiteCountry.CN && isEn_US == false)) + { + 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 + + //使用中心国家语言 一致才发送 + if ((siteInfo.Country == StaticData.SiteCountry.US && isEn_US) || (siteInfo.Country == StaticData.SiteCountry.CN && isEn_US == false)) + { + messageToSend.To.Add(new MailboxAddress(toUserName, siteSurveyInfo.Email)); + + } } - } - else - { - //没有SPM PM驳回到CRC + //发件地址 + messageToSend.From.Add(new MailboxAddress(_systemEmailConfig.FromName, _systemEmailConfig.FromEmail)); + + 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 htmlBodyStr = string.Format(CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, input.htmlBodyStr, workLanguage), + 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(emailConfig, messageToSend, emailConfigFunc); + + await SendEmailHelper.SendEmailAsync(messageToSend, trialInfo); - messageToSend.To.Add(new MailboxAddress(siteSurveyInfo.UserName, siteSurveyInfo.Email)); } - //发件地址 - 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, companyName,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(emailConfig, messageToSend, emailConfigFunc); - - await SendEmailHelper.SendEmailAsync(messageToSend, trialInfo); } diff --git a/IRaCIS.Core.Application/MassTransit/Consumer/SubjectVisitQCAndCheckConsumer.cs b/IRaCIS.Core.Application/MassTransit/Consumer/SubjectVisitQCAndCheckConsumer.cs index 100c5b596..90e99b950 100644 --- a/IRaCIS.Core.Application/MassTransit/Consumer/SubjectVisitQCAndCheckConsumer.cs +++ b/IRaCIS.Core.Application/MassTransit/Consumer/SubjectVisitQCAndCheckConsumer.cs @@ -36,7 +36,7 @@ public class CRCSubmitedAndQCToAuditEventConsumer( private readonly SystemEmailSendConfig _systemEmailConfig = systemEmailConfig.CurrentValue; public async Task Consume(ConsumeContext context) { - Console.WriteLine("发送(005,006) 【加急项目所有IQC待领取质控任务】邮件!!!"); + Log.Logger.Warning("发送(005,006) 【加急项目所有IQC待领取质控任务】邮件!!!"); var isEn_US = CultureInfo.CurrentCulture.Name == StaticData.CultureInfo.en_US; var subjectVisitId = context.Message.SubjectVisitId; @@ -49,80 +49,91 @@ public class CRCSubmitedAndQCToAuditEventConsumer( var trialEmailConfig = _trialEmailNoticeConfigrepository.Where(t => t.TrialId == trialId && t.BusinessScenarioEnum == scenario && t.IsAutoSend && t.IsEnable).FirstOrDefault(); + var trialUserList = await _trialUseRoleRepository.Where(x => x.TrialId == subjectVisit.TrialId && x.TrialUser.IsDeleted == false) + .Select(t => new { t.UserRole.IdentityUser.EMail, t.UserRole.FullName, t.UserRole.UserTypeEnum, t.UserRole.IdentityUser.UserWorkLanguage }).ToListAsync(); + + var trialInfo = await _trialRepository.FirstOrDefaultAsync(t => t.Id == subjectVisit.TrialId); + if (trialEmailConfig != null) { - - var trialUserList = await _trialUseRoleRepository.Where(x => x.TrialId == subjectVisit.TrialId && x.TrialUser.IsDeleted == false).Include(x => x.UserRole).Select(x => x.UserRole).ToListAsync(); - - var userinfoList = trialUserList.Where(x => x.UserTypeEnum == UserTypeEnum.IQC).ToList(); - - - var pmandAPm = trialUserList.Where(x => x.UserTypeEnum == UserTypeEnum.APM || x.UserTypeEnum == UserTypeEnum.ProjectManager).ToList(); - - var trialInfo = await _trialRepository.FirstOrDefaultAsync(t => t.Id == subjectVisit.TrialId); - - var auditStateCode = "AuditStatePE"; - - if (trialInfo.QCProcessEnum == TrialQCProcess.DoubleAudit) + // 遍历语言枚举 在底层判断收件人是否为空,决定是否跳过邮件发送,避免每个邮件场景的地方都重复判断 + foreach (UserWorkLanguage workLanguage in Enum.GetValues()) { - auditStateCode = "AuditStateRC"; - } + //重新设置当前发送邮件的语言 + isEn_US = workLanguage == UserWorkLanguage.US; + var iqcList = trialUserList.Where(x => x.UserTypeEnum == UserTypeEnum.IQC).Where(t => t.UserWorkLanguage == workLanguage).ToList(); - var dictionValue = await CommonEmailHelper.TranslationDictionary(new TranslationDictionaryDto() - { - DictionaryRepository = _dictionaryRepository, - IsEn_US = isEn_US, - DictionaryList = new List() + var pmandAPm = trialUserList.Where(x => x.UserTypeEnum == UserTypeEnum.APM || x.UserTypeEnum == UserTypeEnum.ProjectManager).ToList(); + + + var auditStateCode = "AuditStatePE"; + + if (trialInfo.QCProcessEnum == TrialQCProcess.DoubleAudit) + { + auditStateCode = "AuditStateRC"; + } + + var dictionValue = await CommonEmailHelper.TranslationDictionary(new TranslationDictionaryDto() + { + + DictionaryRepository = _dictionaryRepository, + IsEn_US = isEn_US, + DictionaryList = new List() { new DictionaryDto (){DictionaryCode= auditStateCode,EnumValue=subjectVisit.AuditState.GetEnumInt(), }, //审核状态 } - }); + }); - var messageToSend = new MimeMessage(); - //发件地址 - messageToSend.From.Add(new MailboxAddress(_systemEmailConfig.FromName, _systemEmailConfig.FromEmail)); + var messageToSend = new MimeMessage(); + //发件地址 + messageToSend.From.Add(new MailboxAddress(_systemEmailConfig.FromName, _systemEmailConfig.FromEmail)); + + + foreach (var userinfo in iqcList) + { + messageToSend.To.Add(new MailboxAddress(userinfo.FullName, userinfo.EMail)); + } + + var userNames = iqcList.Select(x => x.FullName).ToList(); + + foreach (var pm in pmandAPm) + { + messageToSend.Cc.Add(new MailboxAddress(pm.FullName, pm.EMail)); + } + + var companyName = isEn_US ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN; + + + + Func<(string topicStr, string htmlBodyStr), (string topicStr, string htmlBodyStr)> emailConfigFunc = input => + { + var subjectCode = subjectVisit.Subject.Code; + var topicStr = string.Format(input.topicStr, trialInfo.ResearchProgramNo, subjectCode, subjectVisit.VisitName); + var htmlBodyStr = string.Format( + CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, input.htmlBodyStr, workLanguage), + string.Join(',', userNames), // 用户名 {0} + trialInfo.ExperimentName, // 项目 {1} + subjectCode, // 受试者 {2} + subjectVisit.VisitName, // 访视 {3} + dictionValue[0], // 审核状态 {4} + _systemEmailConfig.SiteUrl // 链接 {5} + ); + + return (topicStr, htmlBodyStr); + }; + + await CommonEmailHelper.GetTrialEmailSubejctAndHtmlInfoAndBuildAsync(trialEmailConfig, messageToSend, emailConfigFunc, workLanguage); + + await SendEmailHelper.SendEmailAsync(messageToSend, trialInfo); - foreach (var userinfo in userinfoList) - { - messageToSend.To.Add(new MailboxAddress(userinfo.FullName, userinfo.EMail)); } - var userNames = userinfoList.Select(x => x.FullName).ToList(); - foreach (var pm in pmandAPm) - { - messageToSend.Cc.Add(new MailboxAddress(pm.FullName, pm.EMail)); - } - - var companyName = isEn_US ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN; - - - - Func<(string topicStr, string htmlBodyStr), (string topicStr, string htmlBodyStr)> emailConfigFunc = input => - { - var subjectCode = subjectVisit.Subject.Code; - var topicStr = string.Format(input.topicStr, trialInfo.ResearchProgramNo, subjectCode, subjectVisit.VisitName); - var htmlBodyStr = string.Format( - CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, input.htmlBodyStr), - string.Join(',', userNames), // 用户名 {0} - trialInfo.ExperimentName, // 项目 {1} - subjectCode, // 受试者 {2} - subjectVisit.VisitName, // 访视 {3} - dictionValue[0], // 审核状态 {4} - _systemEmailConfig.SiteUrl // 链接 {5} - ); - - return (topicStr, htmlBodyStr); - }; - - await CommonEmailHelper.GetTrialEmailSubejctAndHtmlInfoAndBuildAsync(trialEmailConfig, messageToSend, emailConfigFunc); - - await SendEmailHelper.SendEmailAsync(messageToSend, trialInfo); } } @@ -147,7 +158,7 @@ public class CRCRepliedQCChallengeEventConsumer( private readonly SystemEmailSendConfig _systemEmailConfig = systemEmailConfig.CurrentValue; public async Task Consume(ConsumeContext context) { - Console.WriteLine("发送(Code012,013) 【CRC 回复质控质疑 通知QC】邮件!!!"); + Log.Logger.Warning("发送(Code012,013) 【CRC 回复质控质疑 通知QC】邮件!!!"); var isEn_US = CultureInfo.CurrentCulture.Name == StaticData.CultureInfo.en_US; var subjectVisitId = context.Message.SubjectVisitId; @@ -158,26 +169,29 @@ public class CRCRepliedQCChallengeEventConsumer( var scenario = context.Message.IsPd ? EmailBusinessScenario.PDVerification_UnderQCQuery : EmailBusinessScenario.EligibilityVerification_Pending; + + var trialEmailConfig = _trialEmailNoticeConfigrepository.Where(t => t.TrialId == trialId && t.BusinessScenarioEnum == scenario && t.IsAutoSend && t.IsEnable).FirstOrDefault(); if (trialEmailConfig != null) { - - var qCChallengeDialog = await _qCChallengeDialogRepository.Where(x => x.Id == context.Message.QCChallengeDialogId).Include(x => x.QCChallenge).FirstNotNullAsync(); + var trialUserList = await _trialUseRoleRepository.Where(x => x.TrialId == subjectVisit.TrialId && x.TrialUser.IsDeleted == false) + .Select(t => new { t.UserRole.IdentityUser.EMail, t.UserRole.FullName, t.UserRole.UserTypeEnum, t.UserRole.IdentityUser.UserWorkLanguage }).ToListAsync(); - var trialUserList = await _trialUseRoleRepository.Where(x => x.TrialId == subjectVisit.TrialId && x.TrialUser.IsDeleted == false).Include(x => x.UserRole).Select(x => x.UserRole).ToListAsync(); var userinfoList = trialUserList.Where(x => x.UserTypeEnum == UserTypeEnum.IQC).ToList(); var pmandAPm = trialUserList.Where(x => x.UserTypeEnum == UserTypeEnum.APM || x.UserTypeEnum == UserTypeEnum.ProjectManager).ToList(); - - var trialInfo = await _trialRepository.FirstOrDefaultAsync(t => t.Id == subjectVisit.TrialId); var userinfo = subjectVisit.CurrentActionUser; + //重新设置当前发送邮件的语言 + var workLanguage = _userRoleRepository.Where(t => t.Id == userinfo.Id).Select(t => t.IdentityUser.UserWorkLanguage).First(); + isEn_US = workLanguage == UserWorkLanguage.US; + var messageToSend = new MimeMessage(); //发件地址 messageToSend.From.Add(new MailboxAddress(_systemEmailConfig.FromName, _systemEmailConfig.FromEmail)); @@ -207,7 +221,7 @@ public class CRCRepliedQCChallengeEventConsumer( var subjectCode = subjectVisit.Subject.Code; var topicStr = string.Format(input.topicStr, trialInfo.ResearchProgramNo, subjectCode, subjectVisit.VisitName); var htmlBodyStr = string.Format( - CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, input.htmlBodyStr), + CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, input.htmlBodyStr, workLanguage), userinfo.FullName, // 用户名 {0} trialInfo.ExperimentName, // 项目 {1} subjectCode, // 受试者 {2} @@ -219,7 +233,7 @@ public class CRCRepliedQCChallengeEventConsumer( return (topicStr, htmlBodyStr); }; - await CommonEmailHelper.GetTrialEmailSubejctAndHtmlInfoAndBuildAsync(trialEmailConfig, messageToSend, emailConfigFunc); + await CommonEmailHelper.GetTrialEmailSubejctAndHtmlInfoAndBuildAsync(trialEmailConfig, messageToSend, emailConfigFunc, workLanguage); await SendEmailHelper.SendEmailAsync(messageToSend, trialInfo); } @@ -244,7 +258,7 @@ public class QCRepliedQCChallengeEventConsumer( private readonly SystemEmailSendConfig _systemEmailConfig = systemEmailConfig.CurrentValue; public async Task Consume(ConsumeContext context) { - Console.WriteLine("发送(014,015) 【 QC回复 质控质疑,通知CRC】邮件!!!"); + Log.Logger.Warning("发送(014,015) 【 QC回复 质控质疑,通知CRC】邮件!!!"); var isEn_US = CultureInfo.CurrentCulture.Name == StaticData.CultureInfo.en_US; var subjectVisitId = context.Message.SubjectVisitId; @@ -277,54 +291,61 @@ public class QCRepliedQCChallengeEventConsumer( } - - var trialUserList = await _trialUseRoleRepository.Where(x => x.TrialId == subjectVisit.TrialId && x.TrialUser.IsDeleted == false).Include(x => x.UserRole).Select(x => x.UserRole).ToListAsync(); - - var userinfoList = trialUserList.Where(x => x.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator).ToList(); - - var craInfo = trialUserList.Where(x => x.UserTypeEnum == UserTypeEnum.CRA).FirstOrDefault(); + var trialUserList = await _trialUseRoleRepository.Where(x => x.TrialId == subjectVisit.TrialId && x.TrialUser.IsDeleted == false) + .Select(t => new { t.UserRole.IdentityUser.EMail, t.UserRole.FullName, t.UserRole.UserTypeEnum, t.UserRole.IdentityUser.UserWorkLanguage }).ToListAsync(); var trialInfo = await _trialRepository.FirstOrDefaultAsync(t => t.Id == subjectVisit.TrialId); - - - var dictionValue = await CommonEmailHelper.TranslationDictionary(new TranslationDictionaryDto() + // 遍历语言枚举 在底层判断收件人是否为空,决定是否跳过邮件发送,避免每个邮件场景的地方都重复判断 + foreach (UserWorkLanguage workLanguage in Enum.GetValues()) { - - DictionaryRepository = _dictionaryRepository, - IsEn_US = isEn_US, - DictionaryList = new List() - { - new DictionaryDto (){DictionaryCode= "YesOrNo",EnumValue=isclose.ToString().ToLower(), }, //是否关闭 - - } - }); + //重新设置当前发送邮件的语言 + isEn_US = workLanguage == UserWorkLanguage.US; + + + var userinfoList = trialUserList.Where(x => x.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator).Where(t => t.UserWorkLanguage == workLanguage).ToList(); + + var craInfoList = trialUserList.Where(x => x.UserTypeEnum == UserTypeEnum.CRA).ToList(); + + var dictionValue = await CommonEmailHelper.TranslationDictionary(new TranslationDictionaryDto() + { + + DictionaryRepository = _dictionaryRepository, + IsEn_US = isEn_US, + DictionaryList = new List() + { + new DictionaryDto (){DictionaryCode= "YesOrNo",EnumValue=isclose.ToString().ToLower(), }, //是否关闭 + + } + }); - foreach (var userinfo in userinfoList) - { var messageToSend = new MimeMessage(); //发件地址 messageToSend.From.Add(new MailboxAddress(_systemEmailConfig.FromName, _systemEmailConfig.FromEmail)); - messageToSend.To.Add(new MailboxAddress(userinfo.FullName, userinfo.EMail)); - if (craInfo != null) + + var toUserName = string.Join('、', userinfoList.Select(t => t.FullName)); + + foreach (var userinfo in userinfoList) { - messageToSend.Cc.Add(new MailboxAddress(craInfo.FullName, craInfo.EMail)); + messageToSend.To.Add(new MailboxAddress(userinfo.FullName, userinfo.EMail)); + } + + foreach (var user in craInfoList) + { + messageToSend.Cc.Add(new MailboxAddress(user.FullName, user.EMail)); } var companyName = isEn_US ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN; - - - Func<(string topicStr, string htmlBodyStr), (string topicStr, string htmlBodyStr)> emailConfigFunc = input => { var subjectCode = subjectVisit.Subject.Code; var topicStr = string.Format(input.topicStr, trialInfo.ResearchProgramNo, subjectCode, subjectVisit.VisitName); var htmlBodyStr = string.Format( - CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, input.htmlBodyStr), - userinfo.FullName, // 用户名 {0} + CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, input.htmlBodyStr, workLanguage), + toUserName, // 用户名 {0} trialInfo.ExperimentName, // 项目 {1} subjectCode, // 受试者 {2} subjectVisit.VisitName, // 访视 {3} @@ -337,10 +358,13 @@ public class QCRepliedQCChallengeEventConsumer( }; - await CommonEmailHelper.GetTrialEmailSubejctAndHtmlInfoAndBuildAsync(trialEmailConfig, messageToSend, emailConfigFunc); + await CommonEmailHelper.GetTrialEmailSubejctAndHtmlInfoAndBuildAsync(trialEmailConfig, messageToSend, emailConfigFunc, workLanguage); await SendEmailHelper.SendEmailAsync(messageToSend, trialInfo); + } + + } } } @@ -671,7 +695,7 @@ public class QCClaimTaskEventConsumer( private readonly SystemEmailSendConfig _systemEmailConfig = systemEmailConfig.CurrentValue; public async Task Consume(ConsumeContext context) { - Console.WriteLine("发送(Code007,008) 【QC 领取了质控任务】邮件!!!"); + Log.Logger.Warning("发送(Code007,008) 【QC 领取了质控任务】邮件!!!"); var isEn_US = CultureInfo.CurrentCulture.Name == StaticData.CultureInfo.en_US; @@ -708,6 +732,10 @@ public class QCClaimTaskEventConsumer( return; } + //重新设置当前发送邮件的语言 + var workLanguage = _userRoleRepository.Where(t => t.Id == userinfo.Id).Select(t => t.IdentityUser.UserWorkLanguage).First(); + isEn_US = workLanguage == UserWorkLanguage.US; + var messageToSend = new MimeMessage(); //发件地址 messageToSend.From.Add(new MailboxAddress(_systemEmailConfig.FromName, _systemEmailConfig.FromEmail)); @@ -745,7 +773,7 @@ public class QCClaimTaskEventConsumer( var subjectCode = subjectVisit.Subject.Code; var topicStr = string.Format(input.topicStr, trialInfo.ResearchProgramNo, subjectCode, subjectVisit.VisitName); var htmlBodyStr = string.Format( - CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, input.htmlBodyStr), + CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, input.htmlBodyStr, workLanguage), userinfo.FullName, // 用户名 {0} trialInfo.ExperimentName, // 项目 {1} string.Join(',', subjectcodes), // 受试者 {2} @@ -759,7 +787,7 @@ public class QCClaimTaskEventConsumer( }; - await CommonEmailHelper.GetTrialEmailSubejctAndHtmlInfoAndBuildAsync(trialEmailConfig, messageToSend, emailConfigFunc); + await CommonEmailHelper.GetTrialEmailSubejctAndHtmlInfoAndBuildAsync(trialEmailConfig, messageToSend, emailConfigFunc, workLanguage); await SendEmailHelper.SendEmailAsync(messageToSend, trialInfo); } diff --git a/IRaCIS.Core.Application/Service/Common/MailService.cs b/IRaCIS.Core.Application/Service/Common/MailService.cs index 907d4bf7f..9517f3fae 100644 --- a/IRaCIS.Core.Application/Service/Common/MailService.cs +++ b/IRaCIS.Core.Application/Service/Common/MailService.cs @@ -66,7 +66,7 @@ namespace IRaCIS.Core.Application.Service Task AddUserSendEmailAsync(Guid userId, string baseUrl, string routeUrl); - Task AdminResetPwdSendEmailAsync(Guid userId, string pwdNotMd5 = "123456", string baseUrl=""); + Task AdminResetPwdSendEmailAsync(Guid userId, string pwdNotMd5 = "123456", string baseUrl = ""); Task SiteSurveyUserJoinEmail(Guid trialId, Guid userId, string userTypes, string baseUrl, string rootUrl); @@ -104,10 +104,18 @@ namespace IRaCIS.Core.Application.Service { private readonly SystemEmailSendConfig _systemEmailConfig = systemEmailConfig.CurrentValue; - + /// + /// 获取邮件主题和html 通用封装 以用户语言为主,没有的就用当前的请求语言_userInfo.IsEn_Us + /// + /// + /// + /// + /// + /// + /// private async Task GetEmailSubejctAndHtmlInfoAndBuildAsync(EmailBusinessScenario scenario, MimeMessage messageToSend, - Func<(string topicStr, string htmlBodyStr), (string topicStr, string htmlBodyStr)> emailFunc) + Func<(string topicStr, string htmlBodyStr), (string topicStr, string htmlBodyStr)> emailFunc, UserWorkLanguage? userWorkLanguage = null) { var configInfo = await _emailNoticeConfigrepository.Where(t => t.BusinessScenarioEnum == scenario).FirstOrDefaultAsync(); @@ -119,7 +127,9 @@ namespace IRaCIS.Core.Application.Service } - var (topicStr, htmlBodyStr) = _userInfo.IsEn_Us ? (configInfo.EmailTopic, configInfo.EmailHtmlContent) : (configInfo.EmailTopicCN, configInfo.EmailHtmlContentCN); + bool isEn_Us = userWorkLanguage.HasValue ? userWorkLanguage.Value == UserWorkLanguage.US : _userInfo.IsEn_Us; + + var (topicStr, htmlBodyStr) = isEn_Us ? (configInfo.EmailTopic, configInfo.EmailHtmlContent) : (configInfo.EmailTopicCN, configInfo.EmailHtmlContentCN); try { @@ -355,8 +365,7 @@ namespace IRaCIS.Core.Application.Service var redirectUrl = $"{domain}/api/User/UserRedirect?url={System.Web.HttpUtility.UrlEncode(routeUrl)}"; - - var companyName = _userInfo.IsEn_Us ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN; + var companyName = sysUserInfo.UserWorkLanguage == UserWorkLanguage.US ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN; Func<(string topicStr, string htmlBodyStr), (string topicStr, string htmlBodyStr)> emailConfigFunc = input => { @@ -374,7 +383,7 @@ namespace IRaCIS.Core.Application.Service }; - await GetEmailSubejctAndHtmlInfoAndBuildAsync(EmailBusinessScenario.SysCreateUser, messageToSend, emailConfigFunc); + await GetEmailSubejctAndHtmlInfoAndBuildAsync(EmailBusinessScenario.SysCreateUser, messageToSend, emailConfigFunc, sysUserInfo.UserWorkLanguage); await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig); @@ -393,7 +402,7 @@ namespace IRaCIS.Core.Application.Service //主题 //---[来自展影IRC] 关于重置账户密码的提醒 - var companyName = _userInfo.IsEn_Us ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN; + var companyName = sysUserInfo.UserWorkLanguage == UserWorkLanguage.US ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN; Func<(string topicStr, string htmlBodyStr), (string topicStr, string htmlBodyStr)> emailConfigFunc = input => { @@ -413,7 +422,7 @@ namespace IRaCIS.Core.Application.Service }; - await GetEmailSubejctAndHtmlInfoAndBuildAsync(EmailBusinessScenario.SysResetPassword, messageToSend, emailConfigFunc); + await GetEmailSubejctAndHtmlInfoAndBuildAsync(EmailBusinessScenario.SysResetPassword, messageToSend, emailConfigFunc, sysUserInfo.UserWorkLanguage); await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig); } @@ -910,7 +919,7 @@ namespace IRaCIS.Core.Application.Service { await SendEmailHelper.SendEmailAsync(messageToSend, trialinfo); } - + } @@ -935,7 +944,7 @@ namespace IRaCIS.Core.Application.Service { var topicStr = string.Format(input.topicStr, companyName); - var htmlBodyStr = string.Format(ReplacePlatformName(ReplaceCompanyName(input.htmlBodyStr)) , + var htmlBodyStr = string.Format(ReplacePlatformName(ReplaceCompanyName(input.htmlBodyStr)), sysUserInfo.FullName ); @@ -985,7 +994,7 @@ namespace IRaCIS.Core.Application.Service public async Task SiteSuervyUpdateUser(Guid trialSiteId, string email, string name, string url) { - var siteInfo = await _trialSiteRepository.Where(t => t.Id == trialSiteId).Include(x=>x.Trial).FirstOrDefaultAsync(); + var siteInfo = await _trialSiteRepository.Where(t => t.Id == trialSiteId).Include(x => x.Trial).FirstOrDefaultAsync(); var trialInfo = siteInfo.Trial; var messageToSend = new MimeMessage(); diff --git a/IRaCIS.Core.Application/Service/Document/SystemDocumentService.cs b/IRaCIS.Core.Application/Service/Document/SystemDocumentService.cs index 3da118184..4e70aa087 100644 --- a/IRaCIS.Core.Application/Service/Document/SystemDocumentService.cs +++ b/IRaCIS.Core.Application/Service/Document/SystemDocumentService.cs @@ -173,23 +173,16 @@ namespace IRaCIS.Core.Application.Services if (newUserTypeIds.Any()&& newUserTypeIds.Count()>0) { // 发送邮件给新增的角色 - Console.WriteLine("开始 发送系统文档更新邮件给新增角色"); - Console.WriteLine(string.Join(",", newUserTypeIds)); + Log.Logger.Warning("开始 发送系统文档更新邮件给新增角色"); + Log.Logger.Warning(string.Join(",", newUserTypeIds)); - Task.Run(async () => + // 只发送给新增的角色 + await _mediatorScoped.Publish(new SystemDocumentPublishEvent { - // 创建独立作用域 - using (var scope = serviceScopeFactory.CreateScope()) - { - // 从新作用域解析服务 - var mediator = scope.ServiceProvider.GetRequiredService(); - // 只发送给新增的角色 - await mediator.Publish(new SystemDocumentPublishEvent { - Ids = new List { document.Id }, - NewUserTypeIds = newUserTypeIds - }); - } + Ids = new List { document.Id }, + NewUserTypeIds = newUserTypeIds }); + } } @@ -214,18 +207,10 @@ namespace IRaCIS.Core.Application.Services IsDeleted = false, }); - Console.WriteLine("开始 发布系统文档"); + Log.Logger.Warning("开始 发布系统文档"); + + await _mediatorScoped.Publish(new SystemDocumentPublishEvent { Ids = inDto.Ids }); - Task.Run(async () => - { - // 创建独立作用域 - using (var scope = serviceScopeFactory.CreateScope()) - { - // 从新作用域解析服务 - var mediator = scope.ServiceProvider.GetRequiredService(); - await mediator.Publish(new SystemDocumentPublishEvent { Ids = inDto.Ids }); - } - }); return ResponseOutput.Result(true); diff --git a/IRaCIS.Core.Application/Service/Document/TrialDocumentService.cs b/IRaCIS.Core.Application/Service/Document/TrialDocumentService.cs index 08bc62d20..11381f8ee 100644 --- a/IRaCIS.Core.Application/Service/Document/TrialDocumentService.cs +++ b/IRaCIS.Core.Application/Service/Document/TrialDocumentService.cs @@ -27,6 +27,7 @@ namespace IRaCIS.Core.Application.Services [ApiExplorerSettings(GroupName = "Trial")] public class TrialDocumentService(IRepository _trialDocumentRepository, IRepository _trialRepository, + IScopedMediator _mediatorScoped, IRepository _auditRecordRepository, IRepository _trialDocumentAttachmentRepository, ISystemDocumentService _systemDocumentService, @@ -105,18 +106,11 @@ namespace IRaCIS.Core.Application.Services IsDeleted = false, }, false, true); await _trialDocumentRepository.SaveChangesAsync(); - Console.WriteLine("开始 发布项目文档"); + Serilog.Log.Logger.Warning("开始 发布项目文档"); - Task.Run(async () => - { - // 创建独立作用域 - using (var scope = serviceScopeFactory.CreateScope()) - { - // 从新作用域解析服务 - var mediator = scope.ServiceProvider.GetRequiredService(); - await mediator.Publish(new TrialDocumentPublishEvent { Ids = inDto.Ids }); - } - }); + await _mediatorScoped.Publish(new TrialDocumentPublishEvent { Ids = inDto.Ids }); + + return ResponseOutput.Result(true); @@ -128,32 +122,20 @@ namespace IRaCIS.Core.Application.Services /// public async Task TestPush() { - Task.Run(async () => - { - // 创建独立作用域 - using (var scope = serviceScopeFactory.CreateScope()) - { - // 从新作用域解析服务 - var mediator = scope.ServiceProvider.GetRequiredService(); - await mediator.Publish(new TrialDocumentErverDayEvent { }); - } - }); + + + await _mediatorScoped.Publish(new TrialDocumentErverDayEvent { }); + return ResponseOutput.Result(true); } public async Task TestSendEmail() { - Task.Run(async () => - { - // 创建独立作用域 - using (var scope = serviceScopeFactory.CreateScope()) - { - // 从新作用域解析服务 - var mediator = scope.ServiceProvider.GetRequiredService(); - await mediator.Publish(new ImageQCRecurringEvent { TrialId = Guid.Parse("08de2254-5d7d-581a-0242-0a0001000000") }); - } - }); + + await _mediatorScoped.Publish(new ImageQCRecurringEvent { TrialId = Guid.Parse("08de2254-5d7d-581a-0242-0a0001000000") }); + + return ResponseOutput.Result(true); } @@ -1170,21 +1152,13 @@ namespace IRaCIS.Core.Application.Services Console.WriteLine("开始 发送项目文档更新邮件给新增角色"); Console.WriteLine(string.Join(",", newUserTypeIds)); - Task.Run(async () => + await _mediatorScoped.Publish(new TrialDocumentPublishEvent { - // 创建独立作用域 - using (var scope = serviceScopeFactory.CreateScope()) - { - // 从新作用域解析服务 - var mediator = scope.ServiceProvider.GetRequiredService(); - // 只发送给新增的角色 - await mediator.Publish(new TrialDocumentPublishEvent - { - Ids = new List { document.Id }, - NewUserTypeIds = newUserTypeIds - }); - } + Ids = new List { document.Id }, + NewUserTypeIds = newUserTypeIds }); + + } } return ResponseOutput.Ok(document.Id.ToString());