You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
218 lines
6.5 KiB
218 lines
6.5 KiB
|
1 year ago
|
package guser
|
||
|
|
|
||
|
|
import (
|
||
|
|
"fmt"
|
||
|
|
"server/db"
|
||
|
|
"server/modules/backend/app"
|
||
|
|
"server/modules/backend/models"
|
||
|
|
utils "server/modules/backend/util"
|
||
|
|
"server/modules/backend/values"
|
||
|
|
"server/util"
|
||
|
|
|
||
|
|
"github.com/gin-gonic/gin"
|
||
|
|
"github.com/liangdas/mqant/log"
|
||
|
|
)
|
||
|
|
|
||
|
|
func GetGameUserList(c *gin.Context) {
|
||
|
|
a := app.NewApp(c)
|
||
|
|
defer func() {
|
||
|
|
a.Response()
|
||
|
|
}()
|
||
|
|
req := new(values.GetGameUserListReq)
|
||
|
|
if !a.S(req) {
|
||
|
|
return
|
||
|
|
}
|
||
|
|
su, eu := utils.GetQueryUnix(req.Start, req.End)
|
||
|
|
var userSql, shareInfoSql, vipSql, rechargeInfoSql, cashSql []string
|
||
|
|
userSql = append(userSql, fmt.Sprintf("birth >= %d", su), fmt.Sprintf("birth < %d", eu))
|
||
|
|
if req.UID > 0 {
|
||
|
|
userSql = append(userSql, fmt.Sprintf("id = %d", req.UID))
|
||
|
|
}
|
||
|
|
if req.Channel > 0 {
|
||
|
|
userSql = append(userSql, fmt.Sprintf("channel_id = %d", req.Channel))
|
||
|
|
}
|
||
|
|
if req.Country != "" {
|
||
|
|
userSql = append(userSql, fmt.Sprintf("country = %s", req.Country))
|
||
|
|
}
|
||
|
|
if req.Phone != "" {
|
||
|
|
userSql = append(userSql, fmt.Sprintf("mobile = %s", req.Phone))
|
||
|
|
}
|
||
|
|
if req.Status > 0 {
|
||
|
|
userSql = append(userSql, fmt.Sprintf("status = %d", req.Status))
|
||
|
|
}
|
||
|
|
if req.Platform > 0 {
|
||
|
|
userSql = append(userSql, fmt.Sprintf("platform = %d", req.Platform))
|
||
|
|
}
|
||
|
|
if req.Online > 0 {
|
||
|
|
userSql = append(userSql, fmt.Sprintf("online = %d", req.Online))
|
||
|
|
}
|
||
|
|
if len(req.LastLogin) > 0 {
|
||
|
|
userSql = append(userSql, fmt.Sprintf("last_login >= %d", req.LastLogin[0]))
|
||
|
|
if len(req.LastLogin) > 1 {
|
||
|
|
userSql = append(userSql, fmt.Sprintf("last_login < %d", req.LastLogin[1]))
|
||
|
|
}
|
||
|
|
}
|
||
|
|
if req.UP > 0 {
|
||
|
|
shareInfoSql = append(shareInfoSql, fmt.Sprintf("up1 = %d", req.UP))
|
||
|
|
}
|
||
|
|
if len(req.VIP) > 0 {
|
||
|
|
vipSql = append(vipSql, fmt.Sprintf("level >= %d", req.VIP[0]))
|
||
|
|
if len(req.VIP) > 1 {
|
||
|
|
vipSql = append(vipSql, fmt.Sprintf("level <= %d", req.VIP[1]))
|
||
|
|
}
|
||
|
|
}
|
||
|
|
if req.IsRecharge > 0 {
|
||
|
|
if req.IsRecharge == 1 {
|
||
|
|
rechargeInfoSql = append(rechargeInfoSql, "total_recharge > 0")
|
||
|
|
} else {
|
||
|
|
rechargeInfoSql = append(rechargeInfoSql, "total_recharge = 0")
|
||
|
|
}
|
||
|
|
}
|
||
|
|
if len(req.Recharge) > 0 {
|
||
|
|
rechargeInfoSql = append(rechargeInfoSql, fmt.Sprintf("total_recharge >= %d", req.Recharge[0]))
|
||
|
|
if len(req.Recharge) > 1 {
|
||
|
|
rechargeInfoSql = append(rechargeInfoSql, fmt.Sprintf("total_recharge <= %d", req.Recharge[1]))
|
||
|
|
}
|
||
|
|
}
|
||
|
|
if len(req.RechargeCount) > 0 {
|
||
|
|
rechargeInfoSql = append(rechargeInfoSql, fmt.Sprintf("total_recharge_count >= %d", req.RechargeCount[0]))
|
||
|
|
if len(req.RechargeCount) > 1 {
|
||
|
|
rechargeInfoSql = append(rechargeInfoSql, fmt.Sprintf("total_recharge_count <= %d", req.RechargeCount[1]))
|
||
|
|
}
|
||
|
|
}
|
||
|
|
if len(req.Withdraw) > 0 {
|
||
|
|
rechargeInfoSql = append(rechargeInfoSql, fmt.Sprintf("total_withdraw >= %d", req.Withdraw[0]))
|
||
|
|
if len(req.Withdraw) > 1 {
|
||
|
|
rechargeInfoSql = append(rechargeInfoSql, fmt.Sprintf("total_withdraw <= %d", req.Withdraw[1]))
|
||
|
|
}
|
||
|
|
}
|
||
|
|
if len(req.Cash) > 0 {
|
||
|
|
cashSql = append(cashSql, fmt.Sprintf("brl >= %d", req.Cash[0]))
|
||
|
|
if len(req.Cash) > 1 {
|
||
|
|
cashSql = append(cashSql, fmt.Sprintf("brl <= %d", req.Cash[1]))
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
linkB := "LEFT JOIN"
|
||
|
|
if len(shareInfoSql) > 0 {
|
||
|
|
linkB = "INNER JOIN"
|
||
|
|
}
|
||
|
|
linkC := "LEFT JOIN"
|
||
|
|
if len(vipSql) > 0 {
|
||
|
|
linkC = "INNER JOIN"
|
||
|
|
}
|
||
|
|
linkD := "LEFT JOIN"
|
||
|
|
if len(rechargeInfoSql) > 0 {
|
||
|
|
linkD = "INNER JOIN"
|
||
|
|
}
|
||
|
|
|
||
|
|
baseSql := fmt.Sprintf(`
|
||
|
|
(SELECT id,channel_id,country,mobile,status,platform,birth,last_login,tag,online from users %s)a
|
||
|
|
%s
|
||
|
|
(SELECT uid,up1 from share_info %s)b
|
||
|
|
on a.id = b.uid
|
||
|
|
%s
|
||
|
|
(SELECT uid,level from vip_data %s)c
|
||
|
|
on a.id = c.uid
|
||
|
|
%s
|
||
|
|
(SELECT uid,total_recharge,total_recharge_count,total_withdraw,total_withdraw_count,total_recharge-total_withdraw as diff from recharge_info %s)d
|
||
|
|
on a.id = d.uid
|
||
|
|
INNER JOIN
|
||
|
|
(SELECT uid,brl from player_currency %s)e
|
||
|
|
on a.id = e.uid
|
||
|
|
`, models.LinkMysqlCondi(userSql), linkB, models.LinkMysqlCondi(shareInfoSql), linkC, models.LinkMysqlCondi(vipSql),
|
||
|
|
linkD, models.LinkMysqlCondi(rechargeInfoSql), models.LinkMysqlCondi(cashSql))
|
||
|
|
|
||
|
|
// 拉列表语句
|
||
|
|
sql := `SELECT a.id as UID,a.channel_id as ChannelID,a.country as Country,c.level as Level,a.mobile as Mobile,b.up1 as Up,a.status as Status,
|
||
|
|
a.platform as Platform,a.online as Online,d.total_recharge as TotalRecharge,d.total_recharge_count as TotalRechargeCount,d.total_withdraw as TotalWithdraw,
|
||
|
|
d.total_withdraw_count as TotalWithdrawCount,e.brl as Brl,d.diff as Diff,a.last_login as LastLogin,a.birth as Birth,a.tag as Tag From ` + baseSql
|
||
|
|
|
||
|
|
// 求和语句
|
||
|
|
sqlCount := `SELECT count(*) From ` + baseSql
|
||
|
|
|
||
|
|
// 排序
|
||
|
|
if req.Order != 0 {
|
||
|
|
orderSql := "order by"
|
||
|
|
abs := util.Abs(int64(req.Order))
|
||
|
|
switch abs {
|
||
|
|
case 1:
|
||
|
|
orderSql += " d.total_recharge"
|
||
|
|
case 2:
|
||
|
|
orderSql += " d.total_recharge_count"
|
||
|
|
case 3:
|
||
|
|
orderSql += " d.total_withdraw"
|
||
|
|
case 4:
|
||
|
|
orderSql += " e.brl"
|
||
|
|
case 5:
|
||
|
|
orderSql += " d.diff"
|
||
|
|
case 6:
|
||
|
|
orderSql += " a.last_login"
|
||
|
|
case 7:
|
||
|
|
orderSql += " a.birth"
|
||
|
|
}
|
||
|
|
if req.Order < 0 {
|
||
|
|
orderSql += " desc"
|
||
|
|
}
|
||
|
|
sql += orderSql
|
||
|
|
} else {
|
||
|
|
sql += " order by a.id desc"
|
||
|
|
}
|
||
|
|
|
||
|
|
// 分页
|
||
|
|
sql += fmt.Sprintf(" limit %d,%d", (req.Page-1)*req.Num, req.Num)
|
||
|
|
|
||
|
|
resp := values.GetGameUserListResp{}
|
||
|
|
if err := db.Mysql().C().Raw(sql).Scan(&resp.List).Error; err != nil {
|
||
|
|
log.Error("err:%v", err)
|
||
|
|
a.Code = values.CodeRetry
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
// isWin := true
|
||
|
|
// uids := []interface{}{}
|
||
|
|
// for i, v := range resp.List {
|
||
|
|
// lg := &common.LoginRecord{UID: v.UID}
|
||
|
|
// db.Mysql().GetLast(lg)
|
||
|
|
// // if err != nil {
|
||
|
|
// // log.Error(err.Error())
|
||
|
|
// // }
|
||
|
|
// resp.List[i].LastLogin = lg.Time
|
||
|
|
|
||
|
|
// uids = append(uids, v.UID)
|
||
|
|
// // winCount := models.GetWinGameCountByBalance(nil, nil, &resp.List[i].UID, req.Channel, nil, nil, &isWin)
|
||
|
|
// // resp.List[i].GameCount = models.GetGameCountByBalance(nil, nil, &resp.List[i].UID, req.Channel, nil, nil)
|
||
|
|
// // resp.List[i].WinPer = utils.GetPer(winCount, resp.List[i].GameCount)
|
||
|
|
|
||
|
|
// user, _ := call.GetUserInfo(v.UID)
|
||
|
|
// resp.List[i].AccountCount = int(db.Mysql().Count(&common.PlayerDBInfo{}, fmt.Sprintf("deviceid = '%v'", user.DeviceId)))
|
||
|
|
// }
|
||
|
|
|
||
|
|
// total := models.GetGameCountByUIDs(uids, false)
|
||
|
|
// win := models.GetGameCountByUIDs(uids, true)
|
||
|
|
// for i, v := range resp.List {
|
||
|
|
// for _, u := range total.Buckets {
|
||
|
|
// if util.GetInt(u.Key) == v.UID {
|
||
|
|
// resp.List[i].GameCount = int64(u.Doc_count)
|
||
|
|
// break
|
||
|
|
// }
|
||
|
|
// }
|
||
|
|
// var winCount int64
|
||
|
|
// for _, u := range win.Buckets {
|
||
|
|
// if util.GetInt(u.Key) == v.UID {
|
||
|
|
// winCount = int64(u.Doc_count)
|
||
|
|
// break
|
||
|
|
// }
|
||
|
|
// }
|
||
|
|
// resp.List[i].WinPer = utils.GetPer(winCount, resp.List[i].GameCount)
|
||
|
|
// }
|
||
|
|
|
||
|
|
if err := db.Mysql().C().Raw(sqlCount).Scan(&resp.Count).Error; err != nil {
|
||
|
|
log.Error("err:%v", err)
|
||
|
|
a.Code = values.CodeRetry
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
a.Data = resp
|
||
|
|
}
|