diff --git a/Src/Dlhis.Basic/DataPermissions/GetDataPermissionService.cs b/Src/Dlhis.Basic/DataPermissions/GetDataPermissionService.cs index 531db40d..a7895af3 100644 --- a/Src/Dlhis.Basic/DataPermissions/GetDataPermissionService.cs +++ b/Src/Dlhis.Basic/DataPermissions/GetDataPermissionService.cs @@ -1,3 +1,4 @@ +using Dlhis.Entity.Basic.Entity; using Dlhis.Entity.Device.Entities; using Dlhis.Entity.Sys.Entities; using Dlhis.Entity.Sys.Enums; @@ -90,4 +91,25 @@ public class GetDataPermissionService : IGetDataPermissions, ISingletonDependenc DeviceGroupRecursionGetNext(item, data, result, result.Contains(item.Code)); } } +} + +public interface IMyDataPermissionService : IScopeDependency +{ + List GetMyDeviceCodes(); +} + +public class MyDataPermissionService : IMyDataPermissionService +{ + private readonly IGetDataPermissions _getDataPermissions; + + public MyDataPermissionService(IGetDataPermissions getDataPermissions) + { + _getDataPermissions = getDataPermissions; + } + + /// + public List GetMyDeviceCodes() + { + return _getDataPermissions.GetData().FirstOrDefault().Value ?? new List(); + } } \ No newline at end of file diff --git a/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs b/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs index 4481a860..7535669d 100644 --- a/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs +++ b/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs @@ -1,4 +1,5 @@ -using Dlhis.Basic.Device.Dtos; +using Dlhis.Basic.DataPermissions; +using Dlhis.Basic.Device.Dtos; using Dlhis.Basic.Device.Request; using Dlhis.Basic.Organization.Dto; using Dlhis.Entity.Basic.Entity; @@ -7,7 +8,6 @@ using Dlhis.Entity.Device.Enums; using Dlhis.Entity.Sys.Entities; using Dlhis.Entity.Sys.Enums; using Kurisu.AspNetCore.Authentication.Abstractions; -using Kurisu.AspNetCore.CustomClass; using Kurisu.AspNetCore.DataAccess.Dto; using Kurisu.AspNetCore.DataAccess.Entity; using Kurisu.AspNetCore.DataAccess.SqlSugar.Extensions; @@ -20,13 +20,15 @@ namespace Dlhis.Basic.Device.Services.Implements; public class DevicePermissionService : IDevicePermissionService { private readonly IDbContext _dbContext; + private readonly IMyDataPermissionService _myDataPermissionService; private readonly ICurrentUser _currentUser; private readonly ILogger _logger; - public DevicePermissionService(IDbContext dbContext, + public DevicePermissionService(IDbContext dbContext, IMyDataPermissionService myDataPermissionService, ICurrentUser currentUser, ILogger logger) { _dbContext = dbContext; + _myDataPermissionService = myDataPermissionService; _currentUser = currentUser; _logger = logger; } @@ -37,15 +39,12 @@ public class DevicePermissionService : IDevicePermissionService await GenerateDeviceTasksAsync(async () => { - var values = await GetUniqueValuesAsync(request.Type, request.UniqueType); - //删除当前匹配的基地权限 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.Type == request.Type) - .WhereIF(values.Any(), x => values.Contains(x.UniqueValue)) .Where(x => x.TenantId == tenantId) .ToListAsync(); @@ -69,38 +68,17 @@ public class DevicePermissionService : IDevicePermissionService }, null); } - private async Task> GetUniqueValuesAsync(DeviceTypeEnumType? type, DeviceAssignmentTypeEnumType assignmentType) - { - if (!type.HasValue) - { - return new List(); - } - - if (assignmentType == DeviceAssignmentTypeEnumType.BusinessPlace) - { - return new List(); - } - else if (assignmentType == DeviceAssignmentTypeEnumType.Device) - { - return await _dbContext.Queryable().Where(x => x.Enable).Where(x => x.Type == type).Select(x => x.Code).ToListAsync(); - } - else if (assignmentType == DeviceAssignmentTypeEnumType.Group) - { - return await _dbContext.Queryable().Where(x => x.Type == type).Select(x => x.Code).ToListAsync(); - } - - throw new UserFriendlyException("不支持当前操作"); - } - public async Task AssignToUniqueAsync(DevicePermissionsAssignToDeviceRequest request) { await GenerateDeviceTasksAsync(async () => { var tenantId = _currentUser.GetStringTenantId(); + var deviceCodes = _myDataPermissionService.GetMyDeviceCodes(); //删除当前匹配的基地权限 var p = await _dbContext.Queryable() .Where(x => x.UniqueType == request.UniqueType) + .WhereIF(request.UniqueType == DeviceAssignmentTypeEnumType.Device, x => deviceCodes.Contains(x.UniqueValue)) .Where(x => x.UniqueValue == request.UniqueValue) .Where(x => x.AssignType == request.AssignType) .Where(x => x.Type == request.Type) @@ -136,11 +114,13 @@ public class DevicePermissionService : IDevicePermissionService public async Task> GetAssignmentsAsync(DeviceGetAssignmentsRequest request) { + var deviceCodes = _myDataPermissionService.GetMyDeviceCodes(); return await _dbContext.Queryable() .WhereIF(request.TenantId.IsPresent() && request.AssignType == AssignTypeEnumType.Department, x => x.TenantId == request.TenantId) .Where(x => x.AssignType == request.AssignType) .Where(x => x.AssignValue == request.AssignValue) .Where(x => x.UniqueType == request.UniqueType) + .WhereIF(request.UniqueType == DeviceAssignmentTypeEnumType.Device, x => deviceCodes.Contains(x.UniqueValue)) .Where(x => x.Type == request.Type) .Select(x => x.UniqueValue) .ToListAsync();