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

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,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
});
}
}
}
}

View File

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

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