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