添加门店管理员获取信息接口、调整微信登录账号生成逻辑

This commit is contained in:
2025-06-11 16:47:34 +08:00
parent 427df4a3bf
commit 1e94848f8d
11 changed files with 104 additions and 5 deletions

View 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)
}

View 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"`
}

View File

@ -1 +1,5 @@
package consts
const (
DefaultPassword = "Aa123456"
)

View File

@ -10,3 +10,8 @@ const (
GameLifeUserKey = "gamelife:user:%s"
GameLifeUserExpire = 2 * 60 * 60
)
const (
WeChatLoginCache = "wx:login:cache:%s"
WeChatLoginLimit = "wx:login:limit:%s"
)

View File

@ -0,0 +1,5 @@
// =================================================================================
// This is auto-generated by GoFrame CLI tool only once. Fill this file as you wish.
// =================================================================================
package storeAdmin

View 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{}
}

View 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)
}

View File

@ -4,6 +4,7 @@ import (
"context"
"fmt"
v1 "server/api/wx/v1"
"server/internal/consts"
"server/internal/model"
"server/internal/service"
"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 {
loginCacheKey := fmt.Sprintf("wx:login:cache:%s", key)
loginCacheKey := fmt.Sprintf(consts.WeChatLoginCache, key)
glog.Infof(ctx, "【微信事件】准备更新登录缓存 | redisKey=%s, token=%s", loginCacheKey, token)
// 获取原缓存

View File

@ -8,6 +8,7 @@ import (
"io"
"os"
v1 "server/api/wx/v1"
"server/internal/consts"
"server/internal/model"
"server/utility/ecode"
"server/utility/wechat"
@ -18,7 +19,7 @@ import (
func (c *ControllerV1) WeChatLogin(ctx context.Context, req *v1.WeChatLoginReq) (res *v1.WeChatLoginRes, err error) {
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)
@ -77,7 +78,7 @@ func (c *ControllerV1) WeChatLogin(ctx context.Context, req *v1.WeChatLoginReq)
data, err := json.Marshal(loginCache)
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)
} else {
glog.Warningf(ctx, "SceneId %s登录缓存序列化失败: %v", req.SceneId, err)

View File

@ -5,6 +5,7 @@ import (
"encoding/json"
"fmt"
v1 "server/api/wx/v1"
"server/internal/consts"
"server/internal/model"
"server/utility/ecode"
@ -13,7 +14,7 @@ import (
)
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)
var loginCache model.LoginCache

View File

@ -11,7 +11,9 @@ import (
"server/internal/model/do"
"server/internal/model/entity"
"server/internal/service"
"server/utility"
"server/utility/ecode"
"server/utility/encrypt"
"server/utility/gamelife"
"server/utility/jwt"
@ -63,10 +65,34 @@ func (s *sUser) Login(ctx context.Context, in *model.UserLoginIn) (out *model.Us
var userId int64
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{
WxOpenId: in.OpenId,
Username: grand.Digits(10),
Username: username,
Nickname: username,
PasswordHash: password,
Avatar: "adssssssssssssss", // FIXME 后续替换成默认头像的 oss 链接
FirstVisitAt: gtime.Now(),
LastLoginAt: gtime.Now(),
WxPopenId: utility.GenerateUserID("WX"),
QqPopenId: utility.GenerateUserID("QQ"),
}
result, err := dao.Users.Ctx(ctx).Insert(user)
if err != nil {