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; /// /// 职位同步定时任务 /// public class SyncPositionJob { private List lastUpdatedPositionList = new List(); 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 GetModifiedPosition(List 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 modifiedPostList) { if (modifiedPostList == null || modifiedPostList.Count == 0) return; var addItems = new List(); var updateItems = new List(); foreach (var item in modifiedPostList) { var position = await _dbContext.Queryable().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); } }