fix 处理离职人员
This commit is contained in:
@@ -23,12 +23,12 @@ public interface IDevicePermissionAnalyzeService : IScopeDependency
|
||||
Task<List<Guid>> GetAssignDeviceCodesAsync(string userCode);
|
||||
|
||||
|
||||
Task<Dictionary<string, IEnumerable<UserTenantDeviceCodeDto>>> GetUserAssignDeviceCodesInTenantAsync(
|
||||
Task<Dictionary<string, List<UserTenantDeviceCodeDto>>> GetUserAssignDeviceCodesInTenantAsync(
|
||||
List<string> userNos,
|
||||
DeviceAssignmentTypeEnumType? ignoreUniqueType = null,
|
||||
string ignoreAssignValue = null, AssignTypeEnumType? ignoreAssignType = null);
|
||||
|
||||
Task<Dictionary<string, IEnumerable<TenantAssignTypeDeviceCode>>> GetUserAssignDeviceCodesWithTypeInTenantAsync(
|
||||
Task<Dictionary<string, List<TenantAssignTypeDeviceCode>>> GetUserAssignDeviceCodesWithTypeInTenantAsync(
|
||||
List<string> userNos,
|
||||
DeviceAssignmentTypeEnumType? ignoreUniqueType = null,
|
||||
string ignoreAssignValue = null, AssignTypeEnumType? ignoreAssignType = null
|
||||
|
||||
@@ -58,7 +58,7 @@ public abstract class BasePermissionAnalyzeService : IPermissionAnalyzeService
|
||||
|
||||
var userTenantDeviceCodes = devicesToDelete.IsPresent() && request.AssignType != AssignTypeEnumType.Tenant
|
||||
? await _devicePermissionAnalyzeService.GetUserAssignDeviceCodesWithTypeInTenantAsync(gainfoNos, request.UniqueType, request.GetActualAssignValue(), request.AssignType)
|
||||
: new Dictionary<string, IEnumerable<TenantAssignTypeDeviceCode>>();
|
||||
: new Dictionary<string, List<TenantAssignTypeDeviceCode>>();
|
||||
|
||||
|
||||
foreach (var gainfoNo in gainfoNos)
|
||||
|
||||
@@ -170,7 +170,7 @@ public class DeviceGroupService : IDeviceGroupService
|
||||
|
||||
var userTenantDeviceCodes = codesToDelete.IsPresent() && dps.Exists(x => x.AssignType != AssignTypeEnumType.Tenant)
|
||||
? await _devicePermissionAnalyzeService.GetUserAssignDeviceCodesWithTypeInTenantAsync(gainfoNos)
|
||||
: new Dictionary<string, IEnumerable<TenantAssignTypeDeviceCode>>();
|
||||
: new Dictionary<string, List<TenantAssignTypeDeviceCode>>();
|
||||
|
||||
|
||||
var devicesToAdd = await _dbContext.Queryable<DeviceEntity>().Where(x => codesToAdd.Contains(x.Code)).ToListAsync();
|
||||
@@ -198,38 +198,40 @@ public class DeviceGroupService : IDeviceGroupService
|
||||
|
||||
if (userTenantDeviceCodes.Any())
|
||||
{
|
||||
var permissions = userTenantDeviceCodes[gainfoNo].ToList();
|
||||
foreach (var permission in permissions)
|
||||
if (userTenantDeviceCodes.TryGetValue(gainfoNo, out var permissions))
|
||||
{
|
||||
permission.AssignTypes = permission.AssignTypes.Where(p =>
|
||||
foreach (var permission in permissions)
|
||||
{
|
||||
if (p.UniqueType == DeviceAssignmentTypeEnumType.Device)
|
||||
permission.AssignTypes = permission.AssignTypes.Where(p =>
|
||||
{
|
||||
return true;
|
||||
}
|
||||
if (p.UniqueType == DeviceAssignmentTypeEnumType.Device)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return p.OriginalCodes.IsPresent() && p.OriginalCodes.First() != groupCode;
|
||||
}).ToList();
|
||||
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());
|
||||
}
|
||||
|
||||
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());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -147,13 +147,13 @@ public class DevicePermissionAnalyzeService : IDevicePermissionAnalyzeService
|
||||
}
|
||||
|
||||
|
||||
public async Task<Dictionary<string, IEnumerable<TenantAssignTypeDeviceCode>>> GetUserAssignDeviceCodesWithTypeInTenantAsync(
|
||||
public async Task<Dictionary<string, List<TenantAssignTypeDeviceCode>>> GetUserAssignDeviceCodesWithTypeInTenantAsync(
|
||||
List<string> userNos,
|
||||
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>>();
|
||||
if (!gainfos.Any()) return new Dictionary<string, List<TenantAssignTypeDeviceCode>>();
|
||||
|
||||
var devices = await _dbContext.Queryable<DeviceEntity>().Where(x => x.Enable).ToListAsync();
|
||||
|
||||
@@ -170,7 +170,7 @@ public class DevicePermissionAnalyzeService : IDevicePermissionAnalyzeService
|
||||
var deviceRelationships = await _dbContext.Queryable<DeviceGroupRelationshipEntity>().ToListAsync();
|
||||
var departments = await _dbContext.Queryable<DepartmentEntity>().ToListAsync();
|
||||
|
||||
var result = new ConcurrentDictionary<string, IEnumerable<TenantAssignTypeDeviceCode>>();
|
||||
var result = new ConcurrentDictionary<string, List<TenantAssignTypeDeviceCode>>();
|
||||
|
||||
gainfos.ParallelForEach(gainfo =>
|
||||
{
|
||||
@@ -210,7 +210,7 @@ public class DevicePermissionAnalyzeService : IDevicePermissionAnalyzeService
|
||||
}
|
||||
|
||||
|
||||
private static IEnumerable<TenantAssignTypeDeviceCode> GetAssignDeviceCodesPermissions(
|
||||
private static List<TenantAssignTypeDeviceCode> GetAssignDeviceCodesPermissions(
|
||||
AnalyzePackDto analyzePack,
|
||||
List<GainfoGroupEntity> gainfoGroups,
|
||||
List<DevicePermissionDto> devicePermissions,
|
||||
@@ -286,7 +286,7 @@ public class DevicePermissionAnalyzeService : IDevicePermissionAnalyzeService
|
||||
};
|
||||
|
||||
return dto;
|
||||
});
|
||||
}).ToList();
|
||||
}
|
||||
|
||||
private static List<TenantAssignTypeDeviceCode> SearchActualAssignPermissions(
|
||||
@@ -346,7 +346,7 @@ public class DevicePermissionAnalyzeService : IDevicePermissionAnalyzeService
|
||||
}
|
||||
|
||||
|
||||
public async Task<Dictionary<string, IEnumerable<UserTenantDeviceCodeDto>>> GetUserAssignDeviceCodesInTenantAsync(
|
||||
public async Task<Dictionary<string, List<UserTenantDeviceCodeDto>>> GetUserAssignDeviceCodesInTenantAsync(
|
||||
List<string> userNos,
|
||||
DeviceAssignmentTypeEnumType? ignoreUniqueType = null,
|
||||
string ignoreAssignValue = null, AssignTypeEnumType? ignoreAssignType = null)
|
||||
@@ -360,7 +360,7 @@ public class DevicePermissionAnalyzeService : IDevicePermissionAnalyzeService
|
||||
Tenant = item.Key,
|
||||
Codes = item.SelectMany(p => p.AssignTypes).SelectMany(p => p.Codes).Distinct().ToList(),
|
||||
};
|
||||
}));
|
||||
}).ToList());
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -89,7 +89,7 @@ public class DevicePermissionService : IDevicePermissionService
|
||||
|
||||
var userTenantDeviceCodes = usersToDelete.IsPresent()
|
||||
? await _devicePermissionAnalyzeService.GetUserAssignDeviceCodesWithTypeInTenantAsync(beforeUserNos.Union(presentUserNos).ToList())
|
||||
: new Dictionary<string, IEnumerable<TenantAssignTypeDeviceCode>>();
|
||||
: new Dictionary<string, List<TenantAssignTypeDeviceCode>>();
|
||||
|
||||
tasksToAdd.AddRange(usersToAdd.Select(userNo => new DeviceTaskEntity
|
||||
{
|
||||
@@ -109,30 +109,32 @@ public class DevicePermissionService : IDevicePermissionService
|
||||
|
||||
foreach (var item in usersToDelete)
|
||||
{
|
||||
var permissions = userTenantDeviceCodes[item].ToList();
|
||||
foreach (var permission in permissions)
|
||||
if (userTenantDeviceCodes.TryGetValue(item, out var permissions))
|
||||
{
|
||||
permission.AssignTypes = permission.AssignTypes.Where(x => x.UniqueType != DeviceAssignmentTypeEnumType.Device).ToList();
|
||||
}
|
||||
|
||||
var myDeviceCodes = permissions.SelectMany(x => x.AssignTypes.SelectMany(p => p.Codes)).Distinct().ToList();
|
||||
if (myDeviceCodes.All(x => x != device.Code))
|
||||
{
|
||||
tasksToDelete.Add(new DeviceTaskEntity
|
||||
foreach (var permission in permissions)
|
||||
{
|
||||
Type = DeviceTaskEnumType.Delete,
|
||||
DeviceType = device.Type,
|
||||
UserId = null,
|
||||
UserNo = item,
|
||||
DeviceUniqueNo = device.UniqueNo,
|
||||
Status = DeviceTaskStatusEnumType.Wait,
|
||||
Version = 0,
|
||||
ResultMessage = null,
|
||||
CancellationId = 20,
|
||||
Source = DeviceTaskSourceEnumType.Manually,
|
||||
Priority = 0,
|
||||
TenantId = currentTenantId
|
||||
});
|
||||
permission.AssignTypes = permission.AssignTypes.Where(x => x.UniqueType != DeviceAssignmentTypeEnumType.Device).ToList();
|
||||
}
|
||||
|
||||
var myDeviceCodes = permissions.SelectMany(x => x.AssignTypes.SelectMany(p => p.Codes)).Distinct().ToList();
|
||||
if (myDeviceCodes.All(x => x != device.Code))
|
||||
{
|
||||
tasksToDelete.Add(new DeviceTaskEntity
|
||||
{
|
||||
Type = DeviceTaskEnumType.Delete,
|
||||
DeviceType = device.Type,
|
||||
UserId = null,
|
||||
UserNo = item,
|
||||
DeviceUniqueNo = device.UniqueNo,
|
||||
Status = DeviceTaskStatusEnumType.Wait,
|
||||
Version = 0,
|
||||
ResultMessage = null,
|
||||
CancellationId = 20,
|
||||
Source = DeviceTaskSourceEnumType.Manually,
|
||||
Priority = 0,
|
||||
TenantId = currentTenantId
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -93,7 +93,7 @@ public class GainfoGroupService : IGainfoGroupService
|
||||
var relations = await _dbContext.Queryable<GainfoGroupRelationshipEntity>()
|
||||
.Where(x => x.GroupCode == request.GroupCode)
|
||||
.ToListAsync();
|
||||
|
||||
|
||||
var presentUserNos = await _dbContext.Queryable<GainfoEntity>()
|
||||
.Where(x => request.UserNos.Contains(x.No) || request.UserNos.Contains(x.Code)) //NO和工号匹配
|
||||
.Select(x => x.No)
|
||||
@@ -158,7 +158,7 @@ public class GainfoGroupService : IGainfoGroupService
|
||||
|
||||
var userTenantDeviceCodes = usersToDelete.IsPresent() && dps.Exists(x => x.AssignType != AssignTypeEnumType.Tenant)
|
||||
? await _devicePermissionAnalyzeService.GetUserAssignDeviceCodesWithTypeInTenantAsync(beforeUserNos.Union(presentUserNos).ToList())
|
||||
: new Dictionary<string, IEnumerable<TenantAssignTypeDeviceCode>>();
|
||||
: new Dictionary<string, List<TenantAssignTypeDeviceCode>>();
|
||||
|
||||
var addTasks = new List<DeviceTaskEntity>();
|
||||
var deleteTasks = new List<DeviceTaskEntity>();
|
||||
@@ -166,33 +166,35 @@ public class GainfoGroupService : IGainfoGroupService
|
||||
{
|
||||
foreach (var item in usersToDelete)
|
||||
{
|
||||
var permissions = userTenantDeviceCodes[item].ToList();
|
||||
foreach (var permission in permissions)
|
||||
if (userTenantDeviceCodes.TryGetValue(item, out var permissions))
|
||||
{
|
||||
permission.AssignTypes = permission.AssignTypes.Where(p => !gainfoGroupCodes.Contains(p.AssignValue)).ToList();
|
||||
}
|
||||
foreach (var permission in permissions)
|
||||
{
|
||||
permission.AssignTypes = permission.AssignTypes.Where(p => !gainfoGroupCodes.Contains(p.AssignValue)).ToList();
|
||||
}
|
||||
|
||||
var myDeviceCodes = permissions.SelectMany(x => x.AssignTypes).SelectMany(x => x.Codes);
|
||||
if (myDeviceCodes.Any(x => x == device.Code))
|
||||
{
|
||||
continue;
|
||||
var myDeviceCodes = permissions.SelectMany(x => x.AssignTypes).SelectMany(x => x.Codes);
|
||||
if (myDeviceCodes.Any(x => x == device.Code))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
deleteTasks.Add(new DeviceTaskEntity
|
||||
{
|
||||
Type = DeviceTaskEnumType.Delete,
|
||||
DeviceType = device.Type,
|
||||
UserId = null,
|
||||
UserNo = item,
|
||||
DeviceUniqueNo = device.UniqueNo,
|
||||
Status = DeviceTaskStatusEnumType.Wait,
|
||||
Version = 0,
|
||||
ResultMessage = null,
|
||||
CancellationId = 0,
|
||||
Source = DeviceTaskSourceEnumType.Manually,
|
||||
Priority = 0,
|
||||
TenantId = device.TenantId
|
||||
});
|
||||
}
|
||||
|
||||
deleteTasks.Add(new DeviceTaskEntity
|
||||
{
|
||||
Type = DeviceTaskEnumType.Delete,
|
||||
DeviceType = device.Type,
|
||||
UserId = null,
|
||||
UserNo = item,
|
||||
DeviceUniqueNo = device.UniqueNo,
|
||||
Status = DeviceTaskStatusEnumType.Wait,
|
||||
Version = 0,
|
||||
ResultMessage = null,
|
||||
CancellationId = 0,
|
||||
Source = DeviceTaskSourceEnumType.Manually,
|
||||
Priority = 0,
|
||||
TenantId = device.TenantId
|
||||
});
|
||||
}
|
||||
|
||||
foreach (var item in usersToAdd)
|
||||
|
||||
@@ -5,6 +5,8 @@ using Dlhis.Entity.Basic.Entity;
|
||||
using Dlhis.Entity.Basic.Enums;
|
||||
using Dlhis.Entity.Device.Entities;
|
||||
using Dlhis.Entity.Device.Enums;
|
||||
using Dlhis.Entity.Sys.Entities;
|
||||
using Dlhis.Entity.Sys.Enums;
|
||||
using Dlhis.Entity.Visitor.Entity;
|
||||
using Dlhis.Sys.Api;
|
||||
using Kurisu.AspNetCore.Authentication.Abstractions;
|
||||
@@ -252,6 +254,8 @@ public class GainfoService : IGainfoService
|
||||
(outsource == null).ThrowIfTrue("非外包人员不可手动离职");
|
||||
}
|
||||
|
||||
await _dbContext.Deleteable<GainfoGroupRelationshipEntity>().Where(x => x.UserNo != gainfo.No).ExecuteCommandAsync();
|
||||
await _dbContext.Deleteable<DevicePermissionEntity>().Where(x => x.AssignType == AssignTypeEnumType.User && x.AssignValue == gainfo.No).ExecuteCommandAsync();
|
||||
|
||||
//先写入离职表
|
||||
gainfo.IdentityUserId = (int)gainfo.Id; //记录原始id
|
||||
|
||||
Reference in New Issue
Block a user