using Dlhis.Entity.Device.Entities; using Dlhis.ScheduledTask.Attributes; namespace Dlhis.ScheduledTask.Jobs; /// /// 归档设备通行记录 /// [RecurringJob(nameof(ArchiveDeviceUploadLogJob), "0 0 3 * * ? ", Name = "归档设备通行记录")] public class ArchiveDeviceUploadLogJob : BaseJob { public ArchiveDeviceUploadLogJob(IServiceProvider serviceProvider) : base(serviceProvider) { } protected override async Task RunAsync(IServiceProvider serviceProvider) { //设置60天前的数据需要归档 var before60Days = DateTime.Today.AddDays(-60).AddSeconds(1); //每次查询500条数据 const int limit = 500; //归档表 const string tableName = "deviceuploadlog_20250107"; //正序获取数据 var data = await DbContext.Queryable() .Where(x => x.RaiseDateTime < before60Days) .OrderBy(x => x.Id) .ToPageListAsync(1, limit); do { if (data.Any()) { await DbContext.Client.Ado.BeginTranAsync(); try { //删除数据 await DbContext.DeleteReallyAsync(data); foreach (var item in data) { item.Id = 0; } //插入到归档表 await DbContext.Client.Insertable(data).AS(tableName).ExecuteCommandAsync(); await DbContext.Client.Ado.CommitTranAsync(); } catch (Exception) { await DbContext.Client.Ado.RollbackTranAsync(); } await Task.Delay(200); //再次获取数据 data = await DbContext.Queryable().Where(x => x.RaiseDateTime < before60Days).OrderBy(x => x.Id).ToPageListAsync(1, limit); } } while (data.Count == limit); } }