From 49f941617fc3c64a6255c9b153f3d6cfb7d64b8b Mon Sep 17 00:00:00 2001 From: liguoyang Date: Tue, 3 Dec 2024 18:27:07 +0800 Subject: [PATCH] test ts --- .../Device/Dtos/UserTenantDeviceCodeDto.cs | 2 +- .../Implements/DevicePermissionService.cs | 60 ++++++++++--------- 2 files changed, 34 insertions(+), 28 deletions(-) diff --git a/Src/Dlhis.Basic/Device/Dtos/UserTenantDeviceCodeDto.cs b/Src/Dlhis.Basic/Device/Dtos/UserTenantDeviceCodeDto.cs index 1d1b3b82..688e5e53 100644 --- a/Src/Dlhis.Basic/Device/Dtos/UserTenantDeviceCodeDto.cs +++ b/Src/Dlhis.Basic/Device/Dtos/UserTenantDeviceCodeDto.cs @@ -10,5 +10,5 @@ public class UserTenantDeviceCodeDto /// /// 设备权限 /// - public List Codes { get; set; } + public IEnumerable Codes { get; set; } } diff --git a/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs b/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs index db45a92c..da3baf4e 100644 --- a/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs +++ b/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs @@ -1,5 +1,6 @@ using System.Collections.Concurrent; using System.Diagnostics; +using System.Runtime.CompilerServices; using Dlhis.Basic.DataPermissions; using Dlhis.Basic.Device.Dtos; using Dlhis.Basic.Device.Request; @@ -581,8 +582,8 @@ public class DevicePermissionService : IDevicePermissionService foreach (var tenant in tenants) { - var currentCodes = currentTenantDeviceCodes.FirstOrDefault(x => x.Tenant == tenant)?.Codes ?? new List(); - var beforeCodes = beforeTenantDeviceCodes.FirstOrDefault(x => x.Tenant == tenant)?.Codes ?? new List(); + var currentCodes = currentTenantDeviceCodes.FirstOrDefault(x => x.Tenant == tenant)?.Codes?.ToList() ?? new List(); + var beforeCodes = beforeTenantDeviceCodes.FirstOrDefault(x => x.Tenant == tenant)?.Codes?.ToList() ?? new List(); //被删除 var deletedItems = beforeCodes.Where(x => !currentCodes.Contains(x)).ToList(); @@ -952,12 +953,12 @@ public class DevicePermissionService : IDevicePermissionService List devicePermissions, List deviceGroups, List departments, DeviceAssignmentTypeEnumType uniqueType, AssignTypeEnumType assignType, string assignValue) { - var tenantDevicePermissions = devicePermissions - .Where(x => x.UniqueType == uniqueType) - .Where(x => x.AssignType == assignType) - .Where(x => x.AssignValue == assignValue) + var tenantDevicePermissions = devicePermissions.AsParallel() + .Where(x => x.UniqueType == uniqueType + && x.AssignType == assignType + && x.AssignValue == assignValue) .GroupBy(x => x.TenantId) - .Select(x => new UserTenantDeviceCodeDto { Tenant = x.Key, Codes = x.Select(p => p.UniqueValue).ToList() }) + .Select(x => new UserTenantDeviceCodeDto { Tenant = x.Key, Codes = x.Select(p => p.UniqueValue) }) .ToList(); //处理获取设备分组的情况 @@ -974,17 +975,17 @@ public class DevicePermissionService : IDevicePermissionService var arr = assignValue.Split(":"); var tenantId = arr.First(); var currentDepartmentNo = arr.Last(); - var departmentNos = new List { currentDepartmentNo }; + var departmentNos = new List(12) { currentDepartmentNo }; DepartmentRecursionGetPNo(currentDepartmentNo, departments, departmentNos); departmentNos = departmentNos.Select(x => tenantId + ":" + x).ToList(); - tenantDevicePermissions = devicePermissions + tenantDevicePermissions = devicePermissions.AsParallel() .Where(x => x.UniqueType == uniqueType) .Where(x => x.AssignType == assignType) .Where(x => departmentNos.Contains(x.AssignValue)) .GroupBy(x => x.TenantId) - .Select(x => new UserTenantDeviceCodeDto { Tenant = x.Key, Codes = x.Select(p => p.UniqueValue).ToList() }) + .Select(x => new UserTenantDeviceCodeDto { Tenant = x.Key, Codes = x.Select(p => p.UniqueValue) }) .ToList(); } @@ -998,32 +999,37 @@ public class DevicePermissionService : IDevicePermissionService Codes = x.SelectMany(item => item.Codes).ToList() }; }).ToList(); + } - void DeviceGroupRecursionGetNext(DeviceGroupEntity current, List currentDeviceGroups, List result, bool add) + [MethodImpl(MethodImplOptions.AggressiveInlining)] + static void DepartmentRecursionGetPNo(string current, List data, List result) + { + var p = data.FirstOrDefault(x => x.No == current)?.PNo; + if (!p.IsPresent()) { - var next = currentDeviceGroups.Where(x => x.PCode == current.Code).ToList(); - foreach (var item in next) - { - if (add) - { - result.Add(new UserTenantDeviceCodeDto { Tenant = item.TenantId, Codes = new List { item.Code } }); - } - - DeviceGroupRecursionGetNext(item, currentDeviceGroups, result, result.SelectMany(x => x.Codes).Contains(item.Code)); - } + return; } - void DepartmentRecursionGetPNo(string current, List data, List result) + result.Add(p); + DepartmentRecursionGetPNo(p, data, result); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + static void DeviceGroupRecursionGetNext(DeviceGroupEntity current, List currentDeviceGroups, List result, bool add) + { + var next = currentDeviceGroups.Where(x => x.PCode == current.Code).ToList(); + foreach (var item in next) { - var p = data.FirstOrDefault(x => x.No == current)?.PNo; - if (p.IsPresent()) + if (add) { - result.Add(p); - DepartmentRecursionGetPNo(p, data, result); + result.Add(new UserTenantDeviceCodeDto { Tenant = item.TenantId, Codes = new List { item.Code } }); } + + DeviceGroupRecursionGetNext(item, currentDeviceGroups, result, result.SelectMany(x => x.Codes).Contains(item.Code)); } } + private async Task>> GetAssignDeviceCodesInternalAsync(List userNos) { var sw = Stopwatch.StartNew(); @@ -1051,7 +1057,7 @@ public class DevicePermissionService : IDevicePermissionService _logger.LogWarning("获取数据时间:{ts}", sw.ElapsedMilliseconds); sw.Restart(); - + try { if (_parallelService.Enable)