From 6fedc4533153ce11495fa3c953eb3d6ad10a66fc Mon Sep 17 00:00:00 2001 From: zhora Date: Mon, 8 Sep 2025 15:12:14 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A1=A5=E5=85=85=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- call/provider.go | 2 +- call/rank.go | 50 ++++++++--- config/config.go | 7 +- modules/backend/bdb/exec.go | 17 ++++ modules/backend/handler/examine/examine.go | 4 +- .../handler/statistics/withdrawListData.go | 2 +- modules/backend/handler/tgrobot/tgrobot.go | 88 +++++++++++++++++++ modules/backend/middleware/token.go | 3 +- modules/backend/models/db.go | 17 ++-- modules/backend/module.go | 2 + modules/backend/routers/routers.go | 1 + modules/backend/routers/routers_tgrobot.go | 12 +++ modules/backend/values/gameuser.go | 49 +++++++++-- modules/backend/values/gm.go | 26 +++++- modules/backend/values/statistics.go | 1 + .../customer/handler/guser/getGameUserInfo.go | 20 ++++- modules/pay/propay/base.go | 2 +- modules/pay/timer.go | 1 + modules/pay/tkpay/base.go | 9 +- modules/pay/virgopay/base.go | 7 +- modules/web/providers/base/base.go | 46 +++++----- modules/web/providers/jin/handler.go | 11 ++- util/struct.go | 23 +++++ 23 files changed, 329 insertions(+), 71 deletions(-) create mode 100644 modules/backend/handler/tgrobot/tgrobot.go create mode 100644 modules/backend/routers/routers_tgrobot.go create mode 100644 util/struct.go diff --git a/call/provider.go b/call/provider.go index 27d8a33..41a5d63 100644 --- a/call/provider.go +++ b/call/provider.go @@ -87,7 +87,7 @@ func GetConfigProviderGameListByID(provider, gameID int) *common.ConfigProviderG } func GetProviderGameRtp(uid int) int { - return 90 + return 85 } func GetProviderUserName(name string) string { diff --git a/call/rank.go b/call/rank.go index 7437241..2c91e89 100644 --- a/call/rank.go +++ b/call/rank.go @@ -82,6 +82,21 @@ func RankHandler() { awardAt time.Time ) 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 { case "1": awardAt = util.GetZeroTime(now.AddDate(0, 0, 1)).Add(30 * time.Minute) @@ -114,7 +129,20 @@ func RankHandler() { for { select { 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(): ticker.timer.Stop() return @@ -243,9 +271,16 @@ func rankAward(ticker *rankTicker) { if lessJackpot < 0 { lessJackpot = 0 } - err = db.Redis().GetRedis().Set(context.Background(), preJackpotLessKey, lessJackpot, 0).Err() - if err != nil { - log.Error("share rankAward, %s set less-jackpot err, %s", preJackpotLessKey, err.Error()) + if !db.Redis().Exist(preJackpotLessKey) { + err = db.Redis().GetRedis().Set(context.Background(), preJackpotLessKey, lessJackpot, 0).Err() + 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 switch ticker.rankCycle { @@ -257,13 +292,6 @@ func rankAward(ticker *rankTicker) { expire = 24 * 60 * 60 * 30 * 2 } 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充值) diff --git a/config/config.go b/config/config.go index 988683f..96e245b 100644 --- a/config/config.go +++ b/config/config.go @@ -146,9 +146,10 @@ type Configure struct { TLS bool } Backend struct { - Addr string - DB string - Oss OssParams + Addr string + DB string + Oss OssParams + AdminToken string } Rummy struct { SettleTime int diff --git a/modules/backend/bdb/exec.go b/modules/backend/bdb/exec.go index 966cf41..e4f1aad 100644 --- a/modules/backend/bdb/exec.go +++ b/modules/backend/bdb/exec.go @@ -2,6 +2,9 @@ package bdb import ( "encoding/json" + "server/common" + "server/config" + "server/db" "server/modules/backend/values" "github.com/liangdas/mqant/log" @@ -19,3 +22,17 @@ func GetPowerByRole(role int) map[int][]int { } 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) + } +} diff --git a/modules/backend/handler/examine/examine.go b/modules/backend/handler/examine/examine.go index c4be89b..1cd6557 100644 --- a/modules/backend/handler/examine/examine.go +++ b/modules/backend/handler/examine/examine.go @@ -28,7 +28,7 @@ func WithdrawList(c *gin.Context) { 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` 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` @@ -75,7 +75,7 @@ func WithdrawList(c *gin.Context) { } 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 ` 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 " diff --git a/modules/backend/handler/statistics/withdrawListData.go b/modules/backend/handler/statistics/withdrawListData.go index dda68bb..44654e0 100644 --- a/modules/backend/handler/statistics/withdrawListData.go +++ b/modules/backend/handler/statistics/withdrawListData.go @@ -84,7 +84,7 @@ func WithdrawListData(c *gin.Context) { // 退出成功金额 func getWithDrawAmountBySql(s, e int64, event int) 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) if err != nil { log.Error("查询用户总退出失败, error : [%s]", err.Error()) diff --git a/modules/backend/handler/tgrobot/tgrobot.go b/modules/backend/handler/tgrobot/tgrobot.go new file mode 100644 index 0000000..68a147f --- /dev/null +++ b/modules/backend/handler/tgrobot/tgrobot.go @@ -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 +} diff --git a/modules/backend/middleware/token.go b/modules/backend/middleware/token.go index 40e42f7..609e5e3 100644 --- a/modules/backend/middleware/token.go +++ b/modules/backend/middleware/token.go @@ -2,6 +2,7 @@ package middleware import ( "server/common" + "server/config" "server/db" "server/modules/backend/app" "server/modules/backend/values" @@ -59,7 +60,7 @@ func TokenMiddleWare() gin.HandlerFunc { c.Next() // 刷新token过期时间 defer func() { - if token == values.AdminToken { + if token == config.GetConfig().Backend.AdminToken { return } err := db.Redis().Expire(common.GetBackendTokenKey(token), values.RedisTokenEx) diff --git a/modules/backend/models/db.go b/modules/backend/models/db.go index 93ef983..0b475a5 100644 --- a/modules/backend/models/db.go +++ b/modules/backend/models/db.go @@ -1425,14 +1425,14 @@ func GetTopGames(su, eu int64, opt, num int, channel ...*int) []*values.OneGameD sql := "" switch opt { 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) sql += PackChannels(channel...) + " group by game_id order by amount desc" 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" 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" default: return nil @@ -1444,9 +1444,14 @@ func GetTopGames(su, eu int64, opt, num int, channel ...*int) []*values.OneGameD index := -1 for i, v := range ret { - game := call.GetConfigGameListByID(v.Provider, v.GameID) - if game != nil { - v.Name = game.Name + var gameCfg *common.ConfigGameList + if v.Provider == common.ProviderJin { + gameCfg = call.GetConfigGameListByCode(v.Provider, v.GameName) + } else { + gameCfg = call.GetConfigGameListByID(v.Provider, v.GameID) + } + if gameCfg != nil { + v.Name = gameCfg.Name } // 去掉amount<0的部分 if opt > 1 { diff --git a/modules/backend/module.go b/modules/backend/module.go index e9b2727..38bfa92 100644 --- a/modules/backend/module.go +++ b/modules/backend/module.go @@ -52,6 +52,8 @@ func (b *Backend) OnInit(app module.App, settings *conf.ModuleSettings) { // 自动初始化后台数据库 bdb.MigrateDB() + // 初始化常驻admintoken + bdb.InitAdminToken() // 自动初始化游戏服数据库 MigrateDB() diff --git a/modules/backend/routers/routers.go b/modules/backend/routers/routers.go index 5a96736..7178780 100644 --- a/modules/backend/routers/routers.go +++ b/modules/backend/routers/routers.go @@ -46,5 +46,6 @@ func SetUpRouter() *gin.Engine { output(r) firstPage(r) notice(r) + tgrobot(r) return r } diff --git a/modules/backend/routers/routers_tgrobot.go b/modules/backend/routers/routers_tgrobot.go new file mode 100644 index 0000000..b26007e --- /dev/null +++ b/modules/backend/routers/routers_tgrobot.go @@ -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) +} diff --git a/modules/backend/values/gameuser.go b/modules/backend/values/gameuser.go index 21d1a1e..b03c285 100644 --- a/modules/backend/values/gameuser.go +++ b/modules/backend/values/gameuser.go @@ -140,16 +140,47 @@ type GetGameUserInfoResp struct { 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 { - // GameId int // 游戏id - GameName string - GameCount int64 // 游戏局数 - // WinPer string // 胜率 - Profit int64 // 利润 - // WinCount int64 // 胜利局数 - // WinProfit int64 // 胜利的金钱总额 - // LoseCount int64 // 输的局数 - // LoseProfit int64 // 失败的金钱总额 + GameId int `json:"GameId"` + WinPer string `json:"WinPer"` + WinCount int `json:"WinCount"` + WinProfit int `json:"WinProfit"` + LoseCount int `json:"LoseCount"` + LoseProfit int `json:"LoseProfit"` + Name string `json:"Name"` + Provider int `json:"Provider"` + + GameName string + GameCount int64 // 游戏局数 + Profit int64 // 利润 + ProviderName string } // GetGameUserAllBalanceReq 获取游戏玩家所有流水详情 diff --git a/modules/backend/values/gm.go b/modules/backend/values/gm.go index 62b9b9e..be811c3 100644 --- a/modules/backend/values/gm.go +++ b/modules/backend/values/gm.go @@ -236,6 +236,8 @@ func CheckQueryControl(data interface{}, req *GMConfigCommonListReq) (string, st case *common.ConfigGameList: if req != nil && req.Condition != nil { sql := "" + providerSql := "" + tagIdsSql := "" gameProviderList, ok := req.Condition["GameProvider"] if ok { var gameProviderValue string @@ -245,8 +247,30 @@ func CheckQueryControl(data interface{}, req *GMConfigCommonListReq) (string, st } 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, "" } } diff --git a/modules/backend/values/statistics.go b/modules/backend/values/statistics.go index 54e215c..d4d0a24 100644 --- a/modules/backend/values/statistics.go +++ b/modules/backend/values/statistics.go @@ -280,6 +280,7 @@ type RealBetData struct { type OneGameData struct { GameID int + GameName string Name string Provider int Amount int64 diff --git a/modules/customer/handler/guser/getGameUserInfo.go b/modules/customer/handler/guser/getGameUserInfo.go index 5164b30..ccb9d72 100644 --- a/modules/customer/handler/guser/getGameUserInfo.go +++ b/modules/customer/handler/guser/getGameUserInfo.go @@ -100,7 +100,7 @@ func GetGameUserInfo(c *gin.Context) { // } //black := &common.ConfigMillionBlack{UID: uid} //db.Mysql().Get(black) - resp := values.GetGameUserInfoResp{ + resp := values.GetGameUserInfoV1Resp{ UID: user.Id, Nick: user.Nick, //Recharge: info.TotalCharge, @@ -128,7 +128,7 @@ func GetGameUserInfo(c *gin.Context) { //PointControlValue: uutil.FormatFloat(float64(pointControl.CurControlNum)/100, 2), //PointControlTargetValue: uutil.FormatFloat(float64(pointControl.ControlNum), 2), //PointControlPer: pointControl.ControlPer, - UserGameData: GetUserGameInfo(user.Id), + UserGameData: ChangeUserGameInfo(GetUserGameInfo(user.Id)), //Gpsadid: user.DeviceId, //Black: black, } @@ -181,3 +181,19 @@ func GetUserGameInfo(uid int) map[string][]values.UserGameInfo { ret["总计"] = []values.UserGameInfo{{GameCount: totalCount, Profit: totalProfit}} 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 +} diff --git a/modules/pay/propay/base.go b/modules/pay/propay/base.go index 4cd37b4..7e47b11 100644 --- a/modules/pay/propay/base.go +++ b/modules/pay/propay/base.go @@ -77,7 +77,7 @@ func (s *Sub) GetResp() (proto.Message, error) { } else if s.Base.Opt == base.OPTWithdraw { resp := s.Base.Resp.(*WithdrawResp) 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 } else if s.Base.Opt == base.OPTQueryWithdraw { diff --git a/modules/pay/timer.go b/modules/pay/timer.go index 268ed43..2a782db 100644 --- a/modules/pay/timer.go +++ b/modules/pay/timer.go @@ -294,6 +294,7 @@ func TryWithdraw(or *common.WithdrawOrder) { log.Debug("order:%v,err:%v", req.OrderID, err) if err != nil { log.Error("order:%+v,err:%v", or, err) + or.FailReason = err.Error() call.ReturnBackWithdraw(or, common.StatusROrderPay, common.StatusROrderFail, int(req.Channel)) return } diff --git a/modules/pay/tkpay/base.go b/modules/pay/tkpay/base.go index 54f5d47..f68e6a2 100644 --- a/modules/pay/tkpay/base.go +++ b/modules/pay/tkpay/base.go @@ -4,7 +4,6 @@ import ( "errors" "fmt" "net/http" - "server/common" "server/modules/pay/base" "server/modules/pay/values" "server/pb" @@ -76,7 +75,7 @@ func (s *Sub) GetResp() (proto.Message, error) { } else if s.Base.Opt == base.OPTWithdraw { resp := s.Base.Resp.(*WithdrawResp) 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 } else if s.Base.Opt == base.OPTQueryWithdraw { @@ -140,9 +139,9 @@ func (s *Sub) PackPayReq() interface{} { func (s *Sub) PackWithdrawReq() interface{} { r := s.Base.WithdrawReq - if fmt.Sprintf("%d", r.PayType) != common.WithdrawTypeBank { - return nil - } + //if fmt.Sprintf("%d", r.PayType) != common.WithdrawTypeBank { + // return nil + //} send := &WithdrawReq{ MerchantID: mid, OrderID: r.OrderID, diff --git a/modules/pay/virgopay/base.go b/modules/pay/virgopay/base.go index 5966fd3..7bb1229 100644 --- a/modules/pay/virgopay/base.go +++ b/modules/pay/virgopay/base.go @@ -4,7 +4,6 @@ import ( "errors" "fmt" "net/http" - "server/common" "server/config" "server/modules/pay/base" "server/pb" @@ -142,9 +141,9 @@ func (s *Sub) PackPayReq() interface{} { func (s *Sub) PackWithdrawReq() interface{} { r := s.Base.WithdrawReq - if fmt.Sprintf("%d", r.PayType) != common.WithdrawTypeBank { - return nil - } + //if fmt.Sprintf("%d", r.PayType) != common.WithdrawTypeBank { + // return nil + //} send := &WithdrawReq{ MchId: config.GetConfig().Pay.VirgoPay.MID, MOrderId: r.OrderID, diff --git a/modules/web/providers/base/base.go b/modules/web/providers/base/base.go index 2f27f77..88c0093 100644 --- a/modules/web/providers/base/base.go +++ b/modules/web/providers/base/base.go @@ -328,7 +328,7 @@ func SessionBet(req *BetReq) (resp BetResp) { UUID: req.BetID, } db.Mysql().Get(record) - if record.ID > 0 { + if record.ID > 0 && req.SessionType == SessionTypeBet { resp.MyUUID = record.MyUUID resp.Code = CodeAccepted return @@ -341,27 +341,29 @@ func SessionBet(req *BetReq) (resp BetResp) { } settle := req.SettleAmount uuid := call.SnowNode().Generate().Int64() - if err := db.Mysql().Create(&common.ProviderBetRecord{ - UID: uid, - Provider: provider.ProviderID, - Currency: req.CurrencyType.GetCurrencyName(), - CurrencyType: req.CurrencyType, - GameID: req.GameID, - GameName: req.GameName, - UUID: req.BetID, - MyUUID: uuid, - Type: req.SessionType, - Time: req.Time, - Amount: betAmount, - Settle: settle, - SessionID: req.SessionID, - TurnOver: req.TurnOver, - Preserve: req.Preserve, - Esi: SessionSuccess, - }); err != nil { - log.Error("err:%v", err) - resp.Code = CodeInnerError - return + if req.SessionType == SessionTypeBet { + if err := db.Mysql().Create(&common.ProviderBetRecord{ + UID: uid, + Provider: provider.ProviderID, + Currency: req.CurrencyType.GetCurrencyName(), + CurrencyType: req.CurrencyType, + GameID: req.GameID, + GameName: req.GameName, + UUID: req.BetID, + MyUUID: uuid, + Type: req.SessionType, + Time: req.Time, + Amount: betAmount, + Settle: settle, + SessionID: req.SessionID, + TurnOver: req.TurnOver, + Preserve: req.Preserve, + Esi: SessionSuccess, + }); err != nil { + log.Error("err:%v", err) + resp.Code = CodeInnerError + return + } } if betAmount == 0 && req.SessionType == SessionTypeBet { resp.Balance = amount diff --git a/modules/web/providers/jin/handler.go b/modules/web/providers/jin/handler.go index 496bc7e..c2ad310 100644 --- a/modules/web/providers/jin/handler.go +++ b/modules/web/providers/jin/handler.go @@ -71,7 +71,13 @@ func GameBet(c *gin.Context) { resp.Code = CodeRequestInvalidParams 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) { return } @@ -97,8 +103,9 @@ func GameBet(c *gin.Context) { BetID: req.RoundID, SessionID: req.BetReferenceID, Time: now, + CurrencyType: common.CurrencyINR, } - if req.IsEndRound == 1 { + if req.IsEndRound == 1 { // 结算回合 betReq.SessionType = base.SessionTypeSettle } betResp := base.SessionBet(betReq) diff --git a/util/struct.go b/util/struct.go new file mode 100644 index 0000000..e59c41f --- /dev/null +++ b/util/struct.go @@ -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 +}