From 53a88e8b1074297d4e2dbe70fe3dd24bd4a3b1e8 Mon Sep 17 00:00:00 2001 From: liguoyang Date: Wed, 11 Dec 2024 17:17:08 +0800 Subject: [PATCH] =?UTF-8?q?fix=20=E8=AE=BE=E5=A4=87=E7=BB=84=E7=A7=BB?= =?UTF-8?q?=E9=99=A4=E8=AE=BE=E5=A4=87=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Device/Dtos/TenantAssignTypeDeviceCode.cs | 2 +- .../Services/Implements/DeviceGroupService.cs | 77 ++++++++++--------- 2 files changed, 41 insertions(+), 38 deletions(-) diff --git a/Src/Dlhis.Basic/Device/Dtos/TenantAssignTypeDeviceCode.cs b/Src/Dlhis.Basic/Device/Dtos/TenantAssignTypeDeviceCode.cs index 7079febe..9e511afc 100644 --- a/Src/Dlhis.Basic/Device/Dtos/TenantAssignTypeDeviceCode.cs +++ b/Src/Dlhis.Basic/Device/Dtos/TenantAssignTypeDeviceCode.cs @@ -15,7 +15,7 @@ public class TenantAssignTypeDeviceCode /// /// 设备权限 /// - public List AssignTypes { get; init; } + public List AssignTypes { get; set; } } public class AssignTypeDeviceCode diff --git a/Src/Dlhis.Basic/Device/Services/Implements/DeviceGroupService.cs b/Src/Dlhis.Basic/Device/Services/Implements/DeviceGroupService.cs index bdb23519..5f3695a4 100644 --- a/Src/Dlhis.Basic/Device/Services/Implements/DeviceGroupService.cs +++ b/Src/Dlhis.Basic/Device/Services/Implements/DeviceGroupService.cs @@ -158,29 +158,11 @@ public class DeviceGroupService : IDeviceGroupService var devicesToAdd = await _dbContext.Queryable().Where(x => codesToAdd.Contains(x.Code)).ToListAsync(); var devicesToDelete = await _dbContext.Queryable().Where(x => codesToDelete.Contains(x.Code)).ToListAsync(); - var tasks = new List(); + var tasksToAdd = new List(); + var tasksToDelete = new List(); foreach (var gainfoNo in gainfoNos) { - if (userTenantDeviceCodes.Any()) - { - var myDeviceCodes = userTenantDeviceCodes[gainfoNo] - .SelectMany(x => x.AssignTypes - .Where(p => - { - if (p.UniqueType == DeviceAssignmentTypeEnumType.Device) - { - return true; - } - - return p.OriginalCodes.IsPresent() && p.OriginalCodes.First() != groupCode; - }) - ) - .SelectMany(x => x.Codes); - - devicesToDelete = devicesToDelete.Where(p => devicesToDelete.Select(x => x.Code).Except(myDeviceCodes).Contains(p.Code)).ToList(); - } - - tasks.AddRange(devicesToAdd.Select(x => new DeviceTaskEntity + tasksToAdd.AddRange(devicesToAdd.Select(x => new DeviceTaskEntity { Type = DeviceTaskEnumType.Add, DeviceType = x.Type, @@ -196,26 +178,47 @@ public class DeviceGroupService : IDeviceGroupService TenantId = x.TenantId, }).ToList()); - tasks.AddRange(devicesToDelete.Select(x => new DeviceTaskEntity + if (userTenantDeviceCodes.Any()) { - Type = DeviceTaskEnumType.Delete, - DeviceType = x.Type, - UserId = null, - UserNo = gainfoNo, - DeviceUniqueNo = x.UniqueNo, - Status = DeviceTaskStatusEnumType.Wait, - Version = 0, - ResultMessage = null, - CancellationId = 0, - Source = DeviceTaskSourceEnumType.Manually, - Priority = 0, - TenantId = x.TenantId, - }).ToList()); + var permissions = userTenantDeviceCodes[gainfoNo].ToList(); + foreach (var permission in permissions) + { + permission.AssignTypes = permission.AssignTypes.Where(p => + { + if (p.UniqueType == DeviceAssignmentTypeEnumType.Device) + { + return true; + } + + return p.OriginalCodes.IsPresent() && p.OriginalCodes.First() != groupCode; + }).ToList(); + } + + var myDeviceCodes = permissions.SelectMany(x => x.AssignTypes.SelectMany(p => p.Codes)).ToList(); + var currentDevicesToDelete = devicesToDelete.Where(p => devicesToDelete.Select(x => x.Code).Except(myDeviceCodes).Contains(p.Code)).ToList(); + + tasksToDelete.AddRange(currentDevicesToDelete.Select(x => new DeviceTaskEntity + { + Type = DeviceTaskEnumType.Delete, + DeviceType = x.Type, + UserId = null, + UserNo = gainfoNo, + DeviceUniqueNo = x.UniqueNo, + Status = DeviceTaskStatusEnumType.Wait, + Version = 0, + ResultMessage = null, + CancellationId = 0, + Source = DeviceTaskSourceEnumType.Manually, + Priority = 0, + TenantId = x.TenantId, + }).ToList()); + } } - await _dbContext.InsertAsync(tasks); + await _dbContext.InsertAsync(tasksToAdd); + await _dbContext.InsertAsync(tasksToDelete); - return new DevicePermissionAssignResponse(gainfoNos.Count * devicesToAdd.Count, gainfoNos.Count * devicesToDelete.Count); + return new DevicePermissionAssignResponse(tasksToAdd.Count, tasksToDelete.Count); } ///