158 lines
4.4 KiB
C#
158 lines
4.4 KiB
C#
using System.Text.RegularExpressions;
|
|
|
|
namespace YLErp.Modules.AppModule
|
|
{
|
|
/// <summary>
|
|
/// 邮件模板服务
|
|
/// </summary>
|
|
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);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 保存数据
|
|
/// </summary>
|
|
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();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 生成邮件信息,如果从数据库中取不到模板配置,返回null
|
|
/// </summary>
|
|
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);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 生成邮件信息,如果template为null,返回null
|
|
/// </summary>
|
|
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;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 邮件信息请求Model
|
|
/// </summary>
|
|
public class MailInfoRequestModel
|
|
{
|
|
/// <summary>
|
|
/// {{客户名称}}
|
|
/// </summary>
|
|
public string ClientName { get; set; }
|
|
|
|
/// <summary>
|
|
/// {{交易日期}}
|
|
/// </summary>
|
|
public string TradeDate { get; set; }
|
|
|
|
/// <summary>
|
|
/// {{文档编号}}
|
|
/// </summary>
|
|
public string DocNumber { get; set; }
|
|
|
|
/// <summary>
|
|
/// {{交易列表}}
|
|
/// </summary>
|
|
public string TradeList { get; set; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// 邮件信息结果Model
|
|
/// </summary>
|
|
public class MailInfoResultModel
|
|
{
|
|
public string Title { get; set; } = string.Empty;
|
|
|
|
public string Body { get; set; } = string.Empty;
|
|
|
|
public bool IsBodyHtml { get; set; }
|
|
}
|
|
}
|