feat 处理达实下发任务状态
This commit is contained in:
68
Src/Dlhis.ScheduledTask/Jobs/AutoResetDeviceTaskStatusJob.cs
Normal file
68
Src/Dlhis.ScheduledTask/Jobs/AutoResetDeviceTaskStatusJob.cs
Normal file
@@ -0,0 +1,68 @@
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user