补充逻辑

dev_aagame_provider
zhora 2 months ago
parent b5a3e29bf1
commit 6fedc45331
  1. 2
      call/provider.go
  2. 50
      call/rank.go
  3. 7
      config/config.go
  4. 17
      modules/backend/bdb/exec.go
  5. 4
      modules/backend/handler/examine/examine.go
  6. 2
      modules/backend/handler/statistics/withdrawListData.go
  7. 88
      modules/backend/handler/tgrobot/tgrobot.go
  8. 3
      modules/backend/middleware/token.go
  9. 17
      modules/backend/models/db.go
  10. 2
      modules/backend/module.go
  11. 1
      modules/backend/routers/routers.go
  12. 12
      modules/backend/routers/routers_tgrobot.go
  13. 49
      modules/backend/values/gameuser.go
  14. 26
      modules/backend/values/gm.go
  15. 1
      modules/backend/values/statistics.go
  16. 20
      modules/customer/handler/guser/getGameUserInfo.go
  17. 2
      modules/pay/propay/base.go
  18. 1
      modules/pay/timer.go
  19. 9
      modules/pay/tkpay/base.go
  20. 7
      modules/pay/virgopay/base.go
  21. 46
      modules/web/providers/base/base.go
  22. 11
      modules/web/providers/jin/handler.go
  23. 23
      util/struct.go

