From cf3a7d8f8c12db594c4b930a4a8d294472365165 Mon Sep 17 00:00:00 2001 From: zhora Date: Tue, 23 Sep 2025 10:03:47 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=B5=81=E6=B0=B4=E4=B8=8A?= =?UTF-8?q?=E6=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/web/providers/base/base.go | 46 +++++++++++++++++------------ modules/web/providers/sn/handler.go | 3 +- 2 files changed, 29 insertions(+), 20 deletions(-) diff --git a/modules/web/providers/base/base.go b/modules/web/providers/base/base.go index 9ed1622..0ef7e54 100644 --- a/modules/web/providers/base/base.go +++ b/modules/web/providers/base/base.go @@ -3,6 +3,7 @@ package base import ( "errors" "fmt" + "gorm.io/gorm" "server/call" "server/common" "server/db" @@ -330,20 +331,21 @@ func SessionBet(req *BetReq) (resp BetResp) { UUID: req.BetID, } db.Mysql().Get(record) - if record.ID > 0 && req.SessionType == SessionTypeBet { + if record.ID > 0 && req.SessionType == SessionTypeBet { // 下注订单校验 resp.MyUUID = record.MyUUID resp.Code = CodeAccepted return } amount := call.GetUserCurrency(uid, ct) - if amount < betAmount { + if amount < betAmount { // 余额校验 resp.Balance = amount resp.Code = CodeNotEnoughAmount return } settle := req.SettleAmount + realSettle := req.SettleAmount uuid := call.SnowNode().Generate().Int64() - if req.SessionType == SessionTypeBet { + if req.SessionType == SessionTypeBet { // 创建下注流水 if err := db.Mysql().Create(&common.ProviderBetRecord{ UID: uid, Provider: provider.ProviderID, @@ -373,7 +375,7 @@ func SessionBet(req *BetReq) (resp BetResp) { return } var pro *call.ProRes - if betAmount > 0 { // 存储下注金额 + if betAmount > 0 { // 扣除下注金额 pro = call.MineCurrencyProReal( &common.UpdateCurrency{ CurrencyBalance: &common.CurrencyBalance{ @@ -403,7 +405,7 @@ func SessionBet(req *BetReq) (resp BetResp) { return } } - if pro == nil { + if pro == nil { // 不包含扣除的结算 tmpRecord := &common.ProviderBetRecord{ UID: uid, SessionID: req.SessionID, @@ -414,6 +416,10 @@ func SessionBet(req *BetReq) (resp BetResp) { resp.Code = CodeBetNotExist return } + db.Mysql().C().Model(&common.ProviderBetRecord{}).Where("id = ?", tmpRecord.ID).Updates(map[string]interface{}{ + "settle": gorm.Expr("settle + ?", req.SettleAmount), + }) + realSettle += tmpRecord.Settle betAmount = tmpRecord.Amount } setValue := settle + req.Preserve @@ -441,20 +447,22 @@ func SessionBet(req *BetReq) (resp BetResp) { return } } - util.IndexTryS(func() error { - sendData := &pb.InnerAfterSettle{ - UID: int64(uid), - ProviderID: int64(provider.ProviderID), - GameID: int64(req.GameID), - UUID: req.BetID, - CurrencyType: int64(ct), - TotalBet: betAmount, - OriginSettle: settle, - FinalSettle: settle, - MyUUID: fmt.Sprintf("%d", uuid), - } - return call.Publish(natsClient.TopicInnerAfterSettle, sendData) - }) + if req.IsFinish == 0 || req.IsFinish == 2 { + util.IndexTryS(func() error { + sendData := &pb.InnerAfterSettle{ + UID: int64(uid), + ProviderID: int64(provider.ProviderID), + GameID: int64(req.GameID), + UUID: req.BetID, + CurrencyType: int64(ct), + TotalBet: betAmount, + OriginSettle: realSettle, + FinalSettle: realSettle, + MyUUID: fmt.Sprintf("%d", uuid), + } + return call.Publish(natsClient.TopicInnerAfterSettle, sendData) + }) + } if pro != nil { resp.Balance = pro.Balance } else { diff --git a/modules/web/providers/sn/handler.go b/modules/web/providers/sn/handler.go index c26682a..deb4bd9 100644 --- a/modules/web/providers/sn/handler.go +++ b/modules/web/providers/sn/handler.go @@ -163,6 +163,7 @@ func GameBet(c *gin.Context) { Time: now, BetAmount: int64(betAmount), TurnOver: int64(betAmount), + IsFinish: 1, } betResp := base.SessionBet(betReq) if betResp.Code != base.CodeOk { @@ -174,7 +175,7 @@ func GameBet(c *gin.Context) { } else { resp.Msg = "operation failed." } - log.Error("GameBetResp err:%v", resp.Code) + log.Error("sn gameBetResp err,%s:%v", account, resp.Code) return } resp.Data.DeductionAmount = betAmount