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 }