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.
295 lines
6.8 KiB
295 lines
6.8 KiB
|
1 year ago
|
package handler
|
||
|
|
|
||
|
|
import (
|
||
|
|
"context"
|
||
|
|
"fmt"
|
||
|
|
"server/call"
|
||
|
|
"server/common"
|
||
|
|
"server/db"
|
||
|
|
"server/modules/backend/app"
|
||
|
|
"server/modules/backend/values"
|
||
|
|
"server/pb"
|
||
|
|
"time"
|
||
|
|
|
||
|
|
utils "server/modules/backend/util"
|
||
|
|
|
||
|
|
"github.com/gin-gonic/gin"
|
||
|
|
"github.com/gogo/protobuf/proto"
|
||
|
|
"github.com/liangdas/mqant/log"
|
||
|
|
mqrpc "github.com/liangdas/mqant/rpc"
|
||
|
|
"github.com/olivere/elastic/v7"
|
||
|
|
)
|
||
|
|
|
||
|
|
func QueryOrder(c *gin.Context) {
|
||
|
|
a := app.NewApp(c)
|
||
|
|
defer func() {
|
||
|
|
a.Response()
|
||
|
|
}()
|
||
|
|
req := new(values.BlockOrderReq)
|
||
|
|
if !a.S(req) {
|
||
|
|
return
|
||
|
|
}
|
||
|
|
to, cancel := context.WithTimeout(context.Background(), 5*time.Second)
|
||
|
|
defer cancel()
|
||
|
|
ret, err := call.GetCaller().GetApp().Call(to, "blockpay", "queryOrder", mqrpc.Param(&pb.BlockPayQueryOrderReq{
|
||
|
|
OrderID: req.OrderID,
|
||
|
|
TxID: req.TxID,
|
||
|
|
}))
|
||
|
|
if err != "" {
|
||
|
|
log.Error("err:%e", err)
|
||
|
|
a.Code = values.CodeRetry
|
||
|
|
return
|
||
|
|
}
|
||
|
|
retData := new(pb.CommonResp)
|
||
|
|
if err := proto.Unmarshal(ret.([]byte), retData); err != nil {
|
||
|
|
log.Error("err:%v", err)
|
||
|
|
a.Code = values.CodeRetry
|
||
|
|
return
|
||
|
|
}
|
||
|
|
if retData.Code != 0 {
|
||
|
|
a.Code = values.CodeRetry
|
||
|
|
a.Msg = retData.Msg
|
||
|
|
return
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func LocalAddrs(c *gin.Context) {
|
||
|
|
a := app.NewApp(c)
|
||
|
|
defer func() {
|
||
|
|
a.Response()
|
||
|
|
}()
|
||
|
|
to, cancel := context.WithTimeout(context.Background(), 5*time.Second)
|
||
|
|
defer cancel()
|
||
|
|
ret, err := call.GetCaller().GetApp().Call(to, "blockpay", "queryAddr", mqrpc.Param(&pb.CommonMsg{}))
|
||
|
|
if err != "" {
|
||
|
|
log.Error("err:%e", err)
|
||
|
|
a.Code = values.CodeRetry
|
||
|
|
return
|
||
|
|
}
|
||
|
|
retData := new(pb.BlockPayQueryLocalAddrResp)
|
||
|
|
if err := proto.Unmarshal(ret.([]byte), retData); err != nil {
|
||
|
|
log.Error("err:%v", err)
|
||
|
|
a.Code = values.CodeRetry
|
||
|
|
return
|
||
|
|
}
|
||
|
|
resp := &values.BlockAddrsResp{Addrs: retData.Addrs}
|
||
|
|
a.Data = resp
|
||
|
|
}
|
||
|
|
|
||
|
|
func AddAddrs(c *gin.Context) {
|
||
|
|
a := app.NewApp(c)
|
||
|
|
defer func() {
|
||
|
|
a.Response()
|
||
|
|
}()
|
||
|
|
req := new(values.AddBlockAddrsReq)
|
||
|
|
if !a.S(req) {
|
||
|
|
return
|
||
|
|
}
|
||
|
|
to, cancel := context.WithTimeout(context.Background(), 5*time.Second)
|
||
|
|
defer cancel()
|
||
|
|
ret, err := call.GetCaller().GetApp().Call(to, "blockpay", "addAddr", mqrpc.Param(&pb.BlockPayAddLocalAddrReq{
|
||
|
|
Address: req.Address,
|
||
|
|
Private: req.Private,
|
||
|
|
}))
|
||
|
|
if err != "" {
|
||
|
|
log.Error("err:%e", err)
|
||
|
|
a.Code = values.CodeRetry
|
||
|
|
return
|
||
|
|
}
|
||
|
|
retData := new(pb.CommonResp)
|
||
|
|
if err := proto.Unmarshal(ret.([]byte), retData); err != nil {
|
||
|
|
log.Error("err:%v", err)
|
||
|
|
a.Code = values.CodeRetry
|
||
|
|
return
|
||
|
|
}
|
||
|
|
if retData.Code != 0 {
|
||
|
|
a.Code = int(retData.Code)
|
||
|
|
a.Msg = retData.Msg
|
||
|
|
return
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func RemoveAddrs(c *gin.Context) {
|
||
|
|
a := app.NewApp(c)
|
||
|
|
defer func() {
|
||
|
|
a.Response()
|
||
|
|
}()
|
||
|
|
req := new(values.AddBlockAddrsReq)
|
||
|
|
if !a.S(req) {
|
||
|
|
return
|
||
|
|
}
|
||
|
|
to, cancel := context.WithTimeout(context.Background(), 5*time.Second)
|
||
|
|
defer cancel()
|
||
|
|
ret, err := call.GetCaller().GetApp().Call(to, "blockpay", "removeAddr", mqrpc.Param(&pb.BlockPayAddLocalAddrReq{
|
||
|
|
Address: req.Address,
|
||
|
|
}))
|
||
|
|
if err != "" {
|
||
|
|
log.Error("err:%e", err)
|
||
|
|
a.Code = values.CodeRetry
|
||
|
|
return
|
||
|
|
}
|
||
|
|
retData := new(pb.CommonResp)
|
||
|
|
if err := proto.Unmarshal(ret.([]byte), retData); err != nil {
|
||
|
|
log.Error("err:%v", err)
|
||
|
|
a.Code = values.CodeRetry
|
||
|
|
return
|
||
|
|
}
|
||
|
|
if retData.Code != 0 {
|
||
|
|
a.Code = values.CodeRetry
|
||
|
|
a.Msg = retData.Msg
|
||
|
|
return
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func Transfer(c *gin.Context) {
|
||
|
|
a := app.NewApp(c)
|
||
|
|
defer func() {
|
||
|
|
a.Response()
|
||
|
|
}()
|
||
|
|
req := new(values.BlockTransferReq)
|
||
|
|
if !a.S(req) {
|
||
|
|
return
|
||
|
|
}
|
||
|
|
to, cancel := context.WithTimeout(context.Background(), 5*time.Second)
|
||
|
|
defer cancel()
|
||
|
|
ret, err := call.GetCaller().GetApp().Call(to, "blockpay", "transfer", mqrpc.Param(&pb.BlockPayTransferReq{
|
||
|
|
FromAddr: req.FromAddr,
|
||
|
|
ToAddr: req.ToAddr,
|
||
|
|
Type: req.Type,
|
||
|
|
Amount: req.Amount,
|
||
|
|
}))
|
||
|
|
if err != "" {
|
||
|
|
log.Error("err:%e", err)
|
||
|
|
a.Code = values.CodeRetry
|
||
|
|
return
|
||
|
|
}
|
||
|
|
retData := new(pb.CommonResp)
|
||
|
|
if err := proto.Unmarshal(ret.([]byte), retData); err != nil {
|
||
|
|
log.Error("err:%v", err)
|
||
|
|
a.Code = values.CodeRetry
|
||
|
|
return
|
||
|
|
}
|
||
|
|
if retData.Code != 0 {
|
||
|
|
a.Code = values.CodeRetry
|
||
|
|
a.Msg = retData.Msg
|
||
|
|
return
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func TransferList(c *gin.Context) {
|
||
|
|
a := app.NewApp(c)
|
||
|
|
defer func() {
|
||
|
|
a.Response()
|
||
|
|
}()
|
||
|
|
req := new(values.BlockTransferListReq)
|
||
|
|
if !a.S(req) {
|
||
|
|
return
|
||
|
|
}
|
||
|
|
resp := &values.BlockTransferListResp{List: []common.ESTron{}}
|
||
|
|
a.Data = resp
|
||
|
|
su, eu := utils.GetQueryUnix(req.Start, req.End)
|
||
|
|
if req.Num > 500 {
|
||
|
|
req.Num = 500
|
||
|
|
}
|
||
|
|
q := elastic.NewBoolQuery()
|
||
|
|
q.Filter(elastic.NewRangeQuery("Time").Gte(su))
|
||
|
|
q.Filter(elastic.NewRangeQuery("Time").Lt(eu))
|
||
|
|
if req.Type > 0 {
|
||
|
|
q.Filter(elastic.NewTermQuery("Type", req.Type))
|
||
|
|
}
|
||
|
|
if req.Status > 0 {
|
||
|
|
q.Filter(elastic.NewTermQuery("Status", req.Status))
|
||
|
|
}
|
||
|
|
if req.Success != nil {
|
||
|
|
q.Filter(elastic.NewTermQuery("Success", *req.Success))
|
||
|
|
}
|
||
|
|
db.ES().QueryList(common.ESIndexTron, req.Page-1, req.Num, q, &resp.List, "Time", false)
|
||
|
|
resp.Count = db.ES().Count(common.ESIndexTron, q)
|
||
|
|
}
|
||
|
|
|
||
|
|
// 获取玩家钱包的usdt总和,且返回预估回收所需要的trx
|
||
|
|
func GetPlayerUsdts(c *gin.Context) {
|
||
|
|
a := app.NewApp(c)
|
||
|
|
defer func() {
|
||
|
|
a.Response()
|
||
|
|
}()
|
||
|
|
req := new(values.PlayerWalletScanReq)
|
||
|
|
if !a.S(req) {
|
||
|
|
return
|
||
|
|
}
|
||
|
|
fee := GetFee(a)
|
||
|
|
if a.Code != values.CodeOK {
|
||
|
|
return
|
||
|
|
}
|
||
|
|
sql := ""
|
||
|
|
if req.Down > 0 {
|
||
|
|
sql = fmt.Sprintf("usdt >= %v", req.Down)
|
||
|
|
} else {
|
||
|
|
sql = "usdt > 0"
|
||
|
|
}
|
||
|
|
if req.Up > 0 {
|
||
|
|
sql += fmt.Sprintf(" and usdt <= %v", req.Up)
|
||
|
|
}
|
||
|
|
count := db.Mysql().Count(&common.TronData{}, sql)
|
||
|
|
a.Data = values.PlayerWalletUsdtsResp{Fee: fee * count, TotalAmount: db.Mysql().Sum(&common.TronData{}, sql, "usdt"), Count: count}
|
||
|
|
}
|
||
|
|
|
||
|
|
// 扫描符合条件的所有玩家的
|
||
|
|
func ScanPlayerWallet(c *gin.Context) {
|
||
|
|
a := app.NewApp(c)
|
||
|
|
defer func() {
|
||
|
|
a.Response()
|
||
|
|
}()
|
||
|
|
req := new(values.PlayerWalletScanReq)
|
||
|
|
if !a.S(req) {
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
to, cancel := context.WithTimeout(context.Background(), 5*time.Second)
|
||
|
|
defer cancel()
|
||
|
|
ret, err := call.GetCaller().GetApp().Call(to, "blockpay", "scanPlayerWallet", mqrpc.Param(&pb.BlockPayScanPlayerWalletReq{
|
||
|
|
Down: req.Down,
|
||
|
|
Up: req.Up,
|
||
|
|
}))
|
||
|
|
if err != "" {
|
||
|
|
log.Error("err:%e", err)
|
||
|
|
a.Code = values.CodeRetry
|
||
|
|
return
|
||
|
|
}
|
||
|
|
retData := new(pb.BlockPayScanPlayerWalletResp)
|
||
|
|
if err := proto.Unmarshal(ret.([]byte), retData); err != nil {
|
||
|
|
log.Error("err:%v", err)
|
||
|
|
a.Code = values.CodeRetry
|
||
|
|
return
|
||
|
|
}
|
||
|
|
if retData.Code != 0 {
|
||
|
|
a.Code = values.CodeRetry
|
||
|
|
a.Msg = retData.Msg
|
||
|
|
return
|
||
|
|
}
|
||
|
|
a.Data = values.PlayerWalletScanResp{Success: retData.Success, Fail: retData.Fail}
|
||
|
|
}
|
||
|
|
|
||
|
|
func GetFee(a *app.Gin) int64 {
|
||
|
|
to, cancel := context.WithTimeout(context.Background(), 5*time.Second)
|
||
|
|
defer cancel()
|
||
|
|
ret, err := call.GetCaller().GetApp().Call(to, "blockpay", "getFee", mqrpc.Param(&pb.CommonMsg{}))
|
||
|
|
if err != "" {
|
||
|
|
log.Error("err:%e", err)
|
||
|
|
a.Code = values.CodeParam
|
||
|
|
return 0
|
||
|
|
}
|
||
|
|
retData := new(pb.BlockPayGetFeeResp)
|
||
|
|
if err := proto.Unmarshal(ret.([]byte), retData); err != nil {
|
||
|
|
log.Error("err:%v", err)
|
||
|
|
a.Code = values.CodeParam
|
||
|
|
return 0
|
||
|
|
}
|
||
|
|
if retData.Code != 0 {
|
||
|
|
a.Code = values.CodeParam
|
||
|
|
a.Msg = retData.Msg
|
||
|
|
return 0
|
||
|
|
}
|
||
|
|
return retData.Fee
|
||
|
|
}
|