99 lines
3.5 KiB
Go
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
|
|
}
|