using Infrastructure.Extensions; using OpenAuth.App.Interface; using OpenAuth.Repository.Domain; using SqlSugar; using StackExchange.Redis; using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Runtime.CompilerServices; using System.Security.Cryptography; using System.Text; using System.Threading.Tasks; namespace OpenAuth.App.BasicQueryService { public class UserManager { ISqlSugarClient client; public UserManager(ISqlSugarClient sqlSugarClient) { client = sqlSugarClient; } /// /// x用户的部门集合 /// /// /// public ISugarQueryable UserOrgs(long userId) { var query = client.Queryable() .LeftJoin((u, o) => u.OrgId == o.Id) .Where((u, o) => u.UserId == userId && o.Id != null); return query; } /// /// x用户的角色集合 /// /// /// public ISugarQueryable UserRoles(long userId) { var query = client.Queryable() .LeftJoin((u, r) => u.RoleId == r.Id) .Where((u, r) => u.UserId == userId && r.Id != null); return query; } /// /// x角色集合的菜单集合 /// /// /// /// /// /// public ISugarQueryable RoleModules(List roleIds) { var query = client.Queryable() .LeftJoin((r, m) => r.ModuleId == m.Id) .Where((r, m) => roleIds.Contains(r.RoleId) && m.Id != null); return query; } /// /// x角色集合的按钮集合 /// /// /// /// /// /// public ISugarQueryable RoleModuleElements(List roleIds) { var query = client.Queryable() .LeftJoin((r, m) => r.ElementId == m.Id) .Where((r, m) => roleIds.Contains(r.RoleId) && m.Id != null); return query; } public ISugarQueryable UserPositons(long userId) { var query = client.Queryable() .LeftJoin((u, p) => u.PositionId == p.Id) .Where((u, p) => u.PositionId != null && u.UserId == userId && p.Id != null); return query; } public async Task> UserIdsByPosition(string orgId, string positionId) { var list = await client.Queryable() .Where(a => a.PositionId.ToString() == positionId) .WhereIF(!string.IsNullOrEmpty(orgId), a => a.OrgId.ToString() == orgId) .Select(a => a.UserId.ToString()).ToListAsync(); return list; } public async Task> UserIdsByPositions(List positionIds) { var list = await client.Queryable() .Where(a => positionIds.Contains(a.PositionId.ToString())) .Select(a => a.UserId.ToString()).ToListAsync(); return list; } public async Task> UserIdsByRole(string roleId) { var list = await client.Queryable() .Where(a => a.RoleId.ToString() == roleId) .Select(a => a.UserId.ToString()) .ToListAsync(); return list; } public async Task> UserOrgsByUserIds(List userIds) { var list1 = await client.Queryable() .Where(a => userIds.Contains(a.UserId.ToString())) .GroupBy(a => a.UserId) .Select(it => new { UserId = it.UserId.ToString(), OrgIds = SqlFunc.Subqueryable().Where(s => s.UserId == it.UserId).ToList(s => s.OrgId.ToString()) }).ToListAsync(); //.ToDictionaryAsync(x => x.UserId, x => x.OrgIds); //var result = list.GroupBy(a => a.UserId.ToString()) // .Select(g => new // { // UserId = g.Key, // OrgIds = g.Select(a => a.OrgId.ToString()).ToList() // }).ToDictionary(x => x.UserId, x => x.OrgIds); Dictionary list = new Dictionary(); foreach(var item in list1) { list.Add(item.UserId, item.OrgIds); } return list; } public async Task> PositonsByUser(string userId) { var list = await client.Queryable() .Where(a => a.UserId.ToString() == userId) .Select(a => a.PositionId.ToString()) .ToListAsync(); return list; } } }