fix 设备组移除设备问题

This commit is contained in:
2024-12-11 17:17:08 +08:00
parent 41be03fb12
commit 53a88e8b10
2 changed files with 41 additions and 38 deletions

View File

@@ -15,7 +15,7 @@ public class TenantAssignTypeDeviceCode
/// <summary>
/// 设备权限
/// </summary>
public List<AssignTypeDeviceCode> AssignTypes { get; init; }
public List<AssignTypeDeviceCode> AssignTypes { get; set; }
}
public class AssignTypeDeviceCode

View File

@@ -158,29 +158,11 @@ public class DeviceGroupService : IDeviceGroupService
var devicesToAdd = await _dbContext.Queryable<DeviceEntity>().Where(x => codesToAdd.Contains(x.Code)).ToListAsync();
var devicesToDelete = await _dbContext.Queryable<DeviceEntity>().Where(x => codesToDelete.Contains(x.Code)).ToListAsync();
var tasks = new List<DeviceTaskEntity>();
var tasksToAdd = new List<DeviceTaskEntity>();
var tasksToDelete = new List<DeviceTaskEntity>();
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);
}
/// <summary>