动态调整sn rtp

dev_aagame
zhora 2 weeks ago
parent fd8561b5b4
commit 92bcd3e315
  1. 6
      call/config.go
  2. 77
      modules/web/providers/sn/handler.go

@ -2678,6 +2678,9 @@ func LoadConfigRtpControl() (err error) {
} }
func GetConfigRtpControl() []*common.ConfigRtpControl { func GetConfigRtpControl() []*common.ConfigRtpControl {
if len(configRtpControl) == 0 {
LoadConfigRtpControl()
}
return configRtpControl return configRtpControl
} }
@ -2712,6 +2715,9 @@ func GetConfigRtpTemplate() []*common.ConfigRtpTemplate {
} }
func GetConfigRtpTemplateId() string { func GetConfigRtpTemplateId() string {
if len(configTemplates) == 0 {
LoadConfigRtpTemplate()
}
for _, v := range configTemplates { for _, v := range configTemplates {
if v.Open == 1 && v.TemplateId != "" { if v.Open == 1 && v.TemplateId != "" {
return v.TemplateId return v.TemplateId

@ -185,6 +185,7 @@ func GameBet(c *gin.Context) {
resp.Msg = "success" resp.Msg = "success"
log.Debug("sn gameBetResp, %s:%+v", account, resp) log.Debug("sn gameBetResp, %s:%+v", account, resp)
a.Data = resp a.Data = resp
checkControl(uid)
} }
func Settle(c *gin.Context) { func Settle(c *gin.Context) {
@ -602,7 +603,7 @@ func GameControlCallback(c *gin.Context) {
return return
} }
defer func() { defer func() {
err = Control(uid, util.ToInt(req.ControlId)) err = Control(uid, util.ToInt(req.ControlId), "", 0)
if err != nil { if err != nil {
log.Error("sn control err, %s", err.Error()) log.Error("sn control err, %s", err.Error())
} }
@ -627,21 +628,73 @@ func checkSpecialControl(result string) bool {
const specialControlRtp = 85 const specialControlRtp = 85
func Control(uid int, controlId int) error { func checkControl(uid int) {
if controlId == 0 { result, err := db.Redis().GetRedis().Get(context.Background(), fmt.Sprintf("player:%v:sn:status", uid)).Result()
controlId = 1 if err != nil {
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, status:%s", result)
controlInfos := strings.Split(result, "|")
rtp := util.ToInt(controlInfos[0])
templateId := controlInfos[1]
rtpNow := getControlRtp(uid)
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, old info:%d|%s new info:%d|%s", rtp, templateId, rtpNow, templateIdNow)
Control(uid, 0, templateId, rtp)
}
} }
func getControlRtp(uid int) int {
rtp := call.GetRtpControlV1(uid) rtp := call.GetRtpControlV1(uid)
result, _ := db.Redis().GetRedis().Get(context.Background(), fmt.Sprintf("player:%v:games:at", uid)).Result() result, _ := db.Redis().GetRedis().Get(context.Background(), fmt.Sprintf("player:%v:games:at", uid)).Result()
if rtp > specialControlRtp && checkSpecialControl(result) { if rtp > specialControlRtp && checkSpecialControl(result) {
rtp = specialControlRtp rtp = specialControlRtp
log.Debug("rtpControl special, uid:%d result:%s, rtp:%d", uid, result, specialControlRtp) log.Debug("rtpControl special, uid:%d result:%s, rtp:%d", uid, result, specialControlRtp)
} }
return rtp
}
func getControlTemplate(uid int) string {
templateId := call.GetConfigRtpTemplateId() templateId := call.GetConfigRtpTemplateId()
if templateId == "" && DefaultTemplateId != "" { if templateId == "" && DefaultTemplateId != "" {
log.Debug("sn cfg templateId is nil") log.Debug("sn cfg templateId is nil")
templateId = DefaultTemplateId 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, %d|%d %s", rechargeInfo.TotalRecharge, defaultTemplateRecharge, templateId)
return templateId
}
func Control(uid int, controlId int, templateId string, rtp int) error {
if controlId == 0 {
controlId = 1
}
if rtp == 0 && templateId == "" {
rtp = getControlRtp(uid)
templateId = getControlTemplate(uid)
}
req := &ControlReq{ req := &ControlReq{
BaseReq: BaseReq{ BaseReq: BaseReq{
SnAccount: SnAccount, SnAccount: SnAccount,
@ -661,17 +714,6 @@ func Control(uid int, controlId int) error {
}, },
} }
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) log.Debug("sn control req, %+v", *req)
reqBody, _ := json.Marshal(req) reqBody, _ := json.Marshal(req)
var tmpValue map[string]interface{} var tmpValue map[string]interface{}
@ -688,7 +730,10 @@ func Control(uid int, controlId int) error {
log.Error("control err, %+v", resp) log.Error("control err, %+v", resp)
return fmt.Errorf("control err, %+v ", resp) return fmt.Errorf("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("set user sn status err, %s", err.Error())
}
return nil return nil
} }

Loading…
Cancel
Save