menuService.go 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. package service
  2. import (
  3. "iot_manager_service/app/system/dao"
  4. "iot_manager_service/app/system/model"
  5. "iot_manager_service/util"
  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) *util.Errors {
  20. role := &req
  21. if role.ID == 0 {
  22. err := role.Save()
  23. if err != nil {
  24. return util.FailResponse(err.Error(), nil)
  25. }
  26. return util.SuccessResponse(util.Succeeded, nil)
  27. }
  28. err := role.Update()
  29. if err != nil {
  30. return util.FailResponse(err.Error(), nil)
  31. }
  32. return util.SuccessResponse(util.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) Routes(roleId int64) (*model.RsqMenuRoutes, error) {
  43. allMenus := MenuService.GetAll()
  44. menuMap := make(map[int64]dao.Menu)
  45. for _, menu := range allMenus {
  46. menuMap[menu.ID] = menu
  47. }
  48. roleMenus := RoleMenuService.GetMenuByRole(roleId)
  49. rsp := &model.RsqMenuRoutes{}
  50. //上级角色——多个下级角色数组
  51. tmp := make(map[int64][]dao.Menu)
  52. for _, roleMenu := range roleMenus {
  53. if menu, isExist := menuMap[roleMenu.MenuId]; isExist {
  54. childes, isExist := tmp[menu.ParentId]
  55. if isExist {
  56. childes = append(childes, menu)
  57. tmp[menu.ParentId] = childes
  58. } else {
  59. tmp[menu.ParentId] = []dao.Menu{menu}
  60. }
  61. }
  62. }
  63. if len(tmp) == 0 {
  64. return nil, nil
  65. }
  66. roots, _ := tmp[0]
  67. rsp.MenuRouteDetails = menuDfs(rsp.MenuRouteDetails, roots, tmp)
  68. return rsp, nil
  69. }
  70. func menuDfs(result []model.MenuRouteDetail, menus []dao.Menu, tmp map[int64][]dao.Menu) []model.MenuRouteDetail {
  71. if len(menus) == 0 {
  72. return nil
  73. }
  74. for _, child := range menus {
  75. detail := model.MenuRouteDetail{}
  76. detail.Menu = child
  77. childes, isExist := tmp[child.ID]
  78. if isExist {
  79. detail.HasChildren = true
  80. detail.Children = menuDfs([]model.MenuRouteDetail{}, childes, tmp)
  81. result = append(result, detail)
  82. } else {
  83. detail.HasChildren = false
  84. result = append(result, detail)
  85. }
  86. }
  87. return result
  88. }