|
|
@ -4,11 +4,11 @@ using System.Data.SqlClient; |
|
|
|
using System.Diagnostics; |
|
|
|
using System.Linq; |
|
|
|
using System.Linq.Dynamic.Core; |
|
|
|
using System.Linq.Expressions; |
|
|
|
using System.Text.Json; |
|
|
|
using System.Threading; |
|
|
|
using System.Threading.Tasks; |
|
|
|
using EFCore.BulkExtensions; |
|
|
|
using LinqToDB; |
|
|
|
using LinqToDB.EntityFrameworkCore; |
|
|
|
using Magicodes.ExporterAndImporter.Core.Extension; |
|
|
|
using Microsoft.AspNetCore.Mvc; |
|
|
@ -56,7 +56,6 @@ namespace Win.Sfs.SettleAccount.Entities.BQ |
|
|
|
return (DateTime.Now - now).TotalMinutes; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
[NonAction] |
|
|
|
public async Task Invoke(IServiceProvider serviceProvider) |
|
|
|
{ |
|
|
@ -78,6 +77,7 @@ namespace Win.Sfs.SettleAccount.Entities.BQ |
|
|
|
var connectionString = serviceProvider.GetRequiredService<IConfiguration>().GetConnectionString("SettleAccountService"); |
|
|
|
for (var i = 0; i < 1000; i++) |
|
|
|
{ |
|
|
|
//1:新建 2:更新
|
|
|
|
var balanceList = new List<Tuple<VmiBalance, int>>(); |
|
|
|
var vmiReplenishedList = new List<VmiReplenished>(); |
|
|
|
var sw = new Stopwatch(); |
|
|
@ -95,7 +95,13 @@ namespace Win.Sfs.SettleAccount.Entities.BQ |
|
|
|
var vmiMessageRepo = context.Set<VmiMessage>(); |
|
|
|
var vmiLogRepo = context.Set<VmiLog>(); |
|
|
|
var vmiBalanceRepo = context.Set<VmiBalance>(); |
|
|
|
var vmiReplenishedRepo = context.Set<VmiReplenished>(); |
|
|
|
//sw.Stop();
|
|
|
|
//this._logger.LogInformation($"缓存开始:{fetchSize}条,耗时 {sw.ElapsedMilliseconds / 1000} 秒,{sw.ElapsedMilliseconds} 豪秒");
|
|
|
|
//sw.Restart();
|
|
|
|
//var balanceCachedList = vmiBalanceRepo.AsNoTracking().ToList();
|
|
|
|
//sw.Stop();
|
|
|
|
//this._logger.LogInformation($"缓存结束:{fetchSize}条,耗时 {sw.ElapsedMilliseconds / 1000} 秒,{sw.ElapsedMilliseconds} 豪秒");
|
|
|
|
//sw.Restart();
|
|
|
|
//读取可消费消息列表
|
|
|
|
var messages = vmiMessageRepo.AsNoTracking().Where(o => !o.isConsumed).OrderBy(o => o.Number).Take(batchSize).ToList(); |
|
|
|
//没有可消费消息则返回
|
|
|
@ -132,6 +138,9 @@ namespace Win.Sfs.SettleAccount.Entities.BQ |
|
|
|
command.ExecuteNonQuery(); |
|
|
|
} |
|
|
|
} |
|
|
|
//sw.Stop();
|
|
|
|
//this._logger.LogInformation($"计时:{fetchSize}条,耗时 {sw.ElapsedMilliseconds / 1000} 秒,{sw.ElapsedMilliseconds} 豪秒");
|
|
|
|
//sw.Restart();
|
|
|
|
foreach (var item in list) |
|
|
|
{ |
|
|
|
var message = item.VmiMessage; |
|
|
@ -147,11 +156,16 @@ namespace Win.Sfs.SettleAccount.Entities.BQ |
|
|
|
o.OrderNum == log.OrderNum && |
|
|
|
o.factory == log.factory && |
|
|
|
o.Configcode == log.Configcode); |
|
|
|
|
|
|
|
//sw.Stop();
|
|
|
|
////this._logger.LogInformation($"计时:{fetchSize}条,耗时 {sw.ElapsedMilliseconds / 1000} 秒,{sw.ElapsedMilliseconds} 豪秒");
|
|
|
|
//sw.Restart();
|
|
|
|
//数据库查找
|
|
|
|
if (balance == null) |
|
|
|
{ |
|
|
|
balance = vmiBalanceRepo.AsNoTracking().FirstOrDefault( |
|
|
|
//sw.Stop();
|
|
|
|
////this._logger.LogInformation($"查询开始:{fetchSize}条,耗时 {sw.ElapsedMilliseconds / 1000} 秒,{sw.ElapsedMilliseconds} 豪秒");
|
|
|
|
//sw.Restart();
|
|
|
|
balance = vmiBalanceRepo.AsNoTracking().FirstOrDefault(// balanceCachedList.Find(
|
|
|
|
o => o.DeliverBillType == log.DeliverBillType && |
|
|
|
o.CodeType == log.CodeType && |
|
|
|
o.RealPartCode == log.RealPartCode && |
|
|
@ -160,6 +174,9 @@ namespace Win.Sfs.SettleAccount.Entities.BQ |
|
|
|
o.OrderNum == log.OrderNum && |
|
|
|
o.factory == log.factory && |
|
|
|
o.Configcode == log.Configcode); |
|
|
|
//sw.Stop();
|
|
|
|
//this._logger.LogInformation($"查询结束:{fetchSize}条,耗时 {sw.ElapsedMilliseconds / 1000} 秒,{sw.ElapsedMilliseconds} 豪秒");
|
|
|
|
//sw.Restart();
|
|
|
|
} |
|
|
|
if (balance == null) |
|
|
|
{//不存在库存记录
|
|
|
@ -227,14 +244,14 @@ namespace Win.Sfs.SettleAccount.Entities.BQ |
|
|
|
} |
|
|
|
// 更新库存
|
|
|
|
balance.Qty = currentQty + log.ChangedQty; |
|
|
|
if (balance.Qty == decimal.Zero) |
|
|
|
{ |
|
|
|
//删除0库存
|
|
|
|
vmiBalanceRepo.Remove(balance); |
|
|
|
} |
|
|
|
} |
|
|
|
//sw.Stop();
|
|
|
|
////this._logger.LogInformation($"准备1:{fetchSize}条,耗时 {sw.ElapsedMilliseconds / 1000 / 60}分钟,{sw.ElapsedMilliseconds / 1000}秒");
|
|
|
|
//sw.Restart();
|
|
|
|
} |
|
|
|
|
|
|
|
//sw.Stop();
|
|
|
|
//this._logger.LogInformation($"准备{fetchSize}条,耗时 {sw.ElapsedMilliseconds / 1000 / 60}分钟,{sw.ElapsedMilliseconds / 1000}秒");
|
|
|
|
//sw.Restart();
|
|
|
|
//更新事务分表
|
|
|
|
foreach (var item in tables) |
|
|
|
{ |
|
|
|