using Infrastructure.Attribute; using SqlSugar; using System; using System.Collections.Generic; using System.Linq; using ARW.Model.System.Dto; using ARW.Model.System; namespace ARW.Repository.System { /// /// 系统菜单 /// [AppService(ServiceLifetime = LifeTime.Transient)] public class SysMenuRepository : BaseRepository { /// /// 获取所有菜单(菜单管理) /// /// public List SelectTreeMenuList(MenuQueryDto menu) { return Context.Queryable() .WhereIF(!string.IsNullOrEmpty(menu.MenuName), it => it.MenuName.Contains(menu.MenuName)) .WhereIF(!string.IsNullOrEmpty(menu.Visible), it => it.visible == menu.Visible) .WhereIF(!string.IsNullOrEmpty(menu.Status), it => it.status == menu.Status) .WhereIF(!string.IsNullOrEmpty(menu.MenuTypeIds), it => menu.MenuTypeIdArr.Contains(it.menuType)) .OrderBy(it => new { it.parentId, it.orderNum }) .ToTree(it => it.children, it => it.parentId, 0); } /// /// 根据用户查询系统菜单列表 /// /// /// 用户角色集合 /// public List SelectTreeMenuListByRoles(MenuQueryDto menu, List roles) { var roleMenus = Context.Queryable() .Where(r => roles.Contains(r.Role_id)) .Select(f => f.Menu_id).Distinct().ToList(); return Context.Queryable() .Where(c => roleMenus.Contains(c.MenuId)) .WhereIF(!string.IsNullOrEmpty(menu.MenuName), (c) => c.MenuName.Contains(menu.MenuName)) .WhereIF(!string.IsNullOrEmpty(menu.Visible), (c) => c.visible == menu.Visible) .WhereIF(!string.IsNullOrEmpty(menu.Status), (c) => c.status == menu.Status) .WhereIF(!string.IsNullOrEmpty(menu.MenuTypeIds), c => menu.MenuTypeIdArr.Contains(c.menuType)) .OrderBy((c) => new { c.parentId, c.orderNum }) .Select(c => c) .ToTree(it => it.children, it => it.parentId, 0); } /// /// 获取所有菜单 /// /// public List SelectMenuList(MenuQueryDto menu) { return Context.Queryable() .WhereIF(!string.IsNullOrEmpty(menu.MenuName), it => it.MenuName.Contains(menu.MenuName)) .WhereIF(!string.IsNullOrEmpty(menu.Visible), it => it.visible == menu.Visible) .WhereIF(!string.IsNullOrEmpty(menu.Status), it => it.status == menu.Status) .WhereIF(menu.ParentId != null, it => it.parentId == menu.ParentId) .OrderBy(it => new { it.parentId, it.orderNum }) .ToList(); } /// /// 根据用户查询系统菜单列表 /// /// /// 用户角色集合 /// public List SelectMenuListByRoles(MenuQueryDto sysMenu, List roles) { var roleMenus = Context.Queryable() .Where(r => roles.Contains(r.Role_id)); return Context.Queryable() .InnerJoin(roleMenus, (c, j) => c.MenuId == j.Menu_id) .Where((c, j) => c.status == "0") .WhereIF(!string.IsNullOrEmpty(sysMenu.MenuName), (c, j) => c.MenuName.Contains(sysMenu.MenuName)) .WhereIF(!string.IsNullOrEmpty(sysMenu.Visible), (c, j) => c.visible == sysMenu.Visible) .OrderBy((c, j) => new { c.parentId, c.orderNum }) .Select(c => c) .ToList(); } /// /// 获取菜单详情 /// /// /// public SysMenu SelectMenuById(int menuId) { return Context.Queryable().Where(it => it.MenuId == menuId).Single(); } /// /// 添加菜单 /// /// /// public int AddMenu(SysMenu menu) { var Db = Context; menu.Create_time = Db.GetDate(); menu.MenuId = Db.Insertable(menu).ExecuteReturnIdentity(); return 1; } /// /// 编辑菜单 /// /// /// public int EditMenu(SysMenu menu) { return Context.Updateable(menu).ExecuteCommand(); } /// /// 删除菜单 /// /// /// public int DeleteMenuById(int menuId) { return Context.Deleteable().Where(it => it.MenuId == menuId).ExecuteCommand(); } /// /// 菜单排序 /// /// 菜单Dto /// public int ChangeSortMenu(MenuDto menuDto) { var result = Context.Updateable(new SysMenu() { MenuId = menuDto.MenuId, orderNum = menuDto.orderNum }) .UpdateColumns(it => new { it.orderNum }).ExecuteCommand(); return result; } /// /// 查询菜单权限 /// /// /// public List SelectMenuPermsByUserId(long userId) { return Context.Queryable((m, rm, ur, r) => new JoinQueryInfos( JoinType.Left, m.MenuId == rm.Menu_id, JoinType.Left, rm.Role_id == ur.RoleId, JoinType.Left, ur.RoleId == r.RoleId )) //.Distinct() .Where((m, rm, ur, r) => m.status == "0" && r.Status == "0" && ur.UserId == userId) .Select((m, rm, ur, r) => m).ToList(); } /// /// 校验菜单名称是否唯一 /// /// /// public SysMenu CheckMenuNameUnique(SysMenu menu) { return Context.Queryable() .Where(it => it.MenuName == menu.MenuName && it.parentId == menu.parentId).Single(); } /// /// 是否存在菜单子节点 /// /// /// public int HasChildByMenuId(long menuId) { return Context.Queryable().Where(it => it.parentId == menuId).Count(); } #region RoleMenu /// /// 查询菜单使用数量 /// /// /// public int CheckMenuExistRole(long menuId) { return Context.Queryable().Where(it => it.Menu_id == menuId).Count(); } #endregion } }