从山证v2.3.0拷贝
This commit is contained in:
@@ -0,0 +1,85 @@
|
||||
namespace YLErp.Modules.DataProviderModule
|
||||
{
|
||||
/// <summary>
|
||||
/// 交易资金流水数据提供
|
||||
/// </summary>
|
||||
public class TradeCashPreDataProvider : ITradeCashPreDataProvider
|
||||
{
|
||||
readonly Dictionary<int, trade_cash_pre[]> _dic;
|
||||
|
||||
public TradeCashPreDataProvider()
|
||||
{
|
||||
_dic = new Dictionary<int, trade_cash_pre[]>();
|
||||
}
|
||||
|
||||
public TradeCashPreDataProvider Initialize(IEnumerable<int> tradeIds)
|
||||
{
|
||||
if (tradeIds == null || !tradeIds.Any(n => n > 0))
|
||||
{
|
||||
return this;
|
||||
}
|
||||
|
||||
var set = new HashSet<int>(110);
|
||||
|
||||
foreach (var id in tradeIds)
|
||||
{
|
||||
set.Add(id);
|
||||
|
||||
if (set.Count > 100)
|
||||
{
|
||||
QueryTradeCashPre(set);
|
||||
}
|
||||
}
|
||||
|
||||
if (set.Any())
|
||||
{
|
||||
QueryTradeCashPre(set);
|
||||
}
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
private void QueryTradeCashPre(HashSet<int> idSet)
|
||||
{
|
||||
using (var db = DbContextFactory.GetYLDbContext())
|
||||
{
|
||||
var groups = db.trade_cash_pre.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<trade_cash_pre>();
|
||||
}
|
||||
|
||||
idSet.Clear();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取交易资金数据(数据已按照ValueDate正序排序)
|
||||
/// </summary>
|
||||
public IEnumerable<trade_cash_pre> GetTradeCashPres(int tradeId)
|
||||
{
|
||||
if (tradeId < 1)
|
||||
{
|
||||
return Array.Empty<trade_cash_pre>();
|
||||
}
|
||||
|
||||
if (_dic.TryGetValue(tradeId, out var tcs))
|
||||
{
|
||||
return tcs;
|
||||
}
|
||||
|
||||
QueryTradeCashPre(new HashSet<int> { tradeId });
|
||||
|
||||
return _dic[tradeId];
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user