fix 处理离职人员

This commit is contained in:
2024-12-13 17:18:17 +08:00
parent 34bdb9381c
commit d1408e5946
7 changed files with 97 additions and 87 deletions

View File

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

View File

@@ -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)

View File

@@ -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,7 +198,8 @@ public class DeviceGroupService : IDeviceGroupService
if (userTenantDeviceCodes.Any())
{
var permissions = userTenantDeviceCodes[gainfoNo].ToList();
if (userTenantDeviceCodes.TryGetValue(gainfoNo, out var permissions))
{
foreach (var permission in permissions)
{
permission.AssignTypes = permission.AssignTypes.Where(p =>
@@ -232,6 +233,7 @@ public class DeviceGroupService : IDeviceGroupService
}).ToList());
}
}
}
await _dbContext.InsertAsync(tasksToAdd);
await _dbContext.InsertAsync(tasksToDelete);

View File

@@ -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());
}

View File

@@ -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,7 +109,8 @@ public class DevicePermissionService : IDevicePermissionService
foreach (var item in usersToDelete)
{
var permissions = userTenantDeviceCodes[item].ToList();
if (userTenantDeviceCodes.TryGetValue(item, out var permissions))
{
foreach (var permission in permissions)
{
permission.AssignTypes = permission.AssignTypes.Where(x => x.UniqueType != DeviceAssignmentTypeEnumType.Device).ToList();
@@ -136,6 +137,7 @@ public class DevicePermissionService : IDevicePermissionService
}
}
}
}
finally
{
await _dbContext.InsertAsync(tasksToAdd);

View File

@@ -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,7 +166,8 @@ public class GainfoGroupService : IGainfoGroupService
{
foreach (var item in usersToDelete)
{
var permissions = userTenantDeviceCodes[item].ToList();
if (userTenantDeviceCodes.TryGetValue(item, out var permissions))
{
foreach (var permission in permissions)
{
permission.AssignTypes = permission.AssignTypes.Where(p => !gainfoGroupCodes.Contains(p.AssignValue)).ToList();
@@ -194,6 +195,7 @@ public class GainfoGroupService : IGainfoGroupService
TenantId = device.TenantId
});
}
}
foreach (var item in usersToAdd)
{

View File

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