Files
zszq-trs/YLErpDAL/Modules/EodModule/SettlementModule/EodSendMaturityEmail.cs
T
2024-05-09 14:06:26 +08:00

142 lines
5.3 KiB
C#

using YLErp.Helpers;
using YLErp.Modules.ClientModule;
using YLErp.QdpModule;
namespace YLErp.Modules.EodModule.SettlementModule
{
/// <summary>
/// PS.Config.IsEodSendMaturityEmail
/// 发送近期到期交易列表邮件
/// </summary>
class EodSendMaturityEmail : EodSettleServiceBaseV2
{
public EodSendMaturityEmail(EodSettlementContextV2 context) : base(context)
{
}
/// <summary>
/// 尚未完善
/// </summary>
public void SendMaturityEmail()
{
var maturityDate = _context.SettleDate;
var a = 0;
//获取之后三个交易日
for (var i = 0; i < 3;)
{
a++;
maturityDate = maturityDate.AddDays(1);
if (!QdpCalendarHelper.IsHoliday(maturityDate))
{
i++;
}
else
{
continue;
}
if (a >= 20)
{
throw new Exception("日历记录异常," + _context.SettleDateStr + "后未查找到有效的3个交易日!");
};
}
//获取交易
var tradeList = _context.OtcTrades.Where(trade => trade.TradeStatus == "确认成交" && trade.ValidState != "InValid"
&& trade.ClientId > 0 && trade.MaturityDate > _context.SettleDate && trade.MaturityDate <= maturityDate).ToArray();
if (!tradeList.Any())
{
return;
}
var clientIds = tradeList.Select(t => t.ClientId).ToList();
if (!clientIds.Any())
{
return;
}
var clientList = ClientDataQueryService.GetClientsFromDB(t => clientIds.Contains(t.id));
var errorClientList = new List<string>();
var errorMsg = new List<string>();
foreach (var client in clientList)
{
var clientTradeList = tradeList.Where(t => t.ClientId == client.id).ToList();
var bodyhtml = string.Empty;
bodyhtml += "<meta http-equiv='Content-Type' content='text/html;charset=utf-8'/>";
bodyhtml += $"<p><h1>近期到期交易列表</h1></p>";
bodyhtml += $"<p><h2>客户名称:{client.Name}</h2></p>";
bodyhtml += $"<p><h2>日期:{_context.SettleDateStr}</h2></p>";
bodyhtml += "<table border='1'>";
bodyhtml += "<tr>";
bodyhtml += " <th> 交易编号</th>";
bodyhtml += " <th> 交易日期</th>";
bodyhtml += " <th> 交易方向 </th>";
bodyhtml += " <th> 标的代码 </th>";
bodyhtml += " <th> 结构类型</th>";
bodyhtml += " <th> 看涨看跌</th>";
bodyhtml += " <th> 行权方式</th>";
bodyhtml += " <th> 到期日</th>";
bodyhtml += " <th> 行权价</th>";
bodyhtml += " </tr>";
foreach (var trade in clientTradeList)
{
bodyhtml += " <tr>";
bodyhtml += $" <td>{trade.TradeNumber}</td>";
bodyhtml += $" <td>{(trade.TradeDate == null ? "" : trade.TradeDate.Value.ToString("yyyy-MM-dd")):F}</td>";
bodyhtml += $" <td>{trade.BuySell}</td>";
bodyhtml += $" <td>{trade.UnderlyingCode}</td>";
bodyhtml += $" <td>{trade.TradeType:F}</td>";
bodyhtml += $" <td>{("Call".Equals(trade.CallPut) ? "看涨" : "看跌")}</td>";
bodyhtml += $" <td>{trade.ExerciseModeCn:F}</td>";
bodyhtml += $" <td>{(trade.ExerciseDate == null ? "" : trade.ExerciseDate.Value.ToString("yyyy-MM-dd"))}</td>";
//股票类期权 行权价给实际行权价
if (trade.IsMoneynessOptionData)
{
bodyhtml += $" <td>{trade.Strike * (trade.SpotPrice ?? 0):F}</td>";
}
else
{
bodyhtml += $" <td>{trade.Strike:F}</td>";
}
bodyhtml += " </tr>";
}
bodyhtml += "</table>";
// 要向该客户的所有订阅了邮件通知的人员发送邮件
var emails = ClientDataQueryService.GetClientEmails(client.id, false);
if (emails != null & emails.Any())
{
var sendMail = EmailHelper.SendMail(string.Join(";", emails), "近期到期交易列表", bodyhtml, true, null);
if (!string.IsNullOrEmpty(sendMail))
{
errorClientList.Add(client.Name);
if (!errorMsg.Contains(sendMail))
{
errorMsg.Add(sendMail);
}
}
}
}
//判断是否有发送失败的客户
if (errorClientList.Count > 0)
{
var msg = $"错误:{string.Join(",", errorClientList.ToArray())}发送报告时出错,{string.Join(",", errorMsg.ToArray())}。";
}
}
}
}