This commit is contained in:
2026-05-27 12:02:21 +08:00
parent cbd375fbb4
commit 0c7bc443de

View File

@@ -114,39 +114,43 @@ public class GainfoUpdateService : IGainfoUpdateService
private async Task SavePersonAsync(List<SapPersonItem> persons)
{
var validPersons = persons.Where(x => !string.IsNullOrWhiteSpace(x.ZWORKCODE)).ToList();
if (validPersons.Count <= 0)
var thirdPartPersons = persons.Where(x => !string.IsNullOrWhiteSpace(x.ZWORKCODE)).ToList();
if (thirdPartPersons.Count <= 0)
{
return;
}
var workCodes = validPersons.Select(x => x.ZWORKCODE).Distinct().ToList();
var workCodes = thirdPartPersons.Select(x => x.ZWORKCODE).Distinct().ToList();
var chunks = workCodes.Chunk(4000).ToList();
var comparer = new SapPersonComparer();
foreach (var searchCodes in chunks)
{
_logger.LogWarning("SAP分批处理Chunk数量:{count}", searchCodes.Length);
var chunkPersons = validPersons.Where(x => searchCodes.Contains(x.ZWORKCODE)).ToList();
var currentPersons = GetCurrentPersons(chunkPersons);
var chunkThirdPartPersons = thirdPartPersons.Where(x => searchCodes.Contains(x.ZWORKCODE)).ToList();
var currentPersons = GetCurrentPersons(chunkThirdPartPersons);
var histories = await _dbContext.Queryable<GainfoSapEntity>()
.Where(x => searchCodes.Contains(x.ename))
.ToListAsync();
var historyPersons = histories.Select(ToSapPersonItem).ToList();
var latestHistoryPersons = histories
.OrderByDescending(x => x.logdate)
.GroupBy(x => x.ename)
.ToDictionary(x => x.Key, x => ToSapPersonItem(x.First()));
foreach (var person in chunkPersons)
foreach (var person in chunkThirdPartPersons)
{
try
{
if (historyPersons.Any(x => comparer.Equals(person, x)))
if (latestHistoryPersons.TryGetValue(person.ZWORKCODE, out var latestHistory) && comparer.Equals(person, latestHistory))
{
continue;
}
var item = ToGainfoSap(person);
await InsertGainfoSapHistoryAsync(item);
historyPersons.Add(ToSapPersonItem(item));
latestHistoryPersons[person.ZWORKCODE] = ToSapPersonItem(item);
}
catch (Exception ex)
{
@@ -535,7 +539,6 @@ public class GainfoUpdateService : IGainfoUpdateService
.ToListAsync();
var latestItems = items
.OrderByDescending(x => x.logdate)
.ThenByDescending(x => x.id)
.GroupBy(x => x.ename)
.Select(x => x.First())
.ToList();