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);
}
}
}