config.go 4.46 KB
package confroomrank

import (
	"apigame/configs/confbase"
	"apigame/service-common/svconst"
	"apigame/util/util-lx/lxtime"
	"apigame/util/utstring"
	"fmt"
)

// ActivityConfig 房间排行活动配置 分析后数据
type ActivityConfig struct {
	Raw *ActivityConfigRaw `json:"-"`

	Id          int64  // ID
	Typ         int    // 排行榜类型
	OpenLevel   int    // 开启等级
	PreviewTime int64  // 预告时间
	StartTime   int64  // 开始时间
	EndTime     int64  // 结束时间
	ReleaseTime string // 结算发奖时间

	Robot map[int]RobotConfig // 机器人配置
	Room  map[int]RoomConfig  // 房间配置

	GameId string // 所属游戏ID
}

func (c *ActivityConfig) GetUid() string {
	return utstring.Int64ToString(c.Id)
}

func (c *ActivityConfig) CheckCurrent() bool {
	timeNow := lxtime.NowUninx()
	return timeNow >= c.StartTime && timeNow <= c.EndTime && c.Raw.Status == 1
}

func (c *ActivityConfig) ConfInfo(suffix string) *confbase.ConfInfo {
	tableName := svconst.MYSQL_TABLE_S_ROOMRANK_CONFIG
	cacheKey := fmt.Sprintf("%s:%s:%s", svconst.REDIS_CACHEP_REFIX, tableName, suffix)
	timeNow := lxtime.NowUninx()
	return &confbase.ConfInfo{
		DbMysql:      svconst.DbConfig,
		TableName:    fmt.Sprintf("%s_%s", tableName, suffix),
		KeyName:      "id",
		CurrentQuery: "typ = ? AND status = ? AND start_time <= ? AND end_time >= ?",
		CurrentArgs:  []any{c.Typ, 1, timeNow, timeNow},
		CacheKey:     fmt.Sprintf("%s:%d", cacheKey, c.Id),
		CacheCurrent: fmt.Sprintf("%s:%d:current", cacheKey, c.Typ),
		CacheTime:    300,
	}
}

// ActivityConfigRaw 房间排行活动配置 原始数据
type ActivityConfigRaw struct {
	Id          int64  `gorm:"column:id;primaryKey"` // ID
	Typ         int    // 排行榜类型
	OpenLevel   int    // 开启等级
	PreviewTime int64  // 预告时间
	StartTime   int64  // 开始时间
	EndTime     int64  // 结束时间
	ReleaseTime string // 结算发奖时间

	BootConfig string // 机器人配置
	RoomConfig string // 房间配置

	Ver        string // 版本号
	Status     int    // 状态 0=关闭 1=开启
	UpdateTime int64  // 修改时间戳
}

// GenerateConfigClient 生成给客户端的配置
func (c *ActivityConfigRaw) GenerateConfigClient() *ActivityConfigClient {
	configClient := &ActivityConfigClient{
		Id:          c.Id,
		Typ:         c.Typ,
		OpenLevel:   c.OpenLevel,
		PreviewTime: c.PreviewTime,
		StartTime:   c.StartTime,
		EndTime:     c.EndTime,
		ReleaseTime: c.ReleaseTime,
		Ver:         c.Ver,
		Status:      c.Status,
	}
	return configClient
}

// ActivityConfigClient 房间排行活动配置 给客户端数据
type ActivityConfigClient struct {
	Id          int64  `form:"id" json:"id"`                     // ID
	Typ         int    `form:"typ" json:"typ"`                   // 排行榜类型
	OpenLevel   int    `form:"open_level" json:"open_level"`     // 开启等级
	PreviewTime int64  `form:"preview_time" json:"preview_time"` // 预告时间
	StartTime   int64  `form:"start_time" json:"start_time"`     // 开始时间
	EndTime     int64  `form:"end_time" json:"end_time"`         // 结束时间
	ReleaseTime string `form:"release_time" json:"release_time"` // 结算发奖时间
	Ver         string `form:"ver" json:"ver"`                   // 版本号
	Status      int    `form:"status" json:"status"`             // 状态 0=关闭 1=开启
}

// RobotConfig 机器人配置
type RobotConfig struct {
	Id         int `json:"id"`          // id
	MinScore   int `json:"min_score"`   // 最低分数
	TotalScore int `json:"total_score"` // 总分数
	Range      int `json:"range"`       // 总分浮动范围(%)
}

// RoomConfig 房间配置
type RoomConfig struct {
	Id              int               `json:"id"`                 // id
	Levels          []int             `json:"level_range"`        // 等级范围
	UserClass       int               `json:"rating"`             // 评级
	UserScore       []int             `json:"score_range"`        // 分数范围
	TotalPlayer     int               `json:"room_user_number"`   // 房间总人数
	PlayerTypeCount [][]int           `json:"user_type_number"`   // 玩家类型数量
	AutoRobot       []int             `json:"auto_room"`          // 自动填充机器人
	InitRobot       [][]int           `json:"disposition_robots"` // 配置机器人
	Awards          map[string]string `json:"rewards"`            // 奖励
	SettleScores    []int             `json:"score_adjest"`       // 结算分数调整
	SettleUserType  []int             `json:"user_type"`          // 结算用户类型
}