fix 设备组差异
This commit is contained in:
@@ -134,8 +134,8 @@ public class DevicePermissionAnalyzeService : IDevicePermissionAnalyzeService
|
||||
|
||||
public async Task<Dictionary<string, IEnumerable<TenantAssignTypeDeviceCode>>> GetUserAssignDeviceCodesWithTypeInTenantAsync(
|
||||
List<string> userNos,
|
||||
string ignoreAssignValue = null,
|
||||
params AssignTypeEnumType[] ignoreAssignTypes)
|
||||
DeviceAssignmentTypeEnumType? ignoreUniqueType = null,
|
||||
string ignoreAssignValue = null, AssignTypeEnumType? ignoreAssignType = null)
|
||||
{
|
||||
var gainfos = await _dbContext.Queryable<GainfoEntity>().Where(x => userNos.Contains(x.No)).ToListAsync();
|
||||
if (!gainfos.Any()) return new Dictionary<string, IEnumerable<TenantAssignTypeDeviceCode>>();
|
||||
@@ -148,9 +148,9 @@ public class DevicePermissionAnalyzeService : IDevicePermissionAnalyzeService
|
||||
var gainfoGroups = await _dbContext.Queryable<GainfoGroupEntity>().ToListAsync();
|
||||
|
||||
var devicePermissions = await _dbContext.Queryable<DevicePermissionEntity>()
|
||||
.WhereIF(ignoreAssignTypes.IsPresent(), x => !ignoreAssignTypes.Contains(x.AssignType) && x.AssignValue != ignoreAssignValue)
|
||||
.Select<DevicePermissionDto>()
|
||||
.ToListAsync();
|
||||
|
||||
var deviceGroups = await _dbContext.Queryable<DeviceGroupEntity>().ToListAsync();
|
||||
var deviceRelationships = await _dbContext.Queryable<DeviceGroupRelationshipEntity>().ToListAsync();
|
||||
var departments = await _dbContext.Queryable<DepartmentEntity>().ToListAsync();
|
||||
@@ -160,7 +160,10 @@ public class DevicePermissionAnalyzeService : IDevicePermissionAnalyzeService
|
||||
gainfos.ParallelForEach(gainfo =>
|
||||
{
|
||||
var internalIgnoreAssignTypes = new List<AssignTypeEnumType>();
|
||||
internalIgnoreAssignTypes.AddRange(ignoreAssignTypes);
|
||||
|
||||
if (ignoreAssignType.HasValue)
|
||||
internalIgnoreAssignTypes.Add(ignoreAssignType.Value);
|
||||
|
||||
if (gainfo.Type == GainfoUserTypeEnumType.Outsource && (enableFactoryPermissions.FirstOrDefault(x => x.TenantId == gainfo.Factory)?.EnableOutsourceDown ?? true) == false)
|
||||
{
|
||||
internalIgnoreAssignTypes.Add(AssignTypeEnumType.Tenant);
|
||||
@@ -174,7 +177,8 @@ public class DevicePermissionAnalyzeService : IDevicePermissionAnalyzeService
|
||||
UserGainfoGroupCodes = gainfoGroupRelationships.Where(x => x.UserNo == gainfo.No).Select(x => x.GroupCode),
|
||||
DeviceCodes = devices.WhereIf(gainfo.Type == GainfoUserTypeEnumType.Outsource, x => x.Type != DeviceTypeEnumType.Meal).Select(x => x.Code), //外包人员不允许餐饮
|
||||
IgnoreAssignValue = ignoreAssignValue,
|
||||
IgnoreAssignTypeTypes = internalIgnoreAssignTypes
|
||||
IgnoreAssignTypes = internalIgnoreAssignTypes,
|
||||
IgnoreUniqueType = ignoreUniqueType
|
||||
};
|
||||
|
||||
var codes = GetAssignDeviceCodesInternal(analyzePack,
|
||||
@@ -201,8 +205,14 @@ public class DevicePermissionAnalyzeService : IDevicePermissionAnalyzeService
|
||||
{
|
||||
var deviceDtos = new List<TenantAssignTypeDeviceCode>();
|
||||
|
||||
var uniqueTypes = new[] { DeviceAssignmentTypeEnumType.Device, DeviceAssignmentTypeEnumType.Group };
|
||||
foreach (var assignType in new[] { AssignTypeEnumType.User, AssignTypeEnumType.Group, AssignTypeEnumType.Department, AssignTypeEnumType.Tenant })
|
||||
{
|
||||
if (analyzePack.IgnoreAssignTypes.Contains(assignType) && analyzePack.IgnoreAssignValue.IsEmpty())
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
var assignValues = assignType switch
|
||||
{
|
||||
AssignTypeEnumType.User => new[] { analyzePack.UserNo },
|
||||
@@ -213,30 +223,16 @@ public class DevicePermissionAnalyzeService : IDevicePermissionAnalyzeService
|
||||
_ => throw new ArgumentOutOfRangeException()
|
||||
};
|
||||
|
||||
foreach (var assignValue in assignValues.WhereIf(analyzePack.IgnoreAssignTypeTypes.Contains(assignType), x => x != analyzePack.IgnoreAssignValue))
|
||||
|
||||
var data = assignValues.SelectMany(x => uniqueTypes.Select(p => new { assignValue = x, uniqueType = p })).ToList();
|
||||
var needRemove = data.Where(x => x.assignValue == analyzePack.IgnoreAssignValue && x.uniqueType == analyzePack.IgnoreUniqueType);
|
||||
data = data.ExceptBy(needRemove, x => new { x.assignValue, x.uniqueType }).ToList();
|
||||
|
||||
foreach (var item in data)
|
||||
{
|
||||
deviceDtos.AddRange(GetCurrentAssignTypePermissions(devicePermissions, gainfoGroups, departments,
|
||||
DeviceAssignmentTypeEnumType.Device, assignType, assignValue));
|
||||
|
||||
var groupItems = GetCurrentAssignTypePermissions(devicePermissions, gainfoGroups, departments,
|
||||
DeviceAssignmentTypeEnumType.Group, assignType, assignValue);
|
||||
|
||||
foreach (var groupItem in groupItems)
|
||||
{
|
||||
foreach (var assignTypeDeviceCodeItem in groupItem.AssignTypes)
|
||||
{
|
||||
var r = new List<Guid>();
|
||||
foreach (var code in assignTypeDeviceCodeItem.Codes)
|
||||
{
|
||||
r.AddRange(RecursionHelper.HandlerDeviceGroupNextCodes(code, deviceGroups));
|
||||
}
|
||||
|
||||
assignTypeDeviceCodeItem.OriginalCodes = r;
|
||||
assignTypeDeviceCodeItem.Codes = deviceGroupRelationships.Where(x => r.Contains(x.GroupCode)).Select(x => x.DeviceCode);
|
||||
}
|
||||
}
|
||||
|
||||
deviceDtos.AddRange(groupItems);
|
||||
deviceGroups, deviceGroupRelationships,
|
||||
item.uniqueType, assignType, item.assignValue));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -265,6 +261,8 @@ public class DevicePermissionAnalyzeService : IDevicePermissionAnalyzeService
|
||||
List<DevicePermissionDto> devicePermissions,
|
||||
List<GainfoGroupEntity> gainfoGroups,
|
||||
List<DepartmentEntity> departments,
|
||||
List<DeviceGroupEntity> deviceGroups,
|
||||
List<DeviceGroupRelationshipEntity> deviceGroupRelationships,
|
||||
DeviceAssignmentTypeEnumType uniqueType,
|
||||
AssignTypeEnumType assignType,
|
||||
string assignValue)
|
||||
@@ -287,7 +285,8 @@ public class DevicePermissionAnalyzeService : IDevicePermissionAnalyzeService
|
||||
assignValues = RecursionHelper.HandlerGainfoGroupPreviousCodes(Guid.Parse(assignValue), gainfoGroups).Select(x => x.ToString()).ToList();
|
||||
}
|
||||
|
||||
return devicePermissions
|
||||
|
||||
var r = devicePermissions
|
||||
.Where(x => x.UniqueType == uniqueType)
|
||||
.Where(x => x.AssignType == assignType)
|
||||
.Where(x => assignValues.Contains(x.AssignValue))
|
||||
@@ -304,6 +303,27 @@ public class DevicePermissionAnalyzeService : IDevicePermissionAnalyzeService
|
||||
})
|
||||
})
|
||||
.ToList();
|
||||
|
||||
if (uniqueType == DeviceAssignmentTypeEnumType.Group)
|
||||
{
|
||||
foreach (var groupItem in r)
|
||||
{
|
||||
foreach (var assignTypeDeviceCodeItem in groupItem.AssignTypes)
|
||||
{
|
||||
var nextItems = new List<Guid>();
|
||||
foreach (var code in assignTypeDeviceCodeItem.Codes)
|
||||
{
|
||||
nextItems.AddRange(RecursionHelper.HandlerDeviceGroupNextCodes(code, deviceGroups));
|
||||
}
|
||||
|
||||
nextItems = nextItems.Distinct().ToList();
|
||||
assignTypeDeviceCodeItem.OriginalCodes = nextItems;
|
||||
assignTypeDeviceCodeItem.Codes = deviceGroupRelationships.Where(x => nextItems.Contains(x.GroupCode)).Select(x => x.DeviceCode);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
private async Task ChunkInsertAsync<T>(List<T> batch) where T : class, new()
|
||||
@@ -315,9 +335,12 @@ public class DevicePermissionAnalyzeService : IDevicePermissionAnalyzeService
|
||||
}
|
||||
|
||||
|
||||
public async Task<Dictionary<string, IEnumerable<UserTenantDeviceCodeDto>>> GetUserAssignDeviceCodesInTenantAsync(List<string> userNos, string ignoreAssignValue = null, params AssignTypeEnumType[] ignoreAssignTypes)
|
||||
public async Task<Dictionary<string, IEnumerable<UserTenantDeviceCodeDto>>> GetUserAssignDeviceCodesInTenantAsync(
|
||||
List<string> userNos,
|
||||
DeviceAssignmentTypeEnumType? ignoreUniqueType = null,
|
||||
string ignoreAssignValue = null, AssignTypeEnumType? ignoreAssignType = null)
|
||||
{
|
||||
var result = await GetUserAssignDeviceCodesWithTypeInTenantAsync(userNos, ignoreAssignValue, ignoreAssignTypes);
|
||||
var result = await GetUserAssignDeviceCodesWithTypeInTenantAsync(userNos, ignoreUniqueType, ignoreAssignValue, ignoreAssignType);
|
||||
|
||||
return result.ToDictionary(x => x.Key, x => x.Value.GroupBy(p => p.Tenant).Select(item =>
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user