|
|
|
|
@@ -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 =>
|
|
|
|
|
{
|
|
|
|
|
|