diff --git a/Src/Dlhis.ScheduledTask/Jobs/HeartbeatJob.cs b/Src/Dlhis.ScheduledTask/Jobs/HeartbeatJob.cs index 1ae4e240..6bd12e2c 100644 --- a/Src/Dlhis.ScheduledTask/Jobs/HeartbeatJob.cs +++ b/Src/Dlhis.ScheduledTask/Jobs/HeartbeatJob.cs @@ -2,6 +2,7 @@ using System.Net.Sockets; using Dlhis.Entity.Basic.Entity; using Dlhis.Entity.Device.Entities; +using Kurisu.AspNetCore.Utils; using Kurisu.Core.CustomClass; using Kurisu.Scheduled; using Kurisu.Scheduled.Attributes; @@ -15,12 +16,18 @@ namespace Dlhis.ScheduledTask.Jobs; [RecurringJob(nameof(HeartbeatJob), "0/10 * * * * ?", Name = "设备心跳")] public class HeartbeatJob : BaseJob { - public HeartbeatJob(IServiceProvider serviceProvider) : base(serviceProvider) + private readonly RedisCache _redisCache; + + public HeartbeatJob(IServiceProvider serviceProvider, RedisCache redisCache) : base(serviceProvider) { + _redisCache = redisCache; } public override async Task RunAsync(IServiceProvider serviceProvider) { + var key = "heardbeat-devices"; + await _redisCache.KeyDeleteAsync(key); + var devices = await DbContext.Queryable().Where(x => x.Enable).Where(x => x.HeartbeatInterval > 0).ToListAsync(); foreach (var device in devices) { @@ -34,6 +41,8 @@ public class HeartbeatJob : BaseJob await DbContext.Updateable().SetColumns(x => x.LastHeartbeatTime == DateTime.Now) .Where(x => x.DeviceUniqueNo == device.UniqueNo).ExecuteCommandAsync(); + + await _redisCache.ListLeftPushAsync(key, device.UniqueNo); } catch (Exception) { diff --git a/Src/Dlhis.ScheduledTask/Program.cs b/Src/Dlhis.ScheduledTask/Program.cs index c456425f..cfbd0021 100644 --- a/Src/Dlhis.ScheduledTask/Program.cs +++ b/Src/Dlhis.ScheduledTask/Program.cs @@ -1,4 +1,5 @@ using Kurisu.AspNetCore.Startup; +using Kurisu.AspNetCore.Utils; using Kurisu.AspNetCore.Utils.Extensions; using Kurisu.Startup; @@ -25,6 +26,6 @@ public class Startup : DefaultStartup public override void Configure(IApplicationBuilder app, IWebHostEnvironment env) { base.Configure(app, env); - app.UseSnowFlakeDistributedInitialize(); + SnowFlakeHelper.Initialize(2, 1); } } \ No newline at end of file diff --git a/Src/Dlhis.ScheduledTask/TaskAssignment/Services/Implements/AssignmentService.cs b/Src/Dlhis.ScheduledTask/TaskAssignment/Services/Implements/AssignmentService.cs index eabf443b..c94954c5 100644 --- a/Src/Dlhis.ScheduledTask/TaskAssignment/Services/Implements/AssignmentService.cs +++ b/Src/Dlhis.ScheduledTask/TaskAssignment/Services/Implements/AssignmentService.cs @@ -14,6 +14,7 @@ using Kurisu.SqlSugar.Extensions; using Newtonsoft.Json.Linq; using Kurisu.Core.CustomClass; using Kurisu.AspNetCore; +using Kurisu.AspNetCore.Utils; namespace Dlhis.ScheduledTask.TaskAssignment.Services.Implements; @@ -21,15 +22,21 @@ public class AssignmentService : IAssignmentService { private readonly IDbContext _dbContext; private readonly ILogger _logger; + private readonly RedisCache _redisCache; - public AssignmentService(IDbContext dbContext, ILogger logger) + public AssignmentService(IDbContext dbContext, ILogger logger, RedisCache redisCache) { _dbContext = dbContext; _logger = logger; + _redisCache = redisCache; } public async Task> DeviceGetTasksAsync(DeviceTaskGetRequest request) { + //获取心跳设备 + var key = "heardbeat-devices"; + var heartbeatDeviceNos = (await _redisCache.ListRangeAsync(key))?.Select(x => x.ToString()).ToList(); + var data = await ContinueUpdateAsync(async () => { var page = await _dbContext.Queryable() @@ -42,6 +49,7 @@ public class AssignmentService : IAssignmentService .WhereIF(request.Types.IsPresent(), deviceTask => request.Types.Contains(deviceTask.Type)) .WhereIF(!request.IsProcess, deviceTask => deviceTask.Status == DeviceTaskStatusEnumType.Wait) .WhereIF(request.IsProcess, deviceTask => deviceTask.Status == DeviceTaskStatusEnumType.Process) + .Where(deviceTask => heartbeatDeviceNos.Contains(deviceTask.DeviceUniqueNo)) .OrderBy(deviceTask => deviceTask.CreateTime) .Select((deviceTask, deivce, deivceTamplate, ga, department) => new {