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 38dd2a63..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,9 +211,9 @@ 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(); - foreach (var userNo in userNos) + Parallel.ForEach(userNos, userNo => { before.TryGetValue(userNo, out var beforeTenantDeviceCodes); beforeTenantDeviceCodes ??= new(); @@ -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,12 +581,11 @@ public class DevicePermissionService : IDevicePermissionService var deviceRelationships = await _dbContext.Queryable().ToListAsync(); var result = new Dictionary>(gainfos.Count, StringComparer.OrdinalIgnoreCase); - - foreach (var gainfo in gainfos) + 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); diff --git a/Src/Dlhis.ScheduledTask/Common/Services/Implements/JinkoSapService.cs b/Src/Dlhis.ScheduledTask/Common/Services/Implements/JinkoSapService.cs index f58754a9..ab9959fa 100644 --- a/Src/Dlhis.ScheduledTask/Common/Services/Implements/JinkoSapService.cs +++ b/Src/Dlhis.ScheduledTask/Common/Services/Implements/JinkoSapService.cs @@ -74,7 +74,7 @@ public class JinkoSapService : IJinkoSapService var body = new { - I_ALLINFO = "X", + //I_ALLINFO = "X", T_WERKS = new { item = new List @@ -123,7 +123,7 @@ public class JinkoSapService : IJinkoSapService var body = new { - I_ALLINFO = "X", + //I_ALLINFO = "X", T_WERKS = Array.Empty(), T_PERSON = Array.Empty(), T_PNO = new