diff --git a/Src/Dlhis.ScheduledTask/Jobs/ArchiveDeviceUploadLogJob.cs b/Src/Dlhis.ScheduledTask/Jobs/ArchiveDeviceUploadLogJob.cs new file mode 100644 index 00000000..271d3ca3 --- /dev/null +++ b/Src/Dlhis.ScheduledTask/Jobs/ArchiveDeviceUploadLogJob.cs @@ -0,0 +1,51 @@ +using Dlhis.Entity.Device.Entities; +using Dlhis.ScheduledTask.Attributes; + +namespace Dlhis.ScheduledTask.Jobs; + +/// +/// 归档设备通行记录 +/// +[RecurringJob(nameof(ArchiveDeviceUploadLogJob), "0 0/5 * * * ?", Name = "归档设备通行记录")] +public class ArchiveDeviceUploadLogJob : BaseJob +{ + public ArchiveDeviceUploadLogJob(IServiceProvider serviceProvider) : base(serviceProvider) + { + } + + protected override async Task RunAsync(IServiceProvider serviceProvider) + { + var before60Days = DateTime.Today.AddDays(-60).AddSeconds(1); + 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(); + } + + data = await DbContext.Queryable().Where(x => x.RaiseDateTime < before60Days).OrderBy(x => x.Id).ToPageListAsync(1, limit); + } + + } while (data.Count == limit); + } +} \ No newline at end of file