@ -87,7 +87,7 @@ func GetConfigProviderGameListByID(provider, gameID int) *common.ConfigProviderG
} }
func GetProviderGameRtp(uid int) int { func GetProviderGameRtp(uid int) int {
return 90 return 85
} }
func GetProviderUserName(name string) string { func GetProviderUserName(name string) string {

@ -82,6 +82,21 @@ func RankHandler() {
awardAt time.Time awardAt time.Time
) )
for rankCycle := range rank.RankCycleMap { for rankCycle := range rank.RankCycleMap {
// 获取上一期排行榜时间
_, lastJackpotKey := getRankJackpotPreKey(rank.RankType, rankCycle)
lastJackpot := RankJackpotPreGet(rank.RankType, rankCycle)
lastJackpotKeyLess := lastJackpotKey + "|less"
if lastJackpot > 0 && !db.Redis().Exist(lastJackpotKeyLess) { // 上一期奖池不为空,且上一期奖池未发奖,直接发奖
log.Debug("rankAward replenish!!! %s,%d", lastJackpotKey, lastJackpot)
go func() {
rankAward(&rankTicker{
rankType: rank.RankType,
rankCycle: rankCycle,
activityId: rank.ID,
})
}()
}
switch rankCycle { switch rankCycle {
case "1": case "1":
awardAt = util.GetZeroTime(now.AddDate(0, 0, 1)).Add(30 * time.Minute) awardAt = util.GetZeroTime(now.AddDate(0, 0, 1)).Add(30 * time.Minute)
@ -114,7 +129,20 @@ func RankHandler() {
for { for {
select { select {
case <-ticker.timer.C: case <-ticker.timer.C:
rankAward(ticker) go func() {
rankAward(ticker)
}()
var nextAwardAt time.Time
switch ticker.rankCycle {
case "1":
nextAwardAt = util.GetZeroTime(time.Now().AddDate(0, 0, 1)).Add(30 * time.Minute)
case "2":
nextAwardAt = util.GetWeekZeroTime(time.Now()).AddDate(0, 0, 7).Add(45 * time.Minute)
case "3":
nextAwardAt = util.GetFirstDateOfMonth(time.Now()).AddDate(0, 1, 0).Add(60 * time.Minute)
}
log.Debug("rankAward, %d %s next award at:%s", ticker.rankType, ticker.rankCycle, nextAwardAt.Format(time.DateTime))
ticker.timer.Reset(nextAwardAt.Sub(time.Now()))
case <-ticker.ctx.Done(): case <-ticker.ctx.Done():
ticker.timer.Stop() ticker.timer.Stop()
return return
@ -243,9 +271,16 @@ func rankAward(ticker *rankTicker) {
if lessJackpot < 0 { if lessJackpot < 0 {
lessJackpot = 0 lessJackpot = 0
} }
err = db.Redis().GetRedis().Set(context.Background(), preJackpotLessKey, lessJackpot, 0).Err() if !db.Redis().Exist(preJackpotLessKey) {
if err != nil { err = db.Redis().GetRedis().Set(context.Background(), preJackpotLessKey, lessJackpot, 0).Err()
log.Error("share rankAward, %s set less-jackpot err, %s", preJackpotLessKey, err.Error()) if err != nil {
log.Error("share rankAward, %s set less-jackpot err, %s", preJackpotLessKey, err.Error())
}
_, _, _, jackpotKeyNow := getRankJackpotKey(rankConfig.RankType, ticker.rankCycle)
_, err = db.Redis().Incr(jackpotKeyNow, lessJackpot)
if err != nil {
log.Error("rankAward, %s:%s incr less-jackpot err, %s", jackpotKey, jackpotKeyNow, err.Error())
}
} }
var expire int64 var expire int64
switch ticker.rankCycle { switch ticker.rankCycle {
@ -257,13 +292,6 @@ func rankAward(ticker *rankTicker) {
expire = 24 * 60 * 60 * 30 * 2 expire = 24 * 60 * 60 * 30 * 2
} }
db.Redis().Expire(preJackpotLessKey, time.Duration(expire)*time.Second) db.Redis().Expire(preJackpotLessKey, time.Duration(expire)*time.Second)
if lessJackpot > 0 {
_, _, _, jackpotKeyNow := getRankJackpotKey(rankConfig.RankType, ticker.rankCycle)
_, err = db.Redis().Incr(jackpotKeyNow, lessJackpot)
if err != nil {
log.Error("rankAward, %s:%s incr less-jackpot err, %s", jackpotKey, jackpotKeyNow, err.Error())
}
}
} }
// UpdateRankValue 更新玩家数值(mode:1打码,2充值) // UpdateRankValue 更新玩家数值(mode:1打码,2充值)

@ -146,9 +146,10 @@ type Configure struct {
TLS bool TLS bool
} }
Backend struct { Backend struct {
Addr string Addr string
DB string DB string
Oss OssParams Oss OssParams
AdminToken string
} }
Rummy struct { Rummy struct {
SettleTime int SettleTime int

@ -2,6 +2,9 @@ package bdb
import ( import (
"encoding/json" "encoding/json"
"server/common"
"server/config"
"server/db"
"server/modules/backend/values" "server/modules/backend/values"
"github.com/liangdas/mqant/log" "github.com/liangdas/mqant/log"
@ -19,3 +22,17 @@ func GetPowerByRole(role int) map[int][]int {
} }
return ret return ret
} }
func InitAdminToken() {
if config.GetConfig().Backend.AdminToken == "" {
return
}
one := new(values.User)
key := common.GetBackendTokenKey(config.GetConfig().Backend.AdminToken)
if err := db.Redis().GetJsonData(key, one); err != nil || one.Account == "" {
one.Account = "admin"
one.Name = "admin"
one.Role = values.UserRoleAdmin
db.Redis().SetJsonData(key, one)
}
}

@ -28,7 +28,7 @@ func WithdrawList(c *gin.Context) {
return return
} }
table1 := `(SELECT id,uid,channel_id,pay_channel,orderid,apipayid,payaccount,amount,create_time,callback_time,status,operator from withdraw_order %s)a` table1 := `(SELECT id,uid,channel_id,pay_channel,orderid,fail_reason,apipayid,payaccount,amount,create_time,callback_time,status,operator from withdraw_order %s)a`
table2 := `(SELECT id,platform,mobile,tag from users %s)b` table2 := `(SELECT id,platform,mobile,tag from users %s)b`
table3 := `(SELECT uid,inr from player_currency)c` table3 := `(SELECT uid,inr from player_currency)c`
table4 := `(SELECT uid,total_recharge,total_recharge_count,total_withdraw,total_withdraw_count FROM recharge_info)d` table4 := `(SELECT uid,total_recharge,total_recharge_count,total_withdraw,total_withdraw_count FROM recharge_info)d`
@ -75,7 +75,7 @@ func WithdrawList(c *gin.Context) {
} }
sqlCount := " SELECT COUNT(*) AS count from" sqlCount := " SELECT COUNT(*) AS count from"
sqlList := `SELECT a.id,a.uid,a.channel_id,a.pay_channel,a.orderid as OrderID,a.apipayid as APIPayID,a.payaccount,a.amount,a.create_time,a.callback_time, sqlList := `SELECT a.id,a.uid,a.channel_id,a.pay_channel,a.orderid as OrderID,a.fail_reason as FailReason,a.apipayid as APIPayID,a.payaccount,a.amount,a.create_time,a.callback_time,
a.status,a.operator,b.platform,b.mobile,b.tag,c.inr,d.total_recharge,d.total_recharge_count,d.total_withdraw,d.total_withdraw_count from ` a.status,a.operator,b.platform,b.mobile,b.tag,c.inr,d.total_recharge,d.total_recharge_count,d.total_withdraw,d.total_withdraw_count from `
querySql := fmt.Sprintf(table1, table1Condition) + " inner join " + fmt.Sprintf(table2, table2Condition) + " on a.uid = b.id inner join " + querySql := fmt.Sprintf(table1, table1Condition) + " inner join " + fmt.Sprintf(table2, table2Condition) + " on a.uid = b.id inner join " +
table3 + " on a.uid = c.uid inner join " + table4 + " on a.uid = d.uid " table3 + " on a.uid = c.uid inner join " + table4 + " on a.uid = d.uid "

@ -84,7 +84,7 @@ func WithdrawListData(c *gin.Context) {
// 退出成功金额 // 退出成功金额
func getWithDrawAmountBySql(s, e int64, event int) int64 { func getWithDrawAmountBySql(s, e int64, event int) int64 {
var Amount int64 var Amount int64
amountTotal := `SELECT SUM(amount) as RechargeAmount FROM recharge_order WHERE event = %v AND status = %v AND u.create_time >= %d AND u.create_time < %d` amountTotal := `SELECT SUM(amount) as RechargeAmount FROM withdraw_order WHERE event = %v AND status = %v AND u.create_time >= %d AND u.create_time < %d`
err := db.Mysql().QueryBySql(fmt.Sprintf(amountTotal, common.CurrencyEventWithDraw, event, s, e), &Amount) err := db.Mysql().QueryBySql(fmt.Sprintf(amountTotal, common.CurrencyEventWithDraw, event, s, e), &Amount)
if err != nil { if err != nil {
log.Error("查询用户总退出失败, error : [%s]", err.Error()) log.Error("查询用户总退出失败, error : [%s]", err.Error())

@ -0,0 +1,88 @@
package handler
import (
"fmt"
"server/common"
"server/db"
"server/modules/backend/app"
"server/modules/backend/values"
"time"
"github.com/gin-gonic/gin"
)
type GetPayPerReq struct {
Second int // 秒
}
type GetPayPerResp struct {
Per int64
SuccessCount int64
TotalCount int64
}
// 查询支付成功率
func GetPayPer(c *gin.Context) {
a := app.NewApp(c)
defer func() {
a.Response()
}()
req := new(GetPayPerReq)
a.S(req)
if req.Second <= 0 {
a.Code = values.CodeParam
return
}
resp := &GetPayPerResp{}
a.Data = resp
su := time.Now().Unix() - int64(req.Second)
count := getPayCount(0, su, 0)
successCount := getPaySuccessCount(0, su, 0)
if count > 0 {
resp.Per = successCount * 100 / count
}
resp.SuccessCount = successCount
resp.TotalCount = count
}
// 获取付费总单数
func getPayCount(channel int, su, eu int64) (count int64) {
channelSql := ""
if channel > 0 {
channelSql = fmt.Sprintf(` and channel_id = %d `, channel)
}
var start, end string
if su > 0 {
suStr := time.Unix(su, 0)
start = fmt.Sprintf(" and created_at >= '%s'", suStr.Format("2006-01-02 15:04:05"))
}
if eu > 0 {
euStr := time.Unix(eu, 0)
end = fmt.Sprintf(" and created_at < '%s'", euStr.Format("2006-01-02 15:04:05"))
}
sql := fmt.Sprintf(`SELECT ifNull(count(*),0) as count from recharge_order WHERE event = %d %s %s %s`,
common.CurrencyEventReCharge, start, end, channelSql)
db.Mysql().QueryCountBySql(sql, &count)
return
}
// 获取付费成功总单数
func getPaySuccessCount(channel int, su, eu int64) (count int64) {
channelSql := ""
if channel > 0 {
channelSql = fmt.Sprintf(` and channel_id = %d `, channel)
}
var start, end string
if su > 0 {
suStr := time.Unix(su, 0)
start = fmt.Sprintf(" and created_at >= '%s'", suStr.Format("2006-01-02 15:04:05"))
}
if eu > 0 {
euStr := time.Unix(eu, 0)
end = fmt.Sprintf(" and created_at < '%s'", euStr.Format("2006-01-02 15:04:05"))
}
sql := fmt.Sprintf(`SELECT ifNull(count(*),0) as count from recharge_order WHERE event = %d and status = %d %s %s %s`,
common.CurrencyEventReCharge, common.StatusROrderPay, start, end, channelSql)
db.Mysql().QueryCountBySql(sql, &count)
return
}

@ -2,6 +2,7 @@ package middleware
import ( import (
"server/common" "server/common"
"server/config"
"server/db" "server/db"
"server/modules/backend/app" "server/modules/backend/app"
"server/modules/backend/values" "server/modules/backend/values"
@ -59,7 +60,7 @@ func TokenMiddleWare() gin.HandlerFunc {
c.Next() c.Next()
// 刷新token过期时间 // 刷新token过期时间
defer func() { defer func() {
if token == values.AdminToken { if token == config.GetConfig().Backend.AdminToken {
return return
} }
err := db.Redis().Expire(common.GetBackendTokenKey(token), values.RedisTokenEx) err := db.Redis().Expire(common.GetBackendTokenKey(token), values.RedisTokenEx)

@ -1425,14 +1425,14 @@ func GetTopGames(su, eu int64, opt, num int, channel ...*int) []*values.OneGameD
sql := "" sql := ""
switch opt { switch opt {
case 1: case 1:
sql = fmt.Sprintf(`SELECT provider as Provider,game_id as GameID,sum(amount) as Amount from provider_bet_record WHERE time>=%d and time <%d and (type = %d or type = %d or type = %d)`, sql = fmt.Sprintf(`SELECT provider as Provider,game_id as GameID, game_name as GameName,sum(amount) as Amount from provider_bet_record WHERE time>=%d and time <%d and (type = %d or type = %d or type = %d)`,
su, eu, common.SessionTypeBet, common.SessionTypeSettle, common.SessionTypeBuyIn) su, eu, common.SessionTypeBet, common.SessionTypeSettle, common.SessionTypeBuyIn)
sql += PackChannels(channel...) + " group by game_id order by amount desc" sql += PackChannels(channel...) + " group by game_id order by amount desc"
case 2: case 2:
sql = fmt.Sprintf(`SELECT provider as Provider,game_id as GameID,sum(amount - settle) as Amount from provider_bet_record WHERE time>=%d and time <%d`, su, eu) sql = fmt.Sprintf(`SELECT provider as Provider,game_id as GameID,game_name as GameName,sum(amount - settle) as Amount from provider_bet_record WHERE time>=%d and time <%d`, su, eu)
sql += PackChannels(channel...) + " group by game_id order by amount desc" sql += PackChannels(channel...) + " group by game_id order by amount desc"
case 3: case 3:
sql = fmt.Sprintf(`SELECT provider as Provider,game_id as GameID,sum(settle - amount) as Amount from provider_bet_record WHERE time>=%d and time <%d`, su, eu) sql = fmt.Sprintf(`SELECT provider as Provider,game_id as GameID,game_name as GameName,sum(settle - amount) as Amount from provider_bet_record WHERE time>=%d and time <%d`, su, eu)
sql += PackChannels(channel...) + " group by game_id order by amount desc" sql += PackChannels(channel...) + " group by game_id order by amount desc"
default: default:
return nil return nil
@ -1444,9 +1444,14 @@ func GetTopGames(su, eu int64, opt, num int, channel ...*int) []*values.OneGameD
index := -1 index := -1
for i, v := range ret { for i, v := range ret {
game := call.GetConfigGameListByID(v.Provider, v.GameID) var gameCfg *common.ConfigGameList
if game != nil { if v.Provider == common.ProviderJin {
v.Name = game.Name gameCfg = call.GetConfigGameListByCode(v.Provider, v.GameName)
} else {
gameCfg = call.GetConfigGameListByID(v.Provider, v.GameID)
}
if gameCfg != nil {
v.Name = gameCfg.Name
} }
// 去掉amount<0的部分 // 去掉amount<0的部分
if opt > 1 { if opt > 1 {

@ -52,6 +52,8 @@ func (b *Backend) OnInit(app module.App, settings *conf.ModuleSettings) {
// 自动初始化后台数据库 // 自动初始化后台数据库
bdb.MigrateDB() bdb.MigrateDB()
// 初始化常驻admintoken
bdb.InitAdminToken()
// 自动初始化游戏服数据库 // 自动初始化游戏服数据库
MigrateDB() MigrateDB()

@ -46,5 +46,6 @@ func SetUpRouter() *gin.Engine {
output(r) output(r)
firstPage(r) firstPage(r)
notice(r) notice(r)
tgrobot(r)
return r return r
} }

@ -0,0 +1,12 @@
// 账号相关的接口
package routers
import (
handler "server/modules/backend/handler/tgrobot"
"github.com/gin-gonic/gin"
)
func tgrobot(e *gin.Engine) {
e.POST("/tgrobot/getPayPer", handler.GetPayPer)
}

@ -140,16 +140,47 @@ type GetGameUserInfoResp struct {
Rtp int Rtp int
} }
type GetGameUserInfoV1Resp struct {
UID int
Nick string
Channel int
Phone string
OpenID string
CashBrl int64
WithdrawalBrl int64
CashUsdt int64
WithdrawalUsdt int64
RechargeBrl int64
WithdrawBrl int64
RechargeUsdt int64
WithdrawUsdt int64
Online bool
Status int
Birth int64
IP string
LastLogin int64
Tag string
UserGameData []UserGameInfo
OutputData map[string]string
Gpsadid string
SubAccount []int
Rtp int
}
type UserGameInfo struct { type UserGameInfo struct {
// GameId int // 游戏id GameId int `json:"GameId"`
GameName string WinPer string `json:"WinPer"`
GameCount int64 // 游戏局数 WinCount int `json:"WinCount"`
// WinPer string // 胜率 WinProfit int `json:"WinProfit"`
Profit int64 // 利润 LoseCount int `json:"LoseCount"`
// WinCount int64 // 胜利局数 LoseProfit int `json:"LoseProfit"`
// WinProfit int64 // 胜利的金钱总额 Name string `json:"Name"`
// LoseCount int64 // 输的局数 Provider int `json:"Provider"`
// LoseProfit int64 // 失败的金钱总额
GameName string
GameCount int64 // 游戏局数
Profit int64 // 利润
ProviderName string
} }
// GetGameUserAllBalanceReq 获取游戏玩家所有流水详情 // GetGameUserAllBalanceReq 获取游戏玩家所有流水详情

@ -236,6 +236,8 @@ func CheckQueryControl(data interface{}, req *GMConfigCommonListReq) (string, st
case *common.ConfigGameList: case *common.ConfigGameList:
if req != nil && req.Condition != nil { if req != nil && req.Condition != nil {
sql := "" sql := ""
providerSql := ""
tagIdsSql := ""
gameProviderList, ok := req.Condition["GameProvider"] gameProviderList, ok := req.Condition["GameProvider"]
if ok { if ok {
var gameProviderValue string var gameProviderValue string
@ -245,8 +247,30 @@ func CheckQueryControl(data interface{}, req *GMConfigCommonListReq) (string, st
} }
gameProviderValue += fmt.Sprintf("%d", util.ToInt(v)) gameProviderValue += fmt.Sprintf("%d", util.ToInt(v))
} }
sql = fmt.Sprintf(" `game_provider` in (%s)", gameProviderValue) providerSql = fmt.Sprintf(" `game_provider` in (%s)", gameProviderValue)
} }
tagIds, ok := req.Condition["TagIds"]
if ok {
for _, v := range tagIds.([]interface{}) {
if tagIdsSql != "" {
tagIdsSql += " or "
}
tagIdsSql += fmt.Sprintf(" JSON_CONTAINS(`tag_ids`, '%d') ", util.ToInt(v))
}
tagIdsSql = fmt.Sprintf(" `tag_ids` != '' and ( %s )", tagIdsSql)
}
if providerSql != "" {
sql += providerSql
}
if tagIdsSql != "" {
if sql != "" {
sql += fmt.Sprintf(" and ( %s ) ", tagIdsSql)
} else {
sql = tagIdsSql
}
}
return sql, "" return sql, ""
} }
} }

@ -280,6 +280,7 @@ type RealBetData struct {
type OneGameData struct { type OneGameData struct {
GameID int GameID int
GameName string
Name string Name string
Provider int Provider int
Amount int64 Amount int64

@ -100,7 +100,7 @@ func GetGameUserInfo(c *gin.Context) {
// } // }
//black := &common.ConfigMillionBlack{UID: uid} //black := &common.ConfigMillionBlack{UID: uid}
//db.Mysql().Get(black) //db.Mysql().Get(black)
resp := values.GetGameUserInfoResp{ resp := values.GetGameUserInfoV1Resp{
UID: user.Id, UID: user.Id,
Nick: user.Nick, Nick: user.Nick,
//Recharge: info.TotalCharge, //Recharge: info.TotalCharge,
@ -128,7 +128,7 @@ func GetGameUserInfo(c *gin.Context) {
//PointControlValue: uutil.FormatFloat(float64(pointControl.CurControlNum)/100, 2), //PointControlValue: uutil.FormatFloat(float64(pointControl.CurControlNum)/100, 2),
//PointControlTargetValue: uutil.FormatFloat(float64(pointControl.ControlNum), 2), //PointControlTargetValue: uutil.FormatFloat(float64(pointControl.ControlNum), 2),
//PointControlPer: pointControl.ControlPer, //PointControlPer: pointControl.ControlPer,
UserGameData: GetUserGameInfo(user.Id), UserGameData: ChangeUserGameInfo(GetUserGameInfo(user.Id)),
//Gpsadid: user.DeviceId, //Gpsadid: user.DeviceId,
//Black: black, //Black: black,
} }
@ -181,3 +181,19 @@ func GetUserGameInfo(uid int) map[string][]values.UserGameInfo {
ret["总计"] = []values.UserGameInfo{{GameCount: totalCount, Profit: totalProfit}} ret["总计"] = []values.UserGameInfo{{GameCount: totalCount, Profit: totalProfit}}
return ret return ret
} }
// 获取用户游戏信息
func ChangeUserGameInfo(gameInfo map[string][]values.UserGameInfo) []values.UserGameInfo {
var result []values.UserGameInfo
for k, games := range gameInfo {
for _, v := range games {
result = append(result, values.UserGameInfo{
GameName: v.GameName,
GameCount: v.GameCount,
Profit: v.Profit,
ProviderName: k,
})
}
}
return result
}

@ -77,7 +77,7 @@ func (s *Sub) GetResp() (proto.Message, error) {
} else if s.Base.Opt == base.OPTWithdraw { } else if s.Base.Opt == base.OPTWithdraw {
resp := s.Base.Resp.(*WithdrawResp) resp := s.Base.Resp.(*WithdrawResp)
if s.Base.Status == 0 && resp.Code != 0 { if s.Base.Status == 0 && resp.Code != 0 {
return nil, errors.New("withdraw fail") return nil, fmt.Errorf("withdraw fail, %s", resp.Msg)
} }
return &pb.InnerWithdrawResp{APIOrderID: resp.Data.TransferID, Channel: uint32(values.ProPay), Status: uint32(s.Base.Status)}, nil return &pb.InnerWithdrawResp{APIOrderID: resp.Data.TransferID, Channel: uint32(values.ProPay), Status: uint32(s.Base.Status)}, nil
} else if s.Base.Opt == base.OPTQueryWithdraw { } else if s.Base.Opt == base.OPTQueryWithdraw {

@ -294,6 +294,7 @@ func TryWithdraw(or *common.WithdrawOrder) {
log.Debug("order:%v,err:%v", req.OrderID, err) log.Debug("order:%v,err:%v", req.OrderID, err)
if err != nil { if err != nil {
log.Error("order:%+v,err:%v", or, err) log.Error("order:%+v,err:%v", or, err)
or.FailReason = err.Error()
call.ReturnBackWithdraw(or, common.StatusROrderPay, common.StatusROrderFail, int(req.Channel)) call.ReturnBackWithdraw(or, common.StatusROrderPay, common.StatusROrderFail, int(req.Channel))
return return
} }

@ -4,7 +4,6 @@ import (
"errors" "errors"
"fmt" "fmt"
"net/http" "net/http"
"server/common"
"server/modules/pay/base" "server/modules/pay/base"
"server/modules/pay/values" "server/modules/pay/values"
"server/pb" "server/pb"
@ -76,7 +75,7 @@ func (s *Sub) GetResp() (proto.Message, error) {
} else if s.Base.Opt == base.OPTWithdraw { } else if s.Base.Opt == base.OPTWithdraw {
resp := s.Base.Resp.(*WithdrawResp) resp := s.Base.Resp.(*WithdrawResp)
if s.Base.Status == 0 && resp.Code != 200 { if s.Base.Status == 0 && resp.Code != 200 {
return nil, errors.New("withdraw fail") return nil, fmt.Errorf("withdraw fail, %s", resp.Message)
} }
return &pb.InnerWithdrawResp{APIOrderID: fmt.Sprintf("%v", resp.Data.ID), Channel: uint32(values.TKPay), Status: uint32(s.Base.Status)}, nil return &pb.InnerWithdrawResp{APIOrderID: fmt.Sprintf("%v", resp.Data.ID), Channel: uint32(values.TKPay), Status: uint32(s.Base.Status)}, nil
} else if s.Base.Opt == base.OPTQueryWithdraw { } else if s.Base.Opt == base.OPTQueryWithdraw {
@ -140,9 +139,9 @@ func (s *Sub) PackPayReq() interface{} {
func (s *Sub) PackWithdrawReq() interface{} { func (s *Sub) PackWithdrawReq() interface{} {
r := s.Base.WithdrawReq r := s.Base.WithdrawReq
if fmt.Sprintf("%d", r.PayType) != common.WithdrawTypeBank { //if fmt.Sprintf("%d", r.PayType) != common.WithdrawTypeBank {
return nil // return nil
} //}
send := &WithdrawReq{ send := &WithdrawReq{
MerchantID: mid, MerchantID: mid,
OrderID: r.OrderID, OrderID: r.OrderID,

@ -4,7 +4,6 @@ import (
"errors" "errors"
"fmt" "fmt"
"net/http" "net/http"
"server/common"
"server/config" "server/config"
"server/modules/pay/base" "server/modules/pay/base"
"server/pb" "server/pb"
@ -142,9 +141,9 @@ func (s *Sub) PackPayReq() interface{} {
func (s *Sub) PackWithdrawReq() interface{} { func (s *Sub) PackWithdrawReq() interface{} {
r := s.Base.WithdrawReq r := s.Base.WithdrawReq
if fmt.Sprintf("%d", r.PayType) != common.WithdrawTypeBank { //if fmt.Sprintf("%d", r.PayType) != common.WithdrawTypeBank {
return nil // return nil
} //}
send := &WithdrawReq{ send := &WithdrawReq{
MchId: config.GetConfig().Pay.VirgoPay.MID, MchId: config.GetConfig().Pay.VirgoPay.MID,
MOrderId: r.OrderID, MOrderId: r.OrderID,

@ -328,7 +328,7 @@ func SessionBet(req *BetReq) (resp BetResp) {
UUID: req.BetID, UUID: req.BetID,
} }
db.Mysql().Get(record) db.Mysql().Get(record)
if record.ID > 0 { if record.ID > 0 && req.SessionType == SessionTypeBet {
resp.MyUUID = record.MyUUID resp.MyUUID = record.MyUUID
resp.Code = CodeAccepted resp.Code = CodeAccepted
return return
@ -341,27 +341,29 @@ func SessionBet(req *BetReq) (resp BetResp) {
} }
settle := req.SettleAmount settle := req.SettleAmount
uuid := call.SnowNode().Generate().Int64() uuid := call.SnowNode().Generate().Int64()
if err := db.Mysql().Create(&common.ProviderBetRecord{ if req.SessionType == SessionTypeBet {
UID: uid, if err := db.Mysql().Create(&common.ProviderBetRecord{
Provider: provider.ProviderID, UID: uid,
Currency: req.CurrencyType.GetCurrencyName(), Provider: provider.ProviderID,
CurrencyType: req.CurrencyType, Currency: req.CurrencyType.GetCurrencyName(),
GameID: req.GameID, CurrencyType: req.CurrencyType,
GameName: req.GameName, GameID: req.GameID,
UUID: req.BetID, GameName: req.GameName,
MyUUID: uuid, UUID: req.BetID,
Type: req.SessionType, MyUUID: uuid,
Time: req.Time, Type: req.SessionType,
Amount: betAmount, Time: req.Time,
Settle: settle, Amount: betAmount,
SessionID: req.SessionID, Settle: settle,
TurnOver: req.TurnOver, SessionID: req.SessionID,
Preserve: req.Preserve, TurnOver: req.TurnOver,
Esi: SessionSuccess, Preserve: req.Preserve,
}); err != nil { Esi: SessionSuccess,
log.Error("err:%v", err) }); err != nil {
resp.Code = CodeInnerError log.Error("err:%v", err)
return resp.Code = CodeInnerError
return
}
} }
if betAmount == 0 && req.SessionType == SessionTypeBet { if betAmount == 0 && req.SessionType == SessionTypeBet {
resp.Balance = amount resp.Balance = amount

@ -71,7 +71,13 @@ func GameBet(c *gin.Context) {
resp.Code = CodeRequestInvalidParams resp.Code = CodeRequestInvalidParams
return return
} }
log.Debug("GameBet:%+v", req) log.Debug("jin GameBet:%+v", req)
/*
// jin GameBet:&{Reference:581622397157433172 OperatorID:695865 Accounts:101239 Token:cNFFLVZCHLNGZGJMI GameID:24000
RoomID:24001 WinAmount:0 BetAmount:10 RecordType:0 BetReferenceID:581622397157433172 RoundID:6755680920055585941 IsEndRound:0}
// jin GameBet:&{Reference:581622397157433173 OperatorID:695865 Accounts:101239 Token:cNFFLVZCHLNGZGJMI GameID:24000
RoomID:24001 WinAmount:14.3 BetAmount:0 RecordType:1 BetReferenceID:581622397157433172 RoundID:6755680920055585941 IsEndRound:1}
*/
if a.ShouldRoute(req, "Token", common.ProviderAPITypePostform) { if a.ShouldRoute(req, "Token", common.ProviderAPITypePostform) {
return return
} }
@ -97,8 +103,9 @@ func GameBet(c *gin.Context) {
BetID: req.RoundID, BetID: req.RoundID,
SessionID: req.BetReferenceID, SessionID: req.BetReferenceID,
Time: now, Time: now,
CurrencyType: common.CurrencyINR,
} }
if req.IsEndRound == 1 { if req.IsEndRound == 1 { // 结算回合
betReq.SessionType = base.SessionTypeSettle betReq.SessionType = base.SessionTypeSettle
} }
betResp := base.SessionBet(betReq) betResp := base.SessionBet(betReq)

@ -0,0 +1,23 @@
package util
import (
"reflect"
)
func GetStructFieldByJsonTag(obj interface{}, tag string) (field reflect.StructField, ok bool) {
t := reflect.TypeOf(obj)
v := reflect.ValueOf(obj)
if v.Kind() == reflect.Ptr {
t = t.Elem()
}
for i := 0; i < t.NumField(); i++ {
field = t.Field(i)
tagName := field.Tag.Get("json")
if tagName == tag {
ok = true
return
}
}
return
}
Loading…
Cancel
Save