diff --git a/Src/Dlhis.Basic/Device/Controllers/DevicePermissionManuallyController.cs b/Src/Dlhis.Basic/Device/Controllers/DevicePermissionManuallyController.cs index 1795014a..021705ed 100644 --- a/Src/Dlhis.Basic/Device/Controllers/DevicePermissionManuallyController.cs +++ b/Src/Dlhis.Basic/Device/Controllers/DevicePermissionManuallyController.cs @@ -59,6 +59,7 @@ public class DevicePermissionManuallyController : ControllerBase /// /// [HttpPost("batchDelete")] + [Transactional] public async Task DeleteAsync(List ids) { await _devicePermissionService.DeleteAsync(ids); diff --git a/Src/Dlhis.ScheduledTask/Jobs/RemoveManuallyDevicePermissionJob.cs b/Src/Dlhis.ScheduledTask/Jobs/RemoveManuallyDevicePermissionJob.cs new file mode 100644 index 00000000..a158a177 --- /dev/null +++ b/Src/Dlhis.ScheduledTask/Jobs/RemoveManuallyDevicePermissionJob.cs @@ -0,0 +1,58 @@ +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), "", 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); + } + } +}