using Infrastructure.Attribute; using SqlSugar; using System; using System.Collections.Generic; using System.Linq; using ZR.Model.System.Dto; using ZR.Model.System; namespace ZR.Repository.System { /// /// 系统菜单 /// [AppService(ServiceLifetime = LifeTime.Transient)] public class SysMenuRepository : BaseRepository { /// /// 获取所有菜单(菜单管理) /// /// public List SelectTreeMenuList(SysMenu 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) .OrderBy(it => new { it.parentId, it.orderNum }) .ToTree(it => it.children, it => it.parentId, 0); } /// /// 根据用户查询系统菜单列表(菜单管理) /// /// /// 用户角色集合 /// public List SelectTreeMenuListByUserId(SysMenu 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) .WhereIF(!string.IsNullOrEmpty(sysMenu.MenuName), (c, j) => c.MenuName.Contains(sysMenu.MenuName)) .WhereIF(!string.IsNullOrEmpty(sysMenu.visible), (c, j) => c.visible == sysMenu.visible) .WhereIF(!string.IsNullOrEmpty(sysMenu.status), (c, j) => c.status == sysMenu.status) .OrderBy((c, j) => new { c.parentId, c.orderNum }) .Select(c => c) .ToTree(it => it.children, it => it.parentId, 0); } /// /// 获取所有菜单 /// /// public List SelectMenuList(SysMenu 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) .OrderBy(it => new { it.parentId, it.orderNum }) .ToList(); } /// /// 根据用户查询系统菜单列表 /// /// /// 用户角色集合 /// public List SelectMenuListByRoles(SysMenu 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(); } #region 左侧菜单树 /// /// 管理员获取左侧菜单树 /// /// public List SelectMenuTreeAll() { var menuTypes = new string[] { "M", "C" }; return Context.Queryable() .Where(f => f.status == "0" && menuTypes.Contains(f.menuType)) .OrderBy(it => new { it.parentId, it.orderNum }).ToList(); } /// /// 根据用户角色获取左侧菜单树 /// /// /// public List SelectMenuTreeByRoleIds(List roleIds) { var menuTypes = new string[] { "M", "C" }; return Context.Queryable() .Where((menu) => menuTypes.Contains(menu.menuType) && menu.status == "0" && SqlFunc.Subqueryable().Where( s => roleIds.Contains(s.Role_id) && s.Menu_id == menu.MenuId).Any()) .OrderBy((menu) => new { menu.parentId, menu.orderNum }) .Select((menu) => menu).ToList(); } #endregion /// /// 获取菜单详情 /// /// /// 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 } }