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