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.Interface; using Yi.Framework.Model; using Yi.Framework.Model.Models; namespace Yi.Framework.Service { public partial class UserService: BaseService,IUserService { private IRoleService _roleService; public UserService(DbContext Db, IRoleService roleService) :base(Db) { _roleService = roleService; } public async Task DelListByUpdateAsync(List _ids) { var userList = await GetEntitiesAsync(u => _ids.Contains(u.id)); userList.ToList().ForEach(u => u.is_delete = (short)Common.Enum.DelFlagEnum.Deleted); return await UpdateListAsync(userList); } public async Task EmailIsExsit(string emailAddress) { var userList=await GetAllEntitiesTrueAsync(); var is_email= userList.Where(u=>u.email==emailAddress).FirstOrDefault(); if (is_email == null) { return true; } return false; } public async Task> GetAllEntitiesTrueAsync() { return await GetEntitiesAsync(u => u.is_delete == (short)Common.Enum.DelFlagEnum.Normal); } public async Task> GetMenusByUser(user _user) { var user_data= await _Db.Set().Include(u => u.roles).ThenInclude(u=>u.menus).ThenInclude(u=>u.mould) .Where(u=>u.id==_user.id&& u.is_delete == (short)Common.Enum.DelFlagEnum.Normal).FirstOrDefaultAsync(); var role_data =await GetRolesByUser(user_data); var menuList = new List(); role_data.ForEach(u => { var menu_data = _roleService.GetMenusByRole(u); menuList = menuList.Concat(menu_data.GetAwaiter().GetResult()).ToList(); }); menuList.ForEach(u => u.roles = null); return menuList; } public async Task> GetMouldByUser(user _user) { var user_data = await GetEntity(u => u.id == _user.id && u.is_delete == (short)Common.Enum.DelFlagEnum.Normal); var menu = await GetMenusByUser(user_data); var mouldList = menu.Select(u=>u.mould).ToList(); return mouldList; } public async Task> GetRolesByUser(user _user) { var user_data = await _Db.Set().Include(u=>u.roles) .Where(u => u.id == _user.id && u.is_delete == (short)Common.Enum.DelFlagEnum.Normal).FirstOrDefaultAsync(); var roleList = user_data.roles.Where(u=> u.is_delete == (short)Common.Enum.DelFlagEnum.Normal).ToList(); roleList.ForEach(u => u.users = null); return roleList; } public async Task Login(user _user) { var user_data =await _Db.Set().Include(u=>u.roles).Where(u => u.username == _user.username&&u.password==_user.password&& u.is_delete == (short)Common.Enum.DelFlagEnum.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 AddAsync(_user); } public async Task SetRolesByUser(List roleIds, List userIds) { var user_data =await _Db.Set().Include(u=>u.roles).Where(u =>userIds.Contains(u.id) &&u.is_delete == (short)Common.Enum.DelFlagEnum.Normal).ToListAsync(); if (user_data == null) { return false; } var roleList =await _Db.Set().Where(u => roleIds.Contains(u.id) && u.is_delete == (short)Common.Enum.DelFlagEnum.Normal).ToListAsync(); foreach(var item in user_data) { item.roles = roleList; } return await UpdateListAsync(user_data); } public async Task > GetMenuByUser(user _user) { var user_data =await _Db.Set().Include(u => u.roles).ThenInclude(u => u.menus) .Where(u => u.id == _user.id && u.is_delete == (short)Common.Enum.DelFlagEnum.Normal).FirstOrDefaultAsync(); var role_data= user_data.roles.ToList(); List menu_data = new (); foreach (var role in role_data) { var menu = await _roleService.GetMenusByRole(role); menu.ForEach(u=>u.roles=null); menu_data = menu_data.Concat(menu).OrderByDescending(u=>u.sort).ToList(); } return menu_data; } public async Task GetUserInfoById(int user_id) { var user_data=await GetUserById(user_id); user_data.roles.ToList().ForEach(u => u.users = null); return user_data; } public async Task GetUserById(int user_id) { var user_data = await _Db.Set().Include(u => u.roles) .Where(u => u.id == user_id && u.is_delete == (short)Common.Enum.DelFlagEnum.Normal).FirstOrDefaultAsync(); return user_data; } public async Task> GetMenuById(int user_id) { var user_data = await _Db.Set().Include(u => u.roles).Where(u => u.id == user_id).FirstOrDefaultAsync(); List menu_data = new(); foreach (var role in user_data.roles) { var menu = await _roleService.GetMenusByRole(role); menu.ForEach(u => u.roles = null); menu_data = menu_data.Union(menu).OrderByDescending(u => u.sort).ToList(); } //menu_data为角色所有的菜单,不是一个递归的啊 var allMenuIds = menu_data.Select(u => u.id).ToList(); var topMenu = menu_data.Where(u => u.is_top == (short)Common.Enum.ShowFlagEnum.Show); //现在要开始关联菜单了 List endMenu = new List(); foreach (var item in topMenu) { var p= await _Db.Set().Where(u=>u.id==item.id).Include(u => u.children).ThenInclude(u => u.children).ThenInclude(u => u.children).ThenInclude(u => u.children).ThenInclude(u => u.children).ToListAsync(); endMenu = endMenu.Union(p).ToList(); } return TopMenuBuild2(TopMenuBuild(endMenu, allMenuIds)); } private List TopMenuBuild(List menu_data,List allMenuIds) { for (int i = menu_data.Count() - 1; i >= 0; i--) { if (menu_data[i].icon == null) { menu_data[i].icon = "Yi"; } if (!allMenuIds.Contains(menu_data[i].id) || menu_data[i].is_delete == (short)Common.Enum.DelFlagEnum.Deleted|| menu_data[i].is_show == (short)Common.Enum.ShowFlagEnum.NoShow) { menu_data.Remove(menu_data[i]); } else if (menu_data[i].children != null) { menu_data[i].children = TopMenuBuild(menu_data[i].children.ToList(), allMenuIds); } } return menu_data; } private List TopMenuBuild2(List menu_data) { for (int i = menu_data.Count() - 1; i >= 0; i--) { if (menu_data[i].children.Count() == 0) { menu_data[i].children = null; } else if (menu_data[i].children != null) { menu_data[i].children = TopMenuBuild2(menu_data[i].children.ToList()); } } return menu_data; } public async Task GetMenuByUserId(string router,int userId) { var user_data= await _Db.Set().Include(u => u.roles).ThenInclude(u => u.menus).ThenInclude(u => u.mould) .Where(u => u.id==userId&&u.is_delete == (short)Common.Enum.DelFlagEnum.Normal && u.is_delete == (short)Common.Enum.ShowFlagEnum.Show).FirstOrDefaultAsync(); var roleList= user_data.roles.ToList(); menu menu_data=new(); foreach(var item in roleList) { menu_data = item.menus.Where(u => u.router == router).FirstOrDefault(); } return menu_data; } } }