diff --git a/YLErpDAL/Modules/AppModule/EmailTemplateService.cs b/YLErpDAL/Modules/AppModule/EmailTemplateService.cs index aeca2cbc..6059858d 100644 --- a/YLErpDAL/Modules/AppModule/EmailTemplateService.cs +++ b/YLErpDAL/Modules/AppModule/EmailTemplateService.cs @@ -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 /// {{交易列表}} /// public string TradeList { get; set; } + + /// + /// {{交易编号}}:当前客户在本次结算日邮件中涉及的交易编号,多个编号以逗号分隔。 + /// + public string TradeNumber { get; set; } + + /// + /// {{平仓总额}}:当前客户在本次结算日邮件中的平仓金额合计,使用客户视角。 + /// + public string UnwindTotalAmount { get; set; } } /// diff --git a/YLErpDAL/Modules/ReportModule/SettleBillService.cs b/YLErpDAL/Modules/ReportModule/SettleBillService.cs index 7acd9099..127393dc 100644 --- a/YLErpDAL/Modules/ReportModule/SettleBillService.cs +++ b/YLErpDAL/Modules/ReportModule/SettleBillService.cs @@ -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(); @@ -338,14 +344,16 @@ namespace YLErp.Modules.ReportModule var sb = new StringBuilder(); var instrumentTypeArr = new List() { 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") diff --git a/YLErpDAL/Modules/ReportModule/UnwindReportService.cs b/YLErpDAL/Modules/ReportModule/UnwindReportService.cs index 7dea4eda..decc15f4 100644 --- a/YLErpDAL/Modules/ReportModule/UnwindReportService.cs +++ b/YLErpDAL/Modules/ReportModule/UnwindReportService.cs @@ -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") diff --git a/YLErpWeb/Areas/Admin/Views/OtcConfig/MailTemplate.cshtml b/YLErpWeb/Areas/Admin/Views/OtcConfig/MailTemplate.cshtml index e62911ca..047ef3ae 100644 --- a/YLErpWeb/Areas/Admin/Views/OtcConfig/MailTemplate.cshtml +++ b/YLErpWeb/Areas/Admin/Views/OtcConfig/MailTemplate.cshtml @@ -20,11 +20,11 @@
- +
- +