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.
1685 lines
56 KiB
1685 lines
56 KiB
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 in (%v,%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.CurrencyEventActivityWeekCard, 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 in (%v,%v) and status = %v and callback_time >= %d and callback_time < %d `, |
|
common.CurrencyEventReCharge, common.CurrencyEventActivityWeekCard, 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 in (%d,%d) ", common.CurrencyEventReCharge, common.CurrencyEventActivityWeekCard) |
|
} 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" |
|
sql += " 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" |
|
sql += " 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" |
|
sql += " 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) |
|
}
|
|
|