Files
jinko.yikatong/Src/Dlhis.ScheduledTask/Jobs/SyncBusinessTripJob.cs
2024-07-04 16:26:39 +08:00

64 lines
2.5 KiB
C#

using Dlhis.Entity.Basic.Entity;
using Dlhis.Entity.Visitor.Entity;
using Dlhis.ScheduledTask.Attributes;
using Dlhis.ScheduledTask.Common.Services;
using Mapster;
namespace Dlhis.ScheduledTask.Jobs;
[RecurringJob(nameof(SyncBusinessTripJob), "0 0 1 1/1 * ? ", Name = "SAP同步出差信息")]
public class SyncBusinessTripJob : BaseJob
{
/// <inheritdoc />
public SyncBusinessTripJob(IServiceProvider serviceProvider) : base(serviceProvider)
{
}
/// <inheritdoc />
protected override async Task RunAsync(IServiceProvider serviceProvider)
{
var jipService = serviceProvider.GetService<IJinkoJIPService>();
var today = DateTime.Today;
var departments = await DbContext.Queryable<DepartmentEntity>().ToListAsync();
var tops = departments.Where(x => x.PNo == "00001000").ToList();
var validDepartments = tops.ToList();
tops.ForEach(x => RecursionGetNext(x, departments, validDepartments));
foreach (var departmentNos in validDepartments.Select(x => x.No).Chunk(20))
{
try
{
var tripResponse = await jipService.GetTravelInfosByDepartmentsAsync(today, today, departmentNos.ToList());
foreach (var tripInfoItem in tripResponse.Items)
{
if (await DbContext.Queryable<BusinessTripEntity>().Where(x => x.Code == tripInfoItem.Code
&& x.BeginDate == tripInfoItem.BeginDate
&& x.EndDate == tripInfoItem.EndDate).AnyAsync())
{
continue;
}
var entity = tripInfoItem.Adapt<BusinessTripEntity>();
await DbContext.InsertAsync(entity);
}
}
catch (Exception e)
{
Logger.LogError(e, "获取部门出差数据执行失败:{message}", e.Message);
}
}
}
//************************************************************************************************************************************************
private static void RecursionGetNext(DepartmentEntity current, List<DepartmentEntity> data, List<DepartmentEntity> result)
{
var next = data.Where(x => x.PNo == current.No).ToList();
foreach (var item in next)
{
result.Add(item);
RecursionGetNext(item, data, result);
}
}
}