diff --git a/Src/Dlhis.Basic/Device/Services/Implements/BasePermissionAnalyzeService.cs b/Src/Dlhis.Basic/Device/Services/Implements/BasePermissionAnalyzeService.cs index d90d7e64..d4c72dd7 100644 --- a/Src/Dlhis.Basic/Device/Services/Implements/BasePermissionAnalyzeService.cs +++ b/Src/Dlhis.Basic/Device/Services/Implements/BasePermissionAnalyzeService.cs @@ -55,16 +55,18 @@ public abstract class BasePermissionAnalyzeService : IPermissionAnalyzeService ? await _devicePermissionAnalyzeService.GetUserAssignDeviceCodesWithTypeInTenantAsync(gainfoNos, request.GetActualAssignValue(), request.AssignType) : new Dictionary>(); - var tasks = new List(); + var tasksToAdd = new List(); + var tasksToDelete = new List(); foreach (var gainfoNo in gainfoNos) { + IEnumerable currentDevicesToDelete = devicesToDelete; if (userTenantDeviceCodes.Any()) { var myDeviceCodes = userTenantDeviceCodes[gainfoNo].SelectMany(x => x.AssignTypes).SelectMany(x => x.Codes); - devicesToDelete = devicesToDelete.Where(p => devicesToDelete.Select(x => x.Code).Except(myDeviceCodes).Contains(p.Code)).ToList(); + currentDevicesToDelete = devicesToDelete.Where(p => codesToDelete.Except(myDeviceCodes).Contains(p.Code)); } - tasks.AddRange(devicesToAdd.Select(x => new DeviceTaskEntity + tasksToAdd.AddRange(devicesToAdd.Select(x => new DeviceTaskEntity { Type = DeviceTaskEnumType.Add, DeviceType = x.Type, @@ -80,7 +82,7 @@ public abstract class BasePermissionAnalyzeService : IPermissionAnalyzeService TenantId = x.TenantId, }).ToList()); - tasks.AddRange(devicesToDelete.Select(x => new DeviceTaskEntity + tasksToDelete.AddRange(currentDevicesToDelete.Select(x => new DeviceTaskEntity { Type = DeviceTaskEnumType.Delete, DeviceType = x.Type, @@ -97,10 +99,11 @@ public abstract class BasePermissionAnalyzeService : IPermissionAnalyzeService }).ToList()); } - await ChunkInsertAsync(tasks); + await ChunkInsertAsync(tasksToAdd); + await ChunkInsertAsync(tasksToDelete); await PersistDataAsync(dps, request); - return new DevicePermissionAssignResponse(devicesToAdd.Count, devicesToDelete.Count); + return new DevicePermissionAssignResponse(tasksToAdd.Count, tasksToDelete.Count); }