From 29e2ebdcd43f77c732075639dd7b5a4f07966031 Mon Sep 17 00:00:00 2001 From: 王家文 Date: Wed, 17 Apr 2024 11:30:50 +0800 Subject: [PATCH] refactor♻️:redis对象和mysql对象持久化和读取 --- configs/feat-cardholder-decode.go | 169 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ configs/feat-cardholder.go | 47 ++++++++++++++++++++++++++++++----------------- configs/init.go | 23 ++--------------------- configs/registry.go | 36 ++++++++++++++++++++++++++++++++---- middleware/sign/index.go | 2 +- service/cardholder/config-client.go | 11 ----------- service/cardholder/config-load.go | 77 ----------------------------------------------------------------------------- service/cardholder/config-registry.go | 175 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- service/cardholder/config.go | 122 -------------------------------------------------------------------------------------------------------------------------- service/cardholder/handle.go | 21 +++++++++++---------- service/cardholder/logic.go | 39 ++++++++++++++++++++------------------- util/utdto/base.go | 2 -- 12 files changed, 265 insertions(+), 459 deletions(-) create mode 100644 configs/feat-cardholder-decode.go delete mode 100644 service/cardholder/config-client.go delete mode 100644 service/cardholder/config-load.go delete mode 100644 service/cardholder/config-registry.go delete mode 100644 service/cardholder/config.go diff --git a/configs/feat-cardholder-decode.go b/configs/feat-cardholder-decode.go new file mode 100644 index 0000000..085dd00 --- /dev/null +++ b/configs/feat-cardholder-decode.go @@ -0,0 +1,169 @@ +package configs + +import ( + "apigame/util/util-lx/lxalilog" + "encoding/json" + "errors" + "fmt" + "strings" +) + +// Decode 解析配置原始数据 +func (c *CardActivityConfig) Decode(gameId string, configRaw *CardActivityConfigRaw) { + c.GameId = gameId + c.Raw = configRaw + + c.Id = configRaw.Id + c.OpenLevel = configRaw.OpenLevel + c.PreviewTime = configRaw.PreviewTime + c.StartTime = configRaw.StartTime + c.EndTime = configRaw.EndTime + c.Round = configRaw.Round + + c.Awards = make(map[string]string) + c.AlbumConfig = make(map[int]AlbumConfig) + c.CardConfig = make(map[int]CardConfig) + c.CardholderConfig = make(map[string]OpenCardholderConfig) + c.NormalCardStarConfig = make(map[string]NormalCardStarConfig) + c.CardSequenceConfig = make(map[string]CardSequenceConfig) + c.StarShopConfig = make(map[int]StarShopConfig) + // 解析奖励 + { + err := json.Unmarshal([]byte(configRaw.Awards), &c.Awards) + if err != nil { + lxalilog.Errors(err, configRaw.Awards, gameId, configRaw.Id) + return + } + } + // 卡组配置 + { + configs := make([]AlbumConfig, 0) + err := json.Unmarshal([]byte(configRaw.AlbumConfig), &configs) + if err != nil { + lxalilog.Errors(err, configRaw.AlbumConfig, gameId, configRaw.Id) + return + } + for _, i2 := range configs { + c.AlbumConfig[i2.SetId] = i2 + } + } + // 卡牌配置 + { + configs := make([]CardConfig, 0) + err := json.Unmarshal([]byte(configRaw.CardConfig), &configs) + if err != nil { + lxalilog.Errors(err, configRaw.CardConfig, gameId, configRaw.Id) + return + } + for _, i2 := range configs { + c.CardConfig[i2.Id] = i2 + } + } + // 卡包开卡规则 + { + configs := make([]OpenCardholderConfig, 0) + err := json.Unmarshal([]byte(configRaw.CardHolderConfig), &configs) + if err != nil { + lxalilog.Errors(err, configRaw.CardHolderConfig, gameId, configRaw.Id) + return + } + for _, i2 := range configs { + c.CardholderConfig[i2.Id] = i2 + } + } + // 卡片星级配置 + { + configs := make([]NormalCardStarConfig, 0) + err := json.Unmarshal([]byte(configRaw.NormalCardStarSequence), &configs) + if err != nil { + lxalilog.Errors(err, configRaw.NormalCardStarSequence, gameId, configRaw.Id) + return + } + for _, i2 := range configs { + i2.NormalCardSequenceIds = strings.Split(i2.NormalCardSequenceId, ",") + combineId := CombineIdSequenceIdCohort(i2.Id, i2.SequenceId, i2.Cohort) + c.NormalCardStarConfig[combineId] = i2 + } + } + // 卡片星级对应卡牌配置 + { + configs := make([]CardSequenceConfig, 0) + err := json.Unmarshal([]byte(configRaw.CardSequenceConfig), &configs) + if err != nil { + lxalilog.Errors(err, configRaw.CardSequenceConfig, gameId, configRaw.Id) + return + } + for _, i2 := range configs { + i2.CardIdLists = strings.Split(i2.CardIdList, ",") + combineId := CombineIdSequenceIdCohort(i2.Id, i2.SequenceId, i2.Cohort) + c.CardSequenceConfig[combineId] = i2 + } + } + // 星星商店配置 + { + configs := make([]StarShopConfig, 0) + err := json.Unmarshal([]byte(configRaw.StarShopConfig), &configs) + if err != nil { + lxalilog.Errors(err, configRaw.StarShopConfig, gameId, configRaw.Id) + return + } + for _, i2 := range configs { + c.StarShopConfig[i2.Id] = i2 + } + } + + c.GenerateConfigClient() +} + +// GenerateConfigClient 生成给客户端的配置 +func (c *CardActivityConfig) GenerateConfigClient() { + configClient := &CardActivityConfigClient{ + Id: c.Id, + RoundAwards: c.Awards, + Albums: make([]AlbumConfig, 0), + Cards: make([]CardConfig, 0), + Holders: make([]OpenCardholderConfig, 0), + StarShop: make([]StarShopConfig, 0), + } + for _, i2 := range c.AlbumConfig { + configClient.Albums = append(configClient.Albums, i2) + } + for _, i2 := range c.CardConfig { + configClient.Cards = append(configClient.Cards, i2) + } + for _, i2 := range c.CardholderConfig { + configClient.Holders = append(configClient.Holders, i2) + } + for _, i2 := range c.StarShopConfig { + configClient.StarShop = append(configClient.StarShop, i2) + } + c.Client = configClient +} + +// CombineIdSequenceIdCohort 组合ID k=ID_用户序列_用户分组 +func CombineIdSequenceIdCohort(id, sequenceId, cohort string) string { + return fmt.Sprintf("%s_%s_%s", id, sequenceId, cohort) +} + +// FindNormalCardStarConfig 查找配置 非保底卡星级ID +func (c *CardActivityConfig) FindNormalCardStarConfig(id, sequenceId, cohort string) (conf NormalCardStarConfig, has bool) { + combineId := CombineIdSequenceIdCohort(id, sequenceId, cohort) + conf, has = c.NormalCardStarConfig[combineId] + if !has { + lxalilog.Errors(errors.New("ht_cardholder NormalCardStarConfig error"), id, sequenceId, cohort) + } + return +} + +// FindCardSequenceConfig 查找配置 星级ID对应的卡片 +func (c *CardActivityConfig) FindCardSequenceConfig(id, sequenceId, cohort string) (conf CardSequenceConfig, has bool) { + combineId := CombineIdSequenceIdCohort(id, sequenceId, cohort) + conf, has = c.CardSequenceConfig[combineId] + if !has { + lxalilog.Errors(errors.New("ht_cardholder CardSequenceConfig error"), id, sequenceId, cohort) + fmt.Println(id) + fmt.Println(sequenceId) + fmt.Println(cohort) + } + return +} diff --git a/configs/feat-cardholder.go b/configs/feat-cardholder.go index ee98eda..dede1ce 100644 --- a/configs/feat-cardholder.go +++ b/configs/feat-cardholder.go @@ -3,17 +3,23 @@ package configs import ( "apigame/common/svconst" "apigame/common/svdto" + "apigame/common/svmysql" + "apigame/common/svredis" "apigame/service/constd" - "apigame/util/utdto" "fmt" ) // CardActivityConfig 卡牌活动配置 分析后数据 type CardActivityConfig struct { - Raw *CardActivityConfigRaw - Client *CardActivityConfigClient - GameId string // 所属游戏ID - Id int64 // ID + Raw *CardActivityConfigRaw `json:"-"` + + Id int64 // ID + OpenLevel int // 开启等级 + PreviewTime int64 // 预告时间 + StartTime int64 // 开始时间 + EndTime int64 // 结束时间 + Round int // 轮数 + Awards map[string]string // 奖励配置 AlbumConfig map[int]AlbumConfig // 卡组配置 CardConfig map[int]CardConfig // 卡牌配置 @@ -21,15 +27,14 @@ type CardActivityConfig struct { NormalCardStarConfig map[string]NormalCardStarConfig // k=ID_用户序列_用户分组 卡片星级配置 CardSequenceConfig map[string]CardSequenceConfig // k=ID_用户序列_用户分组 卡片星级对应卡牌配置 StarShopConfig map[int]StarShopConfig // 星星商店配置 -} -func (c *CardActivityConfigRaw) TableName() string { return utdto.MYSQL_TABLE_TEMPLATE } + Client *CardActivityConfigClient + GameId string // 所属游戏ID +} -func (c *CardActivityConfigRaw) GetRule(gameId string) *svdto.DtoRule { +func (c *CardActivityConfig) RedisInfo(gameId string) *svredis.RedisInfo { tableName := constd.MYSQL_TABLE_S_CARDHOLDER_CONFIG - return &svdto.DtoRule{ - DbMysql: svconst.DbConfig, - TableName: tableName + gameId, + return &svredis.RedisInfo{ CacheKey: fmt.Sprintf("%s:%s:%s", svdto.REDIS_CACHEP_REFIX, tableName, gameId), CacheTime: 300, } @@ -55,6 +60,14 @@ type CardActivityConfigRaw struct { UpdateTime int64 // 修改时间戳 } +func (c *CardActivityConfigRaw) MysqlInfo(gameId string) *svmysql.MysqlInfo { + tableName := constd.MYSQL_TABLE_S_CARDHOLDER_CONFIG + return &svmysql.MysqlInfo{ + DbMysql: svconst.DbConfig.Where("status = ?", 1), + TableName: tableName + gameId, + } +} + // CardActivityConfigClient 卡牌活动配置 给客户端数据 type CardActivityConfigClient struct { Id int64 `form:"id" json:"id"` // ID @@ -100,11 +113,11 @@ type OpenCardholderConfig struct { // NormalCardStarConfig 非保底卡星级ID type NormalCardStarConfig struct { - Id string `json:"id"` // ID - SequenceId string `json:"user_sequence_id"` // 用户序列组ID - Cohort string `json:"cohort"` // 用户分组 - NormalCardSequenceId string `json:"normal_card_sequence_id"` // 非保底星级序列 - NormalCardSequenceIds []string `json:"-"` // 非保底星级序列 + Id string `json:"id"` // ID + SequenceId string `json:"user_sequence_id"` // 用户序列组ID + Cohort string `json:"cohort"` // 用户分组 + NormalCardSequenceId string `json:"normal_card_sequence_id"` // 非保底星级序列 + NormalCardSequenceIds []string `json:"normal_card_sequence_ids"` // 非保底星级序列 } // CardSequenceConfig 星级ID对应的卡片 @@ -113,7 +126,7 @@ type CardSequenceConfig struct { SequenceId string `json:"user_sequence_id"` // 用户序列组ID Cohort string `json:"cohort"` // 用户分组 CardIdList string `json:"card_id_list"` // 卡牌抽取序列 - CardIdLists []string `json:"-"` // 卡牌抽取序列 + CardIdLists []string `json:"card_id_lists"` // 卡牌抽取序列 } // StarShopConfig 星星商店配置 diff --git a/configs/init.go b/configs/init.go index 2368b03..8ce1cf0 100644 --- a/configs/init.go +++ b/configs/init.go @@ -3,28 +3,9 @@ package configs func Init() bool { gameId := "10149" - ////{ - //// conf := &ApiGameConfig{AppId: "dsadsads", GameId: gameId, Name: "Name"} - //// CacheSave(gameId, conf) - ////} - //{ - // conf, has := CacheLoad(gameId, &ApiGameConfig{}) - // fmt.Println("dwjw🐸", conf, has) - //} - //{ - // conf := &CardActivityConfigRaw{} - // rule := conf.GetRule(gameId) - // db := rule.DbMysql.Where("status = ?", 1) - // has, err := svdto.First(db, conf, gameId) - // fmt.Println("dwjw🐸", conf, has, err) - //} - - //for _, gameId := range svconst.GameListCardHolder { - // LoadConfig(gameId) - //} - - _, _ = GetApiGame(gameId) + _, _ = GetApiGameConfig(gameId) + _, _ = GetCardActivityConfig(gameId) return true } diff --git a/configs/registry.go b/configs/registry.go index 3c7b565..1a9e4b9 100644 --- a/configs/registry.go +++ b/configs/registry.go @@ -6,20 +6,48 @@ import ( "fmt" ) -// GetApiGame 获取 api游戏配置 -func GetApiGame(gameId string) (conf *ApiGameConfig, err error) { +// GetApiGameConfig 获取 api游戏配置 +func GetApiGameConfig(gameId string) (conf *ApiGameConfig, err error) { conf = new(ApiGameConfig) has := svredis.LoadData(gameId, conf) if has { - fmt.Println("dwjw GetApiGame use cache") + fmt.Println("dwjw GetApiGameConfig use cache") return } has, err = svmysql.First(conf, gameId) if err != nil { return } + if !has { + return + } + fmt.Println("dwjw GetApiGameConfig save cache") + svredis.SaveData(gameId, conf) + + return +} + +// GetCardActivityConfig 获取 卡牌活动配置 +func GetCardActivityConfig(gameId string) (conf *CardActivityConfig, has bool) { + var err error + conf = new(CardActivityConfig) + has = svredis.LoadData(gameId, conf) + if has { + fmt.Println("dwjw GetCardActivityConfig use cache") + return + } + confRaw := new(CardActivityConfigRaw) + has, err = svmysql.First(confRaw, gameId) + if err != nil { + return + } + if !has { + return + } + + conf.Decode(gameId, confRaw) - fmt.Println("dwjw GetApiGame save cache") + fmt.Println("dwjw GetCardActivityConfig save cache") svredis.SaveData(gameId, conf) return diff --git a/middleware/sign/index.go b/middleware/sign/index.go index 3475c41..23a2056 100644 --- a/middleware/sign/index.go +++ b/middleware/sign/index.go @@ -223,7 +223,7 @@ func CheckSign(data interface{}, checkToken bool) (code string, gameconfig *conf gameid := newdata["gameid"].(string) - gameconfig, err = configs.GetApiGame(gameid) + gameconfig, err = configs.GetApiGameConfig(gameid) if err != nil { lxalilog.Errors(err) return diff --git a/service/cardholder/config-client.go b/service/cardholder/config-client.go deleted file mode 100644 index c90ae4f..0000000 --- a/service/cardholder/config-client.go +++ /dev/null @@ -1,11 +0,0 @@ -package cardholder - -// CardActivityConfigClient 卡牌活动配置 给客户端数据 -type CardActivityConfigClient struct { - Id int64 `form:"id" json:"id"` // ID - RoundAwards map[string]string `form:"round_awards" json:"round_awards"` // 轮次奖励配置 - Albums []AlbumConfig `form:"albums" json:"albums"` // 卡组配置 - Cards []CardConfig `form:"cards" json:"cards"` // 卡牌配置 - Holders []OpenCardholderConfig `form:"holders" json:"holders"` // 卡包开卡规则 - StarShop []StarShopConfig `form:"star_shop" json:"star_shop"` // 星星商店配置 -} diff --git a/service/cardholder/config-load.go b/service/cardholder/config-load.go deleted file mode 100644 index 18106b1..0000000 --- a/service/cardholder/config-load.go +++ /dev/null @@ -1,77 +0,0 @@ -package cardholder - -import ( - "apigame/common/svconst" -) - -// Init1 初始化 -func Init1() { - - NewConfigs() - - TryUpdateConfigs() -} - -// TryUpdateConfigs 尝试更新配置表 -func TryUpdateConfigs() { - LoadConfigs() -} - -// LoadConfigs 读取mysql配置 -func LoadConfigs() { - for _, gameId := range svconst.GameListCardHolder { - LoadConfig(gameId) - } -} - -// TryUpdateConfig 尝试更新配置表 -func TryUpdateConfig(gameId string) (config *CardActivityConfig, has bool) { - LoadConfig(gameId) - return GetConfig(gameId) -} - -// LoadConfig 读取mysql配置 -func LoadConfig(gameId string) { - //// 找到当前开放的活动 - //configOpen := CardActivityUpdateConfig{Id: 0} - //{ - // conf := make([]CardActivityUpdateConfig, 0) - // _, err := svdto.Find(&conf, new(CardActivityUpdateConfig), gameId) - // if err != nil { - // return - // } - // for _, config := range conf { - // if config.Status != 0 { - // configOpen = config - // continue - // } - // } - // fmt.Println(configOpen) - //} - //// 没有开放的活动 - //if configOpen.Id == 0 { - // return - //} - //// 判断是否需要更新 - //needUpdate := false - //configOld, hasConfigOld := GetConfig(gameId) - //if hasConfigOld { - // if configOpen.Id != configOld.Raw.Id || configOpen.UpdateTime != configOld.Raw.UpdateTime { - // needUpdate = true - // } - //} else { - // needUpdate = true - //} - //// 更新数据 - //if needUpdate { - // confNew := &CardActivityConfigRaw{} - // hasConfNew, err := svdto.First(confNew, gameId) - // if err != nil { - // return - // } - // if !hasConfNew { - // return - // } - // ConfigDecode(gameId, confNew) - //} -} diff --git a/service/cardholder/config-registry.go b/service/cardholder/config-registry.go deleted file mode 100644 index 23a32fb..0000000 --- a/service/cardholder/config-registry.go +++ /dev/null @@ -1,175 +0,0 @@ -package cardholder - -import ( - "apigame/util/util-lx/lxalilog" - "encoding/json" - "errors" - "fmt" - "strings" -) - -var ( - _Configs map[string]*CardActivityConfig // 配置列表 k=GameId v=配置 -) - -func NewConfigs() { - _Configs = make(map[string]*CardActivityConfig) -} - -func GetConfig(gameId string) (config *CardActivityConfig, has bool) { - config, has = _Configs[gameId] - return -} - -// ConfigDecode 解析配置原始数据 -func ConfigDecode(gameId string, configRaw *CardActivityConfigRaw) { - Config := &CardActivityConfig{ - Raw: configRaw, - GameId: gameId, - Id: configRaw.Id, - Awards: make(map[string]string), - AlbumConfig: make(map[int]AlbumConfig), - CardConfig: make(map[int]CardConfig), - CardholderConfig: make(map[string]OpenCardholderConfig), - NormalCardStarConfig: make(map[string]NormalCardStarConfig), - CardSequenceConfig: make(map[string]CardSequenceConfig), - StarShopConfig: make(map[int]StarShopConfig), - } - // 解析奖励 - { - err := json.Unmarshal([]byte(configRaw.Awards), &Config.Awards) - if err != nil { - lxalilog.Errors(err, configRaw.Awards, gameId, configRaw.Id) - return - } - } - // 卡组配置 - { - configs := make([]AlbumConfig, 0) - err := json.Unmarshal([]byte(configRaw.AlbumConfig), &configs) - if err != nil { - lxalilog.Errors(err, configRaw.AlbumConfig, gameId, configRaw.Id) - return - } - for _, i2 := range configs { - Config.AlbumConfig[i2.SetId] = i2 - } - } - // 卡牌配置 - { - configs := make([]CardConfig, 0) - err := json.Unmarshal([]byte(configRaw.CardConfig), &configs) - if err != nil { - lxalilog.Errors(err, configRaw.CardConfig, gameId, configRaw.Id) - return - } - for _, i2 := range configs { - Config.CardConfig[i2.Id] = i2 - } - } - // 卡包开卡规则 - { - configs := make([]OpenCardholderConfig, 0) - err := json.Unmarshal([]byte(configRaw.CardHolderConfig), &configs) - if err != nil { - lxalilog.Errors(err, configRaw.CardHolderConfig, gameId, configRaw.Id) - return - } - for _, i2 := range configs { - Config.CardholderConfig[i2.Id] = i2 - } - } - // 卡片星级配置 - { - configs := make([]NormalCardStarConfig, 0) - err := json.Unmarshal([]byte(configRaw.NormalCardStarSequence), &configs) - if err != nil { - lxalilog.Errors(err, configRaw.NormalCardStarSequence, gameId, configRaw.Id) - return - } - for _, i2 := range configs { - i2.NormalCardSequenceIds = strings.Split(i2.NormalCardSequenceId, ",") - combineId := CombineIdSequenceIdCohort(i2.Id, i2.SequenceId, i2.Cohort) - Config.NormalCardStarConfig[combineId] = i2 - } - } - // 卡片星级对应卡牌配置 - { - configs := make([]CardSequenceConfig, 0) - err := json.Unmarshal([]byte(configRaw.CardSequenceConfig), &configs) - if err != nil { - lxalilog.Errors(err, configRaw.CardSequenceConfig, gameId, configRaw.Id) - return - } - for _, i2 := range configs { - i2.CardIdLists = strings.Split(i2.CardIdList, ",") - combineId := CombineIdSequenceIdCohort(i2.Id, i2.SequenceId, i2.Cohort) - Config.CardSequenceConfig[combineId] = i2 - } - } - // 星星商店配置 - { - configs := make([]StarShopConfig, 0) - err := json.Unmarshal([]byte(configRaw.StarShopConfig), &configs) - if err != nil { - lxalilog.Errors(err, configRaw.StarShopConfig, gameId, configRaw.Id) - return - } - for _, i2 := range configs { - Config.StarShopConfig[i2.Id] = i2 - } - } - _Configs[gameId] = Config - - GenerateConfigClient(Config) -} - -// GenerateConfigClient 生成给客户端的配置 -func GenerateConfigClient(config *CardActivityConfig) { - configClient := &CardActivityConfigClient{ - Id: config.Id, - RoundAwards: config.Awards, - Albums: make([]AlbumConfig, 0), - Cards: make([]CardConfig, 0), - Holders: make([]OpenCardholderConfig, 0), - StarShop: make([]StarShopConfig, 0), - } - for _, i2 := range config.AlbumConfig { - configClient.Albums = append(configClient.Albums, i2) - } - for _, i2 := range config.CardConfig { - configClient.Cards = append(configClient.Cards, i2) - } - for _, i2 := range config.CardholderConfig { - configClient.Holders = append(configClient.Holders, i2) - } - for _, i2 := range config.StarShopConfig { - configClient.StarShop = append(configClient.StarShop, i2) - } - config.Client = configClient -} - -// CombineIdSequenceIdCohort 组合ID k=ID_用户序列_用户分组 -func CombineIdSequenceIdCohort(id, sequenceId, cohort string) string { - return fmt.Sprintf("%s_%s_%s", id, sequenceId, cohort) -} - -// FindNormalCardStarConfig 查找配置 非保底卡星级ID -func (c *CardActivityConfig) FindNormalCardStarConfig(id, sequenceId, cohort string) (conf NormalCardStarConfig, has bool) { - combineId := CombineIdSequenceIdCohort(id, sequenceId, cohort) - conf, has = c.NormalCardStarConfig[combineId] - if !has { - lxalilog.Errors(errors.New("ht_cardholder NormalCardStarConfig error"), id, sequenceId, cohort) - } - return -} - -// FindCardSequenceConfig 查找配置 星级ID对应的卡片 -func (c *CardActivityConfig) FindCardSequenceConfig(id, sequenceId, cohort string) (conf CardSequenceConfig, has bool) { - combineId := CombineIdSequenceIdCohort(id, sequenceId, cohort) - conf, has = c.CardSequenceConfig[combineId] - if !has { - lxalilog.Errors(errors.New("ht_cardholder CardSequenceConfig error"), id, sequenceId, cohort) - } - return -} diff --git a/service/cardholder/config.go b/service/cardholder/config.go deleted file mode 100644 index f5e3ef3..0000000 --- a/service/cardholder/config.go +++ /dev/null @@ -1,122 +0,0 @@ -package cardholder - -import ( - "apigame/service/constd" - "apigame/util/utdto" -) - -// CardActivityUpdateConfig 卡牌活动更新配置 -type CardActivityUpdateConfig struct { - Id int64 // ID - Status int // 状态 0=关闭 1=开启 - UpdateTime int64 // 修改时间戳 -} - -func (d *CardActivityUpdateConfig) TableName() string { - return utdto.MYSQL_TABLE_TEMPLATE -} - -func (d *CardActivityUpdateConfig) GetTableName(gameId string) string { - return constd.MYSQL_TABLE_S_CARDHOLDER_CONFIG + gameId -} - -// CardActivityConfig 卡牌活动配置 分析后数据 -type CardActivityConfig struct { - Raw *CardActivityConfigRaw - Client *CardActivityConfigClient - GameId string // 所属游戏ID - Id int64 // ID - Awards map[string]string // 奖励配置 - AlbumConfig map[int]AlbumConfig // 卡组配置 - CardConfig map[int]CardConfig // 卡牌配置 - CardholderConfig map[string]OpenCardholderConfig // 卡包开卡规则 - NormalCardStarConfig map[string]NormalCardStarConfig // k=ID_用户序列_用户分组 卡片星级配置 - CardSequenceConfig map[string]CardSequenceConfig // k=ID_用户序列_用户分组 卡片星级对应卡牌配置 - StarShopConfig map[int]StarShopConfig // 星星商店配置 -} - -// CardActivityConfigRaw 卡牌活动配置 原始数据 -type CardActivityConfigRaw struct { - Id int64 // ID - OpenLevel int // 开启等级 - PreviewTime int64 // 预告时间 - StartTime int64 // 开始时间 - EndTime int64 // 结束时间 - Round int // 轮数 - Awards string `json:"-"` // 奖励配置 - AlbumConfig string `json:"-"` // 卡组配置 - CardConfig string `json:"-"` // 卡牌配置 - CardHolderConfig string `json:"-"` // 卡包开卡规则 - NormalCardStarSequence string `json:"-"` // 卡片星级配置 - CardSequenceConfig string `json:"-"` // 卡片星级对应卡牌配置 - StarShopConfig string `json:"-"` // 星星商店配置 - Ver string // 版本号 - Status int // 状态 0=关闭 1=开启 - UpdateTime int64 // 修改时间戳 -} - -func (d *CardActivityConfigRaw) TableName() string { - return utdto.MYSQL_TABLE_TEMPLATE -} - -func (d *CardActivityConfigRaw) GetTableName(gameId string) string { - return constd.MYSQL_TABLE_S_CARDHOLDER_CONFIG + gameId -} - -// AlbumConfig 卡组表 -type AlbumConfig struct { - SetId int `json:"set_id"` // 卡组名 - Name int `json:"name"` // 卡组图片 - Icon string `json:"icon"` // 卡组id - Rewards map[string]string `json:"rewards"` // 集齐奖励 k=轮次 - StartTime int64 `json:"start_time"` // 开始时间 - EndTime int64 `json:"end_time"` // 结束时间 -} - -// CardConfig 卡牌表 -type CardConfig struct { - Id int `json:"id"` // ID - Name int `json:"name"` // 卡牌名字 - Icon int `json:"icon"` // 卡牌图标 - Desc int `json:"desc"` // 卡牌描述 - SetId int `json:"album_setid"` // 卡组id - Star int `json:"star"` // 星级 - IsGold int `json:"is_gold"` // 是否是金卡 - IsSend int `json:"is_send"` // 卡片是否可赠送 -} - -// OpenCardholderConfig 卡包开卡规则表 -type OpenCardholderConfig struct { - Id string `json:"id"` // ID - IsGoldCardholder int `json:"is_gold_card_holder"` // 是否是金卡包 - IsNew int `json:"is_new"` // 是否是新卡包 - GuaranteedStarCardId string `json:"guaranteed_star_card_id"` // 保底卡星级序列ID - NormalCardNumber int `json:"normal_card_number"` // 非保底卡数量 - MinimumGuaranteeCardId string `json:"minimum_guarantee_card_id"` // 非保底卡牌序列ID - ActivityId int `json:"activity_id"` // 对应活动ID -} - -// NormalCardStarConfig 非保底卡星级ID -type NormalCardStarConfig struct { - Id string `json:"id"` // ID - SequenceId string `json:"user_sequence_id"` // 用户序列组ID - Cohort string `json:"cohort"` // 用户分组 - NormalCardSequenceId string `json:"normal_card_sequence_id"` // 非保底星级序列 - NormalCardSequenceIds []string `json:"-"` // 非保底星级序列 -} - -// CardSequenceConfig 星级ID对应的卡片 -type CardSequenceConfig struct { - Id string `json:"id"` // ID - SequenceId string `json:"user_sequence_id"` // 用户序列组ID - Cohort string `json:"cohort"` // 用户分组 - CardIdList string `json:"card_id_list"` // 卡牌抽取序列 - CardIdLists []string `json:"-"` // 卡牌抽取序列 -} - -// StarShopConfig 星星商店配置 -type StarShopConfig struct { - Id int `json:"id"` // ID - NeedStarNumber int `json:"need_star_number"` // 需求星星数 - CardBagIds []int `json:"card_bag_ids"` // 可换取的卡包ID {卡包类型,卡包ID,卡包数量} -} diff --git a/service/cardholder/handle.go b/service/cardholder/handle.go index cef9345..3ce049d 100644 --- a/service/cardholder/handle.go +++ b/service/cardholder/handle.go @@ -1,6 +1,7 @@ package cardholder import ( + "apigame/configs" "apigame/models" "apigame/service/constd" "apigame/util/util-lx/lxalilog" @@ -15,12 +16,12 @@ func HandleGetConfig(req *models.ReqCardHolderGetConfig) (code string, rsp model code = constd.RECODE_OK // 尝试更新配置 - config, _ := TryUpdateConfig(req.GameID) + config, _ := configs.GetCardActivityConfig(req.GameID) rsp.ActivityId = config.Id - rsp.PrepareTime = config.Raw.PreviewTime - rsp.StartTime = config.Raw.StartTime - rsp.EndTime = config.Raw.EndTime - rsp.OpenLevel = config.Raw.OpenLevel + rsp.PrepareTime = config.PreviewTime + rsp.StartTime = config.StartTime + rsp.EndTime = config.EndTime + rsp.OpenLevel = config.OpenLevel rsp.Config = config.Client @@ -33,7 +34,7 @@ func HandleInfo(req *models.ReqCardHolderInfo) (code string, rsp models.RspCardH code = constd.RECODE_OK // 尝试更新配置 - config, hasConfig := TryUpdateConfig(req.GameID) + config, hasConfig := configs.GetCardActivityConfig(req.GameID) if !hasConfig { code = constd.RECODE_MERGE_CARDHOLDER_NOTOPEN_ERROR return @@ -41,7 +42,7 @@ func HandleInfo(req *models.ReqCardHolderInfo) (code string, rsp models.RspCardH // 判断预告时间 sec := lxtime.NowUninx() - if sec < config.Raw.StartTime { + if sec < config.StartTime { code = constd.RECODE_MERGE_CARDHOLDER_NOTOPEN_ERROR return } @@ -63,7 +64,7 @@ func HandleOpen(req *models.ReqCardHolderOpen) (code string, rsp models.RspCardH code = constd.RECODE_OK // 尝试更新配置 - config, hasConfig := TryUpdateConfig(req.GameID) + config, hasConfig := configs.GetCardActivityConfig(req.GameID) if !hasConfig { code = constd.RECODE_MERGE_CARDHOLDER_NOTOPEN_ERROR return @@ -138,7 +139,7 @@ func HandleShopExchange(req *models.ReqStarShopExchange) (code string, rsp model code = constd.RECODE_OK // 尝试更新配置 - config, hasConfig := TryUpdateConfig(req.GameID) + config, hasConfig := configs.GetCardActivityConfig(req.GameID) if !hasConfig { code = constd.RECODE_MERGE_CARDHOLDER_NOTOPEN_ERROR return @@ -244,7 +245,7 @@ func HandleAutoExchangeInfo(req *models.ReqAutoExchangeInfo) (code string, rsp m code = constd.RECODE_OK // 尝试更新配置 - config, hasConfig := TryUpdateConfig(req.GameID) + config, hasConfig := configs.GetCardActivityConfig(req.GameID) if !hasConfig { code = constd.RECODE_MERGE_CARDHOLDER_NOTOPEN_ERROR return diff --git a/service/cardholder/logic.go b/service/cardholder/logic.go index b42935e..b2c18ba 100644 --- a/service/cardholder/logic.go +++ b/service/cardholder/logic.go @@ -2,6 +2,7 @@ package cardholder import ( "apigame/common/svdto" + "apigame/configs" "apigame/models" "apigame/service/constd" "apigame/util/util-lx/lxalilog" @@ -38,7 +39,7 @@ func _LoadData(gameId string, uid int64) (d *CardHolderData) { } // LoadData 获取数据 外部接口 -func LoadData(gameId string, uid int64, config *CardActivityConfig) (d *CardHolderData) { +func LoadData(gameId string, uid int64, config *configs.CardActivityConfig) (d *CardHolderData) { configId := config.Id d = _LoadData(gameId, uid) // 如果当前有上线活动(活动ID不为0),且活动ID和玩家数据不同,说明活动已切换 需更新 @@ -61,23 +62,23 @@ func LoadData(gameId string, uid int64, config *CardActivityConfig) (d *CardHold } // CheckStatus 判断活动是否开启 -func CheckStatus(conf *CardActivityConfig) string { +func CheckStatus(conf *configs.CardActivityConfig) string { sec := lxtime.NowUninx() if conf.Id == 0 { return constd.RECODE_MERGE_CARDHOLDER_NOTOPEN1_ERROR } - if sec < conf.Raw.StartTime { + if sec < conf.StartTime { return constd.RECODE_MERGE_CARDHOLDER_NOTOPEN1_ERROR } - if sec > conf.Raw.EndTime { + if sec > conf.EndTime { return constd.RECODE_MERGE_CARDHOLDER_NOTOPEN2_ERROR } return constd.RECODE_OK } // CheckGameData 检查游戏数据 轮次等 -func CheckGameData(d *CardHolderData, conf *CardActivityConfig) string { - if d.Details.Round > conf.Raw.Round { +func CheckGameData(d *CardHolderData, conf *configs.CardActivityConfig) string { + if d.Details.Round > conf.Round { return constd.RECODE_MERGE_CARDHOLDER_ROUNDFINISH_ERROR } return constd.RECODE_OK @@ -119,7 +120,7 @@ func GetListFromArray(array []string, scale, count int) []string { } // GetNewCard 按顺序查找数目最少的一张卡抽取 -func GetNewCard(gameData *CardHolderData, conf *CardActivityConfig) int { +func GetNewCard(gameData *CardHolderData, conf *configs.CardActivityConfig) int { if len(conf.CardConfig) < 1 { return 0 } @@ -136,7 +137,7 @@ func GetNewCard(gameData *CardHolderData, conf *CardActivityConfig) int { } // CheckAlbumFinish 判断卡组是否已集齐 -func CheckAlbumFinish(albumId int, gameData *CardHolderData, config *CardActivityConfig) bool { +func CheckAlbumFinish(albumId int, gameData *CardHolderData, config *configs.CardActivityConfig) bool { for _, conf := range config.CardConfig { if conf.SetId == albumId { count := gameData.Details.Cards[conf.Id] @@ -149,7 +150,7 @@ func CheckAlbumFinish(albumId int, gameData *CardHolderData, config *CardActivit } // CheckRoundFinish 判断轮次是否已集齐(所有卡组集齐) -func CheckRoundFinish(gameData *CardHolderData, config *CardActivityConfig) bool { +func CheckRoundFinish(gameData *CardHolderData, config *configs.CardActivityConfig) bool { for _, conf := range config.AlbumConfig { count := gameData.Details.Album[conf.SetId] if count < 1 { @@ -167,7 +168,7 @@ func HandleNextRound(gameData *CardHolderData) { } // GetInfo 玩家卡牌活动信息 -func GetInfo(gameData *CardHolderData, conf *CardActivityConfig) models.CardHolderInfo { +func GetInfo(gameData *CardHolderData, conf *configs.CardActivityConfig) models.CardHolderInfo { info := models.CardHolderInfo{ Cards: make(map[int]int), Album: make(map[int]int), @@ -188,8 +189,8 @@ func GetInfo(gameData *CardHolderData, conf *CardActivityConfig) models.CardHold // openMode:开包类型0客户端驱动1星星商店购买2剩余星星兑换 func DoOpen(gameId string, gameData *CardHolderData, - config *CardActivityConfig, - confCardholder OpenCardholderConfig, + config *configs.CardActivityConfig, + confCardholder configs.OpenCardholderConfig, sequenceId, cohort string, openMode int) (newCards []int) { @@ -205,7 +206,7 @@ func DoOpen(gameId string, getCardFunc := func(cardConfigId string) { confCardSequence, hasCardSequence := config.FindCardSequenceConfig(cardConfigId, sequenceId, cohort) if hasCardSequence { - combineId := CombineIdSequenceIdCohort(cardConfigId, sequenceId, cohort) + combineId := configs.CombineIdSequenceIdCohort(cardConfigId, sequenceId, cohort) scale := gameData.Details.CardSequenceScales[combineId] cardId := GetOneFromArray(confCardSequence.CardIdLists, scale) cardIdInt := utstring.StringToInt(cardId) @@ -226,7 +227,7 @@ func DoOpen(gameId string, count := confCardholder.NormalCardNumber confNormalCardStar, hasNormalCardStar := config.FindNormalCardStarConfig(confCardholder.MinimumGuaranteeCardId, sequenceId, cohort) if hasNormalCardStar { - combineIdStar := CombineIdSequenceIdCohort(confCardholder.MinimumGuaranteeCardId, sequenceId, cohort) + combineIdStar := configs.CombineIdSequenceIdCohort(confCardholder.MinimumGuaranteeCardId, sequenceId, cohort) scaleStar := gameData.Details.StarSequenceScales[combineIdStar] starIds := GetListFromArray(confNormalCardStar.NormalCardSequenceIds, scaleStar, count) // 增加星级刻度 @@ -251,7 +252,7 @@ func DoOpen(gameId string, // DoOpenCheckAward 封装的新卡判断是否出发卡组和轮次奖励的逻辑 func DoOpenCheckAward(gameId string, gameData *CardHolderData, - config *CardActivityConfig, + config *configs.CardActivityConfig, sequenceId, cohort string, newCards []int, openMode int) (awardAlbum map[int]string, awardRound string) { @@ -312,7 +313,7 @@ func DoOpenCheckAward(gameId string, } // CalculateStarCount 计算星星点数 -func CalculateStarCount(gameData *CardHolderData, config *CardActivityConfig) { +func CalculateStarCount(gameData *CardHolderData, config *configs.CardActivityConfig) { starCount := 0 for cardId, cardCount := range gameData.Details.Cards { if cardCount <= 1 { @@ -334,7 +335,7 @@ func CalculateStarCount(gameData *CardHolderData, config *CardActivityConfig) { } // GetStarCardList 按照规则扣除星星数找到需要扣除的卡牌列表 -func GetStarCardList(gameData *CardHolderData, config *CardActivityConfig, needStar int) (enough bool, cardList map[int]int) { +func GetStarCardList(gameData *CardHolderData, config *configs.CardActivityConfig, needStar int) (enough bool, cardList map[int]int) { enough = false cardList = make(map[int]int) starAmount := 0 @@ -403,10 +404,10 @@ func GetStarCardList(gameData *CardHolderData, config *CardActivityConfig, needS } // NextActivityAutoExchange 活动切换时自动兑换卡包 -func NextActivityAutoExchange(gameId string, gameData *CardHolderData, config *CardActivityConfig) { +func NextActivityAutoExchange(gameId string, gameData *CardHolderData, config *configs.CardActivityConfig) { starCount := gameData.Details.LastStarCount // 把星星的配置按照需要的星星数降序排列 - list := lo.Values[int, StarShopConfig](config.StarShopConfig) + list := lo.Values[int, configs.StarShopConfig](config.StarShopConfig) sort.Slice(list, func(i, j int) bool { return list[i].NeedStarNumber < list[j].NeedStarNumber }) diff --git a/util/utdto/base.go b/util/utdto/base.go index aeebccd..e2f247b 100644 --- a/util/utdto/base.go +++ b/util/utdto/base.go @@ -1,7 +1,6 @@ package utdto import ( - "fmt" "gorm.io/gorm" "strings" ) @@ -33,7 +32,6 @@ func Save(db *gorm.DB, value any, tableName string) *gorm.DB { func First(db *gorm.DB, value any, tableName string) *gorm.DB { stmt := db.Session(&gorm.Session{DryRun: true}).First(value).Statement stmtSQL := stmt.SQL.String() - fmt.Println("dwjw🐷 stmt.Table", stmt.Table) sql := strings.Replace(stmtSQL, MYSQL_TABLE_TEMPLATE, tableName, -1) return db.Raw(sql, stmt.Vars...).Scan(value) } -- libgit2 0.21.0