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 SelectMenuList(SysMenu menu) { return Db.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(); } /// /// 根据用户查询系统菜单列表 /// /// /// 用户id /// public List SelectMenuListByUserId(SysMenu sysMenu, long userId) { return Db.Queryable((menu, roleMenu, userRole, role) => new JoinQueryInfos( JoinType.Left, menu.menuId == roleMenu.Menu_id, JoinType.Left, roleMenu.Role_id == userRole.RoleId, JoinType.Left, userRole.RoleId == role.RoleId )) .Where((menu, roleMenu, userRole, role) => userRole.UserId == userId) .WhereIF(!string.IsNullOrEmpty(sysMenu.menuName), (menu, roleMenu, userRole, role) => menu.menuName.Contains(sysMenu.menuName)) .WhereIF(!string.IsNullOrEmpty(sysMenu.visible), (menu, roleMenu, userRole, role) => menu.visible == sysMenu.visible) .WhereIF(!string.IsNullOrEmpty(sysMenu.status), (menu, roleMenu, userRole, role) => menu.status == sysMenu.status) .OrderBy((menu, roleMenu, userRole, role) => new { menu.parentId, menu.orderNum }) //.Distinct() .Select((menu, roleMenu, userRole, role) => menu).ToList(); } #region 左侧菜单树 /// /// 管理员获取左侧菜单树 /// /// public List SelectMenuTreeAll() { var menuTypes = new string[] { "M", "C" }; return Db.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 Db.Queryable((menu, roleMenu) => new JoinQueryInfos( JoinType.Left, menu.menuId == roleMenu.Menu_id )) .Where((menu, roleMenu) => roleIds.Contains(roleMenu.Role_id) && menuTypes.Contains(menu.menuType) && menu.status == "0") .OrderBy((menu, roleMenu) => new { menu.parentId, menu.orderNum }) .Select((menu, roleMenu) => menu).ToList(); } #endregion /// /// 获取菜单详情 /// /// /// public SysMenu SelectMenuById(int menuId) { return Db.Queryable().Where(it => it.menuId == menuId).Single(); } /// /// 添加菜单 /// /// /// public int AddMenu(SysMenu menu) { menu.Create_time = Db.GetDate(); menu.menuId = Db.Insertable(menu).ExecuteReturnIdentity(); return 1; } /// /// 编辑菜单 /// /// /// public int EditMenu(SysMenu menu) { return Db.Updateable(menu).ExecuteCommand(); } /// /// 删除菜单 /// /// /// public int DeleteMenuById(int menuId) { return Db.Deleteable().Where(it => it.menuId == menuId).ExecuteCommand(); } /// /// 菜单排序 /// /// 菜单Dto /// public int ChangeSortMenu(MenuDto menuDto) { var result = Db.Updateable(new SysMenu() { menuId = menuDto.MenuId, orderNum = menuDto.orderNum }) .UpdateColumns(it => new { it.orderNum }).ExecuteCommand(); return result; } /// /// 查询菜单权限 /// /// /// public List SelectMenuPermsByUserId(long userId) { return Db.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 Db.Queryable() .Where(it => it.menuName == menu.menuName && it.parentId == menu.parentId).Single(); } /// /// 是否存在菜单子节点 /// /// /// public int HasChildByMenuId(long menuId) { return Db.Queryable().Where(it => it.parentId == menuId).Count(); } #region RoleMenu /// /// 查询菜单使用数量 /// /// /// public int CheckMenuExistRole(long menuId) { return Db.Queryable().Where(it => it.Menu_id == menuId).Count(); } #endregion } }