印度包网
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.
 
 
 

113 lines
3.9 KiB

package guser
import (
"fmt"
"github.com/gin-gonic/gin"
"github.com/liangdas/mqant/log"
"server/call"
"server/common"
"server/db"
"server/modules/backend/models"
utils "server/modules/backend/util"
"server/modules/backend/values"
"server/modules/customer/app"
"strconv"
"time"
)
func LostPlayerData(c *gin.Context) {
a := app.NewApp(c)
defer func() {
a.Response()
}()
req := new(values.LostPlayerDataReq)
if !a.S(req) {
return
}
resp := values.LostPlayerDataResp{}
su, eu := utils.GetQueryUnix(req.Start, req.End)
var oneDay int64 = 24 * 60 * 60
now := time.Now().Unix()
queryUser := " SELECT u.id, u.nick, u.bind_cash, u.cash, u.birth FROM users u LEFT JOIN (SELECT a.* FROM login_record a INNER JOIN ( SELECT uid, MAX( created_at ) created_at FROM login_record WHERE UNIX_TIMESTAMP(date) >= %d GROUP BY uid ) b ON a.uid = b.uid AND a.created_at = b.created_at WHERE a.uid = b.uid AND a.created_at = b.created_at AND UNIX_TIMESTAMP(a.date) >= %d) r ON u.id = r.uid WHERE "
queryCount := " SELECT COUNT(DISTINCT(u.id)) FROM users u LEFT JOIN (SELECT a.* FROM login_record a INNER JOIN ( SELECT uid, MAX( created_at ) created_at FROM login_record WHERE UNIX_TIMESTAMP(date) >= %d GROUP BY uid ) b ON a.uid = b.uid AND a.created_at = b.created_at WHERE a.uid = b.uid AND a.created_at = b.created_at AND UNIX_TIMESTAMP(a.date) >= %d) r ON u.id = r.uid WHERE "
str := fmt.Sprintf(" u.birth >= %d AND u.birth < %d ", su, eu)
if req.Channel != nil {
str += fmt.Sprintf(" AND u.channel_id = %d AND r.channel_id = %d", *req.Channel, *req.Channel)
}
// 三天未登录的用户 UNIX_TIMESTAMP('20210816')
str += fmt.Sprintf(" AND (%d - UNIX_TIMESTAMP(r.date) > %d ) ", now, 3*oneDay)
var count int64
err := db.Mysql().QueryBySql(fmt.Sprintf(queryCount+str, eu, eu), &count)
if err != nil {
log.Error(err.Error())
}
str += " GROUP BY u.id "
str += fmt.Sprintf(" LIMIT %d, %d ", (req.Page-1)*req.Num, req.Num)
var users []common.PlayerDBInfo
err = db.Mysql().QueryBySql(fmt.Sprintf(queryUser+str, eu, eu), &users)
if err != nil {
log.Error(err.Error())
}
for i := 0; i < len(users); i++ {
var lostPlayerData values.LostPlayerData
lostPlayerData.Date = su
lostPlayerData.Nick = users[i].Nick
lostPlayerData.Uid = users[i].Id
lostPlayerData.Birth = users[i].Birth
lostPlayerData.Amount = call.GetUserCurrencyTotal(users[i].Id, 0)
var record common.LoginRecord
err = db.Mysql().C().Model(&common.LoginRecord{}).Where(" uid = ?", users[i].Id).Last(&record).Error
if err != nil {
log.Error(err.Error())
}
lostPlayerData.LastLogin = record.Time
// 玩家提现金额
lostPlayerData.WithDrawAmount = models.GetWithdrawTotalByUid(&users[i].Id)
// 玩家游戏局数
//gameCount := make(map[string]int64)
// 房间游戏数据
//for j := 0; j < len(common.RoomGameIDs); j++ {
// gameCount[strconv.Itoa(common.RoomGameIDs[j])] = models.GetUserGameCount(nil, nil, &users[i].Id, &common.RoomGameIDs[j], nil, req.Channel)
// lostPlayerData.GameCount += gameCount[strconv.Itoa(common.RoomGameIDs[j])]
//}
//
//// 百人游戏数据
//for j := 0; j < len(common.MillionGameIDs); j++ {
// millionGameID := common.MillionGameIDs[j].(int)
// gameCount[strconv.Itoa(millionGameID)] = models.GetUserGameCount(nil, nil, &users[i].Id, &millionGameID, nil, req.Channel)
// lostPlayerData.GameCount += gameCount[strconv.Itoa(millionGameID)]
//}
//lostPlayerData.MostGameCount = gameCount
// 最后三局游戏记录
event := int(common.CurrencyEventGameSettle)
var balance []common.CurrencyBalance
uid := strconv.Itoa(users[i].Id)
_, err = models.QueryUserBalance(&uid, 0, 3, nil, nil, nil, nil, nil, req.Channel, &event, &balance)
if err != nil {
log.Error(err.Error())
return
}
for j := 0; j < len(balance); j++ {
lostPlayerData.GameRecord = append(lostPlayerData.GameRecord, balance[j].Value)
}
resp.List = append(resp.List, lostPlayerData)
}
resp.Count = count
a.Data = resp
}