menuService.go 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. package service
  2. import (
  3. "iot_manager_service/app/system/dao"
  4. "iot_manager_service/app/system/model"
  5. "iot_manager_service/util/common"
  6. )
  7. var MenuService = new(menuService)
  8. type menuService struct{}
  9. func (s *menuService) Get(id int64) (*dao.Menu, error) {
  10. menu := &dao.Menu{
  11. ID: id,
  12. }
  13. err := menu.Get()
  14. if err != nil {
  15. return nil, err
  16. }
  17. return menu, nil
  18. }
  19. func (s *menuService) Submit(req dao.Menu) *common.Errors {
  20. role := &req
  21. if role.ID == 0 {
  22. err := role.Save()
  23. if err != nil {
  24. return common.FailResponse(err.Error(), nil)
  25. }
  26. return common.SuccessResponse(common.Succeeded, nil)
  27. }
  28. err := role.Update()
  29. if err != nil {
  30. return common.FailResponse(err.Error(), nil)
  31. }
  32. return common.SuccessResponse(common.Succeeded, nil)
  33. }
  34. func (s *menuService) GetAll() []dao.Menu {
  35. menu := &dao.Menu{}
  36. menus, err := menu.GetAll()
  37. if err != nil {
  38. return nil
  39. }
  40. return menus
  41. }
  42. func (s *menuService) Tree() ([]model.MenuRouteDetail, error) {
  43. allMenus := s.GetAll()
  44. var rsp []model.MenuRouteDetail
  45. //上级角色——多个下级角色数组
  46. tmp := make(map[int64][]dao.Menu)
  47. for _, menu := range allMenus {
  48. childes, isExist := tmp[menu.ParentId]
  49. if isExist {
  50. childes = append(childes, menu)
  51. tmp[menu.ParentId] = childes
  52. } else {
  53. tmp[menu.ParentId] = []dao.Menu{menu}
  54. }
  55. }
  56. if len(tmp) == 0 {
  57. return nil, nil
  58. }
  59. roots, _ := tmp[0]
  60. rsp = menuDfs(rsp, roots, tmp)
  61. return rsp, nil
  62. }
  63. func (s *menuService) Routes(roleId int64) ([]model.MenuRouteDetail, error) {
  64. allMenus := s.GetAll()
  65. menuMap := make(map[int64]dao.Menu)
  66. for _, menu := range allMenus {
  67. menuMap[menu.ID] = menu
  68. }
  69. roleMenus := RoleMenuService.GetMenuByRole(roleId)
  70. var rsp []model.MenuRouteDetail
  71. //上级角色——多个下级角色数组
  72. tmp := make(map[int64][]dao.Menu)
  73. for _, roleMenu := range roleMenus {
  74. if menu, isExist := menuMap[roleMenu.MenuId]; isExist {
  75. childes, isExist := tmp[menu.ParentId]
  76. if isExist {
  77. childes = append(childes, menu)
  78. tmp[menu.ParentId] = childes
  79. } else {
  80. tmp[menu.ParentId] = []dao.Menu{menu}
  81. }
  82. }
  83. }
  84. if len(tmp) == 0 {
  85. return nil, nil
  86. }
  87. roots, _ := tmp[0]
  88. rsp = menuDfs(rsp, roots, tmp)
  89. return rsp, nil
  90. }
  91. func menuDfs(result []model.MenuRouteDetail, menus []dao.Menu, tmp map[int64][]dao.Menu) []model.MenuRouteDetail {
  92. if len(menus) == 0 {
  93. return nil
  94. }
  95. for _, child := range menus {
  96. detail := model.MenuRouteDetail{}
  97. detail.Menu = child
  98. childes, isExist := tmp[child.ID]
  99. if isExist {
  100. detail.HasChildren = true
  101. detail.Children = menuDfs([]model.MenuRouteDetail{}, childes, tmp)
  102. result = append(result, detail)
  103. } else {
  104. detail.HasChildren = false
  105. result = append(result, detail)
  106. }
  107. }
  108. return result
  109. }
  110. func (s *menuService) LazyList(parentId int64, name, code, alias string) ([]model.MenuLazyListDetail, error) {
  111. menu := &dao.Menu{
  112. ParentId: parentId,
  113. Name: name,
  114. Code: code,
  115. Alias: alias,
  116. }
  117. menus, err := menu.GetByParentId()
  118. if err != nil {
  119. return nil, err
  120. }
  121. var parentIds []int64
  122. for _, m := range menus {
  123. parentIds = append(parentIds, m.ID)
  124. }
  125. hasChildrenMap, err := menu.HasChildren(parentIds)
  126. if err != nil {
  127. return nil, err
  128. }
  129. var rsp []model.MenuLazyListDetail
  130. for _, m := range menus {
  131. hasChildren := hasChildrenMap[m.ID]
  132. rsp = append(rsp, model.MenuLazyListDetail{
  133. Menu: m,
  134. HasChildren: hasChildren,
  135. })
  136. }
  137. return rsp, nil
  138. }