using System.Text; namespace YLErp.Modules.EodModule.SettlementModule { class EodCheckMaturityDate : EodSettleServiceBaseV2 { public const string Step = "检查标的到期日"; public EodCheckMaturityDate(EodSettlementContextV2 context) : base(context) { } /// /// 检查收盘价 /// public void Execute() { if (!_context.OtcTrades.Any()) { return; } var request = _context.Request; var settleDate = _context.SettleDate; var clienIds = _context.Request.ClientIds; //检查是否所有待结算交易标的价格都存在 //获取所有现存(抵押状态)抵押品信息 增加抵押品价格检查 if (request.IsSettleOtcTrades) { var tradePredicate = _context.PredicateBuilder.GetOtcTradePredicate().And(t => t.TradeType == "累计期权" && t.UnderlyingCode != null); #region 新增客户筛选 tw if (clienIds != null) { tradePredicate = tradePredicate.And(l => clienIds.Contains(l.ClientId)); } #endregion var allQuery = from td in DbContext.trade.Where(tradePredicate) join un in DbContext.underlying_manager on td.UnderlyingCode equals un.UnderlyingCode where un.MaturityDate != null && td.ExerciseDate > un.MaturityDate && un.MaturityDate < settleDate select new { td.TradeNumber, td.UnderlyingCode, un.MaturityDate }; var list = allQuery.ToList(); if (list == null || !list.Any()) { return; } StringBuilder req = new StringBuilder(); foreach (var item in list) { req.Append("交易").Append(item.TradeNumber).Append(",标的").Append(item.UnderlyingCode).Append("已到期(标的到期日:").Append(item.MaturityDate?.ToString("yyyy-MM-dd")).Append("),请及时进行调整!"); } _context.RaiseError(Step, req.ToString()); } } } }