using Dlhis.Entity.Basic.Entity; using Dlhis.Entity.Device.Entities; using Dlhis.Entity.Device.Enums; using Dlhis.Jip.Api; using Dlhis.Jip.Api.Requests; using Dlhis.ScheduledTask.Attributes; using SqlSugar; namespace Dlhis.ScheduledTask.Jobs; /// /// 上传考勤记录 /// [RecurringJob(nameof(SyncOriginCardInfoJob), "0 0/1 * * * ?", Name = "上传考勤记录")] public class SyncOriginCardInfoJob : BaseJob { private readonly IJinkoJipApi _jinkoJipApi; public SyncOriginCardInfoJob(IJinkoJipApi jinkoJipApi, IServiceProvider serviceProvider) : base(serviceProvider) { _jinkoJipApi = jinkoJipApi; } protected override async Task RunAsync(IServiceProvider serviceProvider) { var start = DateTime.Now.AddHours(-1); var requests = await DbContext.Queryable() .LeftJoin((x, device) => x.DeviceUniqueNo == device.UniqueNo) .Where(x => x.ModifiedTime > start) .Where(x => !string.IsNullOrEmpty(x.UserUniqueNo)) .Where(x => x.Sync == false) .Where(x => SqlFunc.Subqueryable().Where(p => p.Code == x.UserUniqueNo).NotAny()) .Where(x => SqlFunc.Subqueryable() .Where(p => p.UniqueNo == x.DeviceUniqueNo) .Where(p => p.Type == DeviceTypeEnumType.Attendance || (p.Type == DeviceTypeEnumType.Door && p.AsAttendance)).Any()) .Select((x, device) => new UploadAttendanceRequestItem { Id = x.Id, RaiseDateTime = x.RaiseDateTime, ZNOTE = device.DeployPlace, ZWORKCODE = x.UserUniqueNo }) .ToPageListAsync(1, 500); Logger.LogInformation("获取待上传考勤记录数:{count}", requests.Count); if (requests.Any()) { foreach (var items in requests.Chunk(500)) { try { var ids = items.Select(x => x.Id).ToList(); var r = await _jinkoJipApi.UploadAttendancesAsync(new UploadAttendanceRequest { Data = items.ToList() }); if (r.OLX == "0") { await DbContext.Updateable() .SetColumns(x => x.Sync == true) .SetColumns(x => x.ModifiedTime == DateTime.Now) .Where(x => ids.Contains(x.Id)) .ExecuteCommandAsync(); } else { Logger.LogError("考勤上传异常:{message}", r.OMS); } } catch (Exception ex) { Logger.LogError(ex, "考勤上传异常:{message}", ex.Message); } } } } }