using Dlhis.Entity.Basic.Entity;
using Dlhis.ScheduledTask.SyncSapInfo.Comparers;
using Dlhis.ScheduledTask.SyncSapInfo.Dto;
using Dlhis.ScheduledTask.SyncSapInfo.Services;
using Hangfire;
using Kurisu.SqlSugar.Services;
namespace Dlhis.ScheduledTask.SyncSapInfo.Job;
///
/// 部门同步定时任务
///
public class SyncOrganizationJob
{
private List lastUpdatedOrgList = new();
private readonly IDbContext _dbContext;
private readonly IJinkoSapService _jinkoSapService;
public SyncOrganizationJob(IDbContext dbContext, IJinkoSapService jinkoSapService)
{
_dbContext = dbContext;
_jinkoSapService = jinkoSapService;
}
public async Task SyncOrgInfo()
{
var orgResult = await _jinkoSapService.GetSapOrganizationsAsync();
if (orgResult.Org != null && orgResult.Org.Items.Count > 0)
{
var modifiedOrgList = GetModifiedOrg(orgResult.Org?.Items);
await SaveOrg(modifiedOrgList);
}
var syncPositionJob = BackgroundJob.ContinueJobWith("SyncOrganizationJob", job => job.SyncPositionInfo(), JobContinuationOptions.OnlyOnSucceededState);
BackgroundJob.ContinueJobWith(syncPositionJob, job => job.SyncPersonInfo(), JobContinuationOptions.OnlyOnSucceededState);
}
private List GetModifiedOrg(List sapList)
{
if (lastUpdatedOrgList.Count <= 0)
{
return sapList;
}
var needRemove = sapList.Intersect(lastUpdatedOrgList, new SapOrganizationComparer());
return sapList.Except(needRemove, new SapOrganizationComparer()).ToList();
}
private async Task SaveOrg(List modifiedOrgList)
{
if (modifiedOrgList == null || modifiedOrgList.Count == 0) return;
foreach (SapOrganizationItem item in modifiedOrgList)
{
var department = await _dbContext.Queryable().Where(x => x.No == item.OBJID).FirstAsync();
if (department == null)
{
department = new DepartmentEntity
{
No = item.OBJID,
Name = item.STEXT,
PNo = item.SOBID,
};
await _dbContext.InsertAsync(department);
}
else
{
department.PNo = item.SOBID;
department.Name = item.STEXT;
await _dbContext.UpdateAsync(department);
}
}
}
}