From d2cf162694ec0a0b41254e4695a3901c714283c2 Mon Sep 17 00:00:00 2001 From: liguoyang Date: Wed, 21 Feb 2024 18:50:06 +0800 Subject: [PATCH] =?UTF-8?q?fix=20=E5=B0=9D=E8=AF=95=E5=A4=84=E7=90=86iserv?= =?UTF-8?q?iceprovider=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SyncSapInfo/Job/SyncPersonJob.cs | 128 ++++++++++-------- 1 file changed, 69 insertions(+), 59 deletions(-) diff --git a/Src/Dlhis.ScheduledTask/SyncSapInfo/Job/SyncPersonJob.cs b/Src/Dlhis.ScheduledTask/SyncSapInfo/Job/SyncPersonJob.cs index bf15ccd2..37ecd090 100644 --- a/Src/Dlhis.ScheduledTask/SyncSapInfo/Job/SyncPersonJob.cs +++ b/Src/Dlhis.ScheduledTask/SyncSapInfo/Job/SyncPersonJob.cs @@ -6,20 +6,19 @@ using Dlhis.Entity.Basic.Enums; using Dlhis.ScheduledTask.SyncSapInfo.Dto; using Dlhis.ScheduledTask.SyncSapInfo.Comparers; using Dlhis.ScheduledTask.SyncSapInfo.Services; +using Kurisu.AspNetCore.Scope; using Microsoft.Extensions.Logging; namespace Dlhis.ScheduledTask.SyncSapInfo.Job; public class SyncPersonJob { - private readonly IDbContext _dbContext; private readonly ILogger _logger; private readonly IJinkoSapService _jinkoSapService; private List _positions; - public SyncPersonJob(IDbContext dbContext, ILogger logger, IJinkoSapService jinkoSapService) + public SyncPersonJob(ILogger logger, IJinkoSapService jinkoSapService) { - _dbContext = dbContext; _logger = logger; _jinkoSapService = jinkoSapService; } @@ -32,13 +31,17 @@ public class SyncPersonJob _logger.LogInformation("获取SAP人员数量为:{count}", persons.Count); if (persons.Count > 0) { - _positions = await _dbContext.Queryable().ToListAsync(); - var modifiedPersons = await GetModifiedPersonAsync(persons.OrderByDescending(x => x.ZSTATUS).ThenBy(x => x.ZRZRQ).ToList()); - _logger.LogInformation("SAP人员差异数量为:{count}", modifiedPersons.Count); - if (modifiedPersons.Count > 0) + await Scoped.Temp.Value.CreateAsync(async sp => { - var failedRecords = SavePerson(modifiedPersons); - } + var dbContext = sp.GetService(); + _positions = await dbContext.Queryable().ToListAsync(); + var modifiedPersons = await GetModifiedPersonAsync(dbContext, persons.OrderByDescending(x => x.ZSTATUS).ThenBy(x => x.ZRZRQ).ToList()); + _logger.LogInformation("SAP人员差异数量为:{count}", modifiedPersons.Count); + if (modifiedPersons.Count > 0) + { + var failedRecords = SavePerson(modifiedPersons); + } + }); } } @@ -48,61 +51,67 @@ public class SyncPersonJob var workCodes = persons.Select(x => x.ZWORKCODE).ToList(); var chunks = workCodes.Chunk(4000).ToList(); - foreach (var searchCodes in chunks) + await Scoped.Temp.Value.CreateAsync(async sp => { - _logger.LogInformation("SAP分批处理Chunk数量:{count}", searchCodes.Count()); + var dbContext = sp.GetService(); - var existsWorkCodes = await _dbContext.Queryable() - .Where(x => searchCodes.Contains(x.ename)) - .Select(x => x.ename) - .ToListAsync(); - - var originUpdates = persons.Where(x => existsWorkCodes.Contains(x.ZWORKCODE)).ToList(); - var existsUpdateWorkCodes = originUpdates.Select(x => x.ZWORKCODE).ToList(); - var originInserts = persons.Where(x => searchCodes.Contains(x.ZWORKCODE)).Where(x => !existsUpdateWorkCodes.Contains(x.ZWORKCODE)).ToList(); - - - int i = 0; - var currentTotal = originUpdates.Count + originInserts.Count; - - var updates = ToGainfoSap(originUpdates); - _logger.LogInformation("SAP分批更新数:{count}", updates.Count); - var inserts = ToGainfoSap(originInserts); - _logger.LogInformation("SAP分批新增数:{count}", inserts.Count); - foreach (var item in inserts) + foreach (var searchCodes in chunks) { - i++; - try + _logger.LogInformation("SAP分批处理Chunk数量:{count}", searchCodes.Count()); + + var existsWorkCodes = await dbContext.Queryable() + .Where(x => searchCodes.Contains(x.ename)) + .Select(x => x.ename) + .ToListAsync(); + + var originUpdates = persons.Where(x => existsWorkCodes.Contains(x.ZWORKCODE)).ToList(); + var existsUpdateWorkCodes = originUpdates.Select(x => x.ZWORKCODE).ToList(); + var originInserts = persons.Where(x => searchCodes.Contains(x.ZWORKCODE)).Where(x => !existsUpdateWorkCodes.Contains(x.ZWORKCODE)).ToList(); + + + int i = 0; + var currentTotal = originUpdates.Count + originInserts.Count; + + var updates = ToGainfoSap(originUpdates); + _logger.LogInformation("SAP分批更新数:{count}", updates.Count); + var inserts = ToGainfoSap(originInserts); + _logger.LogInformation("SAP分批新增数:{count}", inserts.Count); + foreach (var item in inserts) { - await SavePerson(item); + i++; + try + { + await SavePerson(dbContext, item); + } + catch (Exception ex) + { + failure++; + _logger.LogError(ex, "执行新增失败:{message}", ex.Message); + } + } - catch (Exception ex) + + foreach (var item in updates) { - failure++; - _logger.LogError(ex, "执行新增失败:{message}", ex.Message); + i++; + try + { + await UpdatePerson(dbContext, item); + } + catch (Exception ex) + { + failure++; + _logger.LogError(ex, "执行更新失败:{message}", ex.Message); + } } } - - foreach (var item in updates) - { - i++; - try - { - await UpdatePerson(item); - } - catch (Exception ex) - { - failure++; - _logger.LogError(ex, "执行更新失败:{message}", ex.Message); - } - } - } + }); return 0; } - private async Task SavePerson(GainfoSapEntity item) + private async Task SavePerson(IDbContext db, GainfoSapEntity item) { var info = new GainfoEntity { @@ -130,12 +139,13 @@ public class SyncPersonJob Werks = item.WERKS, Employed = item.isowner, }; - await _dbContext.InsertAsync(info); + + await db.InsertAsync(info); } - private async Task UpdatePerson(GainfoSapEntity item) + private async Task UpdatePerson(IDbContext db, GainfoSapEntity item) { - var gainfo = await _dbContext.Queryable().Where(x => x.IdNo == item.idno).FirstAsync(); - await _dbContext.Updateable().SetColumns(g => new GainfoEntity + var gainfo = await db.Queryable().Where(x => x.IdNo == item.idno).FirstAsync(); + await db.Updateable().SetColumns(g => new GainfoEntity { SapNo = item.PERNR, Name = item.gname, @@ -152,9 +162,9 @@ public class SyncPersonJob .ExecuteCommandAsync(); } - private async Task> GetModifiedPersonAsync(List sapList) + private async Task> GetModifiedPersonAsync(IDbContext db, List sapList) { - var last = await LoadDataAsync(); + var last = await LoadDataAsync(db); if (last.Count <= 0) { return sapList; @@ -165,9 +175,9 @@ public class SyncPersonJob } - private async Task> LoadDataAsync() + private async Task> LoadDataAsync(IDbContext db) { - var gainfo = await _dbContext.Queryable().ToListAsync(); + var gainfo = await db.Queryable().ToListAsync(); return gainfo.Select(x => new SapPersonItem {