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();
}
}
}
}