From d8d14610e9d50957ddc6f8ec80ef36611cec73bd Mon Sep 17 00:00:00 2001 From: liguoyang Date: Sun, 9 Jun 2024 00:19:12 +0800 Subject: [PATCH] =?UTF-8?q?fix=20=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E9=A3=8E=E6=A0=BC=E5=92=8C=E8=A7=A6=E5=8F=91=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E8=BF=81=E7=A7=BB=E4=BB=BB=E5=8A=A1=E4=B8=8B=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Implements/DevicePermissionService.cs | 90 +++++++------------ .../Implements/GainfoPermissionService.cs | 8 +- .../Services/Implements/GainfoService.cs | 15 +++- 3 files changed, 53 insertions(+), 60 deletions(-) diff --git a/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs b/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs index 2d08c476..6df936d0 100644 --- a/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs +++ b/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs @@ -5,14 +5,12 @@ using Dlhis.Entity.Device.Entities; using Dlhis.Entity.Device.Enums; using Dlhis.Entity.Sys.Entities; using Dlhis.Entity.Sys.Enums; -using Dlhis.Scheduled.Api; using Kurisu.AspNetCore.Authentication.Abstractions; using Kurisu.AspNetCore.DataAccess.Entity; using Kurisu.AspNetCore.DataAccess.SqlSugar.Services; using Kurisu.AspNetCore.Utils; using Kurisu.AspNetCore.Utils.Extensions; using SqlSugar; -using GeneratePermissionIdRequest = Dlhis.Scheduled.Api.Request.GeneratePermissionIdRequest; namespace Dlhis.Basic.Device.Services.Implements; @@ -21,71 +19,50 @@ public class DevicePermissionService : IDevicePermissionService private readonly IDbContext _dbContext; private readonly ICurrentUser _currentUser; private readonly RedisCache _redisCache; - private readonly IHangfireApi _hangfireApi; - public DevicePermissionService(IDbContext dbContext, ICurrentUser currentUser, RedisCache redisCache, IHangfireApi hangfireApi) + public DevicePermissionService(IDbContext dbContext, ICurrentUser currentUser, RedisCache redisCache) { _dbContext = dbContext; _currentUser = currentUser; _redisCache = redisCache; - _hangfireApi = hangfireApi; } public async Task AssignAsync(DevicePermissionSaveRequest request) { var currentTenantId = _currentUser.GetStringTenantId(); - using (var handler = await _redisCache.LockAsync($"permission:generate:{currentTenantId}")) + await using var handler = await _redisCache.LockAsync($"permission:generate:{currentTenantId}"); + handler.Acquired.ThrowIfFalse("请勿频繁分配设备权限"); + + var tenantId = request.AssignType == AssignTypeEnumType.Department ? request.TenantId : _currentUser.GetStringTenantId(); + + await GenerateDeviceTasksAsync(async () => { - handler.Acquired.ThrowIfFalse("请勿频繁分配设备权限"); + //删除当前匹配的基地权限 + var p = await _dbContext.Queryable() + .Where(x => x.AssignType == request.AssignType) + .Where(x => x.AssignValue == request.AssignValue) + .Where(x => x.UniqueType == request.UniqueType) + .Where(x => x.TenantId == tenantId) + .ToListAsync(); - var tenantId = request.AssignType == AssignTypeEnumType.Department ? request.TenantId : _currentUser.GetStringTenantId(); + await _dbContext.DeleteReallyAsync(p); - await GenerateDeviceTasksAsync(async () => + //保存配置的权限 + if (request.Codes.IsPresent()) { - //删除当前匹配的基地权限 - var p = await _dbContext.Queryable() - .Where(x => x.AssignType == request.AssignType) - .Where(x => x.AssignValue == request.AssignValue) - .Where(x => x.UniqueType == request.UniqueType) - .Where(x => x.TenantId == tenantId) - .ToListAsync(); - - await _dbContext.DeleteReallyAsync(p); - - //保存配置的权限 - if (request.Codes.IsPresent()) + var devicePermissions = request.Codes.Select(code => new DevicePermissionEntity { - var devicePermissions = request.Codes.Select(code => new DevicePermissionEntity - { - AssignType = request.AssignType, - AssignValue = request.AssignValue, - UniqueType = request.UniqueType, - UniqueValue = code, - TenantId = tenantId - }).ToList(); + AssignType = request.AssignType, + AssignValue = request.AssignValue, + UniqueType = request.UniqueType, + UniqueValue = code, + TenantId = tenantId + }).ToList(); - await _dbContext.InsertAsync(devicePermissions); - } - }, null); - } - - // var tenantId = request.AssignType == AssignTypeEnumType.Department ? request.TenantId : _currentUser.GetStringTenantId(); - // request.TenantId = tenantId; - // - // var json = request.ToJson(); - // var id = await _dbContext.InsertReturnIdentityAsync(new DevicePermissionAssignmentEntity - // { - // Assignment = json, - // IsHandler = false, - // Result = null, - // TenantId = currentTenantId - // }); - // - // await _hangfireApi.GeneratePermissionsAsync(new GeneratePermissionIdRequest() - // { - // Id = id - // }); + await _dbContext.InsertAsync(devicePermissions); + } + }, null); } public async Task GeneratePermissionsAsync(long id) @@ -334,12 +311,12 @@ public class DevicePermissionService : IDevicePermissionService return; } - var deivces = await _dbContext.Queryable() + var devices = await _dbContext.Queryable() .Where(x => x.Enable) .Where(x => deviceCodes.Contains(x.Code)) .ToListAsync(); - var tasks = deivces.Select(x => new DeviceTaskEntity + var tasks = devices.Select(x => new DeviceTaskEntity { DeviceUniqueNo = x.UniqueNo, Status = DeviceTaskStatusEnumType.Wait, @@ -347,6 +324,7 @@ public class DevicePermissionService : IDevicePermissionService DeviceType = x.Type, UserNo = userNo, CancellationId = 0, + Priority = 0, Version = 0, TenantId = x.TenantId }).ToList(); @@ -428,7 +406,7 @@ public class DevicePermissionService : IDevicePermissionService .Where(x => x.AssignType == assignType) .Where(x => x.AssignValue == assignValue) .GroupBy(x => x.TenantId) - .Select(x => new UserTenantDeviceCodeDto { Tenant = x.Key, Codes = x.Select(x => x.UniqueValue).ToList() }) + .Select(x => new UserTenantDeviceCodeDto { Tenant = x.Key, Codes = x.Select(p => p.UniqueValue).ToList() }) .ToList(); //处理获取设备分组的情况 @@ -450,9 +428,9 @@ public class DevicePermissionService : IDevicePermissionService }; }).ToList(); - void RecursionGetNext(DeviceGroupEntity current, List deviceGroups, List result, bool add) + void RecursionGetNext(DeviceGroupEntity current, List internalDeviceGroups, List result, bool add) { - var next = deviceGroups.Where(x => x.PCode == current.Code).ToList(); + var next = internalDeviceGroups.Where(x => x.PCode == current.Code).ToList(); foreach (var item in next) { if (add) @@ -460,7 +438,7 @@ public class DevicePermissionService : IDevicePermissionService result.Add(new UserTenantDeviceCodeDto { Tenant = item.TenantId, Codes = new List { item.Code } }); } - RecursionGetNext(item, deviceGroups, result, result.SelectMany(x => x.Codes).Contains(item.Code)); + RecursionGetNext(item, internalDeviceGroups, result, result.SelectMany(x => x.Codes).Contains(item.Code)); } } } diff --git a/Src/Dlhis.Basic/Organization/Services/Implements/GainfoPermissionService.cs b/Src/Dlhis.Basic/Organization/Services/Implements/GainfoPermissionService.cs index 52ec42c9..b8d202c1 100644 --- a/Src/Dlhis.Basic/Organization/Services/Implements/GainfoPermissionService.cs +++ b/Src/Dlhis.Basic/Organization/Services/Implements/GainfoPermissionService.cs @@ -169,16 +169,18 @@ public class GainfoPermissionService : IGainfoPermissionService var tasks = devices.Select(x => new DeviceTaskEntity { UserId = gainfo!.Id, - Source = null, DeviceUniqueNo = x.UniqueNo, Status = DeviceTaskStatusEnumType.Wait, + Version = 0, + CancellationId = 0, UserNo = request.UserNo, Type = request.IsLeave ? DeviceTaskEnumType.Delete : DeviceTaskEnumType.Add, DeviceType = x.Type, TenantId = gainfo.Factory, - Priority = 10 + Priority = 10, + }).ToList(); await _dbContext.InsertAsync(tasks); @@ -193,6 +195,8 @@ public class GainfoPermissionService : IGainfoPermissionService .Select() .ToListAsync(); } + + //********************************************************************************************************************************************** private static IEnumerable RecursionGetNext(DeviceGroupEntity current, List deviceGroups) { diff --git a/Src/Dlhis.Basic/Organization/Services/Implements/GainfoService.cs b/Src/Dlhis.Basic/Organization/Services/Implements/GainfoService.cs index f78c1ded..196a521d 100644 --- a/Src/Dlhis.Basic/Organization/Services/Implements/GainfoService.cs +++ b/Src/Dlhis.Basic/Organization/Services/Implements/GainfoService.cs @@ -1,7 +1,9 @@ -using Dlhis.Basic.Organization.Request; +using Dlhis.Basic.Device.Services; +using Dlhis.Basic.Organization.Request; using Dlhis.Basic.Organization.Response; using Dlhis.Entity.Basic.Entity; using Dlhis.Entity.Basic.Enums; +using Dlhis.Entity.Device.Enums; using Dlhis.Scheduled.Api; using Dlhis.Scheduled.Api.Request; using Dlhis.Sys.Api; @@ -23,6 +25,7 @@ public class GainfoService : IGainfoService private readonly ICurrentUser _currentUser; private readonly ITenantApi _tenantApi; private readonly IHangfireApi _hangfireApi; + private readonly IDevicePermissionService _devicePermissionService; private readonly IGainfoPermissionService _gainfoPermissionService; private readonly ILogger _logger; @@ -32,6 +35,7 @@ public class GainfoService : IGainfoService ICurrentUser currentUser, ITenantApi tenantApi, IHangfireApi hangfireApi, + IDevicePermissionService devicePermissionService, IGainfoPermissionService gainfoPermissionService, ILogger logger) { @@ -41,6 +45,7 @@ public class GainfoService : IGainfoService _currentUser = currentUser; _tenantApi = tenantApi; _hangfireApi = hangfireApi; + _devicePermissionService = devicePermissionService; _gainfoPermissionService = gainfoPermissionService; _logger = logger; } @@ -335,8 +340,14 @@ public class GainfoService : IGainfoService ModifiedBy = 1, ModifiedTime = DateTime.Now, UserCode = gainfo.Code, - Face = request.Face, + Face = request.Face }); + + //海宁触发权限下发 + if (gainfo.Workplace == "5") + { + await _devicePermissionService.GenerateDeviceTasksAsync(gainfo.No, DeviceTaskEnumType.Add); + } } } }