menu_dao.go 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. package dao
  2. import (
  3. "github.com/druidcaesa/gotool"
  4. "strings"
  5. "ulink-admin/frame"
  6. "ulink-admin/modules/system/models/model"
  7. "ulink-admin/modules/system/models/req"
  8. "ulink-admin/pkg/base"
  9. )
  10. type MenuDao struct {
  11. base.BaseDao
  12. }
  13. // GetMenuPermission 根据用户ID查询权限
  14. func (d MenuDao) GetMenuPermission(id int64) *[]string {
  15. var perms []string
  16. session := base.GetSession().Session
  17. session.Table([]string{"sys_menu", "m"})
  18. err := session.Distinct("m.perms").
  19. Join("LEFT", []string{"sys_role_menu", "rm"}, "m.id = rm.menu_id").
  20. Join("LEFT", []string{"sys_user_role", "ur"}, "rm.role_id = ur.role_id").
  21. Join("LEFT", []string{"sys_role", "r"}, "r.id = ur.role_id").
  22. Where("m.status = '0'").And("r.status = '0'").And("ur.user_id = ?", id).Find(&perms)
  23. if err != nil {
  24. gotool.Logs.ErrorLog().Println(err)
  25. return nil
  26. }
  27. return &perms
  28. }
  29. // GetMenuAll 查询所有菜单数据
  30. func (d MenuDao) GetMenuAll() *[]model.SysMenu {
  31. session := base.GetSession().Session
  32. menus := make([]model.SysMenu, 0)
  33. session.Table([]string{model.SysMenu{}.TableName(), "m"})
  34. 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").
  35. Where("m.menu_type in ('M', 'C')").And("m.status = 0").OrderBy("m.parent_id").OrderBy("m.order_num").Find(&menus)
  36. if err != nil {
  37. gotool.Logs.ErrorLog().Println(err)
  38. return nil
  39. }
  40. return &menus
  41. }
  42. // GetMenusAll 查询所有菜单数据包括功能权限
  43. func (d MenuDao) GetMenusAll() *[]model.SysMenu {
  44. menus := make([]model.SysMenu, 0)
  45. session := base.GetSession().Session
  46. session.Table([]string{model.SysMenu{}.TableName(), "m"})
  47. 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").
  48. Where("m.status = 0").OrderBy("m.parent_id").OrderBy("m.order_num").Find(&menus)
  49. if err != nil {
  50. frame.Throw(frame.SQL_CODE, "菜单数据查询失败:"+err.Error())
  51. }
  52. return &menus
  53. }
  54. // GetMenusByUserId 根据用户ID查询菜单包括功能权限
  55. func (d MenuDao) GetMenusByUserId(id int64) *[]model.SysMenu {
  56. menus := make([]model.SysMenu, 0)
  57. session := base.GetSession().Session
  58. session.Table([]string{model.SysMenu{}.TableName(), "m"})
  59. 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").
  60. Join("LEFT", []string{"sys_role_menu", "rm"}, "m.id = rm.menu_id").
  61. Join("LEFT", []string{"sys_user_role", "ur"}, "rm.role_id = ur.role_id").
  62. Join("LEFT", []string{"sys_role", "ro"}, "ur.role_id = ro.id").
  63. Join("LEFT", []string{"sys_user", "u"}, "ur.user_id = u.id").Where("u.id = ?", id).
  64. And("m.status = 0").OrderBy("m.parent_id").OrderBy("m.order_num").Find(&menus)
  65. if err != nil {
  66. frame.Throw(frame.SQL_CODE, "菜单数据查询失败:"+err.Error())
  67. }
  68. return &menus
  69. }
  70. // GetMenuByUserId 根据用户ID查询菜单
  71. func (d MenuDao) GetMenuByUserId(id int64) *[]model.SysMenu {
  72. menus := make([]model.SysMenu, 0)
  73. session := base.GetSession().Session
  74. session.Table([]string{model.SysMenu{}.TableName(), "m"})
  75. 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").
  76. Join("LEFT", []string{"sys_role_menu", "rm"}, "m.id = rm.menu_id").
  77. Join("LEFT", []string{"sys_user_role", "ur"}, "rm.role_id = ur.role_id").
  78. Join("LEFT", []string{"sys_role", "ro"}, "ur.role_id = ro.id").
  79. Join("LEFT", []string{"sys_user", "u"}, "ur.user_id = u.id").Where("u.id = ?", id).
  80. And("m.menu_type in ('M', 'C')").And("m.status = 0").OrderBy("m.parent_id").OrderBy("m.order_num").Find(&menus)
  81. if err != nil {
  82. frame.Throw(frame.SQL_CODE, "菜单数据查询失败:"+err.Error())
  83. }
  84. return &menus
  85. }
  86. // GetMenuByRoleId 根据角色ID查询菜单树信息
  87. func (d MenuDao) GetMenuByRoleId(id int64, strictly bool) *[]int64 {
  88. list := make([]int64, 0)
  89. session := base.GetSession().Session
  90. session.Table([]string{"sys_menu", "m"})
  91. session.Join("LEFT", []string{"sys_role_menu", "rm"}, "m.id = rm.menu_id")
  92. session.Where("rm.role_id = ?", id)
  93. if strictly {
  94. 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)
  95. }
  96. err := session.OrderBy("m.parent_id").OrderBy("m.order_num").Cols("m.id").Find(&list)
  97. if err != nil {
  98. frame.Throw(frame.SQL_CODE, "菜单数据查询失败:"+err.Error())
  99. }
  100. return &list
  101. }
  102. // GetMenuList 查询系统菜单列表
  103. func (d MenuDao) GetMenuList(query *req.MenuQuery) []model.SysMenu {
  104. list := make([]model.SysMenu, 0)
  105. session := base.GetSession().Session
  106. session.OrderBy("parent_id").OrderBy("order_num")
  107. if gotool.StrUtils.HasNotEmpty(query.MenuName) {
  108. session.And("menu_name like concat('%', ?, '%')", query.MenuName)
  109. }
  110. if query.Visible != nil {
  111. session.And("visible = ?", query.Visible)
  112. }
  113. if gotool.StrUtils.HasNotEmpty(query.Status) {
  114. session.And("status = ?", query.Status)
  115. }
  116. if query.ParentId > 0 {
  117. session.And("parent_id = ?", query.ParentId)
  118. }
  119. if gotool.StrUtils.HasNotEmpty(query.MenuType) {
  120. session.In("menu_type", strings.Split(query.MenuType, ","))
  121. }
  122. if gotool.StrUtils.HasNotEmpty(query.Path) {
  123. session.In("path", strings.Split(query.Path, ","))
  124. }
  125. err := session.Find(&list)
  126. if err != nil {
  127. frame.Throw(frame.SQL_CODE, "菜单数据查询失败:"+err.Error())
  128. }
  129. return list
  130. }
  131. // GetMenuListByUserId 根据用户查询系统菜单列表
  132. func (d MenuDao) GetMenuListByUserId(query *req.MenuQuery) []model.SysMenu {
  133. session := base.GetSession().Session
  134. session.OrderBy("parent_id").OrderBy("order_num")
  135. list := make([]model.SysMenu, 0)
  136. session.Table([]string{"sys_menu", "m"})
  137. 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")
  138. session.Join("LEFT", []string{"sys_role_menu", "rm"}, "m.id = rm.id").
  139. Join("LEFT", []string{"sys_user_role", "ur"}, "rm.id = ur.id").
  140. Join("LEFT", []string{"sys_role", "ro"}, "ur.id = ro.id").
  141. Where("ur.id = ?", query.Id)
  142. if gotool.StrUtils.HasNotEmpty(query.MenuName) {
  143. session.And("menu_name like concat('%', ?, '%')", query.MenuName)
  144. }
  145. if query.Visible != nil {
  146. session.And("visible = ?", query.Visible)
  147. }
  148. if gotool.StrUtils.HasNotEmpty(query.Status) {
  149. session.And("status = ?", query.Status)
  150. }
  151. err := session.Find(&list)
  152. if err != nil {
  153. frame.Throw(frame.SQL_CODE, "菜单数据查询失败:"+err.Error())
  154. }
  155. return list
  156. }
  157. // GetMenuByMenuId 根据菜单ID查询信息
  158. func (d MenuDao) GetMenuByMenuId(id int64) *model.SysMenu {
  159. menu := model.SysMenu{
  160. Id: id,
  161. }
  162. _, err := base.SqlDB.NewSession().Where("id = ?", menu.Id).Get(&menu)
  163. if err != nil {
  164. frame.Throw(frame.SQL_CODE, "菜单数据查询失败:"+err.Error())
  165. }
  166. return &menu
  167. }
  168. func (d MenuDao) SelectSubMenuCount(id int64) int64 {
  169. menu := model.SysMenu{}
  170. session := base.GetSession().Session.Table("sys_menu").Where("parent_id = ?", id)
  171. count, err := session.Count(&menu)
  172. if err != nil {
  173. frame.Throw(frame.SQL_CODE, "菜单数据查询失败:"+err.Error())
  174. }
  175. return count
  176. }
  177. func (d MenuDao) GetAllPermission() *[]string {
  178. var perms []string
  179. session := base.GetSession().Session.Table([]string{"sys_menu", "m"})
  180. err := session.Cols("m.perms").Where("m.status = '0'").And("m.menu_type = 'F'").Find(&perms)
  181. if err != nil {
  182. frame.Throw(frame.SQL_CODE, "菜单数据查询失败:"+err.Error())
  183. }
  184. return &perms
  185. }