using System.Text.RegularExpressions; namespace YLErp.Modules.AppModule { /// /// 邮件模板服务 /// public class EmailTemplateService : YLBaseService { public EmailTemplateService(OptUserInfo userInfo) : base(userInfo) { } public EmailTemplateService(YLBaseService baseService) : base(baseService) { } public EmailTemplate GetData(string emailType) { return DbContext.EmailTemplate.AsNoTracking().FirstOrDefault(n => n.EmailType == emailType); } /// /// 保存数据 /// public virtual int SaveData(EmailTemplate data) { if (data == null) { throw new ArgumentNullException(nameof(data)); } if (string.IsNullOrWhiteSpace(data.EmailType)) { throw new ServiceException("缺少邮件类型"); } var dbmodel = DbContext.EmailTemplate.FirstOrDefault(n => n.EmailType == data.EmailType); if (dbmodel == null) { DbContext.EmailTemplate.Add(dbmodel = new EmailTemplate()); } UpdateChanges(dbmodel, data, "id"); return DbContext.SaveChanges(); } /// /// 生成邮件信息,如果从数据库中取不到模板配置,返回null /// public MailInfoResultModel GenerateMailInfo(string emailType, MailInfoRequestModel reqModel) { if (string.IsNullOrEmpty(emailType)) { throw new ArgumentException("不能为空", nameof(emailType)); } if (reqModel == null) { throw new ArgumentNullException(nameof(reqModel)); } var template = DbContext.EmailTemplate.AsNoTracking().FirstOrDefault(n => n.EmailType == emailType); if (template == null) { return null; } return GenerateMailInfo(template, reqModel); } /// /// 生成邮件信息,如果template为null,返回null /// public static MailInfoResultModel GenerateMailInfo(EmailTemplate template, MailInfoRequestModel reqModel) { if (template is null) { return null; } if (reqModel == null) { throw new ArgumentNullException(nameof(reqModel)); } string replace(Match m) { switch (m.Groups[1].Value) { case "客户名称": return reqModel.ClientName; case "交易日期": return reqModel.TradeDate; case "文档编号": return reqModel.DocNumber; case "交易列表": return reqModel.TradeList; } return string.Empty; } var pattern = @"\{\{(客户名称|交易日期|文档编号|交易列表)\}\}"; var result = new MailInfoResultModel { IsBodyHtml = template.IsBodyHtml, Title = Regex.Replace(template.TitleTemplate, pattern, replace), Body = Regex.Replace(template.BodyTemplate, pattern, replace) }; return result; } } /// /// 邮件信息请求Model /// public class MailInfoRequestModel { /// /// {{客户名称}} /// public string ClientName { get; set; } /// /// {{交易日期}} /// public string TradeDate { get; set; } /// /// {{文档编号}} /// public string DocNumber { get; set; } /// /// {{交易列表}} /// public string TradeList { get; set; } } /// /// 邮件信息结果Model /// public class MailInfoResultModel { public string Title { get; set; } = string.Empty; public string Body { get; set; } = string.Empty; public bool IsBodyHtml { get; set; } } }