fix 补充设备分组

This commit is contained in:
2025-07-07 12:42:04 +08:00
parent 379d75b251
commit 53d46cee0c
2 changed files with 57 additions and 0 deletions

View File

@@ -44,8 +44,38 @@ public class GetDataPermissionService : IGetDataPermissions, ISingletonDependenc
.GetProperties()
.FirstOrDefault(x => x.IsDefined(typeof(DeviceCodeAttribute), false));
var deviceGroupCodeProperty = typeof(T)
.GetProperties()
.FirstOrDefault(x => x.IsDefined(typeof(DeviceGroupCodeAttribute), false));
var deviceCodes = new List<Guid>();
//先计算分组权限下的设备
var deviceGroupCodes = userDataPermissions.Where(x => x.UniqueType == DataPermissionAssignmentEnumType.Group).Select(x => x.UniqueValue).ToList();
if (deviceGroupCodes.Any())
{
var data = db.Queryable<DeviceGroupEntity>().ToList();
var myCodes = new List<Guid>();
foreach (Guid deviceGroupCode in deviceGroupCodes)
{
myCodes.AddRange(RecursionHelper.HandlerDeviceGroupNextCodes(deviceGroupCode, data));
}
myCodes = myCodes.Distinct().ToList();
if (deviceCodeProperty != null)
{
deviceCodes = db.Queryable<DeviceGroupRelationshipEntity>().Where(x => myCodes.Contains(x.GroupCode)).Select(x => x.DeviceCode).ToList();
}
}
if (deviceGroupCodeProperty != null)
{
dict.Add(deviceGroupCodeProperty.Name, deviceGroupCodes);
}
if (deviceCodeProperty != null)
{
var currentDeviceCodes = userDataPermissions.Where(x => x.UniqueType == DataPermissionAssignmentEnumType.Device).Select(x => x.UniqueValue).ToList();

View File

@@ -0,0 +1,27 @@
using Dlhis.Entity.Basic.Entity;
using Dlhis.Entity.Device.Entities;
namespace Dlhis.ScheduledTask;
public static class RecursionHelper
{
public static List<Guid> HandlerDeviceGroupNextCodes(Guid current, List<DeviceGroupEntity> data)
{
var result = new List<Guid> { current };
InternalHandlerCodes(current, data, result);
return result;
static void InternalHandlerCodes(Guid internalCurrent, List<DeviceGroupEntity> internalData, List<Guid> internalResult)
{
var next = internalData.Where(x => x.PCode == internalCurrent);
foreach (var item in next)
{
internalResult.Add(item.Code);
InternalHandlerCodes(item.Code, internalData, internalResult);
}
}
}
}