Files
jinko.yikatong/Src/Dlhis.ScheduledTask/Jobs/AutoResetDeviceTaskStatusJob.cs

68 lines
2.5 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;
using Kurisu.AspNetCore.Utils.Extensions;
using SqlSugar;
namespace Dlhis.ScheduledTask.Jobs;
/// <summary>
/// 重置达实餐饮设备任务状态
/// </summary>
[RecurringJob(nameof(AutoResetDeviceTaskStatusJob), "0 0 0/3 * * ?", Name = "重置达实餐饮设备任务状态")]
public class AutoResetDeviceTaskStatusJob : BaseJob
{
public AutoResetDeviceTaskStatusJob(IServiceProvider serviceProvider) : base(serviceProvider)
{
}
private readonly Guid _templateCode = new Guid("dd8414d0-3040-49b8-8e6f-059a58eff80f");
protected override async Task RunAsync(IServiceProvider serviceProvider)
{
// select *
// from device
// where Type = 'Meal'
// and TemplateCode = 'dd8414d0-3040-49b8-8e6f-059a58eff80f'
// and TenantId = 1234
// and Enable = 1;
// select *
// from devicetask
// where DeviceUniqueNo = 'F9BCE64A1176AC20910032E205D2B4F2'
// and ModifiedTime > '2025-10-07'
// and Status = 'Process'
// order by ModifiedTime desc;
var devices = await DbContext.Queryable<DeviceEntity>()
.Where(x => x.Type == DeviceTypeEnumType.Meal && x.TemplateCode == _templateCode)
.Where(x => x.Enable)
.ToListAsync();
var now = DateTime.Now;
var dayBefore = now.AddDays(-2);
//获取处理中的任务时间是当前大于修改时间10分钟,这里设置为30分钟,避免时间差问题
var regetTaskTimeLimit = now.AddMinutes(-30);
foreach (var device in devices)
{
var tasks = await DbContext.Queryable<DeviceTaskEntity>()
.Where(x => x.DeviceUniqueNo == device.UniqueNo)
.Where(x => x.ModifiedTime > dayBefore && x.ModifiedTime < regetTaskTimeLimit)
.Where(x => x.Status == DeviceTaskStatusEnumType.Process)
.OrderBy(x => x.ModifiedTime, OrderByType.Desc)
.ToListAsync();
if (!tasks.IsPresent()) continue;
//重置状态为待处理
var taskIds = tasks.Select(x => x.Id).ToList();
await DbContext.Updateable<DeviceTaskEntity>()
.SetColumns(x => x.Status == DeviceTaskStatusEnumType.Wait)
.SetColumns(x => x.Version == 0)
.Where(x => taskIds.Contains(x.Id))
.ExecuteCommandAsync();
}
}
}