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 }