Files
zszq-trs/YLErpDAL/Modules/DataProviderModule/UnderlyingProvider.cs
T
2024-05-09 14:06:26 +08:00

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