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.
223 lines
6.0 KiB
223 lines
6.0 KiB
package jin2 |
|
|
|
import ( |
|
"server/call" |
|
"server/common" |
|
"server/db" |
|
"server/modules/web/app" |
|
"server/modules/web/providers/base" |
|
"server/util" |
|
"strconv" |
|
"time" |
|
|
|
"github.com/gin-gonic/gin" |
|
"github.com/liangdas/mqant/log" |
|
"gorm.io/gorm" |
|
) |
|
|
|
func Jin2(e *gin.RouterGroup) { |
|
e.POST("/Cash/Get", GetBalance) |
|
e.POST("/Cash/TransferInOut", GameBet) |
|
} |
|
|
|
func GetGameID(providerID int, gameCode string) int { |
|
game := call.GetConfigGameListByCode(providerID, gameCode) |
|
if game != nil { |
|
return game.GameID |
|
} |
|
return 0 |
|
} |
|
|
|
func GetBalance(c *gin.Context) { |
|
a := app.NewApp(c) |
|
defer func() { |
|
a.ResponseB() |
|
}() |
|
req := &GetBalanceReq{} |
|
resp := &GetBalanceResp{} |
|
a.RetData = resp |
|
if !a.SB(req) { |
|
resp.Code = CodeRequestInvalidParams |
|
return |
|
} |
|
log.Debug("GetBalanceReq:%+v", req) |
|
if a.ShouldRoute(req, "UserID", common.ProviderAPITypeJson) { |
|
return |
|
} |
|
uids := req.UserID |
|
uid, err := strconv.Atoi(uids) |
|
if err != nil { |
|
log.Error("err:%v", err) |
|
resp.Code = CodeOperationFailed |
|
return |
|
} |
|
|
|
currency, err := db.Redis().GetInt(common.GetRedisKeyGameCurrency(uid)) |
|
if err != nil { |
|
log.Error("err:%v", err) |
|
resp.Code = CodeOperationFailed |
|
return |
|
} |
|
|
|
resp.Data.Balance = call.GetUserCurrencyFloat(uid, common.CurrencyType(currency), 2) |
|
resp.Data.Level = call.GetProviderGameRtp(uid) |
|
log.Debug("GetBalanceResp:%+v", resp) |
|
} |
|
|
|
func GameBet(c *gin.Context) { |
|
a := app.NewApp(c) |
|
defer func() { |
|
a.ResponseB() |
|
}() |
|
req := &GameBetReq{} |
|
resp := &GameBetResp{} |
|
a.RetData = resp |
|
if !a.SB(req) { |
|
resp.Code = CodeRequestInvalidParams |
|
return |
|
} |
|
log.Debug("GameBet:%+v", req) |
|
if a.ShouldRoute(req, "UserID", common.ProviderAPITypeJson) { |
|
return |
|
} |
|
uid, err := strconv.Atoi(req.UserID) |
|
if err != nil { |
|
resp.Code = CodeOperationFailed |
|
return |
|
} |
|
provider := call.GetConfigGameProvider(common.ProviderJin2) |
|
now := time.Now().Unix() |
|
if req.Reason == "bet" || req.Reason == "win" { |
|
betReq := &base.BetReq{ |
|
UID: uid, |
|
CurrencyType: common.CurrencyINR, |
|
SessionType: base.SessionTypeBet, |
|
GameID: GetGameID(common.ProviderJin2, req.GameID), |
|
GameName: req.GameID, |
|
Provider: provider, |
|
BetID: req.TransactionID, |
|
SessionID: req.RoundID, |
|
Time: now, |
|
} |
|
if req.Reason == "bet" { |
|
betReq.BetAmount = util.Abs(int64(req.Amount * common.DecimalDigits)) |
|
betReq.TurnOver = util.Abs(int64(req.Amount * common.DecimalDigits)) |
|
//betReq.Rtp = call.GetProviderGameRtp(uid) |
|
} else if req.Reason == "win" { |
|
// 先判断结算是否合法 |
|
record := &common.ProviderBetRecord{ |
|
UID: uid, |
|
Provider: provider.ProviderID, |
|
Type: base.SessionTypeBet, |
|
SessionID: betReq.SessionID, |
|
} |
|
db.Mysql().Get(record) |
|
if record.ID == 0 { |
|
resp.Code = CodeOperationFailed |
|
currency, err := db.Redis().GetInt(common.GetRedisKeyGameCurrency(uid)) |
|
if err != nil { |
|
log.Error("err:%v", err) |
|
resp.Code = CodeOperationFailed |
|
return |
|
} |
|
|
|
resp.Data.Balance = call.GetUserCurrencyFloat(uid, common.CurrencyType(currency), 2) |
|
|
|
resp.Data.Level = call.GetProviderGameRtp(uid) |
|
return |
|
} |
|
betReq.SettleAmount = int64(req.Amount * common.DecimalDigits) |
|
// 免费游戏的情况 |
|
if betReq.SettleAmount == 0 && !req.IsEnd { |
|
currency, err := db.Redis().GetInt(common.GetRedisKeyGameCurrency(uid)) |
|
if err != nil { |
|
log.Error("err:%v", err) |
|
resp.Code = CodeOperationFailed |
|
return |
|
} |
|
|
|
resp.Data.Balance = call.GetUserCurrencyFloat(uid, common.CurrencyType(currency), 2) |
|
|
|
resp.Data.Level = call.GetProviderGameRtp(uid) |
|
return |
|
} |
|
record = &common.ProviderBetRecord{ |
|
UID: uid, |
|
Provider: provider.ProviderID, |
|
Type: base.SessionTypeFree, |
|
SessionID: betReq.SessionID, |
|
} |
|
db.Mysql().Get(record) |
|
if !req.IsEnd { |
|
if record.ID == 0 { |
|
record = &common.ProviderBetRecord{ |
|
UID: uid, |
|
Provider: provider.ProviderID, |
|
GameID: betReq.GameID, |
|
GameName: betReq.GameName, |
|
UUID: betReq.BetID, |
|
MyUUID: call.SnowNode().Generate().Int64(), |
|
Type: base.SessionTypeFree, |
|
Time: betReq.Time, |
|
Settle: betReq.SettleAmount, |
|
SessionID: betReq.SessionID, |
|
Esi: base.SessionSuccess, |
|
} |
|
db.Mysql().Create(record) |
|
} else { |
|
db.Mysql().Update(&common.ProviderBetRecord{ID: record.ID}, |
|
map[string]interface{}{"Settle": gorm.Expr("Settle + ?", betReq.SettleAmount)}) |
|
} |
|
currency, err := db.Redis().GetInt(common.GetRedisKeyGameCurrency(uid)) |
|
if err != nil { |
|
log.Error("err:%v", err) |
|
resp.Code = CodeOperationFailed |
|
return |
|
} |
|
|
|
resp.Data.Balance = call.GetUserCurrencyFloat(uid, common.CurrencyType(currency), 2) |
|
resp.Data.Level = call.GetProviderGameRtp(uid) |
|
return |
|
} else { |
|
if record.ID >= 0 { |
|
betReq.SettleAmount += record.Settle |
|
} |
|
} |
|
betReq.SessionType = base.SessionTypeSettle |
|
} |
|
betResp := base.SessionBet(betReq) |
|
if betResp.Code != base.CodeOk { |
|
resp.Code = CodeSuccess |
|
if betResp.Code == base.CodeAccepted { |
|
resp.Code = CodeDuplicateOrder |
|
} else if betResp.Code == base.CodeNotEnoughAmount { |
|
resp.Code = CodeInsufficientBalance |
|
} |
|
resp.Error = "operation failed." |
|
log.Error("GameBetResp err:%v", resp.Code) |
|
return |
|
} |
|
resp.Data.Balance = util.Decimal(float64(betResp.Balance)/common.DecimalDigits, 2) |
|
} else if req.Reason == "refund" { |
|
adjustReq := &base.AdjustmentReq{ |
|
UID: uid, |
|
Amount: int64(req.Amount * common.DecimalDigits), |
|
GameID: GetGameID(common.ProviderJin2, req.GameID), |
|
GameName: req.GameID, |
|
Provider: provider, |
|
BetID: req.RoundID, |
|
SessionID: req.TransactionID, |
|
Time: now, |
|
Type: base.SessionTypeAdjustment, |
|
Ess: req.Reason, |
|
} |
|
adjustResp := base.Adjustment(adjustReq) |
|
if adjustResp.Code != CodeSuccess { |
|
resp.Error = "operation failed." |
|
} |
|
resp.Data.Balance = util.Decimal(float64(adjustResp.Balance)/common.DecimalDigits, 2) |
|
} |
|
resp.Data.Level = call.GetProviderGameRtp(uid) |
|
log.Debug("GameBetResp:%+v", resp) |
|
a.Data = resp |
|
}
|
|
|