package models import ( "fmt" "server/call" "server/common" "server/db" "server/util" "time" "server/modules/backend/values" utils "server/modules/backend/util" "github.com/liangdas/mqant/log" "github.com/olivere/elastic/v7" ) /* 该区域存放mysql查询方法 1.充值金额数据 2.退出金额数据 3.当天新用户 */ // 通过sql查询充值金额 func GetAmountTotalBySQL(s, e int64, channel *int) int64 { var RechargeAmount int64 if s == e { e += 24 * 60 * 60 } amountTotal := `SELECT IFNULL(SUM(amount),0) as RechargeAmount FROM recharge_order WHERE event = %v and status = %v and callback_time >= %d and callback_time < %d ` if channel != nil { // 充值总金额 err := db.Mysql().QueryBySql(fmt.Sprintf(amountTotal+" and channel_id = %v ", common.CurrencyEventReCharge, common.StatusROrderPay, s, e, *channel), &RechargeAmount) if err != nil { log.Error("查询支付总金额失败, error : [%s]", err.Error()) } } else { // 充值总金额 err := db.Mysql().QueryBySql(fmt.Sprintf(amountTotal, common.CurrencyEventReCharge, common.StatusROrderPay, s, e), &RechargeAmount) if err != nil { log.Error("查询支付总金额失败, error : [%s]", err.Error()) } } return RechargeAmount } // 通过sql查询代付金额 func GetWithdrawAmountTotalBySQL(s, e int64, channel *int) int64 { var amount int64 if s == e { e += 24 * 60 * 60 } amountTotal := `SELECT IFNULL(SUM(amount),0) as amount FROM recharge_order WHERE event = %v and status = %v and callback_time >= "%d" and callback_time < "%d" ` if channel != nil { err := db.Mysql().QueryBySql(fmt.Sprintf(amountTotal+" and channel_id = %v ", common.CurrencyEventWithDraw, common.StatusROrderFinish, s, e, *channel), &amount) if err != nil { log.Error("查询支付总金额失败, error : [%s]", err.Error()) } } else { err := db.Mysql().QueryBySql(fmt.Sprintf(amountTotal, common.CurrencyEventWithDraw, common.StatusROrderFinish, s, e), &amount) if err != nil { log.Error("查询支付总金额失败, error : [%s]", err.Error()) } } return amount } // 通过出生日期查询用户次日付费金额 func GetAmountTotalByBirth(channel *int, birth int64) int64 { var oneDay int64 = 24 * 60 * 60 s := birth + oneDay e := birth + oneDay + oneDay var RechargeAmount int64 amountTotal := `SELECT SUM(amount) as RechargeAmount FROM recharge_order AS re LEFT JOIN users AS u ON re.uid = u.id WHERE re.event = %v AND re.status = %v AND re.callback_time >= "%d" AND re.callback_time < "%d" AND u.birth >= "%d" AND u.birth < "%d"` if channel != nil { // 充值总金额 err := db.Mysql().QueryBySql(fmt.Sprintf(amountTotal+" AND re.channel_id = %v AND u.channel_id = %v", common.CurrencyEventReCharge, common.StatusROrderPay, s, e, birth, birth+24*60*60, *channel, *channel), &RechargeAmount) if err != nil { log.Error("通过出生日期查询用户次日付费金额失败, error : [%s]", err.Error()) } } else { // 充值总金额 err := db.Mysql().QueryBySql(fmt.Sprintf(amountTotal, common.CurrencyEventReCharge, common.StatusROrderPay, s, e, birth, birth+24*60*60), &RechargeAmount) if err != nil { log.Error("通过出生日期查询用户次日付费金额失败, error : [%s]", err.Error()) } } return RechargeAmount } // 通过出生日期查询用户次日付费人数 func GetPlayerCountByBirth(channel *int, birth int64) int64 { var oneDay int64 = 24 * 60 * 60 s := birth + oneDay e := birth + oneDay + oneDay var count int64 str := `SELECT COUNT(DISTINCT(re.uid)) AS count FROM recharge_order AS re LEFT JOIN users AS u ON re.uid = u.id WHERE re.event = %v AND re.status = %v AND re.callback_time >= "%d" AND re.callback_time < %d AND u.birth >= %d AND u.birth < %d` if channel != nil { // 充值总金额 err := db.Mysql().QueryBySql(fmt.Sprintf(str+" AND re.channel_id = %v AND u.channel_id = %v ", common.CurrencyEventReCharge, common.StatusROrderPay, s, e, birth, s, *channel, *channel), &count) if err != nil { log.Error("通过出生日期查询用户次日付费人数失败, error : [%s]", err.Error()) } } else { // 充值总金额 err := db.Mysql().QueryBySql(fmt.Sprintf(str, common.CurrencyEventReCharge, common.StatusROrderPay, s, e, birth, s), &count) if err != nil { log.Error("通过出生日期查询用户次日付费人数失败, error : [%s]", err.Error()) } } return count } // 查询玩家次日存留数量 func GetNextDayReserved(channel *int, birth int64) int64 { var count int64 nextDay := time.Unix(birth, 0).Format("20060102") str := `SELECT COUNT(*) AS count FROM login_record AS lo LEFT JOIN users AS u ON lo.uid = u.id WHERE u.birth >= "%d" AND u.birth < "%d" AND lo.date = "%s"` if channel != nil { err := db.Mysql().QueryBySql(fmt.Sprintf(str+" AND lo.channel_id = %v AND u.channel_id = %v", birth, birth+24*60*60, nextDay, *channel, *channel), &count) if err != nil { log.Error("查询玩家次日存留数量失败, error : [%s]", err.Error()) } } else { err := db.Mysql().QueryBySql(fmt.Sprintf(str, birth, birth+24*60*60, nextDay), &count) if err != nil { log.Error("查询玩家次日存留数量失败, error : [%s]", err.Error()) } } return count } // 获取当天注册用户数量 按天计算 func GetNewPlayerCountBySql(channel *int, start, end int64) int64 { var count int64 var oneDay int64 = 24 * 60 * 60 if end == start { end += oneDay } for i := start; i < end; i += oneDay { var temp int64 str := fmt.Sprintf(" SELECT COUNT(*) AS count FROM users WHERE birth >= %d AND birth < %d ", i, i+oneDay) if channel != nil { str += fmt.Sprintf(" AND channel_id = %d", *channel) } err := db.Mysql().QueryBySql(str, &temp) if err != nil { log.Error("查询当天注册用户数失败, error : [%s]", err.Error()) } count += temp } return count } // 获取当天注册用户数量 按天计算 func GetNewPlayerCountBySqlT(channel *int, start, end int64) int64 { var count int64 str := fmt.Sprintf(" SELECT COUNT(*) FROM users WHERE birth >= %d AND birth < %d ", start, end) if channel != nil { str += fmt.Sprintf(" AND channel_id = %d", *channel) } err := db.Mysql().QueryBySql(str, &count) if err != nil { log.Error("查询注册用户数失败, error : [%s]", err.Error()) } return count } // 获取当天老用户数 func GetOldPlayerCountBySql(channel *int, s, e int64) int64 { var count int64 var str string var oneDay int64 = 24 * 60 * 60 if e == s { e += oneDay } for i := s; i < e; i += oneDay { var temp int64 date := time.Unix(i, 0).Format("20060102") if channel != nil { str = fmt.Sprintf("SELECT count(DISTINCT(uid)) FROM login_record WHERE date = '%s' and channel_id = %d and status = 2", date, *channel) } else { str = fmt.Sprintf("SELECT count(DISTINCT(uid)) FROM login_record WHERE date = '%s' and status = 2", date) } err := db.Mysql().QueryBySql(str, &temp) if err != nil { log.Error("查询当天老用户数失败, error : [%s]", err.Error()) } count += temp } return count } // 查询当天注册用户付费人数 func GetNewPayCountBySql(channel *int, s, e int64) int64 { var oneDay int64 = 24 * 60 * 60 var count int64 if e == s { e += oneDay } for i := s; i < e; i += oneDay { var temp int64 str := `SELECT COUNT(DISTINCT(re.uid)) AS count FROM recharge_order AS re LEFT JOIN users AS u ON re.uid = u.id WHERE re.event = %v AND re.status = %v AND re.callback_time >= %d AND re.callback_time < %d AND u.birth >= %d AND u.birth < %d` if channel != nil { // 充值总金额 err := db.Mysql().QueryBySql(fmt.Sprintf(str+" AND re.channel_id = %v AND u.channel_id = %v", common.CurrencyEventReCharge, common.StatusROrderPay, i, i+oneDay, i, i+oneDay, *channel, *channel), &temp) if err != nil { log.Error("查询当日新增付费人数失败, error : [%s]", err.Error()) } } else { // 充值总金额 err := db.Mysql().QueryBySql(fmt.Sprintf(str, common.CurrencyEventReCharge, common.StatusROrderPay, i, i+oneDay, i, i+oneDay), &temp) if err != nil { log.Error("查询当日新增付费人数失败, error : [%s]", err.Error()) } } count += temp } return count } // 查询当天注册用户付费且成功退出人数 func GetNewPayWithdrawCountBySql(channel *int, s, e int64) int64 { var oneDay int64 = 24 * 60 * 60 var count int64 if e == s { e += oneDay } for i := s; i < e; i += oneDay { var temp int64 str := `SELECT COUNT(DISTINCT(re.uid)) AS count FROM withdraw_order AS re LEFT JOIN users AS u ON re.uid = u.id WHERE re.event = %v AND re.status = %v AND re.callback_time >= %d AND re.callback_time < %d AND u.birth >= %d AND u.birth < %d` if channel != nil { // 充值总金额 err := db.Mysql().QueryBySql(fmt.Sprintf(str+" AND re.channel_id = %v AND u.channel_id = %v", common.CurrencyEventWithDraw, common.StatusROrderFinish, i, i+oneDay, i, i+oneDay, *channel, *channel), &temp) if err != nil { log.Error("查询当日新增付费人数失败, error : [%s]", err.Error()) } } else { // 充值总金额 err := db.Mysql().QueryBySql(fmt.Sprintf(str, common.CurrencyEventWithDraw, common.StatusROrderFinish, i, i+oneDay, i, i+oneDay), &temp) if err != nil { log.Error("查询当日新增付费人数失败, error : [%s]", err.Error()) } } count += temp } return count } // 查询当天新增付费总额 func GetNewPayAmountBySql(channel *int, s, e int64) int64 { var oneDay int64 = 24 * 60 * 60 var RechargeAmount int64 if e == s { e += oneDay } for i := s; i < e; i += oneDay { var temp int64 amountTotal := `SELECT IFNULL(SUM(amount),0) as RechargeAmount FROM recharge_order AS re LEFT JOIN users AS u ON re.uid = u.id WHERE re.event = %v AND re.status = %v AND re.callback_time >= "%d" AND re.callback_time < "%d" AND u.birth >= "%d" AND u.birth < "%d"` if channel != nil { // 充值总金额 err := db.Mysql().QueryBySql(fmt.Sprintf(amountTotal+" AND re.channel_id = %v AND u.channel_id = %v", common.CurrencyEventReCharge, common.StatusROrderPay, i, i+oneDay, i, i+oneDay, *channel, *channel), &temp) if err != nil { log.Error("通过出生日期查询用户次日付费金额失败, error : [%s]", err.Error()) } } else { // 充值总金额 err := db.Mysql().QueryBySql(fmt.Sprintf(amountTotal, common.CurrencyEventReCharge, common.StatusROrderPay, i, i+oneDay, i, i+oneDay), &temp) if err != nil { log.Error("通过出生日期查询用户次日付费金额失败, error : [%s]", err.Error()) } } RechargeAmount += temp } return RechargeAmount } // 查询当天老用户付费总额 func GetOldPayAmountBySql(channel *int, s, e int64) int64 { var oneDay int64 = 24 * 60 * 60 var RechargeAmount int64 if e == s { e += oneDay } for i := s; i < e; i += oneDay { var temp int64 amountTotal := `SELECT IFNULL(SUM(re.amount),0) as RechargeAmount FROM recharge_order AS re LEFT JOIN users AS u ON re.uid = u.id WHERE re.event = %v AND re.status = %v AND re.callback_time >= "%d" AND re.callback_time < "%d" AND u.birth < "%d"` if channel != nil { // 充值总金额 err := db.Mysql().QueryBySql(fmt.Sprintf(amountTotal+" AND re.channel_id = %v AND u.channel_id = %v ", common.CurrencyEventReCharge, common.StatusROrderPay, i, i+oneDay, i, *channel, *channel), &temp) if err != nil { log.Error("通过出生日期查询用户次日付费金额失败, error : [%s]", err.Error()) } } else { // 充值总金额 err := db.Mysql().QueryBySql(fmt.Sprintf(amountTotal, common.CurrencyEventReCharge, common.StatusROrderPay, i, i+oneDay, i), &temp) if err != nil { log.Error("通过出生日期查询用户次日付费金额失败, error : [%s]", err.Error()) } } RechargeAmount += temp } return RechargeAmount } // 查询老用户付费人数 func GetOldPayCountBySql(channel *int, s, e int64) int64 { var oneDay int64 = 24 * 60 * 60 var count int64 if e == s { e += oneDay } for i := s; i < e; i += oneDay { var temp int64 str := `SELECT COUNT(DISTINCT(re.uid)) AS count FROM recharge_order AS re LEFT JOIN users AS u ON re.uid = u.id WHERE re.event = %v AND re.status = %v AND re.callback_time >= %d AND re.callback_time < %d AND u.birth < %d ` if channel != nil { err := db.Mysql().QueryBySql(fmt.Sprintf(str+" AND re.channel_id = %v AND u.channel_id = %v", common.CurrencyEventReCharge, common.StatusROrderPay, i, i+oneDay, i, *channel, *channel), &temp) if err != nil { log.Error("查询老用户付费人数失败, error : [%s]", err.Error()) } } else { err := db.Mysql().QueryBySql(fmt.Sprintf(str, common.CurrencyEventReCharge, common.StatusROrderPay, i, i+oneDay, i), &temp) if err != nil { log.Error("查询老用户付费人数失败, error : [%s]", err.Error()) } } count += temp } return count } // 查询付费人数(新用户 + 老用户付费人数) func GetPayCountBySql(channel *int, s, e int64) int64 { var oneDay int64 = 24 * 60 * 60 var count int64 if e == s { e += oneDay } for i := s; i < e; i += oneDay { var temp int64 str := `SELECT COUNT(DISTINCT(uid)) AS count FROM recharge_order WHERE event = %v AND status = %v AND callback_time >= %d AND callback_time < %d ` if channel != nil { // 充值总金额 err := db.Mysql().QueryBySql(fmt.Sprintf(str+" AND channel_id = %v", common.CurrencyEventReCharge, common.StatusROrderPay, i, i+oneDay, *channel), &temp) if err != nil { log.Error("查询活跃付费人数失败, error : [%s]", err.Error()) } } else { // 充值总金额 err := db.Mysql().QueryBySql(fmt.Sprintf(str, common.CurrencyEventReCharge, common.StatusROrderPay, i, i+oneDay), &temp) if err != nil { log.Error("查询活跃付费人数失败, error : [%s]", err.Error()) } } count += temp } return count } /*---------------------------------退出查询-----------------------------*/ // 查询老用户退出人数 func GetOldWithdrawCount(channel *int, s, e int64) int64 { var oneDay int64 = 24 * 60 * 60 var count int64 if e == s { e += oneDay } for i := s; i < e; i += oneDay { var temp int64 str := `SELECT COUNT(DISTINCT(re.uid)) AS count FROM recharge_order AS re LEFT JOIN users AS u ON re.uid = u.id WHERE re.event = %v AND re.callback_time >= %d AND re.callback_time < %d AND u.birth < %d ` if channel != nil { err := db.Mysql().QueryBySql(fmt.Sprintf(str+" AND re.channel_id = %v AND u.channel_id = %v", common.CurrencyEventWithDraw, i, i+oneDay, i, *channel, *channel), &temp) if err != nil { log.Error("查询老用户退出人数, error : [%s]", err.Error()) } } else { err := db.Mysql().QueryBySql(fmt.Sprintf(str, common.CurrencyEventWithDraw, i, i+oneDay, i), &temp) if err != nil { log.Error("查询老用户退出人数, error : [%s]", err.Error()) } } count += temp } return count } // 查询老用户退出次数 func GetOldWithdrawCount2(channel *int, s, e int64) int64 { var oneDay int64 = 24 * 60 * 60 var count int64 if e == s { e += oneDay } for i := s; i < e; i += oneDay { var temp int64 str := `SELECT COUNT(re.uid) AS count FROM recharge_order AS re LEFT JOIN users AS u ON re.uid = u.id WHERE re.event = %v AND re.callback_time >= %d AND re.callback_time < %d AND u.birth < %d ` if channel != nil { err := db.Mysql().QueryBySql(fmt.Sprintf(str+" AND re.channel_id = %v AND u.channel_id = %v", common.CurrencyEventWithDraw, i, i+oneDay, i, *channel, *channel), &temp) if err != nil { log.Error("查询老用户退出人数, error : [%s]", err.Error()) } } else { err := db.Mysql().QueryBySql(fmt.Sprintf(str, common.CurrencyEventWithDraw, i, i+oneDay, i), &temp) if err != nil { log.Error("查询老用户退出人数, error : [%s]", err.Error()) } } count += temp } return count } // 查询当天注册用户退出人数 func GetNewWithdrawCount(channel *int, s, e int64) int64 { var oneDay int64 = 24 * 60 * 60 var count int64 if e == s { e += oneDay } for i := s; i < e; i += oneDay { var temp int64 str := `SELECT COUNT(DISTINCT(re.uid)) AS count FROM recharge_order AS re LEFT JOIN users AS u ON re.uid = u.id WHERE re.event = %v AND re.callback_time >= %d AND re.callback_time < %d AND u.birth >= %d AND u.birth < %d` if channel != nil { err := db.Mysql().QueryBySql(fmt.Sprintf(str+" AND re.channel_id = %v AND u.channel_id = %v", common.CurrencyEventWithDraw, i, i+oneDay, i, i+oneDay, *channel, *channel), &temp) if err != nil { log.Error("查询当日新增付费人数失败, error : [%s]", err.Error()) } } else { err := db.Mysql().QueryBySql(fmt.Sprintf(str, common.CurrencyEventWithDraw, i, i+oneDay, i, i+oneDay), &temp) if err != nil { log.Error("查询当日新增付费人数失败, error : [%s]", err.Error()) } } count += temp } return count } // 查询当天注册用户退出次数 func GetNewWithdrawCount2(channel *int, s, e int64) int64 { var oneDay int64 = 24 * 60 * 60 var count int64 if e == s { e += oneDay } for i := s; i < e; i += oneDay { var temp int64 str := `SELECT COUNT(re.uid) AS count FROM recharge_order AS re LEFT JOIN users AS u ON re.uid = u.id WHERE re.event = %v AND re.callback_time >= "%d" AND re.callback_time < "%d" AND u.birth >= "%d" AND u.birth < "%d"` if channel != nil { // 充值总金额 err := db.Mysql().QueryBySql(fmt.Sprintf(str+" AND re.channel_id = %v AND u.channel_id = %v", common.CurrencyEventWithDraw, i, i+oneDay, i, i+oneDay, *channel, *channel), &temp) if err != nil { log.Error("查询当日新增付费人数失败, error : [%s]", err.Error()) } } else { // 充值总金额 err := db.Mysql().QueryBySql(fmt.Sprintf(str, common.CurrencyEventWithDraw, i, i+oneDay, i, i+oneDay), &temp) if err != nil { log.Error("查询当日新增付费人数失败, error : [%s]", err.Error()) } } count += temp } return count } /*----------------------------------------------------------------------*/ // 新用户付费人数 func GetNewAllPayCountBySql(channel *int, s, e int64) int64 { var oneDay int64 = 24 * 60 * 60 var count int64 if e == s { e += oneDay } str := `SELECT COUNT(DISTINCT(re.uid)) AS count FROM recharge_order AS re LEFT JOIN users AS u ON re.uid = u.id WHERE re.event = %v AND re.status = %v AND u.birth >= %d AND u.birth < %d` for i := s; i < e; i += oneDay { var temp int64 if channel != nil { // 充值总金额 err := db.Mysql().QueryBySql(fmt.Sprintf(str+" AND re.channel_id = %v AND u.channel_id = %v", common.CurrencyEventReCharge, common.StatusROrderPay, i, i+oneDay, *channel, *channel), &temp) if err != nil { log.Error("获取当批次新用户总付费人数失败, error : [%s]", err.Error()) } } else { // 充值总金额 err := db.Mysql().QueryBySql(fmt.Sprintf(str, common.CurrencyEventReCharge, common.StatusROrderPay, i, i+oneDay), &temp) if err != nil { log.Error("获取当批次新用户总付费人数失败, error : [%s]", err.Error()) } } count += temp } return count } // 获取当批次新用户总付费总额 func GetNewAllPayAmountBySql(channel *int, s int64) int64 { var oneDay int64 = 24 * 60 * 60 var RechargeAmount int64 amountTotal := `SELECT SUM(amount) as RechargeAmount FROM recharge_order AS re LEFT JOIN users AS u ON re.uid = u.id WHERE re.event = %v AND re.status = %v AND u.birth >= %d AND u.birth < %d` if channel != nil { // 充值总金额 err := db.Mysql().QueryBySql(fmt.Sprintf(amountTotal+" AND re.channel_id = %v AND u.channel_id = %v", common.CurrencyEventReCharge, common.StatusROrderPay, s, s+oneDay, *channel, *channel), &RechargeAmount) if err != nil { log.Error("获取当批次新用户总付费总额失败, error : [%s]", err.Error()) } } else { // 充值总金额 err := db.Mysql().QueryBySql(fmt.Sprintf(amountTotal, common.CurrencyEventReCharge, common.StatusROrderPay, s, s+oneDay), &RechargeAmount) if err != nil { log.Error("获取当批次新用户总付费总额失败, error : [%s]", err.Error()) } } return RechargeAmount } // 获取当批次新用户总退出 func GetNewAllWithDrawAmountBySql(channel *int, s int64) int64 { var oneDay int64 = 24 * 60 * 60 var RechargeAmount int64 amountTotal := `SELECT SUM(amount) as RechargeAmount FROM recharge_order AS re LEFT JOIN users AS u ON re.uid = u.id WHERE re.event = %v AND re.status = %v AND u.birth >= %d AND u.birth < %d` if channel != nil { // 充值总金额 err := db.Mysql().QueryBySql(fmt.Sprintf(amountTotal+" AND re.channel_id = %v AND u.channel_id = %v", common.CurrencyEventWithDraw, common.StatusROrderFinish, s, s+oneDay, *channel, *channel), &RechargeAmount) if err != nil { log.Error("获取当批次新用户总退出失败, error : [%s]", err.Error()) } } else { // 充值总金额 err := db.Mysql().QueryBySql(fmt.Sprintf(amountTotal, common.CurrencyEventWithDraw, common.StatusROrderFinish, s, s+oneDay), &RechargeAmount) if err != nil { log.Error("获取当批次新用户总退出失败, error : [%s]", err.Error()) } } return RechargeAmount } // 查询当天创建的充值订单数 func GetCreateOrderCountBySql(channel *int, s, e int64) int64 { var oneDay int64 = 24 * 60 * 60 var count int64 if e == s { e += oneDay } // su := time.Unix(s, 0).Format("2006-01-02") // eu := time.Unix(e, 0).Format("2006-01-02") for i := s; i < e; i += oneDay { var temp int64 str := " SELECT COUNT(*) AS count FROM recharge_order WHERE event = %v AND create_time >= %d AND create_time < %d " if channel != nil { err := db.Mysql().QueryBySql(fmt.Sprintf(str+" AND channel_id = %v ", common.CurrencyEventReCharge, s, e, *channel), &temp) if err != nil { log.Error("查询当天创建的充值订单数, error : [%s]", err.Error()) } } else { err := db.Mysql().QueryBySql(fmt.Sprintf(str, common.CurrencyEventReCharge, s, e), &temp) if err != nil { log.Error("查询当天创建的充值订单数, error : [%s]", err.Error()) } } count += temp } return count } // 获取成功充值订单数 func GetSuccessRechargeOrderCountBySql(channel *int, s, e int64) int64 { var oneDay int64 = 24 * 60 * 60 var count int64 if e == s { e += oneDay } for i := s; i < e; i += oneDay { var temp int64 str := `SELECT COUNT(*) FROM recharge_order WHERE event = %v AND status = %v AND callback_time >= %d AND callback_time < %d` if channel != nil { err := db.Mysql().QueryBySql(fmt.Sprintf(str+" AND channel_id = %v ", common.CurrencyEventReCharge, common.StatusROrderPay, i, i+oneDay, *channel), &temp) if err != nil { log.Error("获取成功充值订单数失败, error : [%s]", err.Error()) } } else { err := db.Mysql().QueryBySql(fmt.Sprintf(str, common.CurrencyEventReCharge, common.StatusROrderPay, i, i+oneDay), &temp) if err != nil { log.Error("获取成功充值订单数失败, error : [%s]", err.Error()) } } count += temp } return count } // 获取新用户充值订单数 func GetNewRechargeOrderCountBySql(channel *int, s, e int64) int64 { var oneDay int64 = 24 * 60 * 60 var count int64 if e == s { e += oneDay } for i := s; i < e; i += oneDay { var temp int64 str := `SELECT COUNT(*) FROM recharge_order AS re LEFT JOIN users AS u ON re.uid = u.id WHERE re.uid = u.id AND re.event = %v AND u.birth >= %d AND u.birth < %d` if channel != nil { err := db.Mysql().QueryBySql(fmt.Sprintf(str+" AND re.channel_id = %v AND u.channel_id = %v", common.CurrencyEventReCharge, i, i+oneDay, *channel, *channel), &temp) if err != nil { log.Error("获取新用户充值订单数失败, error : [%s]", err.Error()) } } else { err := db.Mysql().QueryBySql(fmt.Sprintf(str, common.CurrencyEventReCharge, i, i+oneDay), &temp) if err != nil { log.Error("获取新用户充值订单数失败, error : [%s]", err.Error()) } } count += temp } return count } // 获取新用户充值订单数(成功) func GetNewRechargeSuccessOrderCountBySql(channel *int, s, e int64) int64 { var oneDay int64 = 24 * 60 * 60 var count int64 if e == s { e += oneDay } for i := s; i < e; i += oneDay { var temp int64 str := `SELECT COUNT(*) FROM recharge_order AS re LEFT JOIN users AS u ON re.uid = u.id WHERE re.uid = u.id AND re.event = %v AND re.status = %v AND re.callback_time >= %d AND re.callback_time < %d AND u.birth >= %d AND u.birth < %d` if channel != nil { err := db.Mysql().QueryBySql(fmt.Sprintf(str+" AND re.channel_id = %v AND u.channel_id = %v", common.CurrencyEventReCharge, common.StatusROrderPay, i, i+oneDay, i, i+oneDay, *channel, *channel), &temp) if err != nil { log.Error("获取新用户充值订单数失败, error : [%s]", err.Error()) } } else { err := db.Mysql().QueryBySql(fmt.Sprintf(str, common.CurrencyEventReCharge, common.StatusROrderPay, i, i+oneDay, i, i+oneDay), &temp) if err != nil { log.Error("获取新用户充值订单数失败, error : [%s]", err.Error()) } } count += temp } return count } // 获取创建订单人数 func GetCreateOrderPlayerCountBySql(channel *int, s, e int64) int64 { var oneDay int64 = 24 * 60 * 60 var count int64 if e == s { e += oneDay } // su := time.Unix(s, 0).Format("2006-01-02 15:04:05") // eu := time.Unix(e, 0).Format("2006-01-02 15:04:05") for i := s; i < e; i += oneDay { var temp int64 str := " SELECT COUNT(DISTINCT(uid)) FROM recharge_order WHERE event = %v AND create_time >= %d AND create_time < %d " if channel != nil { err := db.Mysql().QueryBySql(fmt.Sprintf(str+" AND channel_id = %v ", common.CurrencyEventReCharge, s, e, *channel), &temp) if err != nil { log.Error("查询创建充值订单人数, error : [%s]", err.Error()) } } else { err := db.Mysql().QueryBySql(fmt.Sprintf(str, common.CurrencyEventReCharge, s, e), &temp) if err != nil { log.Error("查询创建充值订单人数, error : [%s]", err.Error()) } } count += temp } return count } // 查询充值成功订单人数(新用户 + 老用户人数) func GetOrderSuccessPlayerCountBySql(channel *int, s, e int64) int64 { var oneDay int64 = 24 * 60 * 60 var count int64 if e == s { e += oneDay } for i := s; i < e; i += oneDay { var temp int64 str := " SELECT COUNT(DISTINCT(uid)) FROM recharge_order WHERE event = %v AND status = %v AND callback_time >= %d AND callback_time < %d " if channel != nil { err := db.Mysql().QueryBySql(fmt.Sprintf(str+" AND channel_id = %v ", common.CurrencyEventReCharge, common.StatusROrderPay, i, i+oneDay, *channel), &temp) if err != nil { log.Error("查询充值成功订单人数失败, error : [%s]", err.Error()) } } else { err := db.Mysql().QueryBySql(fmt.Sprintf(str, common.CurrencyEventReCharge, common.StatusROrderPay, i, i+oneDay), &temp) if err != nil { log.Error("查询充值成功订单人数失败, error : [%s]", err.Error()) } } count += temp } return count } // 充值成功的新用户人数 func GetOrderSuccessNewPlayerCountBySql(channel *int, s, e int64) int64 { var oneDay int64 = 24 * 60 * 60 var count int64 if e == s { e += oneDay } for i := s; i < e; i += oneDay { var temp int64 str := `SELECT COUNT(DISTINCT(re.uid)) FROM recharge_order AS re LEFT JOIN users AS u ON re.uid = u.id WHERE re.event = %v AND re.status = %v AND re.callback_time >= %d AND re.callback_time < %d AND u.birth >= %d AND u.birth < %d` if channel != nil { err := db.Mysql().QueryBySql(fmt.Sprintf(str+" AND re.channel_id = %v AND u.channel_id = %v", common.CurrencyEventReCharge, common.StatusROrderPay, i, i+oneDay, i, i+oneDay, *channel, *channel), &temp) if err != nil { log.Error("获取充值成功的新用户人数失败, error : [%s]", err.Error()) } } else { err := db.Mysql().QueryBySql(fmt.Sprintf(str, common.CurrencyEventReCharge, common.StatusROrderPay, i, i+oneDay, i, i+oneDay), &temp) if err != nil { log.Error("获取充值成功的新用户人数失败, error : [%s]", err.Error()) } } count += temp } return count } // 未充值新用户的货币总额 func GetUnRechargePlayerAmount(channel *int, s, e int64) (int64, int64) { var oneDay int64 = 24 * 60 * 60 if e == s { e += oneDay } var CashTotal int64 var AmountTotal int64 amountTotal := `SELECT SUM(cash) AS CashTotal, SUM(cash + bind_cash) AS AmountTotal FROM users AS a LEFT JOIN (SELECT uid, total_recharge FROM recharge_info) AS b ON a.id = b.uid WHERE a.id = b.uid AND b.total_charge > 0 AND birth >= %d AND birth < %d` for i := s; i < e; i += oneDay { var res struct { CashTotal int64 AmountTotal int64 } if channel != nil { // 充值总金额 err := db.Mysql().QueryBySql(fmt.Sprintf(amountTotal+" AND a.channel_id = %v ", s, s+oneDay, *channel), &res) if err != nil { log.Error("获取未充值新用户的货币总额失败, error : [%s]", err.Error()) continue } } else { // 充值总金额 err := db.Mysql().QueryBySql(fmt.Sprintf(amountTotal, s, s+oneDay), &res) if err != nil { log.Error("获取未充值新用户的货币总额失败, error : [%s]", err.Error()) continue } } CashTotal += res.CashTotal AmountTotal += res.AmountTotal } return CashTotal, AmountTotal } // 获取一天内某个时间段进来的新用户在当天的充值人数 func GetNewPlayerPayDisCount(channel *int, s, e, end int64) int64 { var count int64 str := fmt.Sprintf(" SELECT COUNT(DISTINCT(a.id)) FROM users AS a LEFT JOIN (SELECT DISTINCT(uid) FROM recharge_order"+ " WHERE `event` = %d AND `status` = %d AND callback_time < %d and callback_time > %d) AS b ON a.id = b.uid WHERE a.id = b.uid AND a.birth >= %d AND a.birth < %d ", common.CurrencyEventReCharge, common.StatusROrderPay, end, s, s, e) if channel != nil { // 充值总金额 err := db.Mysql().QueryBySql(fmt.Sprintf(str+" AND a.channel_id = %v ", *channel), &count) if err != nil { log.Error("获取一天内某个时间段进来的新用户在当天的充值人数失败, error : [%s]", err.Error()) } } else { // 充值总金额 err := db.Mysql().QueryBySql(str, &count) if err != nil { log.Error("获取一天内某个时间段进来的新用户在当天的充值人数失败, error : [%s]", err.Error()) } } return count } // 查询玩家充值总次数 func GetOneRechargeCountBySql(uid int) int64 { var temp int64 str := `SELECT COUNT(*) FROM recharge_order WHERE event = %v AND uid = %d ` err := db.Mysql().QueryBySql(fmt.Sprintf(str, common.CurrencyEventReCharge, uid), &temp) if err != nil { log.Error("获取玩家充值总次数失败, error : [%s]", err.Error()) } return temp } // 查询玩家充值成功次数 func GetOneRechargeSuccessCountBySql(uid int) int64 { var temp int64 str := `SELECT COUNT(*) FROM recharge_order WHERE event = %v AND status = %v AND uid = %d ` err := db.Mysql().QueryBySql(fmt.Sprintf(str, common.CurrencyEventReCharge, common.StatusROrderPay, uid), &temp) if err != nil { log.Error("获取玩家成功充值订单数失败, error : [%s]", err.Error()) } return temp } // 获取充值人数 func GetRechargeSuPlayerCountBySql(channel *int, su, eu int64) int64 { var count int64 str := " SELECT COUNT(DISTINCT(a.id)) FROM users AS a LEFT JOIN ( SELECT uid FROM recharge_order WHERE event = %v AND status = %v ) AS b ON a.id = b.uid WHERE a.id = b.uid AND a.birth >= %d AND a.birth < %d " if channel != nil { err := db.Mysql().QueryBySql(fmt.Sprintf(str+" AND a.channel_id = %v ", common.CurrencyEventReCharge, common.StatusROrderPay, su, eu, *channel), &count) if err != nil { log.Error("查询创建充值订单人数, error : [%s]", err.Error()) } } else { err := db.Mysql().QueryBySql(fmt.Sprintf(str, common.CurrencyEventReCharge, common.StatusROrderPay, su, eu), &count) if err != nil { log.Error("查询创建充值订单人数, error : [%s]", err.Error()) } } return count } // 获取指定时间注册用户在24小时内付费金额 func Get24HourNewPlayerRechargeAmount(channel *int, s, e int64) int64 { var count int64 str := fmt.Sprintf(" SELECT IFNULL(SUM(b.amount),0) FROM users AS a LEFT JOIN (SELECT * FROM recharge_order WHERE `event` = %d AND `status` = %d AND callback_time < %d) AS b ON a.id = b.uid WHERE a.id = b.uid AND a.birth >= %d AND a.birth < %d ", common.CurrencyEventReCharge, common.StatusROrderPay, s+24*60*60, s, e) if channel != nil { // 充值总金额 err := db.Mysql().QueryBySql(fmt.Sprintf(str+" AND a.channel_id = %v ", *channel), &count) if err != nil { log.Error("获取指定时间注册用户在24小时内付费金额失败, error : [%s]", err.Error()) } } else { // 充值总金额 err := db.Mysql().QueryBySql(str, &count) if err != nil { log.Error("获取指定时间注册用户在24小时内付费金额失败, error : [%s]", err.Error()) } } return count } // 获取指定时间注册用户付费金额 func GetNewPlayerRechargeAmount(channel *int, s, e int64) int64 { var count int64 str := fmt.Sprintf(" SELECT IFNULL(SUM(b.amount),0) FROM users AS a LEFT JOIN (SELECT * FROM recharge_order WHERE `event` = %d AND `status` = %d ) AS b ON a.id = b.uid WHERE a.id = b.uid AND a.birth >= %d AND a.birth < %d ", common.CurrencyEventReCharge, common.StatusROrderPay, s, e) if channel != nil { // 充值总金额 err := db.Mysql().QueryBySql(fmt.Sprintf(str+" AND a.channel_id = %v ", *channel), &count) if err != nil { log.Error("获取指定时间注册用户在24小时内付费金额失败, error : [%s]", err.Error()) } } else { // 充值总金额 err := db.Mysql().QueryBySql(str, &count) if err != nil { log.Error("获取指定时间注册用户在24小时内付费金额失败, error : [%s]", err.Error()) } } return count } // 获取指定时间注册用户在24小时内付费人数 func Get24HourNewPlayerPayCount(channel *int, s, e int64) int64 { var count int64 str := fmt.Sprintf("SELECT COUNT(DISTINCT(a.id)) FROM users AS a LEFT JOIN (SELECT DISTINCT(uid) FROM recharge_order WHERE `event` = %d"+ " AND `status` = %d AND callback_time < %d and callback_time > %d) AS b ON a.id = b.uid WHERE a.id = b.uid AND a.birth >= %d AND a.birth < %d ", common.CurrencyEventReCharge, common.StatusROrderPay, e+24*60*60, s, s, e) if channel != nil { // 充值总金额 err := db.Mysql().QueryBySql(fmt.Sprintf(str+" AND a.channel_id = %v ", *channel), &count) if err != nil { log.Error("获取指定时间注册用户在24小时内付费人数失败, error : [%s]", err.Error()) } } else { // 充值总金额 err := db.Mysql().QueryBySql(str, &count) if err != nil { log.Error("获取指定时间注册用户在24小时内付费人数失败, error : [%s]", err.Error()) } } return count } // 获取一天内某个时间段进来的新用户在当天的充值人数 func GetNewPlayerPayDisCount1(channel *int, s, e int64) int64 { var count int64 str := fmt.Sprintf(" SELECT COUNT(DISTINCT(a.id)) FROM users AS a LEFT JOIN (SELECT DISTINCT(uid) FROM recharge_order WHERE `event` = %d AND `status` = %d) AS b ON a.id = b.uid WHERE a.id = b.uid AND a.birth >= %d AND a.birth < %d ", common.CurrencyEventReCharge, common.StatusROrderPay, s, e) if channel != nil { // 充值总金额 err := db.Mysql().QueryBySql(fmt.Sprintf(str+" AND a.channel_id = %v ", *channel), &count) if err != nil { log.Error("获取一天内某个时间段进来的新用户在当天的充值人数失败, error : [%s]", err.Error()) } } else { // 充值总金额 err := db.Mysql().QueryBySql(str, &count) if err != nil { log.Error("获取一天内某个时间段进来的新用户在当天的充值人数失败, error : [%s]", err.Error()) } } return count } // 获取新用户充值订单数(成功) func GetNewRechargeSuccessOrderCountBySql2(channel *int, s, e int64) int64 { var count int64 str := `SELECT COUNT(*) FROM recharge_order AS re LEFT JOIN users AS u ON re.uid = u.id WHERE re.uid = u.id AND re.event = %v AND re.status = %v AND re.callback_time >= %d AND u.birth >= %d AND u.birth < %d` if channel != nil { err := db.Mysql().QueryBySql(fmt.Sprintf(str+" AND re.channel_id = %v AND u.channel_id = %v", common.CurrencyEventReCharge, common.StatusROrderPay, s, s, e, *channel, *channel), &count) if err != nil { log.Error("获取新用户充值订单数失败, error : [%s]", err.Error()) } } else { err := db.Mysql().QueryBySql(fmt.Sprintf(str, common.CurrencyEventReCharge, common.StatusROrderPay, s, s, e), &count) if err != nil { log.Error("获取新用户充值订单数失败, error : [%s]", err.Error()) } } return count } // 获取新用户充值订单数 func GetNewRechargeOrderCountBySql2(channel *int, s, e int64) int64 { var count int64 str := `SELECT COUNT(*) FROM recharge_order AS re LEFT JOIN users AS u ON re.uid = u.id WHERE re.uid = u.id AND re.event = %v AND u.birth >= %d AND u.birth < %d` if channel != nil { err := db.Mysql().QueryBySql(fmt.Sprintf(str+" AND re.channel_id = %v AND u.channel_id = %v", common.CurrencyEventReCharge, s, e, *channel, *channel), &count) if err != nil { log.Error("获取新用户充值订单数失败, error : [%s]", err.Error()) } } else { err := db.Mysql().QueryBySql(fmt.Sprintf(str, common.CurrencyEventReCharge, s, e), &count) if err != nil { log.Error("获取新用户充值订单数失败, error : [%s]", err.Error()) } } return count } func PackChannels(channel ...*int) string { if len(channel) == 0 { return "" } sql := "" for i, v := range channel { if v == nil { continue } if i == 0 { sql += " and (" } sql += fmt.Sprintf(" channel_id = %v", *v) if i != len(channel)-1 { sql += " or" } else { sql += ")" } } return sql } // 获取当天注册用户数量 按天计算 func GetNewPlayerCountBySqls(start, end int64, channel ...*int) int64 { var count int64 var oneDay int64 = 24 * 60 * 60 if end == start { end += oneDay } for i := start; i < end; i += oneDay { var temp int64 str := fmt.Sprintf(" SELECT COUNT(*) AS count FROM users WHERE birth >= %d AND birth < %d ", i, i+oneDay) if len(channel) > 0 { str += PackChannels(channel...) } err := db.Mysql().QueryBySql(str, &temp) if err != nil { log.Error("查询当天注册用户数失败, error : [%s]", err.Error()) } count += temp } return count } // 查询当天注册用户付费人数 func GetNewPayCountBySqls(s, e int64, channel ...*int) int64 { var oneDay int64 = 24 * 60 * 60 var count int64 if e == s { e += oneDay } for i := s; i < e; i += oneDay { var temp int64 sql := fmt.Sprintf(`SELECT COUNT(u.id) AS count FROM users AS u inner JOIN (select distinct(uid) from recharge_order WHERE event = %v AND status = %v AND callback_time >= %d AND callback_time < %d )as re ON re.uid = u.id where u.birth >= %d AND u.birth < %d`, common.CurrencyEventReCharge, common.StatusROrderPay, i, i+oneDay, i, i+oneDay) if len(channel) > 0 { sql += PackChannels(channel...) } err := db.Mysql().QueryBySql(sql, &temp) if err != nil { log.Error("查询当日新增付费人数失败, error : [%s]", err.Error()) } count += temp } return count } // 查询新用户复充人数 func GetNewMultiPayCountBySqls(s, e int64, channel ...*int) int64 { var oneDay int64 = 24 * 60 * 60 var count int64 if e == s { e += oneDay } for i := s; i < e; i += oneDay { var temp int64 sql := fmt.Sprintf(`SELECT count(*) as count from (SELECT uid as u,count(*) as count FROM recharge_order WHERE event = %d AND status = %d AND callback_time >= %d AND callback_time < %d %s GROUP BY uid)a INNER JOIN (SELECT id from users WHERE birth >= %d and birth < %d)b ON a.u = b.id WHERE a.count>1`, common.CurrencyEventReCharge, common.StatusROrderPay, i, i+oneDay, PackChannels(channel...), i, i+oneDay) err := db.Mysql().QueryBySql(sql, &temp) if err != nil { log.Error("查询老用户付费人数失败, error : [%s]", err.Error()) } count += temp } return count } // 查询当天新增付费总额 func GetNewPayAmountBySqls(s, e int64, t common.CurrencyType, channel ...*int) int64 { var oneDay int64 = 24 * 60 * 60 var RechargeAmount int64 if e == s { e += oneDay } for i := s; i < e; i += oneDay { var temp int64 sql := fmt.Sprintf(`SELECT IFNULL(SUM(amount),0) as RechargeAmount from recharge_order as re INNER JOIN (SELECT id from users where birth >= %d AND birth < %d) as u ON re.uid = u.id WHERE event = %d AND status = %d and callback_time >= %d AND callback_time < %d and currency_type = %d`, i, i+oneDay, common.CurrencyEventReCharge, common.StatusROrderPay, i, i+oneDay, t) if len(channel) > 0 { sql += PackChannels(channel...) } err := db.Mysql().QueryBySql(sql, &temp) if err != nil { log.Error("通过出生日期查询用户次日付费金额失败, error : [%s]", err.Error()) } // temp = call.Rate(t, temp) RechargeAmount += temp } return RechargeAmount } func GetOldPlayerCountBySqls(s, e int64, channel ...*int) int64 { var count int64 var oneDay int64 = 24 * 60 * 60 if e == s { e += oneDay } for i := s; i < e; i += oneDay { var temp int64 date := time.Unix(i, 0).Format("20060102") sql := fmt.Sprintf("SELECT count(DISTINCT(uid)) FROM login_record WHERE date = '%s' and status = 2", date) if len(channel) > 0 { sql += PackChannels(channel...) } err := db.Mysql().QueryBySql(sql, &temp) if err != nil { log.Error("查询当天老用户数失败, error : [%s]", err.Error()) } count += temp } return count } // 查询老用户付费人数 func GetOldPayCountBySqls(s, e int64, channel ...*int) int64 { var oneDay int64 = 24 * 60 * 60 var count int64 if e == s { e += oneDay } for i := s; i < e; i += oneDay { var temp int64 sql := fmt.Sprintf(`SELECT COUNT(DISTINCT(re.uid)) AS count FROM recharge_order AS re INNER JOIN (SELECT id from users WHERE birth < %d)AS u ON re.uid = u.id WHERE event = %d AND status = %d AND re.callback_time >= %d AND re.callback_time < %d AND event = %d`, i, common.CurrencyEventReCharge, common.StatusROrderPay, i, i+oneDay, common.CurrencyEventReCharge) if len(channel) > 0 { sql += PackChannels(channel...) } err := db.Mysql().QueryBySql(sql, &temp) if err != nil { log.Error("查询老用户付费人数失败, error : [%s]", err.Error()) } count += temp } return count } // 查询老用户复充人数 func GetOldMultiPayCountBySqls(s, e int64, channel ...*int) int64 { var oneDay int64 = 24 * 60 * 60 var count int64 if e == s { e += oneDay } for i := s; i < e; i += oneDay { var temp int64 sql := fmt.Sprintf(`SELECT count(*) as count from (SELECT uid as u,count(*) as count FROM recharge_order WHERE event = %d AND status = %d AND callback_time >= %d AND callback_time < %d %s GROUP BY uid)a INNER JOIN (SELECT id from users WHERE birth < %d)b ON a.u = b.id WHERE a.count>1`, common.CurrencyEventReCharge, common.StatusROrderPay, i, i+oneDay, PackChannels(channel...), i) err := db.Mysql().QueryBySql(sql, &temp) if err != nil { log.Error("查询老用户付费人数失败, error : [%s]", err.Error()) } count += temp } return count } // 查询当天老用户付费总额 func GetOldPayAmountBySqls(s, e int64, t common.CurrencyType, channel ...*int) int64 { var oneDay int64 = 24 * 60 * 60 var RechargeAmount int64 if e == s { e += oneDay } for i := s; i < e; i += oneDay { var temp int64 sql := fmt.Sprintf(`SELECT IFNULL(SUM(amount),0) as RechargeAmount from recharge_order as re INNER JOIN (SELECT id from users where birth < %d) as u ON re.uid = u.id WHERE event = %d AND status = %d and callback_time >= %d AND callback_time < %d and currency_type = %d`, i, common.CurrencyEventReCharge, common.StatusROrderPay, i, i+oneDay, t) if len(channel) > 0 { sql += PackChannels(channel...) } err := db.Mysql().QueryBySql(sql, &temp) if err != nil { log.Error("通过出生日期查询用户次日付费金额失败, error : [%s]", err.Error()) } // temp = call.Rate(t, temp) RechargeAmount += temp } return RechargeAmount } // 通过sql查询充值金额 func GetAmountTotalBySQLs(s, e int64, channel ...*int) int64 { var RechargeAmount int64 if s == e { e += 24 * 60 * 60 } sql := fmt.Sprintf(`SELECT IFNULL(SUM(amount),0) as RechargeAmount FROM recharge_order WHERE event = %v and status = %v and callback_time >= %d and callback_time < %d `, common.CurrencyEventReCharge, common.StatusROrderPay, s, e, ) if len(channel) > 0 { sql += PackChannels(channel...) } err := db.Mysql().QueryBySql(sql, &RechargeAmount) if err != nil { log.Error("查询支付总金额失败, error : [%s]", err.Error()) } return RechargeAmount } // 通过sql查询代付金额 func GetWithdrawAmountTotalBySQLs(s, e int64, t common.CurrencyType, channel ...*int) int64 { var amount int64 if s == e { e += 24 * 60 * 60 } sql := fmt.Sprintf(`SELECT IFNULL(SUM(amount),0) as amount FROM withdraw_order WHERE event = %v and status = %v and callback_time >= %d and callback_time < %d and currency_type = %d`, common.CurrencyEventWithDraw, common.StatusROrderFinish, s, e, t) sql += PackChannels(channel...) err := db.Mysql().QueryBySql(sql, &amount) if err != nil { log.Error("查询支付总金额失败, error : [%s]", err.Error()) } return amount } // 获取首充人数 func GetFirstPayCount(s, e int64, t common.CurrencyType, channel ...*int) int64 { q := elastic.NewBoolQuery() q.Filter(elastic.NewTermQuery("Type", 1)) q.Filter(elastic.NewRangeQuery("FirstAmount").Gt(0)) q.Filter(elastic.NewRangeQuery("Time").Gte(s)) q.Filter(elastic.NewRangeQuery("Time").Lt(e)) cids := []interface{}{} if len(channel) > 0 { for _, v := range channel { if v == nil { continue } cids = append(cids, *v) } } if len(cids) > 0 { q.Filter(elastic.NewTermsQuery("Channel", cids...)) } return db.ES().CountCard(common.ESIndexBackPlayerPayData, "UID", q) } func GetGameInOut(su, eu int64, opt int, channel ...*int) int64 { q := elastic.NewBoolQuery() q.Filter(elastic.NewRangeQuery("time").Gte(su)) q.Filter(elastic.NewRangeQuery("time").Lt(eu)) cids := []interface{}{} if len(channel) > 0 { for _, v := range channel { if v == nil { continue } cids = append(cids, *v) } } if len(cids) > 0 { q.Filter(elastic.NewTermsQuery("channel_id", cids...)) } if opt == 1 { q.Filter(elastic.NewTermsQuery("event", common.GetGameInEvents()...)) } else { q.Filter(elastic.NewTermsQuery("event", common.GetGameOutEvents()...)) } return util.Abs(db.ES().SumByInt64(common.ESIndexBalance, "value", q)) } func GetOrderCount(su, eu int64, status, opt int, channel ...*int) int64 { condi := "" var model interface{} if opt == 1 { model = &common.RechargeOrder{} condi = fmt.Sprintf("event = %d ", common.CurrencyEventReCharge) } else { model = &common.WithdrawOrder{} condi = fmt.Sprintf("event = %d ", common.CurrencyEventWithDraw) } if status == common.StatusROrderCreate { condi += fmt.Sprintf(" and create_time >= %d and create_time < %d", su, eu) } else { condi += fmt.Sprintf(" and callback_time >= %d and callback_time < %d and status = %d", su, eu, status) } condi += PackChannels(channel...) // if channel != nil { // condi += fmt.Sprintf(" and channel_id = %d", *channel) // } return db.Mysql().Count(model, condi) } // 链接sql查询语句 func LinkMysqlCondi(sql []string) (str string) { if len(sql) == 0 { return } for i, v := range sql { if i == 0 { str = "where " + v } else { str += " and " + v } } return } // opt 1总下注前n 2总盈利前n 3总亏损前n func GetTopGames(su, eu int64, opt, num int, channel ...*int) []*values.OneGameData { sql := "" switch opt { case 1: sql = fmt.Sprintf(`SELECT provider as Provider,game_id as GameID, game_name as GameName,sum(amount) as Amount from provider_bet_record WHERE time>=%d and time <%d and (type = %d or type = %d or type = %d)`, su, eu, common.SessionTypeBet, common.SessionTypeSettle, common.SessionTypeBuyIn) sql += PackChannels(channel...) + " group by game_id order by amount desc" case 2: sql = fmt.Sprintf(`SELECT provider as Provider,game_id as GameID,game_name as GameName,sum(amount - settle) as Amount from provider_bet_record WHERE time>=%d and time <%d`, su, eu) sql += PackChannels(channel...) + " group by game_id order by amount desc" case 3: sql = fmt.Sprintf(`SELECT provider as Provider,game_id as GameID,game_name as GameName,sum(settle - amount) as Amount from provider_bet_record WHERE time>=%d and time <%d`, su, eu) sql += PackChannels(channel...) + " group by game_id order by amount desc" default: return nil } sql += fmt.Sprintf(" limit %d", num) ret := []*values.OneGameData{} db.Mysql().QueryBySql(sql, &ret) index := -1 for i, v := range ret { var gameCfg *common.ConfigGameList if v.Provider == common.ProviderJin { gameCfg = call.GetConfigGameListByCode(v.Provider, v.GameName) } else { gameCfg = call.GetConfigGameListByID(v.Provider, v.GameID) } if gameCfg != nil { v.Name = gameCfg.Name } // 去掉amount<0的部分 if opt > 1 { if v.Amount < 0 { index = i break } } } if index >= 0 { ret = ret[:index] } return ret } type ActivityDataGroupSumBuckets struct { Buckets []struct { Key interface{} Doc_count int Amount struct { Value float64 } } } func GetActivityData(su, eu int64, channel ...*int) (ret []*values.RealActivityData) { q := NewQ(&su, &eu) getChannelQ(q, channel...) q.Filter(elastic.NewTermQuery("Type", common.ActivityDataClick)) esRet, _ := db.ES().GroupByCard(common.ESIndexBackActivity, "ActivityID", "UID", q, 5000) for _, v := range esRet.Buckets { ret = append(ret, &values.RealActivityData{ ActivityID: util.GetInt(v.Key), ClickCount: util.GetInt64(v.Sub.Value), }) } // fmt.Println("1:", esRet) q = NewQ(&su, &eu) getChannelQ(q, channel...) q.Filter(elastic.NewTermQuery("Type", common.ActivityDataJoin)) esRet, _ = db.ES().GroupByCard(common.ESIndexBackActivity, "ActivityID", "UID", q, 5000) for _, v := range esRet.Buckets { find := false for _, k := range ret { if k.ActivityID == util.GetInt(v.Key) { k.JoinCount = util.GetInt64(v.Sub.Value) find = true break } } if !find { ret = append(ret, &values.RealActivityData{ ActivityID: util.GetInt(v.Key), JoinCount: util.GetInt64(v.Sub.Value), }) } } // fmt.Println("2:", esRet) q = NewQ(&su, &eu) // q = elastic.NewBoolQuery() // q.Filter(elastic.NewRangeQuery("Time").Gte(1713404103)) // q.Filter(elastic.NewTermQuery("ActivityID", 10006)) getChannelQ(q, channel...) sumBucket := ActivityDataGroupSumBuckets{} db.ES().GroupSumBy(common.ESIndexBackActivity, "ActivityID", q, &sumBucket, "", false, 5000, "Amount") for _, v := range sumBucket.Buckets { find := false for _, k := range ret { if k.ActivityID == util.GetInt(v.Key) { k.Reward = util.GetInt64(v.Amount.Value) find = true break } } if !find { ret = append(ret, &values.RealActivityData{ ActivityID: util.GetInt(v.Key), Reward: util.GetInt64(v.Amount.Value), }) } } // fmt.Println("3:", sumBucket) return ret } // 查询当天注册用户付费次数 func GetNewPayCounts(s, e int64, channel ...*int) (count int64) { channelStr := PackChannels(channel...) str := fmt.Sprintf(`SELECT count(*) as count FROM (SELECT id FROM users WHERE birth>= %d and birth < %d %s)a INNER JOIN (SELECT uid from recharge_order WHERE status = %d and event = %d and callback_time >= %d and callback_time < %d %s)b on a.id = b.uid`, s, e, channelStr, common.StatusROrderPay, common.CurrencyEventReCharge, s, e, channelStr) // 充值次数 db.Mysql().QueryBySql(str, &count) return } // 查询当天老用户付费次数 func GetOldPayCounts(s, e int64, channel ...*int) (count int64) { channelStr := PackChannels(channel...) str := fmt.Sprintf(`SELECT count(*) as count FROM (SELECT id FROM users WHERE birth < %d %s)a INNER JOIN (SELECT uid from recharge_order WHERE status = %d and event = %d and callback_time >= %d and callback_time < %d %s)b on a.id = b.uid`, s, channelStr, common.StatusROrderPay, common.CurrencyEventReCharge, s, e, channelStr) // 充值次数 db.Mysql().QueryBySql(str, &count) return } // 查询当天注册用户赠送次数 func GetNewWithdrawCounts(s, e int64, channel ...*int) (count int64) { channelStr := PackChannels(channel...) str := fmt.Sprintf(`SELECT count(*) as count FROM (SELECT id FROM users WHERE birth>= %d and birth < %d %s)a INNER JOIN (SELECT uid from withdraw_order WHERE status = %d and callback_time >= %d and callback_time < %d %s)b on a.id = b.uid`, s, e, channelStr, common.StatusROrderFinish, s, e, channelStr) // 充值次数 db.Mysql().QueryBySql(str, &count) return } // 查询当天注册用户赠送人数 func GetNewWithdrawPlayerNum(s, e int64, channel ...*int) (count int64) { channelStr := PackChannels(channel...) str := fmt.Sprintf(`SELECT count(*) as count FROM (SELECT id FROM users WHERE birth>= %d and birth < %d %s)a INNER JOIN (SELECT DISTINCT(uid) from withdraw_order WHERE status = %d and callback_time >= %d and callback_time < %d %s)b on a.id = b.uid`, s, e, channelStr, common.StatusROrderFinish, s, e, channelStr) // 充值次数 db.Mysql().QueryBySql(str, &count) return } // 查询当天注册用户赠送总额 func GetNewWithdrawAmount(s, e int64, channel ...*int) (count int64) { channelStr := PackChannels(channel...) str := fmt.Sprintf(`SELECT IFNULL(sum(b.amount),0) as count FROM (SELECT id FROM users WHERE birth>= %d and birth < %d %s)a INNER JOIN (SELECT uid,amount from withdraw_order WHERE status = %d and callback_time >= %d and callback_time < %d %s)b on a.id = b.uid`, s, e, channelStr, common.StatusROrderFinish, s, e, channelStr) // 充值次数 db.Mysql().QueryBySql(str, &count) return } // 查询当天老用户赠送次数 func GetOldWithdrawCounts(s, e int64, channel ...*int) (count int64) { channelStr := PackChannels(channel...) str := fmt.Sprintf(`SELECT count(*) as count FROM (SELECT id FROM users WHERE birth < %d %s)a INNER JOIN (SELECT uid from withdraw_order WHERE status = %d and callback_time >= %d and callback_time < %d %s)b on a.id = b.uid`, s, channelStr, common.StatusROrderFinish, s, e, channelStr) // 充值次数 db.Mysql().QueryBySql(str, &count) return } // 查询当天老用户赠送人数 func GetOldWithdrawplayerNum(s, e int64, channel ...*int) (count int64) { channelStr := PackChannels(channel...) str := fmt.Sprintf(`SELECT count(*) as count FROM (SELECT id FROM users WHERE birth < %d %s)a INNER JOIN (SELECT DISTINCT(uid) from withdraw_order WHERE status = %d and callback_time >= %d and callback_time < %d %s)b on a.id = b.uid`, s, channelStr, common.StatusROrderFinish, s, e, channelStr) // 充值次数 db.Mysql().QueryBySql(str, &count) return } // 查询当天老用户赠送总数 func GetOldWithdrawAmount(s, e int64, channel ...*int) (count int64) { channelStr := PackChannels(channel...) str := fmt.Sprintf(`SELECT IFNULL(sum(b.amount),0) as count FROM (SELECT id FROM users WHERE birth < %d %s)a INNER JOIN (SELECT uid,amount from withdraw_order WHERE status = %d and callback_time >= %d and callback_time < %d %s)b on a.id = b.uid`, s, channelStr, common.StatusROrderFinish, s, e, channelStr) // 充值次数 db.Mysql().QueryBySql(str, &count) return } // 获取某日的次日留存 opt 1活跃留存 2总付费留存 3新增付费留存 func GetKeepPer(opt int, date string, su int64, channel ...*int) string { // 前一天 yes := time.Unix(su, 0).AddDate(0, 0, -1).Format("20060102") channelStr := PackChannels(channel...) var sql, totalSql string var total, count int64 if opt == 1 { totalSql = fmt.Sprintf(`SELECT count(*) FROM login_record WHERE date = '%v'%v`, yes, channelStr) sql = fmt.Sprintf(`SELECT count(a.uid) FROM (SELECT uid FROM login_record WHERE date = '%v'%v)a INNER JOIN (SELECT uid FROM login_record WHERE date = '%v'%v)b on a.uid = b.uid `, yes, channelStr, date, channelStr) } else if opt == 2 { totalSql = fmt.Sprintf(`SELECT count(*) FROM login_record WHERE is_recharge = 2 and date = '%v'%v`, yes, channelStr) sql = fmt.Sprintf(`SELECT count(a.uid) FROM (SELECT uid FROM login_record WHERE is_recharge = 2 and date = '%v'%v)a INNER JOIN (SELECT uid FROM login_record WHERE is_recharge = 2 and date = '%v'%v)b on a.uid = b.uid `, yes, channelStr, date, channelStr) } else { totalSql = fmt.Sprintf(`SELECT count(*) FROM login_record WHERE is_recharge = 2 and status = 1 and date = '%v'%v`, yes, channelStr) sql = fmt.Sprintf(`SELECT count(a.uid) FROM (SELECT uid FROM login_record WHERE is_recharge = 2 and status = 1 and date = '%v'%v)a INNER JOIN (SELECT uid FROM login_record WHERE is_recharge = 2 and date = '%v'%v)b on a.uid = b.uid `, yes, channelStr, date, channelStr) } db.Mysql().QueryBySql(sql, &count) db.Mysql().QueryBySql(totalSql, &total) return utils.GetPer(count, total) }