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.
138 lines
4.2 KiB
138 lines
4.2 KiB
|
1 year ago
|
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, SUM(amount) 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
|
||
|
|
}
|