sys_auth_rule.go 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. /*
  2. * @desc:菜单处理
  3. * @company:云南奇讯科技有限公司
  4. * @Author: yixiaohu
  5. * @Date: 2022/3/11 15:07
  6. */
  7. package service
  8. import (
  9. "context"
  10. "github.com/gogf/gf/v2/frame/g"
  11. "github.com/gogf/gf/v2/util/gconv"
  12. "github.com/tiger1103/gfast/v3/api/v1/system"
  13. "github.com/tiger1103/gfast/v3/internal/app/common/service"
  14. "github.com/tiger1103/gfast/v3/internal/app/system/consts"
  15. "github.com/tiger1103/gfast/v3/internal/app/system/model"
  16. "github.com/tiger1103/gfast/v3/internal/app/system/service/internal/dao"
  17. "github.com/tiger1103/gfast/v3/library/liberr"
  18. )
  19. type IRule interface {
  20. GetIsMenuStatusList(ctx context.Context) ([]*model.SysAuthRuleInfoRes, error)
  21. GetMenuList(ctx context.Context) (list []*model.SysAuthRuleInfoRes, err error)
  22. GetIsButtonStatusList(ctx context.Context) ([]*model.SysAuthRuleInfoRes, error)
  23. Add(ctx context.Context, req *system.RuleAddReq) (err error)
  24. }
  25. type ruleImpl struct {
  26. }
  27. var rule = ruleImpl{}
  28. func Rule() IRule {
  29. return IRule(&rule)
  30. }
  31. // GetIsMenuStatusList 获取isMenu=0|1且status=1的菜单列表
  32. func (s *ruleImpl) GetIsMenuStatusList(ctx context.Context) ([]*model.SysAuthRuleInfoRes, error) {
  33. list, err := s.GetMenuList(ctx)
  34. if err != nil {
  35. return nil, err
  36. }
  37. var gList = make([]*model.SysAuthRuleInfoRes, 0, len(list))
  38. for _, v := range list {
  39. if (v.MenuType == 0 || v.MenuType == 1) && v.Status == 1 {
  40. gList = append(gList, v)
  41. }
  42. }
  43. return gList, nil
  44. }
  45. // GetMenuList 获取所有菜单
  46. func (s *ruleImpl) GetMenuList(ctx context.Context) (list []*model.SysAuthRuleInfoRes, err error) {
  47. cache := service.Cache(ctx)
  48. //从缓存获取
  49. iList := cache.GetOrSetFuncLock(ctx, consts.CacheSysAuthMenu, s.getMenuListFromDb, 0, consts.CacheSysAuthTag)
  50. if iList != nil {
  51. err = gconv.Struct(iList, &list)
  52. }
  53. return
  54. }
  55. // 从数据库获取所有菜单
  56. func (s *ruleImpl) getMenuListFromDb(ctx context.Context) (value interface{}, err error) {
  57. err = g.Try(func() {
  58. var v []*model.SysAuthRuleInfoRes
  59. //从数据库获取
  60. err = dao.SysAuthRule.Ctx(ctx).
  61. Fields(model.SysAuthRuleInfoRes{}).Order("weigh desc,id asc").Scan(&v)
  62. liberr.ErrIsNil(ctx, err, "获取菜单数据失败")
  63. value = v
  64. })
  65. return
  66. }
  67. // GetIsButtonStatusList 获取所有按钮isMenu=2 且status=1的菜单列表
  68. func (s *ruleImpl) GetIsButtonStatusList(ctx context.Context) ([]*model.SysAuthRuleInfoRes, error) {
  69. list, err := s.GetMenuList(ctx)
  70. if err != nil {
  71. return nil, err
  72. }
  73. var gList = make([]*model.SysAuthRuleInfoRes, 0, len(list))
  74. for _, v := range list {
  75. if v.MenuType == 2 && v.Status == 1 {
  76. gList = append(gList, v)
  77. }
  78. }
  79. return gList, nil
  80. }
  81. // Add 添加菜单
  82. func (s *ruleImpl) Add(ctx context.Context, req *system.RuleAddReq) (err error) {
  83. err = g.Try(func() {
  84. _, err = dao.SysAuthRule.Ctx(ctx).Insert(req)
  85. liberr.ErrIsNil(ctx, err, "添加菜单失败")
  86. })
  87. return
  88. }