|
|
|
package serviceGame
|
|
|
|
|
|
|
|
import (
|
|
|
|
"context"
|
|
|
|
"crypto/md5"
|
|
|
|
"encoding/hex"
|
|
|
|
"encoding/json"
|
|
|
|
"fmt"
|
|
|
|
"github.com/gogf/gf/v2/errors/gerror"
|
|
|
|
"github.com/gogf/gf/v2/frame/g"
|
|
|
|
"go.mongodb.org/mongo-driver/bson"
|
|
|
|
"math/rand"
|
|
|
|
"time"
|
|
|
|
"tyj_admin/api/v1/game"
|
|
|
|
"tyj_admin/internal/model/entity"
|
|
|
|
"tyj_admin/internal/serviceGame/internal"
|
|
|
|
)
|
|
|
|
|
|
|
|
type IGameOrder interface {
|
|
|
|
GetOrders(ctx context.Context, req *game.OrderSearchReq) (res *game.OrderSearchRes, err error)
|
|
|
|
GetOrderCount(ctx context.Context, req *game.OrderCountReq) (res *game.OrderCountRes, err error)
|
|
|
|
ChangeCoin(ctx context.Context, req *game.AddCoinReq) (res *game.AddCoinRes, err error)
|
|
|
|
AndroidDeposit(ctx context.Context, req *game.OrderDepositReq) (res *game.OrderDepositRes, err error)
|
|
|
|
IosDeposit(ctx context.Context, req *game.OrderDepositReq) (res *game.OrderDepositRes, err error)
|
|
|
|
}
|
|
|
|
|
|
|
|
type gameOrderImpl struct {
|
|
|
|
}
|
|
|
|
|
|
|
|
var gameOrderService = gameOrderImpl{}
|
|
|
|
|
|
|
|
func GameOrder() IGameOrder {
|
|
|
|
return &gameOrderService
|
|
|
|
}
|
|
|
|
|
|
|
|
func (o gameOrderImpl) ChangeCoin(ctx context.Context, req *game.AddCoinReq) (res *game.AddCoinRes, err error) {
|
|
|
|
res = new(game.AddCoinRes)
|
|
|
|
mqttMoney := internal.MqttChangeMoney{}
|
|
|
|
mqttMoney.Body.Money = req.Amount
|
|
|
|
mqttMoney.Body.Uids = req.Uid
|
|
|
|
mqttMoney.Body.Type = req.AmountType
|
|
|
|
mqttMoney.Body.ModuleType = "changeMoney"
|
|
|
|
mqttMoney.ModuleId = "webadmin"
|
|
|
|
mqttMoney.ReqId = 1
|
|
|
|
js, err := json.Marshal(mqttMoney)
|
|
|
|
connectCh := make(chan bool)
|
|
|
|
server := "192.168.2.100:3005"
|
|
|
|
internal.SendMqttMoney(js, connectCh, server)
|
|
|
|
defer close(connectCh)
|
|
|
|
var result bool
|
|
|
|
for {
|
|
|
|
select {
|
|
|
|
case result = <-connectCh:
|
|
|
|
if result == false {
|
|
|
|
err = gerror.New("失败")
|
|
|
|
return
|
|
|
|
} else {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
type AndroIdRecharge struct {
|
|
|
|
Server int32 `json:"server"`
|
|
|
|
RechargeId int32 `json:"rechargeId"`
|
|
|
|
CpOrderId string `json:"cpOrderId"`
|
|
|
|
OrderId string `json:"orderId"`
|
|
|
|
Timestamp int64 `json:"timestamp"`
|
|
|
|
Account string `json:"account"`
|
|
|
|
Channel int32 `json:"channel"`
|
|
|
|
Amount int32 `json:"amount"`
|
|
|
|
}
|
|
|
|
|
|
|
|
type IosRecharge struct {
|
|
|
|
OrderId string `json:"orderId"`
|
|
|
|
Account string `json:"uid"`
|
|
|
|
Receipt string `json:"receipt"`
|
|
|
|
Server int32 `json:"server"`
|
|
|
|
TimeStamp int64 `json:"timeStamp"`
|
|
|
|
ItemId int32 `json:"itemId"`
|
|
|
|
Gm string `json:"gm"`
|
|
|
|
Token string `json:"token"`
|
|
|
|
}
|
|
|
|
|
|
|
|
type DepositResult struct {
|
|
|
|
Status int `json:"status"`
|
|
|
|
Code interface{} `json:"code"`
|
|
|
|
Msg string `json:"msg"`
|
|
|
|
}
|
|
|
|
|
|
|
|
func (o gameOrderImpl) AndroidDeposit(ctx context.Context, req *game.OrderDepositReq) (res *game.OrderDepositRes, err error) {
|
|
|
|
orderId := fmt.Sprintf("GM%v%v%v", req.Account, time.Now().UnixMilli(), rand.Int())
|
|
|
|
recharge := AndroIdRecharge{}
|
|
|
|
recharge.Server = req.ServerId
|
|
|
|
recharge.RechargeId = req.DepositId
|
|
|
|
recharge.CpOrderId = orderId
|
|
|
|
recharge.OrderId = orderId
|
|
|
|
recharge.Timestamp = time.Now().Unix()
|
|
|
|
recharge.Account = req.Account
|
|
|
|
if req.DepositId == 1001 {
|
|
|
|
recharge.Amount = 6
|
|
|
|
} else if req.DepositId == 1002 {
|
|
|
|
recharge.Amount = 30
|
|
|
|
} else if req.DepositId == 1003 {
|
|
|
|
recharge.Amount = 68
|
|
|
|
}
|
|
|
|
js, err := json.Marshal(recharge)
|
|
|
|
ip := internal.ServerConfig[0]["topServer"].(string)
|
|
|
|
rs, err := g.Client().Post(ctx, ip+"/recharge", js)
|
|
|
|
result := DepositResult{}
|
|
|
|
err = json.Unmarshal(rs.ReadAll(), &result)
|
|
|
|
if result.Status == 2 {
|
|
|
|
err = nil
|
|
|
|
return
|
|
|
|
}
|
|
|
|
err = gerror.New(result.Msg)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
func (o gameOrderImpl) IosDeposit(ctx context.Context, req *game.OrderDepositReq) (res *game.OrderDepositRes, err error) {
|
|
|
|
//orderId := "GM" + req.Account + time.Now().String() + strconv.Itoa(rand.Int())
|
|
|
|
orderId := fmt.Sprintf("GM%v%v%v", req.Account, time.Now().UnixMilli(), rand.Int())
|
|
|
|
recharge := IosRecharge{}
|
|
|
|
recharge.OrderId = orderId
|
|
|
|
recharge.Account = req.Account
|
|
|
|
recharge.Receipt = "receipt"
|
|
|
|
recharge.Server = req.ServerId
|
|
|
|
recharge.TimeStamp = time.Now().Unix()
|
|
|
|
recharge.ItemId = req.DepositId
|
|
|
|
recharge.Gm = "3EAB9E4B6F9CB7255A27D2084D78C2FB"
|
|
|
|
buf := fmt.Sprintf("%v%v%v%v%v%vdadf31fd9b66bd847609247800433e6c", recharge.OrderId, recharge.ItemId, recharge.Receipt, recharge.Server, recharge.TimeStamp, recharge.Account)
|
|
|
|
m := md5.New()
|
|
|
|
m.Write([]byte(buf))
|
|
|
|
recharge.Token = hex.EncodeToString(m.Sum(nil))
|
|
|
|
js, err := json.Marshal(recharge)
|
|
|
|
ip := internal.ServerConfig[0]["topServer"].(string)
|
|
|
|
rs, err := g.Client().Post(ctx, ip+"/recharge", js)
|
|
|
|
result := DepositResult{}
|
|
|
|
err = json.Unmarshal(rs.ReadAll(), &result)
|
|
|
|
if result.Status == 2 {
|
|
|
|
err = nil
|
|
|
|
return
|
|
|
|
}
|
|
|
|
err = gerror.New(result.Msg)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
func (o gameOrderImpl) GetOrders(ctx context.Context, req *game.OrderSearchReq) (res *game.OrderSearchRes, err error) {
|
|
|
|
account := req.Account
|
|
|
|
role := new(entity.RoleDetail)
|
|
|
|
res = new(game.OrderSearchRes)
|
|
|
|
if req.SearchType == 1 { //账号+渠道查询
|
|
|
|
if len(req.Channel) > 0 {
|
|
|
|
account = req.Channel + "_" + account
|
|
|
|
}
|
|
|
|
g.Try(ctx, func(ctx context.Context) {
|
|
|
|
res.Orders, err = internal.GetOrdersByAccount(ctx, account)
|
|
|
|
})
|
|
|
|
} else if req.SearchType == 2 { //角色UID+区服
|
|
|
|
role, err = internal.GetRoleDetail(ctx, req.Uid, req.ServerId)
|
|
|
|
if err != nil {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
account = role.Account
|
|
|
|
g.Try(ctx, func(ctx context.Context) {
|
|
|
|
res.Orders, err = internal.GetOrdersByAccount(ctx, account)
|
|
|
|
})
|
|
|
|
} else if req.SearchType == 3 { //时间段查询
|
|
|
|
g.Try(ctx, func(ctx context.Context) {
|
|
|
|
res.Orders, err = internal.GetOrdersByTime(ctx, req.LowTime, req.UpTime)
|
|
|
|
})
|
|
|
|
} else if req.SearchType == 4 { //时间段查询
|
|
|
|
g.Try(ctx, func(ctx context.Context) {
|
|
|
|
res.Orders, err = internal.GetOrdersByOrderId(ctx, req.OrderId)
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
func (o gameOrderImpl) GetOrderCount(ctx context.Context, req *game.OrderCountReq) (res *game.OrderCountRes, err error) {
|
|
|
|
filter := bson.M{}
|
|
|
|
|
|
|
|
if req.Amount > 0 {
|
|
|
|
switch req.CompareType {
|
|
|
|
case 1:
|
|
|
|
filter["money"] = req.Amount
|
|
|
|
case 2:
|
|
|
|
filter["money"] = bson.M{"$lte": req.Amount}
|
|
|
|
case 3:
|
|
|
|
filter["money"] = bson.M{"$lt": req.Amount}
|
|
|
|
case 4:
|
|
|
|
filter["money"] = bson.M{"$gt": req.Amount}
|
|
|
|
case 5:
|
|
|
|
filter["money"] = bson.M{"$gte": req.Amount}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if req.Gender > 0 {
|
|
|
|
filter["gender"] = req.Gender
|
|
|
|
}
|
|
|
|
if req.LowAge >= 0 && req.UpAge > 0 {
|
|
|
|
low := (time.Now().AddDate(-req.UpAge, 0, 0)).Unix()
|
|
|
|
up := (time.Now().AddDate(-req.LowAge, 0, 0)).Unix()
|
|
|
|
filter["bearTime"] = bson.M{"$gte": low, "$lte": up}
|
|
|
|
}
|
|
|
|
|
|
|
|
g.Try(ctx, func(ctx context.Context) {
|
|
|
|
res.Orders, err = internal.GetOrderCount(ctx, filter, req.ServerId)
|
|
|
|
})
|
|
|
|
|
|
|
|
return
|
|
|
|
}
|