using YLErp.QdpModule; namespace YLErp.Modules.EodModule { /// /// Eod数据帮助类 /// public class EodDataHelper { /// /// 获取date及之前收盘成功的最后一个结算日 /// public static DateTime GetLastSettleDate(DateTime date) { using (var db = DbContextFactory.GetYLDbContext()) { var lastDate = db.eodStatus.Where(t => t.Status == "已收盘" && t.ValueDate <= date && (t.VolTypeFlag & VolTypeFlagEnum.PositionVol) > 0) .Max(t => (DateTime?)t.ValueDate); if (lastDate.HasValue) { return lastDate.Value.Date; } //如果最后结算日为null则取上一交易日 return QdpCalendarHelper.PrevBizDayShift(date); } } /// /// 获取date之前收盘成功的最后一个结算日 /// public static DateTime GetPreSettleDate(DateTime date, VolTypeFlagEnum voltype = VolTypeFlagEnum.None) { using (var db = DbContextFactory.GetYLDbContext()) { var lastDate = db.eodStatus.Where(t => t.Status == "已收盘" && t.ValueDate < date && (t.VolTypeFlag & voltype) == voltype) .Max(t => (DateTime?)t.ValueDate); if (lastDate.HasValue) { return lastDate.Value.Date; } //如果最后结算日为null则取上一交易日 return QdpCalendarHelper.BizDayShift(date, offset: -1); } } /// /// 获取date及之后收盘成功的第一个结算日 /// public static DateTime GetFristSettleDate(DateTime date) { using (var db = DbContextFactory.GetYLDbContext()) { var lastDate = db.eodStatus.Where(t => t.Status == "已收盘" && t.ValueDate >= date) .Min(t => (DateTime?)t.ValueDate); if (lastDate.HasValue) { return lastDate.Value.Date; } //如果最后结算日为null则取未来(含当日)的第一个交易日 return QdpCalendarHelper.GetNonHoliday(date); } } /// /// 获取停牌的标的ID集合 /// public static IEnumerable GetSuspensionUnderlyingIds() { using (var db = DbContextFactory.GetYLDbContext()) { var query = from u in db.underlying_manager where u.UnderlyingInstrumentType == ConsGlobal.InstrumentType.Stock && u.UnderlyingStatus == underlying_manager.Status_Suspension select u.id; return query.ToArray(); } } } }