package dao import ( "github.com/druidcaesa/gotool" "strings" "ulink-admin/frame" "ulink-admin/modules/system/models/model" "ulink-admin/modules/system/models/req" "ulink-admin/pkg/base" ) type MenuDao struct { base.BaseDao } // GetMenuPermission 根据用户ID查询权限 func (d MenuDao) GetMenuPermission(id int64) *[]string { var perms []string session := base.GetSession().Session session.Table([]string{"sys_menu", "m"}) err := session.Distinct("m.perms"). Join("LEFT", []string{"sys_role_menu", "rm"}, "m.id = rm.menu_id"). Join("LEFT", []string{"sys_user_role", "ur"}, "rm.role_id = ur.role_id"). Join("LEFT", []string{"sys_role", "r"}, "r.id = ur.role_id"). Where("m.status = '0'").And("r.status = '0'").And("ur.user_id = ?", id).Find(&perms) if err != nil { gotool.Logs.ErrorLog().Println(err) return nil } return &perms } // GetMenuAll 查询所有菜单数据 func (d MenuDao) GetMenuAll() *[]model.SysMenu { session := base.GetSession().Session menus := make([]model.SysMenu, 0) session.Table([]string{model.SysMenu{}.TableName(), "m"}) err := session.Distinct("m.id").Cols("m.parent_id", "m.menu_name", "m.path", "m.component", "m.visible", "m.status", "m.perms", "m.is_frame", "m.is_cache", "m.menu_type", "m.icon", "m.order_num", "m.create_time"). Where("m.menu_type in ('M', 'C')").And("m.status = 0").OrderBy("m.parent_id").OrderBy("m.order_num").Find(&menus) if err != nil { gotool.Logs.ErrorLog().Println(err) return nil } return &menus } // GetMenusAll 查询所有菜单数据包括功能权限 func (d MenuDao) GetMenusAll() *[]model.SysMenu { menus := make([]model.SysMenu, 0) session := base.GetSession().Session session.Table([]string{model.SysMenu{}.TableName(), "m"}) err := session.Distinct("m.id").Cols("m.parent_id", "m.menu_name", "m.path", "m.component", "m.visible", "m.status", "m.perms", "m.is_frame", "m.is_cache", "m.menu_type", "m.icon", "m.order_num", "m.create_time"). Where("m.status = 0").OrderBy("m.parent_id").OrderBy("m.order_num").Find(&menus) if err != nil { frame.Throw(frame.SQL_CODE, "菜单数据查询失败:"+err.Error()) } return &menus } // GetMenusByUserId 根据用户ID查询菜单包括功能权限 func (d MenuDao) GetMenusByUserId(id int64) *[]model.SysMenu { menus := make([]model.SysMenu, 0) session := base.GetSession().Session session.Table([]string{model.SysMenu{}.TableName(), "m"}) err := session.Distinct("m.id").Cols("m.parent_id", "m.menu_name", "m.path", "m.component", "m.visible", "m.status", "m.perms", "m.is_frame", "m.is_cache", "m.menu_type", "m.icon", "m.order_num", "m.create_time"). Join("LEFT", []string{"sys_role_menu", "rm"}, "m.id = rm.menu_id"). Join("LEFT", []string{"sys_user_role", "ur"}, "rm.role_id = ur.role_id"). Join("LEFT", []string{"sys_role", "ro"}, "ur.role_id = ro.id"). Join("LEFT", []string{"sys_user", "u"}, "ur.user_id = u.id").Where("u.id = ?", id). And("m.status = 0").OrderBy("m.parent_id").OrderBy("m.order_num").Find(&menus) if err != nil { frame.Throw(frame.SQL_CODE, "菜单数据查询失败:"+err.Error()) } return &menus } // GetMenuByUserId 根据用户ID查询菜单 func (d MenuDao) GetMenuByUserId(id int64) *[]model.SysMenu { menus := make([]model.SysMenu, 0) session := base.GetSession().Session session.Table([]string{model.SysMenu{}.TableName(), "m"}) err := session.Distinct("m.id").Cols("m.parent_id", "m.menu_name", "m.path", "m.component", "m.visible", "m.status", "m.perms", "m.is_frame", "m.is_cache", "m.menu_type", "m.icon", "m.order_num", "m.create_time"). Join("LEFT", []string{"sys_role_menu", "rm"}, "m.id = rm.menu_id"). Join("LEFT", []string{"sys_user_role", "ur"}, "rm.role_id = ur.role_id"). Join("LEFT", []string{"sys_role", "ro"}, "ur.role_id = ro.id"). Join("LEFT", []string{"sys_user", "u"}, "ur.user_id = u.id").Where("u.id = ?", id). And("m.menu_type in ('M', 'C')").And("m.status = 0").OrderBy("m.parent_id").OrderBy("m.order_num").Find(&menus) if err != nil { frame.Throw(frame.SQL_CODE, "菜单数据查询失败:"+err.Error()) } return &menus } // GetMenuByRoleId 根据角色ID查询菜单树信息 func (d MenuDao) GetMenuByRoleId(id int64, strictly bool) *[]int64 { list := make([]int64, 0) session := base.GetSession().Session session.Table([]string{"sys_menu", "m"}) session.Join("LEFT", []string{"sys_role_menu", "rm"}, "m.id = rm.menu_id") session.Where("rm.role_id = ?", id) if strictly { session.And("m.id not in (select m.parent_id from sys_menu m inner join sys_role_menu rm on m.id = rm.menu_id and rm.role_id = ?)", id) } err := session.OrderBy("m.parent_id").OrderBy("m.order_num").Cols("m.id").Find(&list) if err != nil { frame.Throw(frame.SQL_CODE, "菜单数据查询失败:"+err.Error()) } return &list } // GetMenuList 查询系统菜单列表 func (d MenuDao) GetMenuList(query *req.MenuQuery) []model.SysMenu { list := make([]model.SysMenu, 0) session := base.GetSession().Session session.OrderBy("parent_id").OrderBy("order_num") if gotool.StrUtils.HasNotEmpty(query.MenuName) { session.And("menu_name like concat('%', ?, '%')", query.MenuName) } if query.Visible != nil { session.And("visible = ?", query.Visible) } if gotool.StrUtils.HasNotEmpty(query.Status) { session.And("status = ?", query.Status) } if query.ParentId > 0 { session.And("parent_id = ?", query.ParentId) } if gotool.StrUtils.HasNotEmpty(query.MenuType) { session.In("menu_type", strings.Split(query.MenuType, ",")) } if gotool.StrUtils.HasNotEmpty(query.Path) { session.In("path", strings.Split(query.Path, ",")) } err := session.Find(&list) if err != nil { frame.Throw(frame.SQL_CODE, "菜单数据查询失败:"+err.Error()) } return list } // GetMenuListByUserId 根据用户查询系统菜单列表 func (d MenuDao) GetMenuListByUserId(query *req.MenuQuery) []model.SysMenu { session := base.GetSession().Session session.OrderBy("parent_id").OrderBy("order_num") list := make([]model.SysMenu, 0) session.Table([]string{"sys_menu", "m"}) session.Distinct("m.id", "m.parent_id", "m.menu_name", "m.path", "m.component", "m.visible", "m.status", "m.perms", "m.is_frame", "m.is_cache", "m.menu_type", "m.icon", "m.order_num", "m.create_time") session.Join("LEFT", []string{"sys_role_menu", "rm"}, "m.id = rm.id"). Join("LEFT", []string{"sys_user_role", "ur"}, "rm.id = ur.id"). Join("LEFT", []string{"sys_role", "ro"}, "ur.id = ro.id"). Where("ur.id = ?", query.Id) if gotool.StrUtils.HasNotEmpty(query.MenuName) { session.And("menu_name like concat('%', ?, '%')", query.MenuName) } if query.Visible != nil { session.And("visible = ?", query.Visible) } if gotool.StrUtils.HasNotEmpty(query.Status) { session.And("status = ?", query.Status) } err := session.Find(&list) if err != nil { frame.Throw(frame.SQL_CODE, "菜单数据查询失败:"+err.Error()) } return list } // GetMenuByMenuId 根据菜单ID查询信息 func (d MenuDao) GetMenuByMenuId(id int64) *model.SysMenu { menu := model.SysMenu{ Id: id, } _, err := base.SqlDB.NewSession().Where("id = ?", menu.Id).Get(&menu) if err != nil { frame.Throw(frame.SQL_CODE, "菜单数据查询失败:"+err.Error()) } return &menu } func (d MenuDao) SelectSubMenuCount(id int64) int64 { menu := model.SysMenu{} session := base.GetSession().Session.Table("sys_menu").Where("parent_id = ?", id) count, err := session.Count(&menu) if err != nil { frame.Throw(frame.SQL_CODE, "菜单数据查询失败:"+err.Error()) } return count } func (d MenuDao) GetAllPermission() *[]string { var perms []string session := base.GetSession().Session.Table([]string{"sys_menu", "m"}) err := session.Cols("m.perms").Where("m.status = '0'").And("m.menu_type = 'F'").Find(&perms) if err != nil { frame.Throw(frame.SQL_CODE, "菜单数据查询失败:"+err.Error()) } return &perms }