namespace YLErp.Modules.DataProviderModule { /// /// 交易资金流水数据提供 /// public class TradeCashDataProvider : ITradeCashDataProvider { readonly Dictionary _dic; public TradeCashDataProvider() { _dic = new Dictionary(); } public TradeCashDataProvider Initialize(IEnumerable tradeIds) { if (tradeIds == null || !tradeIds.Any(n => n > 0)) { return this; } var set = new HashSet(110); foreach (var id in tradeIds) { set.Add(id); if (set.Count > 100) { QueryTradeCash(set); } } if (set.Any()) { QueryTradeCash(set); } return this; } private void QueryTradeCash(HashSet idSet) { using (var db = DbContextFactory.GetYLDbContext()) { var groups = db.trade_cash.AsNoTracking() .Where(t => idSet.Contains(t.TradeId) && t.ValidState != ConsGlobal.InValid && !t.IsDeleted) .OrderBy(t => t.TradeId).ThenBy(t => t.ValueDate).ToArray().GroupBy(n => n.TradeId); foreach (var group in groups) { idSet.Remove(group.Key); _dic[group.Key] = group.ToArray(); } foreach (var id in idSet) { _dic[id] = Array.Empty(); } idSet.Clear(); } } /// /// 获取交易资金数据(数据已按照ValueDate正序排序) /// public IEnumerable GetTradeCashes(int tradeId) { if (tradeId < 1) { return Array.Empty(); } if (_dic.TryGetValue(tradeId, out var tcs)) { return tcs; } QueryTradeCash(new HashSet { tradeId }); return _dic[tradeId]; } } }