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
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 |
|
}
|
|
|