admin_backend/model/User.go
hahwu ddae026231 ab test and notification
Co-authored-by: Copilot <copilot@github.com>
2026-04-24 17:23:55 +08:00

99 lines
3.5 KiB
Go

package model
import (
"backend/client"
"backend/msg"
util "backend/util"
"fmt"
)
func GetUserList(AppId, ServerId, PageSize, CurrentPage, Uid, StartTime, EndTime int, Nickname, Username, DeviceId string) ([]*User, int, error) {
App, err := util.GetAppConfig(AppId)
if err != nil {
return nil, 0, err
}
db := util.MPool.GetMysqlDB(App, ServerId)
defer db.Close()
if db == nil || db.DB == nil {
return nil, 0, fmt.Errorf("failed to get MySQL database")
}
users := []*User{}
if Uid != 0 {
err = db.Select(&users, "SELECT `dwUin`, `energy`, `star`, `diamond`, `level`, `exp`, `login_time`, `logout_time`, `user_name`, `nick_name`, `node` FROM t_player_baseinfo WHERE dwUin = ? ", Uid)
} else {
err = db.Select(&users, "SELECT `dwUin`, `energy`, `star`, `diamond`, `level`, `exp`, `login_time`, `logout_time`, `user_name`, `nick_name`, `node` FROM t_player_baseinfo WHERE `login_time` >= ? and `login_time` <= ? Order by login_time desc limit ?, ?", StartTime, EndTime, (CurrentPage-1)*PageSize, PageSize)
}
if err != nil {
return nil, 0, fmt.Errorf("failed to get user list: %v", err)
}
if Nickname != "" {
err = db.Select(&users, "SELECT `dwUin`, `energy`, `star`, `diamond`, `level`, `exp`, `login_time`, `logout_time`, `user_name`, `nick_name`, `node` FROM t_player_baseinfo WHERE `nick_name` LIKE ? ", "%"+Nickname+"%")
}
if Username != "" {
err = db.Select(&users, "SELECT `dwUin`, `energy`, `star`, `diamond`, `level`, `exp`, `login_time`, `logout_time`, `user_name`, `nick_name`, `node` FROM t_player_baseinfo WHERE `user_name` LIKE ? ", "%"+Username+"%")
}
if DeviceId != "" {
var username string
db.Get(&username, "select `user_name` from t_account where device_id = ?", DeviceId)
if username != "" {
err = db.Select(&users, "SELECT `dwUin`, `energy`, `star`, `diamond`, `level`, `exp`, `login_time`, `logout_time`, `user_name`, `nick_name`, `node` FROM t_player_baseinfo WHERE `user_name` = ? ", username)
}
}
var total int
err = db.QueryRow("SELECT COUNT(*) FROM t_player_baseinfo WHERE `login_time` >= ? and `login_time` <= ?", StartTime, EndTime).Scan(&total)
if err != nil {
return nil, 0, fmt.Errorf("failed to get user count: %v", err)
}
for _, user := range users {
if user.LoginTime > user.LogoutTime {
user.Online = "在线"
} else {
user.Online = "离线"
}
}
return users, total, nil
}
func UserDetail2(appId, uid, node int) (*msg.ResUserDetailInfo, error) {
r, err := client.UserDetail(appId, node, &msg.UserDetailParam{
Uid: int64(uid),
})
if err != nil {
return nil, fmt.Errorf("failed to send admin message: %v", err)
}
return r, nil
}
func UserGM(AppId, ServerId, Uid int, Command string) (interface{}, error) {
req := &msg.ReqAdminGm{
Uid: int64(Uid),
Command: Command,
}
App, err := util.GetAppConfig(AppId)
db := util.MPool.GetMysqlDB(App, 1)
defer db.Close()
node := 0
err = db.Get(&node, "SELECT `node` FROM t_player_baseinfo WHERE dwUin = ? ", Uid)
resp, err := client.PlayerGm(AppId, node, req)
if err != nil {
return nil, fmt.Errorf("failed to send admin message: %v", err)
}
return resp, nil
}
func UserBan(AppId, ServerId, Uid int, Day int, Reason string) (interface{}, error) {
Now := util.Now()
req := &msg.ReqAdminBan{
Uid: int64(Uid),
Time: Now + int64(Day*24*3600),
Reason: Reason,
}
AppId, ServerId = util.ParseUid(Uid)
resp, err := client.BanPlayer(AppId, ServerId, req)
if err != nil {
return nil, fmt.Errorf("failed to send admin message: %v", err)
}
return resp, nil
}