fix: C# 管理后端配置的邮件模板-缺少变量参数:交易编号、平仓总额

This commit is contained in:
马冰冰
2026-08-26 10:36:35 +08:00
parent 8cea7ee2e4
commit 9d7c318264
4 changed files with 58 additions and 21 deletions
@@ -95,7 +95,9 @@ namespace YLErp.Modules.AppModule
string replace(Match m)
{
switch (m.Groups[1].Value)
// 同时兼容标准 {{变量}} 和历史模板中的 {变量} 写法。
var variableName = m.Groups[1].Success ? m.Groups[1].Value : m.Groups[2].Value;
switch (variableName)
{
case "客户名称":
return reqModel.ClientName;
@@ -105,11 +107,16 @@ namespace YLErp.Modules.AppModule
return reqModel.DocNumber;
case "交易列表":
return reqModel.TradeList;
// 结算邮件扩展变量:可同时用于邮件标题和正文。
case "交易编号":
return reqModel.TradeNumber ?? string.Empty;
case "平仓总额":
return reqModel.UnwindTotalAmount ?? string.Empty;
}
return string.Empty;
}
var pattern = @"\{\{(客户名称|交易日期|文档编号|交易列表)\}\}";
var pattern = @"\{\{(客户名称|交易日期|文档编号|交易列表|交易编号|平仓总额)\}\}|\{(客户名称|交易日期|文档编号|交易列表|交易编号|平仓总额)\}";
var result = new MailInfoResultModel
{
@@ -146,6 +153,16 @@ namespace YLErp.Modules.AppModule
/// {{交易列表}}
/// </summary>
public string TradeList { get; set; }
/// <summary>
/// {{交易编号}}:当前客户在本次结算日邮件中涉及的交易编号,多个编号以逗号分隔。
/// </summary>
public string TradeNumber { get; set; }
/// <summary>
/// {{平仓总额}}:当前客户在本次结算日邮件中的平仓金额合计,使用客户视角。
/// </summary>
public string UnwindTotalAmount { get; set; }
}
/// <summary>
@@ -166,13 +166,17 @@ namespace YLErp.Modules.ReportModule
fileList.Add(Path.ChangeExtension(docInfo.AbsolutePath, extension));
}
}
//组织邮件主体
var mailInfo = EmailTemplateService.GenerateMailInfo(useTemplate.Value, new MailInfoRequestModel
// 根据当前客户的结算确认书准备交易编号和平仓总额变量。
var settlementRows = SettlementMailTemplateHelper.GetSettlementRows(DbContext, SettleBills, client.id);
var mailRequest = new MailInfoRequestModel
{
ClientName = client.Name,
TradeDate = valueDate.ToString("yyyy-MM-dd"),
DocNumber = SettleBills.Count > 0 ? SettleBills[0].Code : string.Empty
}) ?? new MailInfoResultModel
};
SettlementMailTemplateHelper.PopulateSettlementFields(mailRequest, settlementRows);
//组织邮件主体
var mailInfo = EmailTemplateService.GenerateMailInfo(useTemplate.Value, mailRequest) ?? new MailInfoResultModel
{
Body = string.Empty,
Title = "清算确认书-" + valueDate.ToString("yyyy-MM-dd")
@@ -316,7 +320,9 @@ namespace YLErp.Modules.ReportModule
foreach (var client in clientListOn)
{
var SettleBills = theDaySettleDocList.Where(t => t.SellerId == client.id || t.BuyerId == client.id).ToList();
var res = ts.Where(O => O.trade.ClientId == client.id).ToList();
// 批量查询包含整个日期区间,此处仅保留当前结算日的数据。
var res = SettlementMailTemplateHelper.ForValueDate(
ts.Where(O => O.trade.ClientId == client.id), valueDate);
if (SettleBills.Count > 0)
{
var fileList = new List<string>();
@@ -338,14 +344,16 @@ namespace YLErp.Modules.ReportModule
var sb = new StringBuilder();
var instrumentTypeArr = new List<string>() { ConsGlobal.InstrumentType.Stock, ConsGlobal.InstrumentType.StockIF };
SendEmailSettleBillHtml(sb, res);
//组织邮件主体
var mailInfo = EmailTemplateService.GenerateMailInfo(tempalte.Value, new MailInfoRequestModel
var mailRequest = new MailInfoRequestModel
{
ClientName = client.Name,
TradeDate = valueDate.ToString("yyyy-MM-dd"),
TradeList = sb.ToString(),
DocNumber = SettleBills.Count > 0 ? SettleBills[0].Code : string.Empty
}) ?? new MailInfoResultModel
};
SettlementMailTemplateHelper.PopulateSettlementFields(mailRequest, res);
//组织邮件主体
var mailInfo = EmailTemplateService.GenerateMailInfo(tempalte.Value, mailRequest) ?? new MailInfoResultModel
{
Body = string.Empty,
Title = "清算确认书-" + valueDate.ToString("yyyy-MM-dd")
@@ -425,13 +425,17 @@ namespace YLErp.Modules.ReportModule
if (fileList.Count == 0) { continue; }
//组织邮件主体
var mailInfo = EmailTemplateService.GenerateMailInfo(useTemplate.Value, new MailInfoRequestModel
// 根据当前客户的提前终止确认书准备交易编号和平仓总额变量。
var settlementRows = SettlementMailTemplateHelper.GetSettlementRows(DbContext, SettleBills, client.id);
var mailRequest = new MailInfoRequestModel
{
ClientName = client.Name,
TradeDate = valueDate.ToString("yyyy-MM-dd"),
DocNumber = SettleBills.Count > 0 ? SettleBills[0].Code : string.Empty
}) ?? new MailInfoResultModel
};
SettlementMailTemplateHelper.PopulateSettlementFields(mailRequest, settlementRows);
//组织邮件主体
var mailInfo = EmailTemplateService.GenerateMailInfo(useTemplate.Value, mailRequest) ?? new MailInfoResultModel
{
Body = string.Empty,
Title = "清算确认书-" + valueDate.ToString("yyyy-MM-dd")
@@ -601,7 +605,9 @@ trades.GroupBy(O => new { UnderlyingInstrumentType = instrumentTypeArr.Contains(
foreach (var client in clientListOn)
{
var SettleBills = theDaySettleDocList.Where(t => t.SellerId == client.id || t.BuyerId == client.id).ToList();
var res = ts.Where(O => O.trade.ClientId == client.id).ToList();
// 批量查询包含整个日期区间,此处仅保留当前结算日的数据。
var res = SettlementMailTemplateHelper.ForValueDate(
ts.Where(O => O.trade.ClientId == client.id), valueDate);
if (SettleBills.Count < 1)
{
continue;
@@ -627,14 +633,16 @@ trades.GroupBy(O => new { UnderlyingInstrumentType = instrumentTypeArr.Contains(
var sb = new StringBuilder();
SendEmailSettleBillHtml(sb, res);
//组织邮件主体
var mailInfo = EmailTemplateService.GenerateMailInfo(tempalte.Value, new MailInfoRequestModel
var mailRequest = new MailInfoRequestModel
{
ClientName = client.Name,
TradeDate = valueDate.ToString("yyyy-MM-dd"),
TradeList = sb.ToString(),
DocNumber = SettleBills.Count > 0 ? SettleBills[0].Code : string.Empty
}) ?? new MailInfoResultModel
};
SettlementMailTemplateHelper.PopulateSettlementFields(mailRequest, res);
//组织邮件主体
var mailInfo = EmailTemplateService.GenerateMailInfo(tempalte.Value, mailRequest) ?? new MailInfoResultModel
{
Body = string.Empty,
Title = "清算确认书-" + valueDate.ToString("yyyy-MM-dd")
@@ -889,13 +897,17 @@ trades.GroupBy(O => new { UnderlyingInstrumentType = instrumentTypeArr.Contains(
}
if (fileList.Count == 0) { continue; }
//组织邮件主体
var mailInfo = EmailTemplateService.GenerateMailInfo(useTemplate.Value, new MailInfoRequestModel
// 合并发送时按当前客户附件反查记录,确保模板变量与附件范围一致。
var settlementRows = SettlementMailTemplateHelper.GetSettlementRows(DbContext, SettleBills, client.id);
var mailRequest = new MailInfoRequestModel
{
ClientName = client.Name,
TradeDate = valueDate.ToString("yyyy-MM-dd"),
DocNumber = SettleBills.Count > 0 ? SettleBills[0].Code : string.Empty
}) ?? new MailInfoResultModel
};
SettlementMailTemplateHelper.PopulateSettlementFields(mailRequest, settlementRows);
//组织邮件主体
var mailInfo = EmailTemplateService.GenerateMailInfo(useTemplate.Value, mailRequest) ?? new MailInfoResultModel
{
Body = string.Empty,
Title = "清算确认书-" + valueDate.ToString("yyyy-MM-dd")
@@ -20,11 +20,11 @@
</select>
</div>
<div class="mb-4">
<label>邮件标题模板(变量参数:{{客户名称}},{{交易日期}},{{文档编号}})</label>
<label>邮件标题模板(变量参数:{{客户名称}},{{交易日期}},{{文档编号}},{{交易编号}},{{平仓总额}})</label>
<input type="text" name="TitleTemplate" id="TitleTemplate" class="form-control" />
</div>
<div class="mb-4">
<label>邮件内容模板(变量参数:{{客户名称}},{{交易日期}},{{文档编号}})</label>
<label>邮件内容模板(变量参数:{{客户名称}},{{交易日期}},{{文档编号}},{{交易编号}},{{平仓总额}})</label>
<div id="editor"></div>
</div>
<div class="mb-4">