using Amazon.Runtime.Internal.Util; using DocumentFormat.OpenXml; using IRaCIS.Core.Domain.Share; using IRaCIS.Core.Infrastructure; using MimeKit; using System; using System.Collections.Generic; using System.Globalization; using System.Linq; using System.Text; using System.Threading.Tasks; namespace IRaCIS.Core.Application.MassTransit.Consumer; public static class CommonEmailHelper { /// /// 系统默认邮件 + 项目默认邮件 (不用添加到项目邮件配置中,才发送) /// /// /// /// /// /// public static async Task GetEmailSubejctAndHtmlInfoAndBuildAsync(EmailNoticeConfig configInfo, MimeMessage messageToSend, Func<(string topicStr, string htmlBodyStr), (string topicStr, string htmlBodyStr)> emailFunc) { var isEn_US = CultureInfo.CurrentCulture.Name == StaticData.CultureInfo.en_US; var (topicStr, htmlBodyStr) = isEn_US ? (configInfo.EmailTopic, configInfo.EmailHtmlContent) : (configInfo.EmailTopicCN, configInfo.EmailHtmlContentCN); try { //每个场景修改主题 和body的逻辑不一样 (topicStr, htmlBodyStr) = emailFunc((topicStr, htmlBodyStr)); } catch (Exception ex) { //"邮件模板内容有误,填充内容出现问题,请联系运维人员核查" throw new BusinessValidationFailedException(I18n.T("CommonEmail_ConfigError")); } messageToSend.Subject = topicStr; var builder = new BodyBuilder(); builder.HtmlBody = htmlBodyStr; messageToSend.Body = builder.ToMessageBody(); return configInfo; } /// /// 项目手动邮件 (需要添加到项目邮件配置中,才发送) /// /// /// /// /// /// public static async Task GetTrialEmailSubejctAndHtmlInfoAndBuildAsync(TrialEmailNoticeConfig configInfo, MimeMessage messageToSend, Func<(string topicStr, string htmlBodyStr), (string topicStr, string htmlBodyStr)> emailFunc) { var isEn_US = CultureInfo.CurrentCulture.Name == StaticData.CultureInfo.en_US; var (topicStr, htmlBodyStr) = isEn_US ? (configInfo.EmailTopic, configInfo.EmailHtmlContent) : (configInfo.EmailTopicCN, configInfo.EmailHtmlContentCN); try { //每个场景修改主题 和body的逻辑不一样 (topicStr, htmlBodyStr) = emailFunc((topicStr, htmlBodyStr)); } catch (Exception ex) { //"邮件模板内容有误,填充内容出现问题,请联系运维人员核查" throw new BusinessValidationFailedException(I18n.T("CommonEmail_ConfigError")); } messageToSend.Subject = topicStr; var builder = new BodyBuilder(); builder.HtmlBody = htmlBodyStr; messageToSend.Body = builder.ToMessageBody(); return configInfo; } public static string ReplaceCompanyName(SystemEmailSendConfig _systemEmailConfig, string needDealtxt) { var isEn_US = CultureInfo.CurrentCulture.Name == StaticData.CultureInfo.en_US; var str = needDealtxt.Replace("{company}", isEn_US ? _systemEmailConfig.CompanyName : _systemEmailConfig.CompanyNameCN) .Replace("{company abbreviation}", isEn_US ? _systemEmailConfig.CompanyShortName : _systemEmailConfig.CompanyShortNameCN); return str; } /// /// 翻译字典 /// /// /// public static async Task> TranslationDictionary(TranslationDictionaryDto inDto) { var dictionaryCodelist = inDto.DictionaryList.Select(x => x.DictionaryCode).ToList(); var enumValueList = inDto.DictionaryList.Select(x => x.EnumValue).ToList(); var dicList = await inDto.DictionaryRepository.Where(x => dictionaryCodelist.Contains(x.Parent.Code) && enumValueList.Contains(x.Code)).Select(x => new DictionaryData() { DictionaryCode = x.Parent.Code, EnumValue = x.Code, Value = x.Value, ValueCN = x.ValueCN }).ToListAsync(); List result = new List(); inDto.DictionaryList.ForEach(x => { var dic = dicList.Where(y => y.EnumValue == x.EnumValue && y.DictionaryCode.Equals(x.DictionaryCode,StringComparison.OrdinalIgnoreCase)).FirstOrDefault(); result.Add(dic == null ? string.Empty : (inDto.IsEn_US ? dic.Value : dic.ValueCN)); }); return result; } } /// /// 转换字典的Dto /// public class TranslationDictionaryDto { /// /// 字典仓储 /// public IRepository DictionaryRepository { get; set; } /// /// 是否是英文 /// public bool IsEn_US { get; set; } /// /// 字典 /// public List DictionaryList { get; set; } = new List(); } /// /// 字典对象 /// public class DictionaryDto { /// /// 字典Code /// public string DictionaryCode { get; set; } /// /// 枚举值 /// public string EnumValue { get; set; } } public class DictionaryData { /// /// 字典Code /// public string DictionaryCode { get; set; } /// /// 枚举值 /// public string EnumValue { get; set; } /// /// 值 /// public string Value { get; set; } /// /// 返回 /// public string ValueCN { get; set; } }