using Dlhis.Entity.Basic.Entity; using Dlhis.Entity.Device.Entities; using Dlhis.Entity.Device.Enums; using Dlhis.ScheduledTask.Common.Request; using Dlhis.ScheduledTask.Common.Services; using Kurisu.AspNetCore.Utils.Extensions; using Kurisu.Scheduled; using Kurisu.Scheduled.Attributes; using Microsoft.Extensions.Logging; using SqlSugar; namespace Dlhis.ScheduledTask.Jobs; /// /// 上传考勤记录 /// [RecurringJob(nameof(SyncOriginCardInfoJob), "0 0/15 * * * ?", Name = "上传考勤记录")] public class SyncOriginCardInfoJob : BaseJob { private readonly IJinkoJIPService _jinkoJIPService; public SyncOriginCardInfoJob(IJinkoJIPService jinkoJIPService, IServiceProvider serviceProvider) : base(serviceProvider) { _jinkoJIPService = jinkoJIPService; } public override async Task RunAsync(IServiceProvider serviceProvider) { //考勤设备(不需要Enable参数) var devices = await DbContext.Queryable() .Where(x => x.Type == DeviceTypeEnumType.Attendance || x.Type == DeviceTypeEnumType.Door && x.AsAttendance) .ToListAsync(); //获取上传日志(有效的) var deviceUniqueNos = devices.Select(x => x.UniqueNo).ToList(); var requests = await DbContext.Queryable() .LeftJoin((x, device) => x.DeviceUniqueNo == device.UniqueNo) .Where(x => deviceUniqueNos.Contains(x.DeviceUniqueNo)) .Where(x => !string.IsNullOrEmpty(x.UserUniqueNo)) .Where(x => x.Sync == false) .Where(x => SqlFunc.Subqueryable().Where(p => p.Code == x.UserUniqueNo).NotAny()) .Select((x, device) => new UploadAttendanceRequest { Id = x.Id, RaiseDateTime = x.RaiseDateTime, ZNOTE = device.DeployPlace, ZWORKCODE = x.UserUniqueNo }) .ToPageListAsync(1, 5000); 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 _jinkoJIPService.UploadAttendancesAsync(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); } } } } }