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.
147 lines
4.1 KiB
147 lines
4.1 KiB
|
1 year ago
|
package statistics
|
||
|
|
|
||
|
|
import (
|
||
|
|
"fmt"
|
||
|
|
"server/common"
|
||
|
|
"server/db"
|
||
|
|
"server/modules/backend/app"
|
||
|
|
"server/modules/backend/models"
|
||
|
|
utils "server/modules/backend/util"
|
||
|
|
"server/modules/backend/values"
|
||
|
|
"server/util"
|
||
|
|
"strconv"
|
||
|
|
|
||
|
|
"github.com/gin-gonic/gin"
|
||
|
|
"github.com/liangdas/mqant/log"
|
||
|
|
"github.com/olivere/elastic/v7"
|
||
|
|
)
|
||
|
|
|
||
|
|
func NewRechargeData(c *gin.Context) {
|
||
|
|
a := app.NewApp(c)
|
||
|
|
defer func() {
|
||
|
|
a.Response()
|
||
|
|
}()
|
||
|
|
req := new(values.NewRechargeDataReq)
|
||
|
|
if !a.S(req) {
|
||
|
|
return
|
||
|
|
}
|
||
|
|
resp := values.NewRechargeDataResp{}
|
||
|
|
|
||
|
|
su, eu := utils.GetQueryUnix(req.Start, req.End)
|
||
|
|
|
||
|
|
queryUser := " SELECT * FROM users AS u "
|
||
|
|
queryCount := " SELECT COUNT(*) as count FROM users AS u "
|
||
|
|
|
||
|
|
str := " INNER JOIN " +
|
||
|
|
" ( SELECT uid FROM recharge_order WHERE " +
|
||
|
|
" event = %d " +
|
||
|
|
" AND status = %d " +
|
||
|
|
" %v " +
|
||
|
|
" GROUP BY uid " +
|
||
|
|
") r " +
|
||
|
|
" ON u.id = r.uid WHERE " +
|
||
|
|
" u.birth >= %d AND u.birth < %d " +
|
||
|
|
" %v "
|
||
|
|
|
||
|
|
var channelStr string
|
||
|
|
if req.Channel != nil {
|
||
|
|
channelStr = fmt.Sprintf(" AND channel_id = %d", *req.Channel)
|
||
|
|
}
|
||
|
|
|
||
|
|
str = fmt.Sprintf(str,
|
||
|
|
common.CurrencyEventReCharge,
|
||
|
|
common.StatusROrderPay,
|
||
|
|
channelStr,
|
||
|
|
su,
|
||
|
|
eu,
|
||
|
|
channelStr,
|
||
|
|
)
|
||
|
|
|
||
|
|
var count int64
|
||
|
|
err := db.Mysql().QueryBySql(queryCount+str, &count)
|
||
|
|
if err != nil {
|
||
|
|
log.Error(err.Error())
|
||
|
|
}
|
||
|
|
|
||
|
|
str += fmt.Sprintf(" LIMIT %d, %d ", (req.Page-1)*req.Num, req.Num)
|
||
|
|
|
||
|
|
var users []common.PlayerDBInfo
|
||
|
|
err = db.Mysql().QueryBySql(queryUser+str, &users)
|
||
|
|
if err != nil {
|
||
|
|
log.Error(err.Error())
|
||
|
|
}
|
||
|
|
|
||
|
|
for i := 0; i < len(users); i++ {
|
||
|
|
var newRechargeData values.NewRechargeData
|
||
|
|
newRechargeData.Date = su
|
||
|
|
newRechargeData.Nick = users[i].Nick
|
||
|
|
newRechargeData.Uid = users[i].Id
|
||
|
|
newRechargeData.Birth = users[i].Birth
|
||
|
|
|
||
|
|
// recharge := &common.RechargeOrder{UID: users[i].Id, Event: int(common.CurrencyEventReCharge), Status: common.StatusROrderPay}
|
||
|
|
// db.Mysql().Get(recharge)
|
||
|
|
// var recharge common.RechargeOrder
|
||
|
|
// err = db.Mysql().C().Model(&common.RechargeOrder{}).Where(" uid = ? AND event = ? AND status = ? ", users[i].Id, common.CurrencyEventReCharge, common.StatusROrderPay).First(&recharge).Error
|
||
|
|
// if err != nil {
|
||
|
|
// log.Error(err.Error())
|
||
|
|
// }
|
||
|
|
|
||
|
|
data := common.CurrencyBalance{}
|
||
|
|
q := elastic.NewBoolQuery()
|
||
|
|
q.Must(elastic.NewMatchQuery("uid", users[i].Id))
|
||
|
|
q.Must(elastic.NewMatchQuery("event", common.CurrencyEventReCharge))
|
||
|
|
err = db.ES().QueryOne(common.ESIndexBalance, q, &data, "time", true)
|
||
|
|
if err != nil {
|
||
|
|
log.Error(err.Error())
|
||
|
|
}
|
||
|
|
newRechargeData.RechargeDate = data.Time
|
||
|
|
|
||
|
|
// 充值前玩家金额
|
||
|
|
newRechargeData.RechargeAmount = data.Balance - data.Value
|
||
|
|
|
||
|
|
// 充值前的可退出金额
|
||
|
|
newRechargeData.WithdrawAmount = data.Balance
|
||
|
|
|
||
|
|
// 玩家游戏局数
|
||
|
|
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)
|
||
|
|
// }
|
||
|
|
|
||
|
|
// 百人游戏数据
|
||
|
|
// 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)
|
||
|
|
// }
|
||
|
|
q = elastic.NewBoolQuery()
|
||
|
|
q.Must(elastic.NewMatchQuery("UID", users[i].Id))
|
||
|
|
games, _ := db.ES().GroupBy(common.ESIndexGameData, "GameID", q, 0)
|
||
|
|
for _, v := range games.Buckets {
|
||
|
|
gameCount[strconv.Itoa(util.GetInt(v.Key))] = int64(v.Doc_count)
|
||
|
|
}
|
||
|
|
newRechargeData.MostGameCount = gameCount
|
||
|
|
|
||
|
|
// 最后三局游戏记录
|
||
|
|
event := int(common.CurrencyEventGameSettle)
|
||
|
|
var balance []common.CurrencyBalance
|
||
|
|
uid := strconv.Itoa(users[i].Id)
|
||
|
|
_, err = models.QueryUserBalance(&uid, 0, 3, nil, &data.Time, nil, nil, nil, req.Channel, &event, &balance)
|
||
|
|
if err != nil {
|
||
|
|
log.Error(err.Error())
|
||
|
|
return
|
||
|
|
}
|
||
|
|
for j := 0; j < len(balance); j++ {
|
||
|
|
newRechargeData.GameRecord = append(newRechargeData.GameRecord, balance[j].Value)
|
||
|
|
}
|
||
|
|
|
||
|
|
// 玩家充值前的游戏局数
|
||
|
|
// newRechargeData.GameCountBeforeRecharge = models.GetUserGameCount(nil, &data.Time, &users[i].Id, nil, nil, nil)
|
||
|
|
|
||
|
|
resp.List = append(resp.List, newRechargeData)
|
||
|
|
}
|
||
|
|
|
||
|
|
resp.Count = count
|
||
|
|
a.Data = resp
|
||
|
|
}
|