fix 人员同步,下发任务创建

This commit is contained in:
2024-03-09 18:03:33 +08:00
parent 3bf767281e
commit 3fb820bd2d
17 changed files with 261 additions and 59 deletions

View File

@@ -11,6 +11,6 @@
/// <summary>
/// 0离职
/// </summary>
public int STAT2 { get; set; }
public string STAT2 { get; set; }
}
}

View File

@@ -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();

View File

@@ -2,7 +2,7 @@
namespace Dlhis.ScheduledTask.SyncSapInfo.Services;
public interface IJinkoSapService : ISingletonDependency
public interface IJinkoSapService : IScopeDependency
{
Task<SapOrganizationResponse> GetSapOrganizationsAsync();