namespace YLErp.Modules.DataProviderModule
{
///
/// 标的信息提供(这个类一般用于结算和涉及到历史数据时的业务)
///
public class UnderlyingProvider : YLBaseService
{
private Dictionary _underlyingDic;
public UnderlyingProvider(OptUserInfo userInfo) : base(userInfo)
{
}
public UnderlyingProvider(YLBaseService baseService) : base(baseService)
{
}
///
/// 初始化基础缓存,可以不调用,
/// 如果涉及到批量处理时调用后提升一定的数据访问性能
///
public UnderlyingProvider Initialize(DateTime? minMaturityDate)
{
var date = (minMaturityDate ?? DateTime.Today).AddDays(-30);
_underlyingDic = DbContext.underlying_manager.AsNoTracking()
.Where(n => n.MaturityDate >= date && n.UnderlyingInstrumentType == ConsGlobal.InstrumentType.CommodityFutures)
.ToDictionary(n => n.UnderlyingCode, StringComparer.OrdinalIgnoreCase);
return this;
}
///
/// 数据字典(初始化缓存后累加方式继续积累缓存)
///
private Dictionary UnderlyingDic
{
get
{
return _underlyingDic ?? (_underlyingDic = new Dictionary(StringComparer.OrdinalIgnoreCase));
}
}
///
/// 根据代码获取标的信息
///
public underlying_manager GetUnderlying(string underlyingCode)
{
if (underlyingCode is null)
{
throw new ArgumentNullException(nameof(underlyingCode));
}
if (!UnderlyingDic.TryGetValue(underlyingCode, out var underlying))
{
UnderlyingDic[underlyingCode] = underlying = DbContext.underlying_manager.AsNoTracking().FirstOrDefault(n => n.UnderlyingCode == underlyingCode);
}
return underlying;
}
///
/// 返回数据查询接口(现在返回的是EF查询接口)
///
public IQueryable GetUnderlyingQuery()
{
return DbContext.underlying_manager.AsNoTracking();
}
}
}