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
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 |
|
}
|
|
|