fix: 优化差异数据

This commit is contained in:
2026-05-13 12:58:26 +08:00
parent 2d2adffb9b
commit 06da5bb0d2

View File

@@ -447,21 +447,64 @@ public class GainfoUpdateService : IGainfoUpdateService
private async Task<List<SapPersonItem>> GetModifiedPersonAsync(List<SapPersonItem> sapList) private async Task<List<SapPersonItem>> GetModifiedPersonAsync(List<SapPersonItem> sapList)
{ {
var last = await LoadDataAsync(); if (sapList.Count <= 0)
{
return new List<SapPersonItem>();
}
var comparer = new SapPersonComparer();
var workCodes = sapList
.Select(x => x.ZWORKCODE)
.Where(x => !string.IsNullOrWhiteSpace(x))
.Distinct()
.ToList();
if (workCodes.Count <= 0)
{
return sapList;
}
var last = await LoadDataAsync(workCodes);
if (last.Count <= 0) if (last.Count <= 0)
{ {
return sapList; return sapList;
} }
var comparer = new SapPersonComparer(); var lastMap = last
var needRemove = sapList.Intersect(last, comparer); .Where(x => !string.IsNullOrWhiteSpace(x.ZWORKCODE))
return sapList.Except(needRemove, comparer).ToList(); .GroupBy(x => x.ZWORKCODE)
.ToDictionary(x => x.Key, x => x.First());
var modifiedPersons = new List<SapPersonItem>();
foreach (var person in sapList)
{
if (string.IsNullOrWhiteSpace(person.ZWORKCODE))
{
modifiedPersons.Add(person);
continue;
}
if (!lastMap.TryGetValue(person.ZWORKCODE, out var historyPerson) || !comparer.Equals(person, historyPerson))
{
modifiedPersons.Add(person);
}
}
return modifiedPersons;
} }
private async Task<List<SapPersonItem>> LoadDataAsync() private async Task<List<SapPersonItem>> LoadDataAsync(List<string> workCodes)
{ {
var gainfos = await _dbContext.Queryable<GainfoSapEntity>().ToListAsync(); var gainfos = new List<GainfoSapEntity>();
var chunks = workCodes.Chunk(2000);
foreach (var chunk in chunks)
{
var items = await _dbContext.Queryable<GainfoSapEntity>()
.Where(x => chunk.Contains(x.ename))
.ToListAsync();
gainfos.AddRange(items);
}
return gainfos.Select(x => new SapPersonItem return gainfos.Select(x => new SapPersonItem
{ {