fix: 优化差异数据
This commit is contained in:
@@ -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
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user