印度包网
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.
 
 
 

95 lines
2.7 KiB

package call
import (
"context"
"errors"
"fmt"
"server/common"
"server/db"
"server/util"
"time"
"github.com/go-redis/redis/v8"
"github.com/liangdas/mqant/log"
"gorm.io/gorm"
)
func UpdateJackpot(t, tid int, amount int64) {
if err := db.Mysql().C().Exec(fmt.Sprintf("call jackpot(%v,%v,%v)", t, tid, amount)).Error; err != nil {
log.Error("err:%v", err)
}
}
func GetJackpot(t, tid int) int64 {
data := &common.Jackpot{Type: t, TypeID: tid}
db.Mysql().Get(data)
return data.Amount
}
func GetJack(t, tid int) *common.Jackpot {
data := &common.Jackpot{Type: t, TypeID: tid}
db.Mysql().Get(data)
return data
}
func UpdateGameJackpot(t, tid int, amount, playerAmount int64) {
jack := GetJack(t, tid)
u := map[string]interface{}{"player_amount": gorm.Expr("player_amount + ?", playerAmount)}
if jack.Amount+amount >= jack.Max {
u["amnout"] = jack.Max
} else {
u["amount"] = gorm.Expr("amount + ?", amount)
}
db.Mysql().Update(&common.Jackpot{Type: t, TypeID: tid}, u)
}
func UpdateGameSort(provider, gameID int) {
util.Go(func() {
db.Mysql().Update(&common.ConfigGameList{GameProvider: provider, GameID: gameID}, map[string]interface{}{"sort": gorm.Expr("sort + 1")})
})
}
// GetGameInfo 获取游戏信息
func GetGameInfo(gameInfos []*common.ConfigGameList) {
ctx := context.Background()
rdb := db.Redis().GetRedis()
pipeline := rdb.Pipeline()
maxRewardField := "maxReward"
rtpField := "rtp"
maxRewardTimeField := "maxRewardTime"
for _, game := range gameInfos {
key := fmt.Sprintf("firstpage:games:%d_%d", game.GameProvider, game.GameID)
pipeline.HGet(ctx, key, maxRewardField)
pipeline.HGet(ctx, key, maxRewardTimeField)
pipeline.HGet(ctx, key, rtpField)
}
cmds, err := pipeline.Exec(ctx)
now := time.Now()
for i := 0; i < 2*len(gameInfos); i = i + 2 {
game := gameInfos[i/2]
maxRewardCmd := cmds[i]
maxRewardTimeCmd := cmds[i+1]
key := fmt.Sprintf("firstpage:games:%d_%d", game.GameProvider, game.GameID)
game.MaxReward, err = maxRewardCmd.(*redis.StringCmd).Int64()
if errors.Is(err, redis.Nil) {
val := util.RandBetween64(100, 9999)
rtp := util.RandBetween64(93, 104)
game.RTP = rtp
game.MaxReward = val
pipeline.HSet(ctx, key, maxRewardField, val, maxRewardTimeField, time.Now(), rtpField, rtp)
} else {
maxRewardTime, _ := maxRewardTimeCmd.(*redis.StringCmd).Time()
if now.Sub(maxRewardTime).Hours() >= 1 {
val := util.RandBetween64(game.MaxReward, 9999)
rtp := util.RandBetween64(93, 104)
game.RTP = rtp
game.MaxReward = val
pipeline.HSet(ctx, key, maxRewardField, val, maxRewardTimeField, time.Now(), rtpField, rtp)
}
}
}
_, err = pipeline.Exec(ctx)
if err != nil {
log.Error("GetGameInfo err:%v", err)
}
}