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 }