70 lines
2.4 KiB
C#
70 lines
2.4 KiB
C#
namespace YLErp.Modules.DataProviderModule
|
|
{
|
|
/// <summary>
|
|
/// 标的信息提供(这个类一般用于结算和涉及到历史数据时的业务)
|
|
/// </summary>
|
|
public class UnderlyingProvider : YLBaseService
|
|
{
|
|
private Dictionary<string, underlying_manager> _underlyingDic;
|
|
|
|
public UnderlyingProvider(OptUserInfo userInfo) : base(userInfo)
|
|
{
|
|
|
|
}
|
|
|
|
public UnderlyingProvider(YLBaseService baseService) : base(baseService)
|
|
{
|
|
}
|
|
|
|
/// <summary>
|
|
/// 初始化基础缓存,可以不调用,
|
|
/// 如果涉及到批量处理时调用后提升一定的数据访问性能
|
|
/// </summary>
|
|
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;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 数据字典(初始化缓存后累加方式继续积累缓存)
|
|
/// </summary>
|
|
private Dictionary<string, underlying_manager> UnderlyingDic
|
|
{
|
|
get
|
|
{
|
|
return _underlyingDic ?? (_underlyingDic = new Dictionary<string, underlying_manager>(StringComparer.OrdinalIgnoreCase));
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 根据代码获取标的信息
|
|
/// </summary>
|
|
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;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 返回数据查询接口(现在返回的是EF查询接口)
|
|
/// </summary>
|
|
public IQueryable<underlying_manager> GetUnderlyingQuery()
|
|
{
|
|
return DbContext.underlying_manager.AsNoTracking();
|
|
}
|
|
}
|
|
}
|