fix 人员同步,下发任务创建
This commit is contained in:
@@ -11,6 +11,6 @@
|
||||
/// <summary>
|
||||
/// 0离职
|
||||
/// </summary>
|
||||
public int STAT2 { get; set; }
|
||||
public string STAT2 { get; set; }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,6 +10,7 @@ using Dlhis.Entity.Basic.Enums;
|
||||
using Dlhis.Sys.Api;
|
||||
using Dlhis.Sys.Api.Response;
|
||||
using SqlSugar;
|
||||
using Dlhis.Basic.Api;
|
||||
|
||||
namespace Dlhis.ScheduledTask.SyncSapInfo.Job;
|
||||
|
||||
@@ -18,20 +19,27 @@ public class SyncPersonJob
|
||||
private readonly ILogger _logger;
|
||||
private readonly IJinkoSapService _jinkoSapService;
|
||||
private readonly ITenantApi _tenantApi;
|
||||
private readonly IDevicePermissionApi _devicePermissionApi;
|
||||
private List<PositionEntity> _positions;
|
||||
private List<TenantResponse> _tenants;
|
||||
private List<SapPersonDepartmentStatus> _departmentChanges;
|
||||
private List<SapPersonJobStatus> _jobChanges;
|
||||
|
||||
public SyncPersonJob(ILogger<SyncPersonJob> logger, IJinkoSapService jinkoSapService, ITenantApi tenantApi)
|
||||
public SyncPersonJob(ILogger<SyncPersonJob> logger, IJinkoSapService jinkoSapService,
|
||||
ITenantApi tenantApi, IDevicePermissionApi devicePermissionApi)
|
||||
{
|
||||
_logger = logger;
|
||||
_jinkoSapService = jinkoSapService;
|
||||
_tenantApi = tenantApi;
|
||||
_devicePermissionApi = devicePermissionApi;
|
||||
}
|
||||
|
||||
public async Task RunAsync()
|
||||
{
|
||||
var personResp = await _jinkoSapService.GetPersonsAsync();
|
||||
var persons = personResp.Person.Items;
|
||||
_departmentChanges = personResp.DepartmentInfo.Items;
|
||||
_jobChanges = personResp.JobStatusInfo.Items;
|
||||
|
||||
_logger.LogInformation("获取SAP人员数量为:{count}", persons.Count);
|
||||
if (persons.Count > 0)
|
||||
@@ -59,18 +67,20 @@ public class SyncPersonJob
|
||||
var workCodes = persons.Select(x => x.ZWORKCODE).ToList();
|
||||
var chunks = workCodes.Chunk(4000).ToList();
|
||||
|
||||
Scoped.Temp.Value.Create(sp =>
|
||||
await Scoped.Temp.Value.Create(async sp =>
|
||||
{
|
||||
var dbContext = sp.GetService<IDbContext>();
|
||||
|
||||
foreach (var searchCodes in chunks)
|
||||
{
|
||||
_logger.LogInformation("SAP分批处理Chunk数量:{count}", searchCodes.Count());
|
||||
var dtoResult = await _devicePermissionApi.GetPermissionUsersInfoAsync();
|
||||
var dto = dtoResult.Data;
|
||||
|
||||
var existsWorkCodes = dbContext.Queryable<GainfoSapEntity>()
|
||||
.Where(x => searchCodes.Contains(x.ename))
|
||||
.Select(x => x.ename)
|
||||
.ToList();
|
||||
.Where(x => searchCodes.Contains(x.ename))
|
||||
.Select(x => x.ename)
|
||||
.ToList();
|
||||
|
||||
var originUpdates = persons.Where(x => existsWorkCodes.Contains(x.ZWORKCODE)).ToList();
|
||||
var existsUpdateWorkCodes = originUpdates.Select(x => x.ZWORKCODE).ToList();
|
||||
@@ -83,6 +93,7 @@ public class SyncPersonJob
|
||||
_logger.LogInformation("SAP分批更新数:{count}", updates.Count);
|
||||
var inserts = ToGainfoSap(originInserts);
|
||||
_logger.LogInformation("SAP分批新增数:{count}", inserts.Count);
|
||||
|
||||
foreach (var item in inserts)
|
||||
{
|
||||
i++;
|
||||
@@ -114,6 +125,10 @@ public class SyncPersonJob
|
||||
}
|
||||
}
|
||||
|
||||
var rResult = await _devicePermissionApi.RePermissionUsersInfoAsync(dto);
|
||||
var r = rResult.Data;
|
||||
|
||||
_logger.LogInformation("生成下发任务数量:{count}", r);
|
||||
}
|
||||
});
|
||||
|
||||
@@ -127,7 +142,7 @@ public class SyncPersonJob
|
||||
var info = new GainfoEntity
|
||||
{
|
||||
No = Guid.NewGuid().ToString(),
|
||||
SapNo = item.ano,
|
||||
SapNo = item.PERNR,
|
||||
Type = item.@class,
|
||||
Name = item.gname,
|
||||
Code = item.ename,
|
||||
@@ -157,10 +172,9 @@ public class SyncPersonJob
|
||||
{
|
||||
db.Client.Insertable(info).AS("GainfoLeave").ExecuteCommand();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void UpdatePerson(IDbContext db, GainfoSapEntity item)
|
||||
private static void UpdatePerson(IDbContext db, GainfoSapEntity item)
|
||||
{
|
||||
var gainfoSap = db.Queryable<GainfoSapEntity>().Where(x => x.ename == item.ename).First();
|
||||
db.Updateable<GainfoSapEntity>().SetColumns(g => new GainfoSapEntity
|
||||
@@ -214,12 +228,39 @@ public class SyncPersonJob
|
||||
return sapList;
|
||||
}
|
||||
|
||||
var now = DateTime.Now;
|
||||
foreach (var item in sapList)
|
||||
{
|
||||
var a = _jobChanges.FirstOrDefault(x => x.ZWORKCODE == item.ZWORKCODE);
|
||||
if (a != null)
|
||||
{
|
||||
if (a.BEGDA >= now && a.ENDDA <= now)
|
||||
{
|
||||
if (a.STAT2 == "0")
|
||||
{
|
||||
item.STAT2 = "0";
|
||||
item.ZSTATUS = "5";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var b = _departmentChanges.FirstOrDefault(x => x.ZWORKCODE == item.ZWORKCODE);
|
||||
if (b != null)
|
||||
{
|
||||
if (b.BEGDA >= now && b.ENDDA <= now)
|
||||
{
|
||||
item.ORGEH = b.ORGEH;
|
||||
item.WERKS = b.WERKS;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var needRemove = sapList.Intersect(last, new SapPersonComparer());
|
||||
return sapList.Except(needRemove, new SapPersonComparer()).ToList();
|
||||
}
|
||||
|
||||
|
||||
private List<SapPersonItem> LoadData(IDbContext db)
|
||||
private static List<SapPersonItem> LoadData(IDbContext db)
|
||||
{
|
||||
var gainfo = db.Queryable<GainfoSapEntity>().ToList();
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
namespace Dlhis.ScheduledTask.SyncSapInfo.Services;
|
||||
|
||||
public interface IJinkoSapService : ISingletonDependency
|
||||
public interface IJinkoSapService : IScopeDependency
|
||||
{
|
||||
Task<SapOrganizationResponse> GetSapOrganizationsAsync();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user