You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

163 lines
5.7 KiB
C#

5 months ago
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;
}
/// <summary>
/// x用户的部门集合
/// </summary>
/// <param name="userId"></param>
/// <returns></returns>
public ISugarQueryable<SysUserOrg, SysOrg> UserOrgs(long userId)
{
var query = client.Queryable<SysUserOrg>()
.LeftJoin<SysOrg>((u, o) => u.OrgId == o.Id)
.Where((u, o) => u.UserId == userId && o.Id != null);
return query;
}
/// <summary>
/// x用户的角色集合
/// </summary>
/// <param name="userId"></param>
/// <returns></returns>
public ISugarQueryable<SysUserRole, SysRole> UserRoles(long userId)
{
var query = client.Queryable<SysUserRole>()
.LeftJoin<SysRole>((u, r) => u.RoleId == r.Id)
.Where((u, r) => u.UserId == userId && r.Id != null);
return query;
}
/// <summary>
/// x角色集合的菜单集合
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="roleIds"></param>
/// <param name="whereExpression"></param>
/// <param name="selectExpression"></param>
/// <returns></returns>
public ISugarQueryable<SysRoleModule, SysModule> RoleModules(List<long> roleIds)
{
var query = client.Queryable<SysRoleModule>()
.LeftJoin<SysModule>((r, m) => r.ModuleId == m.Id)
.Where((r, m) => roleIds.Contains(r.RoleId) && m.Id != null);
return query;
}
/// <summary>
/// x角色集合的按钮集合
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="roleIds"></param>
/// <param name="whereExpression"></param>
/// <param name="selectExpression"></param>
/// <returns></returns>
public ISugarQueryable<SysRoleElement, SysModuleElement> RoleModuleElements(List<long> roleIds)
{
var query = client.Queryable<SysRoleElement>()
.LeftJoin<SysModuleElement>((r, m) => r.ElementId == m.Id)
.Where((r, m) => roleIds.Contains(r.RoleId) && m.Id != null);
return query;
}
public ISugarQueryable<SysUserOrg, SysPosition> UserPositons(long userId)
{
var query = client.Queryable<SysUserOrg>()
.LeftJoin<SysPosition>((u, p) => u.PositionId == p.Id)
.Where((u, p) => u.PositionId != null && u.UserId == userId && p.Id != null);
return query;
}
public async Task<List<string>> UserIdsByPosition(string orgId, string positionId)
{
var list = await client.Queryable<SysUserOrg>()
.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<List<string>> UserIdsByPositions(List<string> positionIds)
{
var list = await client.Queryable<SysUserOrg>()
.Where(a => positionIds.Contains(a.PositionId.ToString()))
.Select(a => a.UserId.ToString()).ToListAsync();
return list;
}
public async Task<List<string>> UserIdsByRole(string roleId)
{
var list = await client.Queryable<SysUserRole>()
.Where(a => a.RoleId.ToString() == roleId)
.Select(a => a.UserId.ToString())
.ToListAsync();
return list;
}
public async Task<Dictionary<string, object>> UserOrgsByUserIds(List<string> userIds)
{
var list1 = await client.Queryable<SysUserOrg>()
.Where(a => userIds.Contains(a.UserId.ToString()))
.GroupBy(a => a.UserId)
.Select(it => new
{
UserId = it.UserId.ToString(),
OrgIds = SqlFunc.Subqueryable<SysUserOrg>().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<string, object> list = new Dictionary<string, object>();
foreach(var item in list1)
{
list.Add(item.UserId, item.OrgIds);
}
return list;
}
public async Task<List<string>> PositonsByUser(string userId)
{
var list = await client.Queryable<SysUserOrg>()
.Where(a => a.UserId.ToString() == userId)
.Select(a => a.PositionId.ToString())
.ToListAsync();
return list;
}
}
}