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 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(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("延期结算的交易:" + string.Join(",", tradeNumber) + ";" + "
"); } } if (haveSettlementFlag_1.Any()) { setErrorTips($"{settleDate.ToString("yyyy-MM-dd")}:当前存在已到期且设置过延期结算的交易:" + string.Join(",", haveSettlementFlag_1) + ";" + "
"); } } } }