using Microsoft.EntityFrameworkCore; using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Text; using System.Threading.Tasks; using Yi.Framework.Common.Const; using Yi.Framework.Core; using Yi.Framework.DTOModel; using Yi.Framework.Interface; using Yi.Framework.Model; using Yi.Framework.Model.ModelFactory; using Yi.Framework.Model.Models; namespace Yi.Framework.Service { public partial class UserService : BaseService, IUserService { CacheClientDB _cacheClientDB; public UserService(CacheClientDB cacheClientDB, IDbContextFactory DbFactory) : base(DbFactory) { _cacheClientDB = cacheClientDB; } short Normal = (short)Common.Enum.DelFlagEnum.Normal; public async Task PhoneIsExsit(string smsAddress) { var userList = await GetEntity(u => u.phone == smsAddress); if (userList == null) { return false; } return true; } public async Task EmailIsExsit(string emailAddress) { var userList = await GetEntity(u => u.email == emailAddress); if (userList == null) { return false; } return true; } /// /// /// /// /// public async Task GetUserById(int userId) { return await _DbRead.Set().Include(u => u.roles).ThenInclude(u => u.menus).ThenInclude(u => u.children).ThenInclude(u => u.mould).Where(u => u.id == userId).FirstOrDefaultAsync(); } public async Task> GetAxiosByRouter(string router, int userId, List menuIds) { var user_data = await GetUserById(userId); List menuList = new(); foreach (var item in user_data.roles) { var m = item.menus.Where(u => u?.router?.ToUpper() == router.ToUpper()).FirstOrDefault(); if (m == null) { break; } menuList = m.children?.Where(u => menuIds.Contains(u.id) && u.is_delete == Normal).ToList(); } return menuList; } public async Task GetMenuByHttpUser(List allMenuIds) { var topMenu = await _DbRead.Set().Include(u => u.children).ThenInclude(u => u.children).ThenInclude(u => u.children).ThenInclude(u => u.children).ThenInclude(u => u.children).Where(u => u.is_top == (short)Common.Enum.ShowFlagEnum.Show).FirstOrDefaultAsync(); //现在要开始关联菜单了 return TreeMenuBuild.Sort(TreeMenuBuild.ShowFormat(topMenu, allMenuIds)); ; } public async Task GetUserInRolesByHttpUser(int userId) { var data = await GetUserById(userId); data.roles?.ForEach(u => { u.users = null; u.menus = null; }); return data; } public async Task Login(user _user) { var user_data = await _DbRead.Set().Include(u => u.roles).Where(u => u.username == _user.username && u.password == _user.password && u.is_delete == Normal).FirstOrDefaultAsync(); return user_data; } public async Task Register(user _user) { var user_data = await GetEntity(u => u.username == _user.username); if (user_data != null) { return false; } return await UpdateAsync(_user); } public async Task SetRoleByUser(List roleIds, List userIds) { var user_data = await _DbRead.Set().Include(u => u.roles).Where(u => userIds.Contains(u.id)).ToListAsync(); var roleList = await _DbRead.Set().Where(u => roleIds.Contains(u.id)).ToListAsync(); user_data.ForEach(u => u.roles = roleList); return await UpdateListAsync(user_data); } public bool SaveUserApi(int userId, List menus) { return _cacheClientDB.Set(RedisConst.userMenusApi+":"+userId.ToString(),menus,new TimeSpan(0,30,0)); } public List GetCurrentMenuInfo(int userId) { return _cacheClientDB.Get>(RedisConst.userMenusApi+":"+userId).Select(u=>u.id).ToList(); } } }