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.
184 lines
5.5 KiB
184 lines
5.5 KiB
|
1 year ago
|
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)
|
||
|
|
}
|
||
|
|
|
||
|
|
// 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
|
||
|
|
|
||
|
|
}
|