From 53bb887101a81ce8aa24daeec21961c8220ed745 Mon Sep 17 00:00:00 2001 From: liguoyang Date: Fri, 17 Oct 2025 19:15:30 +0800 Subject: [PATCH] =?UTF-8?q?feat=20=E5=A4=84=E7=90=86=E8=BE=BE=E5=AE=9E?= =?UTF-8?q?=E4=B8=8B=E5=8F=91=E4=BB=BB=E5=8A=A1=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Jobs/AutoResetDeviceTaskStatusJob.cs | 68 +++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 Src/Dlhis.ScheduledTask/Jobs/AutoResetDeviceTaskStatusJob.cs diff --git a/Src/Dlhis.ScheduledTask/Jobs/AutoResetDeviceTaskStatusJob.cs b/Src/Dlhis.ScheduledTask/Jobs/AutoResetDeviceTaskStatusJob.cs new file mode 100644 index 00000000..88e92243 --- /dev/null +++ b/Src/Dlhis.ScheduledTask/Jobs/AutoResetDeviceTaskStatusJob.cs @@ -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; + +/// +/// 重置达实餐饮设备任务状态 +/// +[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() + .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() + .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() + .SetColumns(x => x.Status == DeviceTaskStatusEnumType.Wait) + .SetColumns(x => x.Version == 0) + .Where(x => taskIds.Contains(x.Id)) + .ExecuteCommandAsync(); + } + } +} \ No newline at end of file