using YLErp.Modules.DataProviderModule; namespace YLErp.Modules.EodModule.SettlementModule { /// /// 检查当日参考价,是否全部进系统。 /// class EodCheckReferencePrice : EodSettleServiceBaseV2 { public const string Step = "检查标的参考价格缺失"; public EodCheckReferencePrice(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; IQueryable allQuery = null; var eodPriceProvider = _context.GetEodPriceProvider(); //判断当日结算价是否已经入库 if (!EodPriceQueryService.CheckDbExists(_context.SettleDate)) { _context.RaiseError(Step, "结算价格未入库"); } //检查是否所有待结算交易标的价格都存在 //获取所有现存(抵押状态)抵押品信息 增加抵押品价格检查 if (request.IsSettleOtcTrades) { var tradePredicate = _context.PredicateBuilder.GetOtcTradePredicate() .And(t => t.TradeType != "自定义交易" && t.SettlementType == SettlementTypeEnum.ReferencePrice && t.UnderlyingCode != null); #region 新增客户筛选 tw if (clienIds != null) { tradePredicate = tradePredicate.And(l => clienIds.Contains(l.ClientId)); } #endregion allQuery = DbContext.trade.Where(tradePredicate).Select(n => n.UnderlyingCode).Distinct(); } if (allQuery == null) { return; } string[] umCodeArr = allQuery.ToArray(); var umCodes = umCodeArr.Where(n => !string.IsNullOrEmpty(n) && eodPriceProvider.GetPrice(n, SettlementTypeEnum.ReferencePrice) == 0).ToHashSet(StringComparer.OrdinalIgnoreCase); //排除掉节假日不需要结算的交易 foreach (var t in _context.HolidayTrades) { if (!string.IsNullOrEmpty(t.UnderlyingCode)) { umCodes.Remove(t.UnderlyingCode); } } if (umCodes.Any()) { var codes = string.Join(",", umCodes); _context.RaiseError(Step, "标的代码:" + codes); } } } }