Files
jinko.yikatong/Src/Dlhis.ScheduledTask/Jobs/CreateSyncServerDateTimeJob.cs
2025-07-05 14:43:16 +08:00

72 lines
2.6 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using Dlhis.Entity.Basic.Entity;
using Dlhis.Entity.Device.Entities;
using Dlhis.Entity.Device.Enums;
using Dlhis.ScheduledTask.Attributes;
namespace Dlhis.ScheduledTask.Jobs;
/// <summary>
/// 设备时间同步
/// </summary>
[RecurringJob(nameof(CreateSyncServerDateTimeJob), "0 0 0/1 * * ?", Name = "设备时间同步")]
public class CreateSyncServerDateTimeJob : BaseJob
{
public CreateSyncServerDateTimeJob(IServiceProvider serviceProvider) : base(serviceProvider)
{
}
protected override async Task RunAsync(IServiceProvider serviceProvider)
{
var devices = await DbContext.Queryable<DeviceEntity>()
.Where(x => x.Enable)
.ToListAsync();
foreach (var device in devices)
{
var deviceTask = await DbContext.Queryable<DeviceTaskEntity>()
.Where(x => x.DeviceUniqueNo == device.UniqueNo)
.Where(x => x.Type == DeviceTaskEnumType.SyncDateTime)
.OrderByDescending(x => x.Id)
.FirstAsync();
if (deviceTask != null)
{
if (deviceTask.Status is DeviceTaskStatusEnumType.Success
or DeviceTaskStatusEnumType.Process
or DeviceTaskStatusEnumType.Error
)
{
var id = deviceTask.Id;
await DbContext.Deleteable<DeviceTaskEntity>().Where(x => x.Id == id).ExecuteCommandAsync();
deviceTask = null;
}
else if (deviceTask.Status == DeviceTaskStatusEnumType.Wait)
{
if (deviceTask.ModifiedTime.AddDays(3) < DateTime.Now)
{
// 如果任务等待时间超过3天,则删除任务
var id = deviceTask.Id;
await DbContext.Deleteable<DeviceTaskEntity>().Where(x => x.Id == id).ExecuteCommandAsync();
deviceTask = null;
}
}
}
if (deviceTask == null)
{
await DbContext.InsertAsync(new DeviceTaskEntity
{
DeviceUniqueNo = device.UniqueNo,
Status = DeviceTaskStatusEnumType.Wait,
TenantId = device.TenantId,
Version = 0,
UserNo = string.Empty,
Type = DeviceTaskEnumType.SyncDateTime,
DeviceType = device.Type,
Priority = 49,
Source = "定时任务创建设备同步时间任务"
});
}
}
}
}