From 0c7bc443de37609c4e9ac7838743376f3b03fc15 Mon Sep 17 00:00:00 2001 From: liguoyang Date: Wed, 27 May 2026 12:02:21 +0800 Subject: [PATCH] fix: . --- .../Implements/GainfoUpdateService.cs | 23 +++++++++++-------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/Src/Dlhis.Basic/Organization/Services/Implements/GainfoUpdateService.cs b/Src/Dlhis.Basic/Organization/Services/Implements/GainfoUpdateService.cs index 7d876177..0a0a75d1 100644 --- a/Src/Dlhis.Basic/Organization/Services/Implements/GainfoUpdateService.cs +++ b/Src/Dlhis.Basic/Organization/Services/Implements/GainfoUpdateService.cs @@ -114,39 +114,43 @@ public class GainfoUpdateService : IGainfoUpdateService private async Task SavePersonAsync(List 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() .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();