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

146 lines
4.1 KiB

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
}