package logic import ( "admin/internal/dao" "context" "admin/admin" "admin/internal/svc" jsoniter "github.com/json-iterator/go" "github.com/zeromicro/go-zero/core/logx" "pkg.local/redis" "pkg.local/utils" ) type LoginItemsLogic struct { ctx context.Context svcCtx *svc.ServiceContext logx.Logger BaseLogic } func NewLoginItemsLogic(ctx context.Context, svcCtx *svc.ServiceContext) *LoginItemsLogic { return &LoginItemsLogic{ ctx: ctx, svcCtx: svcCtx, Logger: logx.WithContext(ctx), } } func (l *LoginItemsLogic) LoginItems(in *admin.AdminEmptyRequest) (*admin.Response, error) { var items utils.LoginRedis var info dao.JwtInfo var infos []dao.JwtInfo cursor := uint64(0) match := utils.GetLoginKeysKey(utils.LoginTypeAdmin, "*") count := int64(100000) scanKeys, _, err := redis.Client.Scan(l.ctx, cursor, match, count).Result() if err != nil { l.Logger.Error(err) return l.out(utils.Fail, "获取登录信息失败") } for _, scanKey := range scanKeys { json, err := redis.Client.Get(l.ctx, scanKey).Result() if err != nil { l.Logger.Error(err) return l.out(utils.Fail, "获取登录信息失败") } err = jsoniter.Unmarshal([]byte(json), &items) if err != nil { l.Logger.Error(err) return l.fail(utils.ErrorJsonDataError) } err = jsoniter.Unmarshal(items.Info, &info) if err != nil { l.Logger.Error(err) return l.fail(utils.ErrorJsonDataError) } infos = append(infos, dao.JwtInfo{ Id: info.Id, Phone: info.Phone, Name: info.Name, Avatar: info.Avatar, Email: info.Email, LastTime: info.LastTime, }) } return l.ok(infos) }