diff --git a/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs b/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs index 6bc9e6d4..3e849981 100644 --- a/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs +++ b/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs @@ -163,16 +163,90 @@ public class DevicePermissionService : IDevicePermissionService return before; } - - + + public async Task GetTestUserNoData() { var userNos = new List(); - //获取所有人的权限 - if (userNos.IsEmpty()) - userNos = await GetPermissionUserNosAsync(); + _dbContext.Client.QueryFilter.ClearAndBackup(); + try + { + //获取所有人的权限 + if (userNos.IsEmpty()) + userNos = await GetPermissionUserNosAsync(); - return userNos; + var before = await GetAssignDeviceCodesInternalAsync(userNos); + + //获取业务处理后所有人的权限 + var nextUserNos = await GetPermissionUserNosAsync(); + if (nextUserNos.Any()) + userNos = userNos.Concat(nextUserNos).Distinct().ToList(); + + var current = await GetAssignDeviceCodesInternalAsync(userNos); + + var devices = await _dbContext.Queryable().Where(x => x.Enable).ToListAsync(); + + foreach (var userNo in userNos) + { + before.TryGetValue(userNo, out var beforeTenantDeviceCodes); + beforeTenantDeviceCodes ??= new(); + + current.TryGetValue(userNo, out var currentTenantDeviceCodes); + currentTenantDeviceCodes ??= new(); + + var tenants = beforeTenantDeviceCodes.Select(x => x.Tenant).Concat(currentTenantDeviceCodes.Select(x => x.Tenant)).Distinct().ToList(); + + foreach (var tenant in tenants) + { + var currentCodes = currentTenantDeviceCodes.FirstOrDefault(x => x.Tenant == tenant)?.Codes ?? new(); + var beforeCodes = beforeTenantDeviceCodes.FirstOrDefault(x => x.Tenant == tenant)?.Codes ?? new(); + + //被删除 + var deletedItems = beforeCodes.Where(x => !currentCodes.Contains(x)).ToList(); + //新增 + var addItems = currentCodes.Where(x => !beforeCodes.Contains(x)).ToList(); + + if (!deletedItems.Any() && !addItems.Any()) + { + continue; + } + + var deviceCodes = devices.Where(x => deletedItems.Contains(x.Code) || addItems.Contains(x.Code)).Select(x => x.Code).ToList(); + deletedItems = deletedItems.Where(x => deviceCodes.Contains(x)).ToList(); + addItems = addItems.Where(x => deviceCodes.Contains(x)).ToList(); + + //下发任务创建 + var toDeleted = deletedItems.Select(x => new DeviceTaskEntity + { + DeviceUniqueNo = devices.First(item => item.Code == x).UniqueNo, + Status = DeviceTaskStatusEnumType.Wait, + Type = DeviceTaskEnumType.Delete, + CancellationId = 0, + DeviceType = devices.First(item => item.Code == x).Type, + UserNo = userNo, + Version = 0, + TenantId = tenant, + }).ToList(); + + var toAdd = addItems.Select(x => new DeviceTaskEntity + { + DeviceUniqueNo = devices.First(item => item.Code == x).UniqueNo, + Status = DeviceTaskStatusEnumType.Wait, + Type = DeviceTaskEnumType.Add, + DeviceType = devices.First(item => item.Code == x).Type, + UserNo = userNo, + Version = 0, + TenantId = tenant, + }).ToList(); + } + } + } + finally + { + _dbContext.Client.QueryFilter.Restore(); + } + + return null; }