diff --git a/Src/Dlhis.Sys/Identity/Services/Implements/UserService.cs b/Src/Dlhis.Sys/Identity/Services/Implements/UserService.cs index cdc40d3e..6d674421 100644 --- a/Src/Dlhis.Sys/Identity/Services/Implements/UserService.cs +++ b/Src/Dlhis.Sys/Identity/Services/Implements/UserService.cs @@ -30,7 +30,21 @@ public class UserService : IUserService public async Task> GetPageAsync(UserPageRequest request) { var tenant = _currentUser.GetStringTenantId(); + + var roleUserCodes = await _identityDbContext.Queryable() + .LeftJoin((x, u) => x.UserId == u.Id) + .Select((x, u) => u.UserName) + .ToListAsync(); + var userCodes = await _dbContext.Queryable().Where(x => x.Factory == tenant).Select(x => x.Code).ToListAsync(); + var userLeaveCodes = await _dbContext.Queryable() + .Where(x => x.Factory == tenant) + .Where(x => roleUserCodes.Contains(x.Code)) + .Select(x => x.Code) + .ToListAsync(); + + var expectUserIds = await _identityDbContext.Queryable().Where(x => userLeaveCodes.Contains(x.UserName)).Select(x => x.Id).ToListAsync(); + var userIds = await _identityDbContext.Queryable().Where(x => x.TenantCode == tenant).Select(x => x.UserId).Distinct().ToListAsync(); var page = await _identityDbContext.Queryable() @@ -45,7 +59,7 @@ public class UserService : IUserService || x.PhoneNumber == request.Search || c.ClaimValue == request.Search ) - .Where(x => userIds.Contains(x.Id) || userCodes.Contains(x.UserName)) + .Where(x => !expectUserIds.Contains(x.Id) && (userIds.Contains(x.Id) || userCodes.Contains(x.UserName))) .Select((x, ur, r, c) => new UserResponse { Id = x.Id,