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);
}
///