package statistics
import (
"fmt"
"server/call"
"server/common"
"server/db"
"server/modules/backend/app"
utils "server/modules/backend/util"
"server/modules/backend/values"
"github.com/gin-gonic/gin"
"github.com/liangdas/mqant/log"
)
func RechargeOrderList ( c * gin . Context ) {
a := app . NewApp ( c )
defer func ( ) {
a . Response ( )
} ( )
req := new ( values . RechargeOrderListReq )
if ! a . S ( req ) {
return
}
su , eu := utils . GetQueryUnix ( req . Start , req . End )
// st, et := utils.GetQueryDate(req.Start, req.End)
var count , amount int64
var err error
var ret [ ] common . RechargeOrder
queryOrder := " SELECT * FROM recharge_order AS re "
queryCount := " SELECT COUNT(*) as count FROM recharge_order AS re "
queryAmount := " SELECT SUM(amount) as amount FROM recharge_order AS re "
var str string
if req . Status != nil && * req . Status == 2 {
str = fmt . Sprintf ( " callback_time >= %d AND callback_time < %d AND event = %d " , su , eu , common . CurrencyEventReCharge )
} else {
str = fmt . Sprintf ( " create_time >= %d AND create_time < %d AND event = %d " , su , eu , common . CurrencyEventReCharge )
}
if req . Channel != nil {
str += fmt . Sprintf ( " AND channel_id = %d" , * req . Channel )
}
if req . Status != nil {
str += fmt . Sprintf ( " AND status = %d" , * req . Status )
}
queryOrder += " LEFT JOIN ( SELECT uid, COALESCE(SUM(amount), 0) AS totalAmount FROM recharge_order WHERE " + str + " GROUP BY uid) rm ON rm.uid = re.uid "
if req . Birth != nil {
birthSu , birthEu := utils . GetQueryUnix ( * req . Birth , * req . Birth )
queryOrder += fmt . Sprintf ( " LEFT JOIN ( SELECT id, birth FROM users WHERE birth >= %d AND birth < %d ) AS u ON u.id = re.uid WHERE u.id = re.uid AND " , birthSu , birthEu )
queryCount += fmt . Sprintf ( " LEFT JOIN ( SELECT id, birth FROM users WHERE birth >= %d AND birth < %d ) AS u ON u.id = re.uid WHERE u.id = re.uid AND " , birthSu , birthEu )
queryAmount += fmt . Sprintf ( " LEFT JOIN ( SELECT id, birth FROM users WHERE birth >= %d AND birth < %d ) AS u ON u.id = re.uid WHERE u.id = re.uid AND " , birthSu , birthEu )
} else {
queryOrder += " WHERE re.uid = rm.uid AND "
queryCount += " WHERE "
queryAmount += " WHERE "
}
var desc string
switch req . Sort {
case 1 :
desc += " ORDER BY re.create_time DESC"
case 2 :
desc += " ORDER BY rm.totalAmount DESC"
case 3 :
desc += " ORDER BY re.amount DESC"
default :
desc += " ORDER BY create_time DESC"
}
// 查询总数量
err = db . Mysql ( ) . QueryBySql ( queryCount + str , & count )
if err != nil {
log . Error ( "err:%v" , err )
}
// 查询总金额
err = db . Mysql ( ) . QueryBySql ( queryAmount + str , & amount )
if err != nil {
log . Error ( "err:%v" , err )
}
limit := fmt . Sprintf ( " LIMIT %d, %d " , ( req . Page - 1 ) * req . Num , req . Num )
// 查询订单
err = db . Mysql ( ) . QueryBySql ( queryOrder + str + desc + limit , & ret )
if err != nil {
log . Error ( "err:%v" , err )
}
resp := values . RechargeOrderListResp { Count : count , Amount : amount }
for _ , v := range ret {
user , _ := call . GetUserInfo ( v . UID )
// TotalAmount
/ * var totalAmount int64
err = db . Mysql ( ) . QueryBySql ( fmt . Sprintf ( " SELECT SUM(amount) AS totalAmount FROM recharge_order WHERE uid = %d AND " , v . UID ) + str , & totalAmount )
if err != nil {
log . Error ( "err:%v" , err )
} * /
resp . List = append ( resp . List , values . OneRechargeOrderList {
Channel : v . ChannelID ,
Nick : user . Nick ,
UID : v . UID ,
OrderID : v . APIPayID ,
CreatedTime : v . CreateTime ,
CallbackTime : v . CallbackTime ,
Amount : v . Amount ,
Status : int ( v . Status ) ,
Birth : user . Birth ,
// OrderCount: db.Mysql().Count(&common.RechargeOrder{}, fmt.Sprintf(" uid = %d AND event = %d ", v.UID, common.CurrencyEventReCharge)),
// OrderSuccessCount: db.Mysql().Count(&common.RechargeOrder{}, fmt.Sprintf(" uid = %d AND event = %d AND status = %d", v.UID, common.CurrencyEventReCharge, common.StatusROrderPay)),
// TotalAmount: totalAmount,
ProductId : v . ProductID ,
ActivityId : getActivityId ( v . ProductID ) , // 活动id
PayChannel : v . PayChannel , // 支付渠道
PaySource : v . PaySource , // 支付来源
} )
}
a . Data = resp
}
func getActivityId ( productId int ) int {
all := call . GetConfigPayProduct ( )
for i := 0 ; i < len ( all ) ; i ++ {
if all [ i ] != nil {
if all [ i ] . ProductID == productId {
return all [ i ] . ActivityID
}
}
}
return 0
}