using Dlhis.Entity.Basic.Entity; using Dlhis.Entity.Device.Entities; using Dlhis.Entity.Device.Enums; using Dlhis.ScheduledTask.Attributes; using Kurisu.AspNetCore.DataAccess.SqlSugar.Services; namespace Dlhis.ScheduledTask.Jobs; /// /// 移除例外权限 /// [RecurringJob(nameof(RemoveManuallyDevicePermissionJob), "0 0/5 * * * ?", Name = "移除例外权限")] public class RemoveManuallyDevicePermissionJob : BaseJob { public RemoveManuallyDevicePermissionJob(IServiceProvider serviceProvider) : base(serviceProvider) { } protected override async Task RunAsync(IServiceProvider serviceProvider) { var now = DateTime.Now; var db = serviceProvider.GetService(); var data = await db.Queryable().Where(x => x.ValidDateTime.HasValue && x.ValidDateTime <= now).ToListAsync(); var deviceCodes = data.Select(x => x.DeviceCode).Distinct().ToList(); var devices = await db.Queryable().Where(x => deviceCodes.Contains(x.Code)).ToListAsync(); foreach (var item in data) { var userInfo = await db.Queryable().Where(x => x.No == item.UserNo).Select(x => new { x.Id, x.No }).SingleAsync() ?? await db.Queryable().Where(x => x.No == item.UserNo).Select(x => new { Id = (long)x.IdentityUserId, x.No }).SingleAsync(); if (userInfo != null) { var device = devices.FirstOrDefault(x => x.Code == item.DeviceCode); if (device != null) { await db.InsertAsync(new DeviceTaskEntity { Type = DeviceTaskEnumType.Delete, DeviceType = device.Type, UserId = userInfo.Id, UserNo = userInfo.No, DeviceUniqueNo = device.UniqueNo, Status = DeviceTaskStatusEnumType.Wait, Version = 0, ResultMessage = null, Source = "例外权限到期", Priority = 0, TenantId = device.TenantId }); } } await db.DeleteAsync(item); } } }