diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
index 774868c86..654eb64f0 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 @@
- ����
+ 质疑
- һ���Ժ˲�
+ 一致性核查
- ����
+ 复制
@@ -19975,7 +19988,7 @@
TrialDocumentService
-
+
TrialDocumentService
diff --git a/IRaCIS.Core.Application/MassTransit/Consumer/CommonEmailHelper.cs b/IRaCIS.Core.Application/MassTransit/Consumer/CommonEmailHelper.cs
index f02d835e0..f628bb5ea 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);
@@ -94,12 +97,20 @@ Func<(string topicStr, string htmlBodyStr), (string topicStr, string htmlBodyStr
return configInfo;
}
-
-
-
- public static string ReplaceCompanyName(SystemEmailSendConfig _systemEmailConfig, string needDealtxt)
+ public static string ReplacePlatformName(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 platformName = isEn_US ? _systemEmailConfig.PlatformName : _systemEmailConfig.PlatformNameCN;
+
+ var str = needDealtxt.Replace("{platformName}", platformName);
+ return str;
+ }
+
+
+ public static string ReplaceCompanyName(SystemEmailSendConfig _systemEmailConfig, string needDealtxt, UserWorkLanguage? userWorkLanguage = null)
+ {
+ 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..900e308af 100644
--- a/IRaCIS.Core.Application/Service/Common/MailService.cs
+++ b/IRaCIS.Core.Application/Service/Common/MailService.cs
@@ -1,6 +1,8 @@
-using IRaCIS.Application.Contracts;
+using DocumentFormat.OpenXml.Spreadsheet;
+using IRaCIS.Application.Contracts;
using IRaCIS.Core.Application.Auth;
using IRaCIS.Core.Application.Helper;
+using IRaCIS.Core.Application.MassTransit.Consumer;
using IRaCIS.Core.Domain.Models;
using IRaCIS.Core.Domain.Share;
using IRaCIS.Core.Infrastructure;
@@ -66,7 +68,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 +106,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 +129,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
{
@@ -182,24 +194,16 @@ namespace IRaCIS.Core.Application.Service
return sucessHandle;
}
- private string ReplaceCompanyName(string needDealtxt)
- {
- var str = needDealtxt.Replace("{company}", _userInfo.IsEn_Us ? _systemEmailConfig.CompanyName : _systemEmailConfig.CompanyNameCN)
- .Replace("{company abbreviation}", _userInfo.IsEn_Us ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN);
- return str;
- }
- private string ReplacePlatformName(string needDealtxt)
- {
- var platformName = _userInfo.IsEn_Us ? _systemEmailConfig.PlatformName : _systemEmailConfig.PlatformNameCN;
-
- var str = needDealtxt.Replace("{platformName}", platformName);
- return str;
- }
//MFA
public async Task SenMFAVerifyEmail(Guid userId, string userName, string emailAddress, int verificationCode, UserMFAType mfaType = UserMFAType.Login)
{
+
+ //设置工作语言
+ var workLanguage = _identityUserRepository.Where(t => t.Id == userId).Select(t => t.UserWorkLanguage).First();
+ var isEn_US = workLanguage == UserWorkLanguage.US;
+
var messageToSend = new MimeMessage();
//发件地址
messageToSend.From.Add(new MailboxAddress(_systemEmailConfig.FromName, _systemEmailConfig.FromEmail));
@@ -207,13 +211,13 @@ namespace IRaCIS.Core.Application.Service
messageToSend.To.Add(new MailboxAddress(userName, emailAddress));
//主题---[来自{0}] 关于MFA邮箱验证的提醒
- var companyName = _userInfo.IsEn_Us ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN;
+ 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(ReplaceCompanyName(input.htmlBodyStr),
+ var htmlBodyStr = string.Format(CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, input.htmlBodyStr, workLanguage),
userName,
verificationCode
);
@@ -222,7 +226,7 @@ namespace IRaCIS.Core.Application.Service
};
- await GetEmailSubejctAndHtmlInfoAndBuildAsync(mfaType == UserMFAType.Login ? EmailBusinessScenario.MFALogin : EmailBusinessScenario.MFAUnlock, messageToSend, emailConfigFunc);
+ await GetEmailSubejctAndHtmlInfoAndBuildAsync(mfaType == UserMFAType.Login ? EmailBusinessScenario.MFALogin : EmailBusinessScenario.MFAUnlock, messageToSend, emailConfigFunc, workLanguage);
var sucessHandle = GetEmailSuccessHandle(userId, verificationCode, emailAddress);
@@ -245,6 +249,11 @@ namespace IRaCIS.Core.Application.Service
public async Task SendEmailVerification(string emailAddress, int verificationCode)
{
+ //设置工作语言
+ var isEn_US = _userInfo.IsEn_Us;
+ var workLanguage = _userInfo.IsEn_Us ? UserWorkLanguage.US : UserWorkLanguage.CN;
+
+
var messageToSend = new MimeMessage();
//发件地址
messageToSend.From.Add(new MailboxAddress(_systemEmailConfig.FromName, _systemEmailConfig.FromEmail));
@@ -253,13 +262,13 @@ namespace IRaCIS.Core.Application.Service
//主题
//---[来自展影IRC]的提醒
- var companyName = _userInfo.IsEn_Us ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN;
+ 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(ReplaceCompanyName(input.htmlBodyStr),
+ var htmlBodyStr = string.Format(CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, input.htmlBodyStr, workLanguage),
"Sir/Madam",
//---您正在参与展影医疗IRC项目
@@ -271,7 +280,7 @@ namespace IRaCIS.Core.Application.Service
};
- await GetEmailSubejctAndHtmlInfoAndBuildAsync(EmailBusinessScenario.ReviewerLogin, messageToSend, emailConfigFunc);
+ await GetEmailSubejctAndHtmlInfoAndBuildAsync(EmailBusinessScenario.ReviewerLogin, messageToSend, emailConfigFunc, workLanguage);
//此时不知道用户
var sucessHandle = GetEmailSuccessHandle(Guid.Empty, verificationCode, emailAddress);
@@ -286,8 +295,10 @@ namespace IRaCIS.Core.Application.Service
//中心调研 登陆 发送验证码
public async Task AnolymousSendEmail(Guid trialId, string emailAddress, int verificationCode)
{
- //throw new BusinessValidationFailedException("模拟邮件取数据或者发送异常!!!");
+ //设置工作语言
+ var isEn_US = _userInfo.IsEn_Us;
+ var workLanguage = _userInfo.IsEn_Us ? UserWorkLanguage.US : UserWorkLanguage.CN;
var trialInfo = await _trialRepository.FirstOrDefaultAsync(t => t.Id == trialId);
@@ -299,13 +310,13 @@ namespace IRaCIS.Core.Application.Service
//主题
//$"[来自展影IRC] [{researchProgramNo}] 关于中心调研的提醒";
- var companyName = _userInfo.IsEn_Us ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN;
+ 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(ReplaceCompanyName(input.htmlBodyStr),
+ var htmlBodyStr = string.Format(CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, input.htmlBodyStr, workLanguage),
"Sir/Madam",
//---您正在参与展影医疗IRC项目中心调研工作
@@ -317,7 +328,7 @@ namespace IRaCIS.Core.Application.Service
};
- await GetEmailSubejctAndHtmlInfoAndBuildAsync(EmailBusinessScenario.SiteSurveyLogin, messageToSend, emailConfigFunc);
+ await GetEmailSubejctAndHtmlInfoAndBuildAsync(EmailBusinessScenario.SiteSurveyLogin, messageToSend, emailConfigFunc, workLanguage);
//此时不知道用户
var sucessHandle = GetEmailSuccessHandle(Guid.Empty, verificationCode, emailAddress);
@@ -335,6 +346,9 @@ namespace IRaCIS.Core.Application.Service
var sysUserInfo = (await _identityUserRepository.Where(t => t.Id == userId).Include(t => t.UserRoleList).ThenInclude(c => c.UserTypeRole).FirstOrDefaultAsync()).IfNullThrowException();
+ //设置工作语言
+ var workLanguage = sysUserInfo.UserWorkLanguage;
+ var isEn_US = workLanguage == UserWorkLanguage.US;
var messageToSend = new MimeMessage();
//发件地址
@@ -355,14 +369,13 @@ 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 = 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(ReplaceCompanyName(input.htmlBodyStr),
+ var htmlBodyStr = string.Format(CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, input.htmlBodyStr, workLanguage),
sysUserInfo.FullName,
sysUserInfo.EMail,
@@ -374,7 +387,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);
@@ -385,6 +398,11 @@ namespace IRaCIS.Core.Application.Service
{
var sysUserInfo = (await _identityUserRepository.Where(t => t.Id == userId).Include(t => t.UserRoleList).ThenInclude(c => c.UserTypeRole).FirstOrDefaultAsync()).IfNullThrowException();
+
+ //设置工作语言
+ var workLanguage = sysUserInfo.UserWorkLanguage;
+ var isEn_US = workLanguage == UserWorkLanguage.US;
+
var messageToSend = new MimeMessage();
//发件地址
messageToSend.From.Add(new MailboxAddress(_systemEmailConfig.FromName, _systemEmailConfig.FromEmail));
@@ -393,13 +411,13 @@ namespace IRaCIS.Core.Application.Service
//主题
//---[来自展影IRC] 关于重置账户密码的提醒
- var companyName = _userInfo.IsEn_Us ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN;
+ 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(ReplaceCompanyName(input.htmlBodyStr),
+ var htmlBodyStr = string.Format(CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, input.htmlBodyStr, workLanguage),
sysUserInfo.FullName,
sysUserInfo.UserName,
@@ -413,7 +431,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);
}
@@ -421,6 +439,10 @@ namespace IRaCIS.Core.Application.Service
//用户重置邮箱
public async Task SendMailEditEmail(Guid userId, string userName, string emailAddress, int verificationCode)
{
+ //设置工作语言
+ var workLanguage = _identityUserRepository.Where(t => t.Id == userId).Select(t => t.UserWorkLanguage).First();
+ var isEn_US = workLanguage == UserWorkLanguage.US;
+
var messageToSend = new MimeMessage();
//发件地址
@@ -430,13 +452,13 @@ namespace IRaCIS.Core.Application.Service
//主题
//---[来自展影IRC] 关于重置邮箱的提醒
- var companyName = _userInfo.IsEn_Us ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN;
+ 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(ReplaceCompanyName(input.htmlBodyStr),
+ var htmlBodyStr = string.Format(CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, input.htmlBodyStr, workLanguage),
userName,
//---您正在进行邮箱重置操作
@@ -447,7 +469,7 @@ namespace IRaCIS.Core.Application.Service
};
- await GetEmailSubejctAndHtmlInfoAndBuildAsync(EmailBusinessScenario.UserResetEmail, messageToSend, emailConfigFunc);
+ await GetEmailSubejctAndHtmlInfoAndBuildAsync(EmailBusinessScenario.UserResetEmail, messageToSend, emailConfigFunc, workLanguage);
var sucessHandle = GetEmailSuccessHandle(userId, verificationCode, emailAddress);
@@ -460,6 +482,11 @@ namespace IRaCIS.Core.Application.Service
//不登录 通过邮箱重置密码
public async Task AnolymousSendEmailForResetAccount(string emailAddress, int verificationCode)
{
+
+ //设置工作语言
+ var isEn_US = _userInfo.IsEn_Us;
+ var workLanguage = _userInfo.IsEn_Us ? UserWorkLanguage.US : UserWorkLanguage.CN;
+
var messageToSend = new MimeMessage();
//发件地址
messageToSend.From.Add(new MailboxAddress(_systemEmailConfig.FromName, _systemEmailConfig.FromEmail));
@@ -467,13 +494,13 @@ namespace IRaCIS.Core.Application.Service
messageToSend.To.Add(new MailboxAddress(String.Empty, emailAddress));
- var companyName = _userInfo.IsEn_Us ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN;
+ 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(ReplaceCompanyName(input.htmlBodyStr),
+ var htmlBodyStr = string.Format(CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, input.htmlBodyStr, workLanguage),
"Sir/Madam",
//---您正在进行邮箱重置密码操作
@@ -484,7 +511,7 @@ namespace IRaCIS.Core.Application.Service
};
- await GetEmailSubejctAndHtmlInfoAndBuildAsync(EmailBusinessScenario.UnloginUseEmailResetPassword, messageToSend, emailConfigFunc);
+ await GetEmailSubejctAndHtmlInfoAndBuildAsync(EmailBusinessScenario.UnloginUseEmailResetPassword, messageToSend, emailConfigFunc, workLanguage);
////此时不知道用户
var sucessHandle = GetEmailSuccessHandle(Guid.Empty, verificationCode, emailAddress);
@@ -500,6 +527,11 @@ namespace IRaCIS.Core.Application.Service
var sysUserInfo = (await _identityUserRepository.Where(t => t.Id == userId).FirstOrDefaultAsync()).IfNullThrowException();
+ //设置工作语言
+ var workLanguage = sysUserInfo.UserWorkLanguage;
+ var isEn_US = workLanguage == UserWorkLanguage.US;
+
+
var messageToSend = new MimeMessage();
//发件地址
messageToSend.From.Add(new MailboxAddress(_systemEmailConfig.FromName, _systemEmailConfig.FromEmail));
@@ -518,18 +550,18 @@ namespace IRaCIS.Core.Application.Service
var domain = baseUrl.Substring(0, baseUrl.IndexOf("/login"));
- var routeUrl = rootUrl + "?UserId=" + sysUserInfo.Id + "&Email=" + sysUserInfo.EMail + "&lang=" + (_userInfo.IsEn_Us ? "en" : "zh") + "&access_token=" + token;
+ var routeUrl = rootUrl + "?UserId=" + sysUserInfo.Id + "&Email=" + sysUserInfo.EMail + "&lang=" + (isEn_US ? "en" : "zh") + "&access_token=" + token;
var redirectUrl = $"{domain}/api/User/UserRedirect?url={System.Web.HttpUtility.UrlEncode(routeUrl)}";
- var companyName = _userInfo.IsEn_Us ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN;
+ 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(ReplaceCompanyName(input.htmlBodyStr),
+ var htmlBodyStr = string.Format(CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, input.htmlBodyStr, workLanguage),
sysUserInfo.FullName,
trialInfo.ExperimentName,
@@ -544,9 +576,9 @@ namespace IRaCIS.Core.Application.Service
};
- await GetEmailSubejctAndHtmlInfoAndBuildAsync(sysUserInfo.IsFirstAdd ? EmailBusinessScenario.SiteUseOrExternalUserFirstrJoinTrial : EmailBusinessScenario.SiteUserOrExternalUserExistJoinTrial, messageToSend, emailConfigFunc);
+ await GetEmailSubejctAndHtmlInfoAndBuildAsync(sysUserInfo.IsFirstAdd ? EmailBusinessScenario.SiteUseOrExternalUserFirstrJoinTrial : EmailBusinessScenario.SiteUserOrExternalUserExistJoinTrial, messageToSend, emailConfigFunc, workLanguage);
- await SendEmailHelper.SendEmailAsync(messageToSend, trialInfo, null);
+ await SendEmailHelper.SendEmailAsync(messageToSend, trialInfo);
}
@@ -555,10 +587,12 @@ namespace IRaCIS.Core.Application.Service
{
var sysUserInfo = (await _identityUserRepository.Where(t => t.Id == userId).FirstOrDefaultAsync()).IfNullThrowException();
-
-
var trialInfo = await _trialRepository.FirstOrDefaultAsync(t => t.Id == trialId);
+ //设置工作语言
+ var workLanguage = sysUserInfo.UserWorkLanguage;
+ var isEn_US = workLanguage == UserWorkLanguage.US;
+
var messageToSend = new MimeMessage();
//发件地址
messageToSend.From.Add(new MailboxAddress(_systemEmailConfig.FromName, _systemEmailConfig.FromEmail));
@@ -575,20 +609,20 @@ namespace IRaCIS.Core.Application.Service
await _identityUserRepository.BatchUpdateNoTrackingAsync(t => t.Id == sysUserInfo.Id, u => new Domain.Models.IdentityUser() { EmailToken = token });
}
- var routeUrl = rootUrl + "?UserId=" + sysUserInfo.Id + "&Email=" + sysUserInfo.EMail + "&lang=" + (_userInfo.IsEn_Us ? "en" : "zh") + "&access_token=" + token;
+ var routeUrl = rootUrl + "?UserId=" + sysUserInfo.Id + "&Email=" + sysUserInfo.EMail + "&lang=" + (isEn_US ? "en" : "zh") + "&access_token=" + token;
var domain = baseUrl.Substring(0, baseUrl.IndexOf("/login"));
var redirectUrl = $"{domain}/api/User/UserRedirect?url={System.Web.HttpUtility.UrlEncode(routeUrl)}";
- var companyName = _userInfo.IsEn_Us ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN;
+ 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(ReplaceCompanyName(input.htmlBodyStr),
+ var htmlBodyStr = string.Format(CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, input.htmlBodyStr, workLanguage),
sysUserInfo.FullName,
trialInfo.ExperimentName,
@@ -603,7 +637,7 @@ namespace IRaCIS.Core.Application.Service
};
- await GetEmailSubejctAndHtmlInfoAndBuildAsync(sysUserInfo.IsFirstAdd ? EmailBusinessScenario.SiteUseOrExternalUserFirstrJoinTrial : EmailBusinessScenario.SiteUserOrExternalUserExistJoinTrial, messageToSend, emailConfigFunc);
+ await GetEmailSubejctAndHtmlInfoAndBuildAsync(sysUserInfo.IsFirstAdd ? EmailBusinessScenario.SiteUseOrExternalUserFirstrJoinTrial : EmailBusinessScenario.SiteUserOrExternalUserExistJoinTrial, messageToSend, emailConfigFunc, workLanguage);
await SendEmailHelper.SendEmailAsync(messageToSend, trialInfo);
@@ -692,6 +726,11 @@ namespace IRaCIS.Core.Application.Service
var trialInfo = await _trialRepository.FirstOrDefaultAsync(t => t.Id == trialId);
+
+ //设置工作语言
+ var workLanguage = sysUserInfo.UserWorkLanguage;
+ var isEn_US = workLanguage == UserWorkLanguage.US;
+
var messageToSend = new MimeMessage();
//发件地址
messageToSend.From.Add(new MailboxAddress(_systemEmailConfig.FromName, _systemEmailConfig.FromEmail));
@@ -717,13 +756,13 @@ namespace IRaCIS.Core.Application.Service
// $"[来自展影IRC] [{trialInfo.ResearchProgramNo}]邀请信";
- var companyName = _userInfo.IsEn_Us ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN;
+ 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(ReplaceCompanyName(input.htmlBodyStr),
+ var htmlBodyStr = string.Format(CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, input.htmlBodyStr, workLanguage),
sysUserInfo.FullName,
trialInfo.ExperimentName,
@@ -738,7 +777,7 @@ namespace IRaCIS.Core.Application.Service
};
- await GetEmailSubejctAndHtmlInfoAndBuildAsync(sysUserInfo.IsFirstAdd ? EmailBusinessScenario.DoctorUserFirstJoinTrial : EmailBusinessScenario.DoctorUserExistJoinTrial, messageToSend, emailConfigFunc);
+ await GetEmailSubejctAndHtmlInfoAndBuildAsync(sysUserInfo.IsFirstAdd ? EmailBusinessScenario.DoctorUserFirstJoinTrial : EmailBusinessScenario.DoctorUserExistJoinTrial, messageToSend, emailConfigFunc,workLanguage);
await SendEmailHelper.SendEmailAsync(messageToSend, trialInfo, null);
@@ -760,6 +799,10 @@ namespace IRaCIS.Core.Application.Service
{
var feedBack = await _userFeedBackRepository.Where(t => t.Id == feedBackId).Include(t => t.CreateUserRole.UserTypeRole).Include(t => t.CreateUserRole.IdentityUser).FirstNotNullAsync();
+ //设置工作语言
+ var workLanguage = _identityUserRepository.Where(t => t.Id == _userInfo.IdentityUserId).Select(t => t.UserWorkLanguage).First();
+ var isEn_US = workLanguage == UserWorkLanguage.US;
+
var messageToSend = new MimeMessage();
//发件地址
messageToSend.From.Add(new MailboxAddress(_systemEmailConfig.FromName, _systemEmailConfig.FromEmail));
@@ -768,7 +811,7 @@ namespace IRaCIS.Core.Application.Service
var trialinfo = await _trialRepository.Where(x => x.Id == feedBack.TrialId).FirstOrDefaultAsync();
- var companyName = _userInfo.IsEn_Us ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN;
+ var companyName = isEn_US ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN;
var emialScenario = feedBack.VisitTaskId != null ? EmailBusinessScenario.IRImageError : (feedBack.SubjectVisitId != null ? EmailBusinessScenario.TrialSubjectVisitFeedBack : (feedBack.TrialId != null ? EmailBusinessScenario.TrialFeedBack : EmailBusinessScenario.SysFeedBack));
@@ -800,7 +843,7 @@ namespace IRaCIS.Core.Application.Service
{
var topicStr = string.Format(input.topicStr, info.ResearchProgramNo, info.SubejctCode, info.VisitName);
- var htmlBodyStr = string.Format(ReplaceCompanyName(input.htmlBodyStr),
+ var htmlBodyStr = string.Format(CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, input.htmlBodyStr, workLanguage),
userNames,
info.TrialCode,
info.SubejctCode,
@@ -816,7 +859,7 @@ namespace IRaCIS.Core.Application.Service
};
- await GetEmailSubejctAndHtmlInfoAndBuildAsync(EmailBusinessScenario.IRImageError, messageToSend, emailConfigFunc);
+ await GetEmailSubejctAndHtmlInfoAndBuildAsync(EmailBusinessScenario.IRImageError, messageToSend, emailConfigFunc, workLanguage);
}
else if (feedBack.SubjectVisitId != null)
@@ -830,7 +873,7 @@ namespace IRaCIS.Core.Application.Service
{
var topicStr = string.Format(input.topicStr, info.ResearchProgramNo, info.SubejctCode, info.VisitName);
- var htmlBodyStr = string.Format(ReplaceCompanyName(input.htmlBodyStr),
+ var htmlBodyStr = string.Format(CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, input.htmlBodyStr, workLanguage),
userNames,
info.TrialCode,
info.SubejctCode,
@@ -846,7 +889,7 @@ namespace IRaCIS.Core.Application.Service
};
- await GetEmailSubejctAndHtmlInfoAndBuildAsync(EmailBusinessScenario.TrialSubjectVisitFeedBack, messageToSend, emailConfigFunc);
+ await GetEmailSubejctAndHtmlInfoAndBuildAsync(EmailBusinessScenario.TrialSubjectVisitFeedBack, messageToSend, emailConfigFunc, workLanguage);
}
//项目相关的反馈 pm admin
else if (feedBack.TrialId != null)
@@ -861,7 +904,7 @@ namespace IRaCIS.Core.Application.Service
{
var topicStr = string.Format(input.topicStr, info.ResearchProgramNo);
- var htmlBodyStr = string.Format(ReplaceCompanyName(input.htmlBodyStr),
+ var htmlBodyStr = string.Format(CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, input.htmlBodyStr, workLanguage),
userNames,
info.TrialCode,
feedBack.CreateUserRole.UserTypeRole.UserTypeShortName,
@@ -875,7 +918,7 @@ namespace IRaCIS.Core.Application.Service
};
- await GetEmailSubejctAndHtmlInfoAndBuildAsync(EmailBusinessScenario.TrialFeedBack, messageToSend, emailConfigFunc);
+ await GetEmailSubejctAndHtmlInfoAndBuildAsync(EmailBusinessScenario.TrialFeedBack, messageToSend, emailConfigFunc, workLanguage);
}
//项目无关的反馈 admin
@@ -887,7 +930,7 @@ namespace IRaCIS.Core.Application.Service
{
var topicStr = string.Format(input.topicStr);
- var htmlBodyStr = string.Format(ReplaceCompanyName(input.htmlBodyStr),
+ var htmlBodyStr = string.Format(CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, input.htmlBodyStr, workLanguage),
userNames,
feedBack.CreateUserRole.UserTypeRole.UserTypeShortName,
feedBack.CreateUserRole.IdentityUser.FullName,
@@ -899,7 +942,7 @@ namespace IRaCIS.Core.Application.Service
};
- await GetEmailSubejctAndHtmlInfoAndBuildAsync(EmailBusinessScenario.SysFeedBack, messageToSend, emailConfigFunc);
+ await GetEmailSubejctAndHtmlInfoAndBuildAsync(EmailBusinessScenario.SysFeedBack, messageToSend, emailConfigFunc, workLanguage);
}
if (trialinfo == null)
@@ -910,7 +953,7 @@ namespace IRaCIS.Core.Application.Service
{
await SendEmailHelper.SendEmailAsync(messageToSend, trialinfo);
}
-
+
}
@@ -921,6 +964,10 @@ namespace IRaCIS.Core.Application.Service
var sysUserInfo = (await _identityUserRepository.Where(t => t.Id == userId).FirstOrDefaultAsync()).IfNullThrowException();
+ //设置工作语言
+ var workLanguage = sysUserInfo.UserWorkLanguage;
+ var isEn_US = workLanguage == UserWorkLanguage.US;
+
var messageToSend = new MimeMessage();
//发件地址
messageToSend.From.Add(new MailboxAddress(_systemEmailConfig.FromName, _systemEmailConfig.FromEmail));
@@ -929,13 +976,13 @@ namespace IRaCIS.Core.Application.Service
//主题
//---[来自展影IRC] 关于重置邮箱的提醒
- var companyName = _userInfo.IsEn_Us ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN;
+ 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(ReplacePlatformName(ReplaceCompanyName(input.htmlBodyStr)) ,
+ var htmlBodyStr = string.Format(CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, input.htmlBodyStr, workLanguage),
sysUserInfo.FullName
);
@@ -944,7 +991,7 @@ namespace IRaCIS.Core.Application.Service
};
- await GetEmailSubejctAndHtmlInfoAndBuildAsync(EmailBusinessScenario.IdentityUser_ModifyPassword, messageToSend, emailConfigFunc);
+ await GetEmailSubejctAndHtmlInfoAndBuildAsync(EmailBusinessScenario.IdentityUser_ModifyPassword, messageToSend, emailConfigFunc, workLanguage);
await SendEmailHelper.SendEmailAsync(messageToSend, _systemEmailConfig);
}
@@ -954,6 +1001,10 @@ namespace IRaCIS.Core.Application.Service
{
var trialInfo = await _trialRepository.Where(t => t.Id == trialId).FirstOrDefaultAsync();
+ //设置工作语言
+ var isEn_US = _userInfo.IsEn_Us;
+ var workLanguage = _userInfo.IsEn_Us ? UserWorkLanguage.US : UserWorkLanguage.CN;
+
var messageToSend = new MimeMessage();
//发件地址
messageToSend.From.Add(new MailboxAddress(_systemEmailConfig.FromName, _systemEmailConfig.FromEmail));
@@ -969,7 +1020,7 @@ namespace IRaCIS.Core.Application.Service
var topicStr = string.Format(input.topicStr, companyName, trialInfo.ResearchProgramNo);
- var htmlBodyStr = string.Format(ReplaceCompanyName(input.htmlBodyStr),
+ var htmlBodyStr = string.Format(CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, input.htmlBodyStr, workLanguage),
name,
trialInfo.TrialCode,
trialInfo.ResearchProgramNo
@@ -985,9 +1036,15 @@ 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 isEn_US = _userInfo.IsEn_Us;
+ var workLanguage = _userInfo.IsEn_Us ? UserWorkLanguage.US : UserWorkLanguage.CN;
+
var messageToSend = new MimeMessage();
//发件地址
messageToSend.From.Add(new MailboxAddress(_systemEmailConfig.FromName, _systemEmailConfig.FromEmail));
@@ -1003,7 +1060,7 @@ namespace IRaCIS.Core.Application.Service
var topicStr = string.Format(input.topicStr, companyName, trialInfo.ResearchProgramNo);
- var htmlBodyStr = string.Format(ReplaceCompanyName(input.htmlBodyStr),
+ var htmlBodyStr = string.Format(CommonEmailHelper.ReplaceCompanyName(_systemEmailConfig, input.htmlBodyStr, workLanguage),
name,
trialInfo.TrialCode,
siteInfo.TrialSiteCode,
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());