|
|
@ -76,6 +76,7 @@ namespace Win.Sfs.SettleAccount.Entities.BQ |
|
|
|
var batchSize = 10000; |
|
|
|
var fetchSize = 0; |
|
|
|
var connectionString = serviceProvider.GetRequiredService<IConfiguration>().GetConnectionString("SettleAccountService"); |
|
|
|
Dictionary<string, VmiBalance> balanceCachedList = null; |
|
|
|
for (var i = 0; i < 1000; i++) |
|
|
|
{ |
|
|
|
//1:新建 2:更新
|
|
|
@ -105,13 +106,15 @@ namespace Win.Sfs.SettleAccount.Entities.BQ |
|
|
|
break; |
|
|
|
} |
|
|
|
//缓存余额表
|
|
|
|
sw.Stop(); |
|
|
|
sw.Restart(); |
|
|
|
var balanceCachedList = vmiBalanceRepo.AsNoTracking() |
|
|
|
.ToDictionary(o => $"{o.DeliverBillType}.{o.CodeType}.{o.RealPartCode}.{o.VinCode}.{o.ErpToLoc}.{o.OrderNum}.{o.factory}.{o.Configcode}"); |
|
|
|
sw.Stop(); |
|
|
|
this._logger.LogInformation($"缓存结束:{balanceCachedList.Count}条,耗时 {sw.ElapsedMilliseconds / 1000} 秒,{sw.ElapsedMilliseconds} 豪秒"); |
|
|
|
sw.Restart(); |
|
|
|
var sw2 = new Stopwatch(); |
|
|
|
sw2.Start(); |
|
|
|
Func<VmiBalance, string> keySelector = o => $"{o.DeliverBillType}.{o.CodeType}.{o.RealPartCode}.{o.VinCode}.{o.ErpToLoc}.{o.OrderNum}.{o.factory}.{o.Configcode}"; |
|
|
|
//if (balanceCachedList == null)
|
|
|
|
//{
|
|
|
|
balanceCachedList = vmiBalanceRepo.AsNoTracking().ToDictionary(keySelector); |
|
|
|
//}
|
|
|
|
sw2.Stop(); |
|
|
|
this._logger.LogInformation($"缓存结束:{balanceCachedList.Count}条,耗时 {sw2.ElapsedMilliseconds / 1000} 秒,{sw2.ElapsedMilliseconds} 豪秒"); |
|
|
|
//设置数量为实际返回数量
|
|
|
|
fetchSize = messages.Count; |
|
|
|
//反序列化获取库存事务
|
|
|
@ -250,14 +253,24 @@ namespace Win.Sfs.SettleAccount.Entities.BQ |
|
|
|
//批量插入负库存补货记录
|
|
|
|
await context.BulkInsertAsync(vmiReplenishedList).ConfigureAwait(false); |
|
|
|
//批量插入库存余额
|
|
|
|
await context.BulkInsertAsync(balanceList.Where(o => o.Item2 == 1 && o.Item1.Qty != decimal.Zero).Select(o => o.Item1).ToList()).ConfigureAwait(false); |
|
|
|
var addList = balanceList.Where(o => o.Item2 == 1 && o.Item1.Qty != decimal.Zero).Select(o => o.Item1).ToList(); |
|
|
|
await context.BulkInsertAsync(addList).ConfigureAwait(false); |
|
|
|
//批量更新库存余额
|
|
|
|
await context.BulkUpdateAsync(balanceList.Where(o => o.Item2 == 2 && o.Item1.Qty != decimal.Zero).Select(o => o.Item1).ToList()).ConfigureAwait(false); |
|
|
|
var editList = balanceList.Where(o => o.Item2 == 2 && o.Item1.Qty != decimal.Zero).Select(o => o.Item1).ToList(); |
|
|
|
await context.BulkUpdateAsync(editList).ConfigureAwait(false); |
|
|
|
//批量删除库存余额
|
|
|
|
await context.BulkDeleteAsync(balanceList.Where(o => o.Item2 == 2 && o.Item1.Qty == decimal.Zero).Select(o => o.Item1).ToList()).ConfigureAwait(false); |
|
|
|
var removeList = balanceList.Where(o => o.Item2 == 2 && o.Item1.Qty == decimal.Zero).Select(o => o.Item1).ToList(); |
|
|
|
await context.BulkDeleteAsync(removeList).ConfigureAwait(false); |
|
|
|
//批量删除消息
|
|
|
|
await context.BulkDeleteAsync(messages).ConfigureAwait(false); |
|
|
|
transaction.Commit(); |
|
|
|
////更新余额缓存
|
|
|
|
//var sw3 = new Stopwatch();
|
|
|
|
//sw3.Start();
|
|
|
|
//addList.ForEach(o => balanceCachedList.Add(keySelector(o), o));
|
|
|
|
//removeList.ForEach(o => balanceCachedList.Remove(keySelector(o)));
|
|
|
|
//sw3.Stop();
|
|
|
|
//this._logger.LogInformation($"更新缓存:{balanceList.Count}条,耗时 {sw3.ElapsedMilliseconds / 1000} 秒,{sw3.ElapsedMilliseconds} 豪秒");
|
|
|
|
} |
|
|
|
catch (Exception ex) |
|
|
|
{ |
|
|
|