@ -3,9 +3,7 @@ package sn
import (
"context"
"encoding/json"
"errors"
"fmt"
"github.com/go-redis/redis/v8"
"io/ioutil"
"server/call"
"server/common"
@ -187,10 +185,6 @@ func GameBet(c *gin.Context) {
resp . Msg = "success"
log . Debug ( "sn gameBetResp, %s:%+v" , account , resp )
a . Data = resp
go func ( ) {
defer util . Recover ( )
checkControl ( uid )
} ( )
}
func Settle ( c * gin . Context ) {
@ -608,7 +602,7 @@ func GameControlCallback(c *gin.Context) {
return
}
defer func ( ) {
err = Control ( uid , util . ToInt ( req . ControlId ) , "" , 0 )
err = Control ( uid , util . ToInt ( req . ControlId ) )
if err != nil {
log . Error ( "sn control err, %s" , err . Error ( ) )
}
@ -633,78 +627,21 @@ func checkSpecialControl(result string) bool {
const specialControlRtp = 85
func checkControl ( uid int ) {
result , err := db . Redis ( ) . GetRedis ( ) . Get ( context . Background ( ) , fmt . Sprintf ( "player:%v:sn:status" , uid ) ) . Result ( )
if err != nil {
if errors . Is ( err , redis . Nil ) {
return
}
log . Error ( "get user sn status err, %s" , err . Error ( ) )
return
}
if result == "" {
log . Error ( "get user sn status is nil, %d" , uid )
return
}
//log.Debug("sn control update, uid:%d status:%s", uid, result)
controlInfos := strings . Split ( result , "|" )
rtp := util . ToInt ( controlInfos [ 0 ] )
templateId := controlInfos [ 1 ]
rtpNow := getControlRtp ( uid )
totalRecharge , defaultValue , templateIdNow := getControlTemplate ( uid )
var update bool
if templateId != "" && templateId != templateIdNow { // 直接更新
update = true
}
if templateId == "" && rtp != rtpNow {
update = true
}
if update {
log . Debug ( "sn control update, uid:%d old info:%d|%s new info:%d|%s(%d|%d)" , uid , rtp , templateId , rtpNow , templateIdNow , totalRecharge , defaultValue )
Control ( uid , 0 , templateIdNow , rtpNow )
func Control ( uid int , controlId int ) error {
if controlId == 0 {
controlId = 1
}
}
func getControlRtp ( uid int ) int {
rtp := call . GetRtpControlV1 ( uid )
result , _ := db . Redis ( ) . GetRedis ( ) . Get ( context . Background ( ) , fmt . Sprintf ( "player:%v:games:at" , uid ) ) . Result ( )
if rtp > specialControlRtp && checkSpecialControl ( result ) {
rtp = specialControlRtp
log . Debug ( "rtpControl special, uid:%d result:%s, rtp:%d" , uid , result , specialControlRtp )
}
return rtp
}
func getControlTemplate ( uid int ) ( int64 , int , string ) {
templateId := call . GetConfigRtpTemplateId ( )
if templateId == "" && DefaultTemplateId != "" {
log . Debug ( "sn cfg templateId is nil" )
templateId = DefaultTemplateId
}
defaultTemplateRecharge := 300 * common . DecimalDigits
userInfo , _ := call . GetUserInfo ( uid )
channelInfo := call . GetChannelByID ( userInfo . ChannelID )
if channelInfo . TemplateRecharge > 0 {
defaultTemplateRecharge = channelInfo . TemplateRecharge
}
rechargeInfo := call . GetRechargeInfo ( uid )
if rechargeInfo . TotalRecharge >= int64 ( defaultTemplateRecharge ) {
templateId = ""
}
//log.Debug("sn control template, uid:%d %d|%d %s", uid, rechargeInfo.TotalRecharge, defaultTemplateRecharge, templateId)
return rechargeInfo . TotalRecharge , defaultTemplateRecharge , templateId
}
func Control ( uid int , controlId int , templateId string , rtp int ) error {
if controlId == 0 {
controlId = 1
}
var totalRecharge int64
var defaultValue int
if rtp == 0 && templateId == "" {
rtp = getControlRtp ( uid )
totalRecharge , defaultValue , templateId = getControlTemplate ( uid )
}
req := & ControlReq {
BaseReq : BaseReq {
SnAccount : SnAccount ,
@ -724,7 +661,18 @@ func Control(uid int, controlId int, templateId string, rtp int) error {
} ,
}
log . Debug ( "sn control req, %+v templateInfo(%d|%d)" , * req , totalRecharge , defaultValue )
defaultTemplateRecharge := 300 * common . DecimalDigits
userInfo , _ := call . GetUserInfo ( uid )
channelInfo := call . GetChannelByID ( userInfo . ChannelID )
if channelInfo . TemplateRecharge > 0 {
defaultTemplateRecharge = channelInfo . TemplateRecharge
}
rechargeInfo := call . GetRechargeInfo ( uid )
if rechargeInfo . TotalRecharge >= int64 ( defaultTemplateRecharge ) {
req . TemplateId = ""
}
log . Debug ( "sn control req, %+v" , * req )
reqBody , _ := json . Marshal ( req )
var tmpValue map [ string ] interface { }
json . Unmarshal ( reqBody , & tmpValue )
@ -737,13 +685,10 @@ func Control(uid int, controlId int, templateId string, rtp int) error {
return err
}
if resp . Code != CodeRequestSuccess && resp . Code != CodeRequestExist {
log . Error ( "sn control err, %+v" , resp )
return fmt . Errorf ( "sn control err, %+v " , resp )
}
err = db . Redis ( ) . GetRedis ( ) . Set ( context . Background ( ) , fmt . Sprintf ( "player:%v:sn:status" , uid ) , fmt . Sprintf ( "%d|%s" , rtp , templateId ) , 0 ) . Err ( )
if err != nil {
log . Error ( "sn control, set user sn status err, %s" , err . Error ( ) )
log . Error ( "control err, %+v" , resp )
return fmt . Errorf ( "control err, %+v " , resp )
}
return nil
}