添加门店管理员获取信息接口、调整微信登录账号生成逻辑
This commit is contained in:
15
api/storeAdmin/storeAdmin.go
Normal file
15
api/storeAdmin/storeAdmin.go
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
// =================================================================================
|
||||||
|
// Code generated and maintained by GoFrame CLI tool. DO NOT EDIT.
|
||||||
|
// =================================================================================
|
||||||
|
|
||||||
|
package storeAdmin
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
|
||||||
|
"server/api/storeAdmin/v1"
|
||||||
|
)
|
||||||
|
|
||||||
|
type IStoreAdminV1 interface {
|
||||||
|
Info(ctx context.Context, req *v1.InfoReq) (res *v1.InfoRes, err error)
|
||||||
|
}
|
||||||
12
api/storeAdmin/v1/storeAdmin.go
Normal file
12
api/storeAdmin/v1/storeAdmin.go
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
package v1
|
||||||
|
|
||||||
|
import "github.com/gogf/gf/v2/frame/g"
|
||||||
|
|
||||||
|
type InfoReq struct {
|
||||||
|
g.Meta `path:"/store/info" method:"get" tags:"StoreAdmin" summary:"(门店管理员)获取门店管理员信息"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type InfoRes struct {
|
||||||
|
Id int64 `json:"id"`
|
||||||
|
Username string `json:"username"`
|
||||||
|
}
|
||||||
@ -1 +1,5 @@
|
|||||||
package consts
|
package consts
|
||||||
|
|
||||||
|
const (
|
||||||
|
DefaultPassword = "Aa123456"
|
||||||
|
)
|
||||||
|
|||||||
@ -10,3 +10,8 @@ const (
|
|||||||
GameLifeUserKey = "gamelife:user:%s"
|
GameLifeUserKey = "gamelife:user:%s"
|
||||||
GameLifeUserExpire = 2 * 60 * 60
|
GameLifeUserExpire = 2 * 60 * 60
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
WeChatLoginCache = "wx:login:cache:%s"
|
||||||
|
WeChatLoginLimit = "wx:login:limit:%s"
|
||||||
|
)
|
||||||
|
|||||||
5
internal/controller/storeAdmin/storeAdmin.go
Normal file
5
internal/controller/storeAdmin/storeAdmin.go
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
// =================================================================================
|
||||||
|
// This is auto-generated by GoFrame CLI tool only once. Fill this file as you wish.
|
||||||
|
// =================================================================================
|
||||||
|
|
||||||
|
package storeAdmin
|
||||||
15
internal/controller/storeAdmin/storeAdmin_new.go
Normal file
15
internal/controller/storeAdmin/storeAdmin_new.go
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
// =================================================================================
|
||||||
|
// This is auto-generated by GoFrame CLI tool only once. Fill this file as you wish.
|
||||||
|
// =================================================================================
|
||||||
|
|
||||||
|
package storeAdmin
|
||||||
|
|
||||||
|
import (
|
||||||
|
"server/api/storeAdmin"
|
||||||
|
)
|
||||||
|
|
||||||
|
type ControllerV1 struct{}
|
||||||
|
|
||||||
|
func NewV1() storeAdmin.IStoreAdminV1 {
|
||||||
|
return &ControllerV1{}
|
||||||
|
}
|
||||||
14
internal/controller/storeAdmin/storeAdmin_v1_info.go
Normal file
14
internal/controller/storeAdmin/storeAdmin_v1_info.go
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
package storeAdmin
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
|
||||||
|
"github.com/gogf/gf/v2/errors/gcode"
|
||||||
|
"github.com/gogf/gf/v2/errors/gerror"
|
||||||
|
|
||||||
|
"server/api/storeAdmin/v1"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (c *ControllerV1) Info(ctx context.Context, req *v1.InfoReq) (res *v1.InfoRes, err error) {
|
||||||
|
return nil, gerror.NewCode(gcode.CodeNotImplemented)
|
||||||
|
}
|
||||||
@ -4,6 +4,7 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
v1 "server/api/wx/v1"
|
v1 "server/api/wx/v1"
|
||||||
|
"server/internal/consts"
|
||||||
"server/internal/model"
|
"server/internal/model"
|
||||||
"server/internal/service"
|
"server/internal/service"
|
||||||
"strings"
|
"strings"
|
||||||
@ -50,7 +51,7 @@ func (c *ControllerV1) WeChatEvent(ctx context.Context, req *v1.WeChatEventReq)
|
|||||||
}
|
}
|
||||||
|
|
||||||
func updateLoginCache(ctx context.Context, key string, token string) error {
|
func updateLoginCache(ctx context.Context, key string, token string) error {
|
||||||
loginCacheKey := fmt.Sprintf("wx:login:cache:%s", key)
|
loginCacheKey := fmt.Sprintf(consts.WeChatLoginCache, key)
|
||||||
glog.Infof(ctx, "【微信事件】准备更新登录缓存 | redisKey=%s, token=%s", loginCacheKey, token)
|
glog.Infof(ctx, "【微信事件】准备更新登录缓存 | redisKey=%s, token=%s", loginCacheKey, token)
|
||||||
|
|
||||||
// 获取原缓存
|
// 获取原缓存
|
||||||
|
|||||||
@ -8,6 +8,7 @@ import (
|
|||||||
"io"
|
"io"
|
||||||
"os"
|
"os"
|
||||||
v1 "server/api/wx/v1"
|
v1 "server/api/wx/v1"
|
||||||
|
"server/internal/consts"
|
||||||
"server/internal/model"
|
"server/internal/model"
|
||||||
"server/utility/ecode"
|
"server/utility/ecode"
|
||||||
"server/utility/wechat"
|
"server/utility/wechat"
|
||||||
@ -18,7 +19,7 @@ import (
|
|||||||
|
|
||||||
func (c *ControllerV1) WeChatLogin(ctx context.Context, req *v1.WeChatLoginReq) (res *v1.WeChatLoginRes, err error) {
|
func (c *ControllerV1) WeChatLogin(ctx context.Context, req *v1.WeChatLoginReq) (res *v1.WeChatLoginRes, err error) {
|
||||||
glog.Infof(ctx, "收到微信登录请求,SceneId: %s", req.SceneId)
|
glog.Infof(ctx, "收到微信登录请求,SceneId: %s", req.SceneId)
|
||||||
loginLimitKey := fmt.Sprintf("wx:login:limit:%s", req.SceneId)
|
loginLimitKey := fmt.Sprintf(consts.WeChatLoginLimit, req.SceneId)
|
||||||
|
|
||||||
// 检查登录限制
|
// 检查登录限制
|
||||||
va, err := g.Redis().Get(ctx, loginLimitKey)
|
va, err := g.Redis().Get(ctx, loginLimitKey)
|
||||||
@ -77,7 +78,7 @@ func (c *ControllerV1) WeChatLogin(ctx context.Context, req *v1.WeChatLoginReq)
|
|||||||
|
|
||||||
data, err := json.Marshal(loginCache)
|
data, err := json.Marshal(loginCache)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
_ = g.Redis().SetEX(ctx, fmt.Sprintf("wx:login:cache:%s", req.SceneId), data, 60)
|
_ = g.Redis().SetEX(ctx, fmt.Sprintf(consts.WeChatLoginCache, req.SceneId), data, 60)
|
||||||
glog.Infof(ctx, "SceneId %s 登录缓存已写入 Redis", req.SceneId)
|
glog.Infof(ctx, "SceneId %s 登录缓存已写入 Redis", req.SceneId)
|
||||||
} else {
|
} else {
|
||||||
glog.Warningf(ctx, "SceneId %s登录缓存序列化失败: %v", req.SceneId, err)
|
glog.Warningf(ctx, "SceneId %s登录缓存序列化失败: %v", req.SceneId, err)
|
||||||
|
|||||||
@ -5,6 +5,7 @@ import (
|
|||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
v1 "server/api/wx/v1"
|
v1 "server/api/wx/v1"
|
||||||
|
"server/internal/consts"
|
||||||
"server/internal/model"
|
"server/internal/model"
|
||||||
"server/utility/ecode"
|
"server/utility/ecode"
|
||||||
|
|
||||||
@ -13,7 +14,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func (c *ControllerV1) WeChatPolling(ctx context.Context, req *v1.WeChatPollingReq) (res *v1.WeChatPollingRes, err error) {
|
func (c *ControllerV1) WeChatPolling(ctx context.Context, req *v1.WeChatPollingReq) (res *v1.WeChatPollingRes, err error) {
|
||||||
loginCacheKey := fmt.Sprintf("wx:login:cache:%s", req.SceneId)
|
loginCacheKey := fmt.Sprintf(consts.WeChatLoginCache, req.SceneId)
|
||||||
glog.Infof(ctx, "开始处理微信长轮询请求,SceneID: %s", req.SceneId)
|
glog.Infof(ctx, "开始处理微信长轮询请求,SceneID: %s", req.SceneId)
|
||||||
|
|
||||||
var loginCache model.LoginCache
|
var loginCache model.LoginCache
|
||||||
|
|||||||
@ -11,7 +11,9 @@ import (
|
|||||||
"server/internal/model/do"
|
"server/internal/model/do"
|
||||||
"server/internal/model/entity"
|
"server/internal/model/entity"
|
||||||
"server/internal/service"
|
"server/internal/service"
|
||||||
|
"server/utility"
|
||||||
"server/utility/ecode"
|
"server/utility/ecode"
|
||||||
|
"server/utility/encrypt"
|
||||||
"server/utility/gamelife"
|
"server/utility/gamelife"
|
||||||
"server/utility/jwt"
|
"server/utility/jwt"
|
||||||
|
|
||||||
@ -63,10 +65,34 @@ func (s *sUser) Login(ctx context.Context, in *model.UserLoginIn) (out *model.Us
|
|||||||
var userId int64
|
var userId int64
|
||||||
if !exist {
|
if !exist {
|
||||||
// 用户不存在,创建新用户
|
// 用户不存在,创建新用户
|
||||||
|
// 生成 username: qy_ + 8位随机字母数字
|
||||||
|
var username string
|
||||||
|
for {
|
||||||
|
randomStr := grand.Str("abcdefghijklmnopqrstuvwxyz0123456789", 8)
|
||||||
|
username = "qy_" + randomStr
|
||||||
|
// 检查 username 是否唯一
|
||||||
|
count, err := dao.Users.Ctx(ctx).Where(do.Users{Username: username}).Count()
|
||||||
|
if err != nil {
|
||||||
|
return nil, ecode.Fail.Sub("检查用户名失败")
|
||||||
|
}
|
||||||
|
if count == 0 {
|
||||||
|
break // username 唯一,退出循环
|
||||||
|
}
|
||||||
|
}
|
||||||
|
password, err := encrypt.EncryptPassword(consts.DefaultPassword)
|
||||||
|
if err != nil {
|
||||||
|
return nil, ecode.Fail.Sub("加密密码失败")
|
||||||
|
}
|
||||||
user := &entity.Users{
|
user := &entity.Users{
|
||||||
WxOpenId: in.OpenId,
|
WxOpenId: in.OpenId,
|
||||||
Username: grand.Digits(10),
|
Username: username,
|
||||||
|
Nickname: username,
|
||||||
|
PasswordHash: password,
|
||||||
|
Avatar: "adssssssssssssss", // FIXME 后续替换成默认头像的 oss 链接
|
||||||
FirstVisitAt: gtime.Now(),
|
FirstVisitAt: gtime.Now(),
|
||||||
|
LastLoginAt: gtime.Now(),
|
||||||
|
WxPopenId: utility.GenerateUserID("WX"),
|
||||||
|
QqPopenId: utility.GenerateUserID("QQ"),
|
||||||
}
|
}
|
||||||
result, err := dao.Users.Ctx(ctx).Insert(user)
|
result, err := dao.Users.Ctx(ctx).Insert(user)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
Reference in New Issue
Block a user