This commit is contained in:
2025-06-06 14:31:58 +08:00
parent 38ee553cf3
commit 96d537c044
20 changed files with 412 additions and 421 deletions

View File

@@ -5,25 +5,24 @@ import (
"encoding/json"
"strconv"
"strings"
"time"
"management/internal/erpserver/model/dto"
"management/internal/erpserver/model/system"
"management/internal/erpserver/model/view"
"management/internal/erpserver/service"
v1 "management/internal/erpserver/service/v1"
"management/internal/erpserver/service/util"
"management/internal/erpserver/service/v1"
"management/internal/pkg/know"
)
type menuService struct {
*service.Service
*v1.Service
repo system.MenuRepository
roleService v1.RoleService
roleMenuService v1.RoleMenuService
}
func NewMenuService(
service *service.Service,
service *v1.Service,
repo system.MenuRepository,
roleService v1.RoleService,
roleMenuService v1.RoleMenuService,
@@ -53,27 +52,12 @@ func (s *menuService) GetByUrl(ctx context.Context, url string) (*system.Menu, e
}
func (s *menuService) All(ctx context.Context) ([]*system.Menu, error) {
var res []*system.Menu
key := know.GetManageKey(ctx, know.AllMenus)
b, err := s.Redis.GetBytes(ctx, key)
if err == nil {
var res []*system.Menu
if err := json.Unmarshal(b, &res); err == nil {
return res, nil
}
}
res, err := s.repo.All(ctx)
if err != nil {
return nil, err
}
b, err = json.Marshal(res)
if err != nil {
return nil, err
}
_ = s.Redis.Set(ctx, key, b, time.Hour*6)
return res, nil
err := util.GetOrSetCache(ctx, s.Redis, key, util.GetCacheExpire(), func() (any, error) {
return s.repo.All(ctx)
}, &res)
return res, err
}
func (s *menuService) ListMenuTree(ctx context.Context) ([]*view.MenuTree, error) {
@@ -111,7 +95,7 @@ func (s *menuService) SetListByRoleID(ctx context.Context, roleID int32) ([]*dto
return nil, err
}
_ = s.Redis.Set(ctx, key, b, time.Hour*6)
_ = s.Redis.Set(ctx, key, b, util.GetCacheExpire())
return res, nil
}
@@ -141,7 +125,7 @@ func (s *menuService) SetListByRoleIDToMap(ctx context.Context, roleID int32) (m
return nil, err
}
_ = s.Redis.Set(ctx, key, b, time.Hour*6)
_ = s.Redis.Set(ctx, key, b, util.GetCacheExpire())
return res, nil
}
@@ -172,7 +156,7 @@ func (s *menuService) SetOwerMenus(ctx context.Context, roleID int32) ([]*dto.Me
return nil, err
}
_ = s.Redis.Set(ctx, key, b, time.Hour*6)
_ = s.Redis.Set(ctx, key, b, util.GetCacheExpire())
return res, nil
}
@@ -206,19 +190,12 @@ func (s *menuService) SetRoleMenu(ctx context.Context, roleID int32, rms []*syst
}
func (s *menuService) RefreshCache(ctx context.Context) error {
var res []*system.Menu
key := know.GetManageKey(ctx, know.AllMenus)
res, err := s.All(ctx)
if err != nil {
return err
getData := func() (any, error) {
return s.repo.All(ctx)
}
b, err := json.Marshal(res)
if err != nil {
return err
}
_ = s.Redis.Set(ctx, key, b, time.Hour*6)
return nil
return util.GetOrSetCache(ctx, s.Redis, key, util.GetCacheExpire(), getData, &res)
}
func (s *menuService) RebuildParentPath(ctx context.Context) error {
@@ -303,15 +280,28 @@ func (s *menuService) toXmSelectTree(parentId int32, data []*system.Menu) []*vie
}
func findMenu(rms []*system.RoleMenu, ms []*system.Menu) []*system.Menu {
menuMap := make(map[int32]*system.Menu)
for _, m := range ms {
menuMap[m.ID] = m
}
var res []*system.Menu
for _, rm := range rms {
for _, m := range ms {
if rm.MenuID == m.ID {
res = append(res, m)
}
if m, ok := menuMap[rm.MenuID]; ok {
res = append(res, m)
}
}
return res
//var res []*system.Menu
//for _, rm := range rms {
// for _, m := range ms {
// if rm.MenuID == m.ID {
// res = append(res, m)
// }
// }
//}
//return res
}
func toOwnerMenuDto(ms []*system.Menu) []*dto.OwnerMenuDto {