印度包网
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.
 
 
 

137 lines
4.2 KiB

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
}