从山证v2.3.0拷贝
This commit is contained in:
@@ -0,0 +1,141 @@
|
||||
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())}。";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user