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

187 lines
5.6 KiB

package statistics
import (
"fmt"
"server/call"
"server/common"
"server/db"
"server/modules/backend/app"
"server/modules/backend/models"
utils "server/modules/backend/util"
"server/modules/backend/values"
"sort"
"github.com/gin-gonic/gin"
"github.com/liangdas/mqant/log"
)
func WithdrawOrderList(c *gin.Context) {
a := app.NewApp(c)
defer func() {
a.Response()
}()
req := new(values.WithdrawOrderListReq)
if !a.S(req) {
return
}
st, et := utils.GetQueryUnix(req.Start, req.End)
queryOrder := " SELECT * FROM withdraw_order AS re where"
queryCount := " SELECT COUNT(*) as count FROM withdraw_order AS re where"
str := fmt.Sprintf(" `event` = %d AND create_time >= %d AND create_time < %d ", common.CurrencyEventWithDraw, st, et)
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)
}
if req.Uid != nil {
str += fmt.Sprintf(" AND uid = %d ", *req.Uid)
}
// queryOrder += " LEFT JOIN ( SELECT uid, SUM(amount) AS totalAmount FROM withdraw_order WHERE " + str + " GROUP BY uid) rm ON rm.uid = re.uid WHERE rm.uid = re.uid AND "
// queryCount += " LEFT JOIN ( SELECT uid, SUM(amount) AS totalAmount FROM withdraw_order WHERE " + str + " GROUP BY uid) rm ON rm.uid = re.uid WHERE rm.uid = re.uid AND "
var ret []common.WithdrawOrder
var count int64
// 查询总数量
err := db.Mysql().QueryBySql(queryCount+str, &count)
if err != nil {
log.Error("err:%v", err)
}
var desc string
switch req.Sort {
case 1:
desc += " ORDER BY re.create_time DESC "
case 2:
desc += " ORDER BY rm.totalAmount DESC "
default:
desc += " ORDER BY re.create_time DESC "
}
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.WithdrawOrderListResp{Count: count}
for _, v := range ret {
user, _ := call.GetUserXInfo(v.UID, "birth")
var totalWithdraw int64
err = db.Mysql().QueryBySql(fmt.Sprintf("SELECT IFNULL(SUM(amount),0) AS totalAmount FROM withdraw_order WHERE uid = %d AND ", v.UID)+str, &totalWithdraw)
if err != nil {
log.Error("err:%v", err)
}
resp.List = append([]values.OneWithdrawOrderList{{
Channel: v.ChannelID,
UID: v.UID,
Time: v.CreateTime,
FinishTime: v.CallbackTime,
Amount: v.Amount,
Status: int(v.Status),
PayAccount: v.PayAccount,
OrderID: v.APIPayID,
MyOrderID: v.OrderID,
FailReason: v.FailReason,
Birth: user.Birth,
TotalWithdraw: totalWithdraw,
WithDrawPer: utils.GetPer(models.GetWithdrawTotalByUid(&v.UID), models.GetRechargeTotalByUid(&v.UID)),
PayChannel: v.PayChannel,
PaySource: v.PaySource,
}}, resp.List...)
}
sort.SliceStable(resp.List, func(i, j int) bool {
return resp.List[i].Time > resp.List[j].Time
})
// total
s, e := utils.GetQueryUnix(req.Start, req.End)
sql := fmt.Sprintf("`event` = %v and `status` = %v and create_time >= %d and create_time < %d", common.CurrencyEventWithDraw, common.StatusROrderFinish, s, e)
if req.Channel != nil {
sql += fmt.Sprintf(" and channel_id = %v", *req.Channel)
}
resp.WithdrawTotal = db.Mysql().SumTable("withdraw_order", sql, "amount")
resp.WithdrawCount = db.Mysql().CountTable("withdraw_order", sql)
sql = fmt.Sprintf("`event` = %v and create_time >= %d and create_time < %d", common.CurrencyEventWithDraw, s, e)
if req.Channel != nil {
sql += fmt.Sprintf(" and channel_id = %v", *req.Channel)
}
withdrawTotalCount := db.Mysql().CountTable("withdraw_order", sql)
resp.WithdrawSuccess = utils.GetPer(resp.WithdrawCount, withdrawTotalCount)
a.Data = resp
}
func QueryWithdrawOrder(c *gin.Context) {
a := app.NewApp(c)
defer func() {
a.Response()
}()
req := new(values.WithdrawOrderReq)
if !a.S(req) {
return
}
var ret []common.WithdrawOrder
queryOrder := fmt.Sprintf(" SELECT * FROM withdraw_order WHERE `event` = %d AND (apipayid = '%s' or orderid = '%s') ", common.CurrencyEventWithDraw, req.OrderId, req.OrderId)
// 查询订单
err := db.Mysql().QueryBySql(queryOrder, &ret)
if err != nil {
log.Error("err:%v", err)
}
resp := values.WithdrawOrderListResp{Count: 1}
for _, v := range ret {
user, _ := call.GetUserInfo(v.UID)
var totalWithdraw int64
err = db.Mysql().QueryBySql(fmt.Sprintf("SELECT total_withdraw FROM recharge_info WHERE uid = %d ", v.UID), &totalWithdraw)
if err != nil {
log.Error("err:%v", err)
}
resp.List = append([]values.OneWithdrawOrderList{{
Channel: v.ChannelID,
UID: v.UID,
Time: v.CreateTime,
Amount: v.Amount,
Status: int(v.Status),
PayAccount: v.PayAccount,
OrderID: v.APIPayID,
FailReason: v.FailReason,
Birth: user.Birth,
TotalWithdraw: totalWithdraw,
WithDrawPer: utils.GetPer(models.GetWithdrawTotalByUid(&v.UID), models.GetRechargeTotalByUid(&v.UID)),
PayChannel: v.PayChannel,
PaySource: v.PaySource,
}}, resp.List...)
}
if len(ret) > 0 {
// total
sql := fmt.Sprintf("`event` = %v and `status` = %v and uid = %d", common.CurrencyEventWithDraw, common.StatusROrderFinish, ret[0].UID)
resp.WithdrawTotal = db.Mysql().Sum(&common.WithdrawOrder{}, sql, "amount")
resp.WithdrawCount = db.Mysql().Count(&common.WithdrawOrder{}, sql)
sql = fmt.Sprintf("event = %v and uid = %d", common.CurrencyEventWithDraw, ret[0].UID)
withdrawTotalCount := db.Mysql().Count(&common.WithdrawOrder{}, sql)
resp.WithdrawSuccess = utils.GetPer(resp.WithdrawCount, withdrawTotalCount)
}
a.Data = resp
}