From 9ad98cdb17ac421dc411b281729f901e35db020b Mon Sep 17 00:00:00 2001 From: liguoyang Date: Thu, 20 Jun 2024 13:07:11 +0800 Subject: [PATCH] =?UTF-8?q?fix=20=E5=88=86=E9=85=8D=E5=88=86=E7=BB=84?= =?UTF-8?q?=E4=BA=BA=E5=91=98=E6=95=B0=E6=8D=AE=E6=9D=83=E9=99=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Filters/AssignPermissionLimitAttribute.cs | 2 +- .../Implements/DevicePermissionService.cs | 20 +++++++++---------- .../Controllers/GainfoGroupsController.cs | 6 ++++-- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/Src/Dlhis.Basic/Device/Filters/AssignPermissionLimitAttribute.cs b/Src/Dlhis.Basic/Device/Filters/AssignPermissionLimitAttribute.cs index 9d9b6bab..42675f51 100644 --- a/Src/Dlhis.Basic/Device/Filters/AssignPermissionLimitAttribute.cs +++ b/Src/Dlhis.Basic/Device/Filters/AssignPermissionLimitAttribute.cs @@ -17,7 +17,7 @@ public class AssignPermissionLimitAttribute : Attribute, IAsyncActionFilter await using (var handler = await redisCache.LockAsync($"permission:generate:{currentTenantId}")) { - handler.Acquired.ThrowIfFalse("请勿频繁分配设备权限"); + handler.Acquired.ThrowIfFalse("请勿频繁分配"); await next(); } } diff --git a/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs b/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs index fbf1e68e..e0a7584a 100644 --- a/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs +++ b/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs @@ -1,4 +1,5 @@ -using Dlhis.Basic.Device.Dtos; +using System.Collections.Concurrent; +using Dlhis.Basic.Device.Dtos; using Dlhis.Basic.Device.Request; using Dlhis.Basic.Organization.Dto; using Dlhis.Entity.Basic.Entity; @@ -210,7 +211,7 @@ public class DevicePermissionService : IDevicePermissionService _logger.LogInformation("任务后置人数{count}", userNos.Count); var devices = await _dbContext.Queryable().Where(x => x.Enable).ToListAsync(); - var waitTasks = new List(); + var waitTasks = new ConcurrentBag(); Parallel.ForEach(userNos, userNo => { @@ -245,7 +246,7 @@ public class DevicePermissionService : IDevicePermissionService addItems = addItems.Where(x => deviceCodes.Contains(x)).ToList(); //下发任务创建 - var toDeleted = deletedItems.Select(x => new DeviceTaskEntity + deletedItems.ForEach(x => waitTasks.Add(new DeviceTaskEntity { DeviceUniqueNo = devices.First(item => item.Code == x).UniqueNo, Status = DeviceTaskStatusEnumType.Wait, @@ -255,9 +256,9 @@ public class DevicePermissionService : IDevicePermissionService UserNo = userNo, Version = 0, TenantId = tenant, - }).ToList(); + })); - var toAdd = addItems.Select(x => new DeviceTaskEntity + addItems.ForEach(x => waitTasks.Add(new DeviceTaskEntity { DeviceUniqueNo = devices.First(item => item.Code == x).UniqueNo, Status = DeviceTaskStatusEnumType.Wait, @@ -266,16 +267,14 @@ public class DevicePermissionService : IDevicePermissionService UserNo = userNo, Version = 0, TenantId = tenant, - }).ToList(); - - waitTasks.AddRange(toDeleted.Concat(toAdd).ToList()); + })); } }); _logger.LogInformation("任务产生数量{count}", waitTasks.Count); if (waitTasks.Any()) { - await _dbContext.InsertAsync(waitTasks); + await _dbContext.InsertAsync(waitTasks.ToList()); } } @@ -582,13 +581,12 @@ public class DevicePermissionService : IDevicePermissionService var deviceRelationships = await _dbContext.Queryable().ToListAsync(); var result = new Dictionary>(gainfos.Count, StringComparer.OrdinalIgnoreCase); - Parallel.ForEach(gainfos, gainfo => { var codes = GetAssignDeviceCodesInternal(gainfo, gainfoGroupRelationships, devicePermissions, deviceGroups, deviceRelationships, registries, devices); result.Add(gainfo.No, codes); }); - + return result; } diff --git a/Src/Dlhis.Basic/Organization/Controllers/GainfoGroupsController.cs b/Src/Dlhis.Basic/Organization/Controllers/GainfoGroupsController.cs index bbf9205f..89895a9f 100644 --- a/Src/Dlhis.Basic/Organization/Controllers/GainfoGroupsController.cs +++ b/Src/Dlhis.Basic/Organization/Controllers/GainfoGroupsController.cs @@ -1,4 +1,5 @@ -using Dlhis.Basic.Organization.Request; +using Dlhis.Basic.Device.Filters; +using Dlhis.Basic.Organization.Request; using Dlhis.Basic.Organization.Response; using Dlhis.Basic.Organization.Services; using Kurisu.AspNetCore.DataAccess.SqlSugar.Aop; @@ -61,8 +62,9 @@ public class GainfoGroupsController : ControllerBase /// /// [HttpPost("assign")] - [IgnoreTenant] + [AssignPermissionLimit] [Transactional] + [DataPermission] public async Task AssignGainfosAsync(GainfoAssignRequest request) { await _gainfoGroupService.AssignGainfosAsync(request);