70 lines
3.0 KiB
C#
70 lines
3.0 KiB
C#
using YLErp.Modules.TradeModule.DealModule;
|
|
|
|
namespace YLErp.Modules.EodModule.SettlementModule
|
|
{
|
|
class EodDelaySettlementTrade : EodSettleServiceBaseV2
|
|
{
|
|
public const string Step = "自动延期结算";
|
|
|
|
public EodDelaySettlementTrade(EodSettlementContextV2 context) : base(context)
|
|
{
|
|
|
|
}
|
|
|
|
public void Execute(Action<string> setErrorTips)
|
|
{
|
|
var settleDate = _context.SettleDate;
|
|
var delayUnderlyids = _context.Request.DelayUnderlyIds;
|
|
var startDate = _context.PreSettleDate.AddDays(1);
|
|
var clienIds = _context.Request.ClientIds;
|
|
|
|
var haveSettlementFlag_1 = DbContext.trade.Where(t => t.ExerciseDate <= settleDate
|
|
&& t.TradeStatus == ConsTrade.确认成交
|
|
&& t.ClientId > 0
|
|
&& t.SettlementFlag == 1
|
|
&& t.ValidState != ConsGlobal.InValid).Select(x => x.TradeNumber).ToHashSet();
|
|
|
|
if (delayUnderlyids.Any())
|
|
{
|
|
var predicate = PredicateBuilder.Create<trade>(t => t.ExerciseDate >= startDate
|
|
&& t.ExerciseDate <= settleDate
|
|
&& t.TradeStatus == ConsTrade.确认成交
|
|
&& t.ClientId > 0
|
|
&& delayUnderlyids.Contains(t.UnderlyingId) && t.SettlementFlag == 0 //检查费停牌状态下所有 持仓交易的是否已执行到期
|
|
&& t.ValidState != ConsGlobal.InValid);
|
|
|
|
#region 新增客户筛选 tw
|
|
if (clienIds != null)
|
|
{
|
|
predicate = predicate.And(l => clienIds.Contains(l.ClientId));
|
|
}
|
|
#endregion
|
|
|
|
var unDelayTrades = DbContext.trade.Where(predicate).ToList();
|
|
var tradeDelay = new TradeDelaySettlementService(OptUser);
|
|
|
|
using (var trans = BeginTransaction())
|
|
{
|
|
foreach (var tr in unDelayTrades)
|
|
{
|
|
tradeDelay.UpdateDelayStatus(tr, "自动延期结算");
|
|
}
|
|
DbContext.SaveChanges();
|
|
trans.Commit();
|
|
}
|
|
|
|
var tradeNumber = unDelayTrades.Select(x => x.TradeNumber).ToHashSet();
|
|
if (setErrorTips != null && tradeNumber.Any())
|
|
{
|
|
setErrorTips("<span style='word-break: break-all'>延期结算的交易:" + string.Join(",", tradeNumber) + ";" + "</span><br />");
|
|
}
|
|
}
|
|
|
|
if (haveSettlementFlag_1.Any())
|
|
{
|
|
setErrorTips($"<span style='word-break: break-all'>{settleDate.ToString("yyyy-MM-dd")}:当前存在已到期且设置过延期结算的交易:" + string.Join(",", haveSettlementFlag_1) + ";" + "</span><br />");
|
|
}
|
|
}
|
|
}
|
|
}
|