82 lines
2.5 KiB
C#
82 lines
2.5 KiB
C#
using Dlhis.Entity.Basic.Entity;
|
|
using Dlhis.ScheduledTask.SyncSapInfo.Comparers;
|
|
using Dlhis.ScheduledTask.SyncSapInfo.Dto;
|
|
using Dlhis.ScheduledTask.SyncSapInfo.Services;
|
|
using Kurisu.SqlSugar.Services;
|
|
using Mapster;
|
|
|
|
namespace Dlhis.ScheduledTask.SyncSapInfo.Job;
|
|
|
|
/// <summary>
|
|
/// 职位同步定时任务
|
|
/// </summary>
|
|
public class SyncPositionJob
|
|
{
|
|
private List<SapPositionItem> lastUpdatedPositionList = new List<SapPositionItem>();
|
|
private readonly IDbContext _dbContext;
|
|
private readonly IJinkoSapService _jinkoSapService;
|
|
|
|
public SyncPositionJob(IDbContext dbContext, IJinkoSapService jinkoSapService)
|
|
{
|
|
_dbContext = dbContext;
|
|
_jinkoSapService = jinkoSapService;
|
|
}
|
|
|
|
public async Task SyncPositionInfo()
|
|
{
|
|
var positionResult = await _jinkoSapService.GetPositionsAsync();
|
|
|
|
if (positionResult.Position != null && positionResult.Position.Items.Count > 0)
|
|
{
|
|
var modifiedOrgList = GetModifiedPosition(positionResult.Position.Items);
|
|
await SaveOrg(modifiedOrgList);
|
|
}
|
|
}
|
|
|
|
private List<SapPositionItem> GetModifiedPosition(List<SapPositionItem> spaList)
|
|
{
|
|
if (lastUpdatedPositionList.Count <= 0)
|
|
{
|
|
return spaList;
|
|
}
|
|
var needRemove = spaList.Intersect(lastUpdatedPositionList, new SapPositionComparer());
|
|
return spaList.Except(needRemove, new SapPositionComparer()).ToList();
|
|
}
|
|
|
|
private async Task SaveOrg(List<SapPositionItem> modifiedPostList)
|
|
{
|
|
if (modifiedPostList == null || modifiedPostList.Count == 0) return;
|
|
|
|
var addItems = new List<PositionEntity>();
|
|
var updateItems = new List<PositionEntity>();
|
|
|
|
foreach (var item in modifiedPostList)
|
|
{
|
|
var position = await _dbContext.Queryable<PositionEntity>().Where(x => x.No == item.ZJOBID).FirstAsync();
|
|
if (position == null)
|
|
{
|
|
position = new PositionEntity
|
|
{
|
|
No = item.ZJOBANME,
|
|
Name = item.ZJOBANME,
|
|
DepartmentNo = item.ZDEPID,
|
|
Grade = item.ZZWID
|
|
};
|
|
|
|
addItems.Add(position);
|
|
}
|
|
else
|
|
{
|
|
position.Name = item.ZJOBANME;
|
|
position.DepartmentNo = item.ZDEPID;
|
|
position.Grade = item.ZZWID;
|
|
|
|
updateItems.Add(position);
|
|
}
|
|
}
|
|
|
|
await _dbContext.InsertAsync(addItems);
|
|
await _dbContext.UpdateAsync(updateItems);
|
|
}
|
|
}
|