142 lines
5.3 KiB
C#
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())}。";
|
|
}
|
|
}
|
|
}
|
|
}
|