fix 设备组移除设备问题
This commit is contained in:
@@ -15,7 +15,7 @@ public class TenantAssignTypeDeviceCode
|
||||
/// <summary>
|
||||
/// 设备权限
|
||||
/// </summary>
|
||||
public List<AssignTypeDeviceCode> AssignTypes { get; init; }
|
||||
public List<AssignTypeDeviceCode> AssignTypes { get; set; }
|
||||
}
|
||||
|
||||
public class AssignTypeDeviceCode
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user