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