From d1408e5946fbb5959b8c5104b1da92a578aaa1f2 Mon Sep 17 00:00:00 2001 From: liguoyang Date: Fri, 13 Dec 2024 17:18:17 +0800 Subject: [PATCH] =?UTF-8?q?fix=20=E5=A4=84=E7=90=86=E7=A6=BB=E8=81=8C?= =?UTF-8?q?=E4=BA=BA=E5=91=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../IDevicePermissionAnalyzeService.cs | 4 +- .../BasePermissionAnalyzeService.cs | 2 +- .../Services/Implements/DeviceGroupService.cs | 58 ++++++++++--------- .../DevicePermissionAnalyzeService.cs | 14 ++--- .../Implements/DevicePermissionService.cs | 48 +++++++-------- .../Services/Implements/GainfoGroupService.cs | 54 ++++++++--------- .../Services/Implements/GainfoService.cs | 4 ++ 7 files changed, 97 insertions(+), 87 deletions(-) diff --git a/Src/Dlhis.Basic/Device/Services/IDevicePermissionAnalyzeService.cs b/Src/Dlhis.Basic/Device/Services/IDevicePermissionAnalyzeService.cs index 77dec70b..2b849973 100644 --- a/Src/Dlhis.Basic/Device/Services/IDevicePermissionAnalyzeService.cs +++ b/Src/Dlhis.Basic/Device/Services/IDevicePermissionAnalyzeService.cs @@ -23,12 +23,12 @@ public interface IDevicePermissionAnalyzeService : IScopeDependency Task> GetAssignDeviceCodesAsync(string userCode); - Task>> GetUserAssignDeviceCodesInTenantAsync( + Task>> GetUserAssignDeviceCodesInTenantAsync( List userNos, DeviceAssignmentTypeEnumType? ignoreUniqueType = null, string ignoreAssignValue = null, AssignTypeEnumType? ignoreAssignType = null); - Task>> GetUserAssignDeviceCodesWithTypeInTenantAsync( + Task>> GetUserAssignDeviceCodesWithTypeInTenantAsync( List userNos, DeviceAssignmentTypeEnumType? ignoreUniqueType = null, string ignoreAssignValue = null, AssignTypeEnumType? ignoreAssignType = null diff --git a/Src/Dlhis.Basic/Device/Services/Implements/BasePermissionAnalyzeService.cs b/Src/Dlhis.Basic/Device/Services/Implements/BasePermissionAnalyzeService.cs index a45c8391..ec9335ce 100644 --- a/Src/Dlhis.Basic/Device/Services/Implements/BasePermissionAnalyzeService.cs +++ b/Src/Dlhis.Basic/Device/Services/Implements/BasePermissionAnalyzeService.cs @@ -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>(); + : new Dictionary>(); foreach (var gainfoNo in gainfoNos) diff --git a/Src/Dlhis.Basic/Device/Services/Implements/DeviceGroupService.cs b/Src/Dlhis.Basic/Device/Services/Implements/DeviceGroupService.cs index 56f6ed32..dab25556 100644 --- a/Src/Dlhis.Basic/Device/Services/Implements/DeviceGroupService.cs +++ b/Src/Dlhis.Basic/Device/Services/Implements/DeviceGroupService.cs @@ -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>(); + : new Dictionary>(); var devicesToAdd = await _dbContext.Queryable().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()); } } diff --git a/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionAnalyzeService.cs b/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionAnalyzeService.cs index 6756c347..d5317e74 100644 --- a/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionAnalyzeService.cs +++ b/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionAnalyzeService.cs @@ -147,13 +147,13 @@ public class DevicePermissionAnalyzeService : IDevicePermissionAnalyzeService } - public async Task>> GetUserAssignDeviceCodesWithTypeInTenantAsync( + public async Task>> GetUserAssignDeviceCodesWithTypeInTenantAsync( List userNos, DeviceAssignmentTypeEnumType? ignoreUniqueType = null, string ignoreAssignValue = null, AssignTypeEnumType? ignoreAssignType = null) { var gainfos = await _dbContext.Queryable().Where(x => userNos.Contains(x.No)).ToListAsync(); - if (!gainfos.Any()) return new Dictionary>(); + if (!gainfos.Any()) return new Dictionary>(); var devices = await _dbContext.Queryable().Where(x => x.Enable).ToListAsync(); @@ -170,7 +170,7 @@ public class DevicePermissionAnalyzeService : IDevicePermissionAnalyzeService var deviceRelationships = await _dbContext.Queryable().ToListAsync(); var departments = await _dbContext.Queryable().ToListAsync(); - var result = new ConcurrentDictionary>(); + var result = new ConcurrentDictionary>(); gainfos.ParallelForEach(gainfo => { @@ -210,7 +210,7 @@ public class DevicePermissionAnalyzeService : IDevicePermissionAnalyzeService } - private static IEnumerable GetAssignDeviceCodesPermissions( + private static List GetAssignDeviceCodesPermissions( AnalyzePackDto analyzePack, List gainfoGroups, List devicePermissions, @@ -286,7 +286,7 @@ public class DevicePermissionAnalyzeService : IDevicePermissionAnalyzeService }; return dto; - }); + }).ToList(); } private static List SearchActualAssignPermissions( @@ -346,7 +346,7 @@ public class DevicePermissionAnalyzeService : IDevicePermissionAnalyzeService } - public async Task>> GetUserAssignDeviceCodesInTenantAsync( + public async Task>> GetUserAssignDeviceCodesInTenantAsync( List 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()); } diff --git a/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs b/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs index 316c2eaf..1b25b65c 100644 --- a/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs +++ b/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs @@ -89,7 +89,7 @@ public class DevicePermissionService : IDevicePermissionService var userTenantDeviceCodes = usersToDelete.IsPresent() ? await _devicePermissionAnalyzeService.GetUserAssignDeviceCodesWithTypeInTenantAsync(beforeUserNos.Union(presentUserNos).ToList()) - : new Dictionary>(); + : new Dictionary>(); 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 + }); + } } } } diff --git a/Src/Dlhis.Basic/Organization/Services/Implements/GainfoGroupService.cs b/Src/Dlhis.Basic/Organization/Services/Implements/GainfoGroupService.cs index f0e15b8c..1e2f90bd 100644 --- a/Src/Dlhis.Basic/Organization/Services/Implements/GainfoGroupService.cs +++ b/Src/Dlhis.Basic/Organization/Services/Implements/GainfoGroupService.cs @@ -93,7 +93,7 @@ public class GainfoGroupService : IGainfoGroupService var relations = await _dbContext.Queryable() .Where(x => x.GroupCode == request.GroupCode) .ToListAsync(); - + var presentUserNos = await _dbContext.Queryable() .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>(); + : new Dictionary>(); var addTasks = new List(); var deleteTasks = new List(); @@ -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) diff --git a/Src/Dlhis.Basic/Organization/Services/Implements/GainfoService.cs b/Src/Dlhis.Basic/Organization/Services/Implements/GainfoService.cs index 7982be9b..6ed7fbd0 100644 --- a/Src/Dlhis.Basic/Organization/Services/Implements/GainfoService.cs +++ b/Src/Dlhis.Basic/Organization/Services/Implements/GainfoService.cs @@ -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().Where(x => x.UserNo != gainfo.No).ExecuteCommandAsync(); + await _dbContext.Deleteable().Where(x => x.AssignType == AssignTypeEnumType.User && x.AssignValue == gainfo.No).ExecuteCommandAsync(); //先写入离职表 gainfo.IdentityUserId = (int)gainfo.Id; //记录原始id