Commit 29e2ebdcd43f77c732075639dd7b5a4f07966031

Authored by 王家文
1 parent 9a13710f
Exists in master and in 1 other branch dev-wjw

refactor♻️:redis对象和mysql对象持久化和读取

configs/feat-cardholder-decode.go 0 → 100644
... ... @@ -0,0 +1,169 @@
  1 +package configs
  2 +
  3 +import (
  4 + "apigame/util/util-lx/lxalilog"
  5 + "encoding/json"
  6 + "errors"
  7 + "fmt"
  8 + "strings"
  9 +)
  10 +
  11 +// Decode 解析配置原始数据
  12 +func (c *CardActivityConfig) Decode(gameId string, configRaw *CardActivityConfigRaw) {
  13 + c.GameId = gameId
  14 + c.Raw = configRaw
  15 +
  16 + c.Id = configRaw.Id
  17 + c.OpenLevel = configRaw.OpenLevel
  18 + c.PreviewTime = configRaw.PreviewTime
  19 + c.StartTime = configRaw.StartTime
  20 + c.EndTime = configRaw.EndTime
  21 + c.Round = configRaw.Round
  22 +
  23 + c.Awards = make(map[string]string)
  24 + c.AlbumConfig = make(map[int]AlbumConfig)
  25 + c.CardConfig = make(map[int]CardConfig)
  26 + c.CardholderConfig = make(map[string]OpenCardholderConfig)
  27 + c.NormalCardStarConfig = make(map[string]NormalCardStarConfig)
  28 + c.CardSequenceConfig = make(map[string]CardSequenceConfig)
  29 + c.StarShopConfig = make(map[int]StarShopConfig)
  30 + // 解析奖励
  31 + {
  32 + err := json.Unmarshal([]byte(configRaw.Awards), &c.Awards)
  33 + if err != nil {
  34 + lxalilog.Errors(err, configRaw.Awards, gameId, configRaw.Id)
  35 + return
  36 + }
  37 + }
  38 + // 卡组配置
  39 + {
  40 + configs := make([]AlbumConfig, 0)
  41 + err := json.Unmarshal([]byte(configRaw.AlbumConfig), &configs)
  42 + if err != nil {
  43 + lxalilog.Errors(err, configRaw.AlbumConfig, gameId, configRaw.Id)
  44 + return
  45 + }
  46 + for _, i2 := range configs {
  47 + c.AlbumConfig[i2.SetId] = i2
  48 + }
  49 + }
  50 + // 卡牌配置
  51 + {
  52 + configs := make([]CardConfig, 0)
  53 + err := json.Unmarshal([]byte(configRaw.CardConfig), &configs)
  54 + if err != nil {
  55 + lxalilog.Errors(err, configRaw.CardConfig, gameId, configRaw.Id)
  56 + return
  57 + }
  58 + for _, i2 := range configs {
  59 + c.CardConfig[i2.Id] = i2
  60 + }
  61 + }
  62 + // 卡包开卡规则
  63 + {
  64 + configs := make([]OpenCardholderConfig, 0)
  65 + err := json.Unmarshal([]byte(configRaw.CardHolderConfig), &configs)
  66 + if err != nil {
  67 + lxalilog.Errors(err, configRaw.CardHolderConfig, gameId, configRaw.Id)
  68 + return
  69 + }
  70 + for _, i2 := range configs {
  71 + c.CardholderConfig[i2.Id] = i2
  72 + }
  73 + }
  74 + // 卡片星级配置
  75 + {
  76 + configs := make([]NormalCardStarConfig, 0)
  77 + err := json.Unmarshal([]byte(configRaw.NormalCardStarSequence), &configs)
  78 + if err != nil {
  79 + lxalilog.Errors(err, configRaw.NormalCardStarSequence, gameId, configRaw.Id)
  80 + return
  81 + }
  82 + for _, i2 := range configs {
  83 + i2.NormalCardSequenceIds = strings.Split(i2.NormalCardSequenceId, ",")
  84 + combineId := CombineIdSequenceIdCohort(i2.Id, i2.SequenceId, i2.Cohort)
  85 + c.NormalCardStarConfig[combineId] = i2
  86 + }
  87 + }
  88 + // 卡片星级对应卡牌配置
  89 + {
  90 + configs := make([]CardSequenceConfig, 0)
  91 + err := json.Unmarshal([]byte(configRaw.CardSequenceConfig), &configs)
  92 + if err != nil {
  93 + lxalilog.Errors(err, configRaw.CardSequenceConfig, gameId, configRaw.Id)
  94 + return
  95 + }
  96 + for _, i2 := range configs {
  97 + i2.CardIdLists = strings.Split(i2.CardIdList, ",")
  98 + combineId := CombineIdSequenceIdCohort(i2.Id, i2.SequenceId, i2.Cohort)
  99 + c.CardSequenceConfig[combineId] = i2
  100 + }
  101 + }
  102 + // 星星商店配置
  103 + {
  104 + configs := make([]StarShopConfig, 0)
  105 + err := json.Unmarshal([]byte(configRaw.StarShopConfig), &configs)
  106 + if err != nil {
  107 + lxalilog.Errors(err, configRaw.StarShopConfig, gameId, configRaw.Id)
  108 + return
  109 + }
  110 + for _, i2 := range configs {
  111 + c.StarShopConfig[i2.Id] = i2
  112 + }
  113 + }
  114 +
  115 + c.GenerateConfigClient()
  116 +}
  117 +
  118 +// GenerateConfigClient 生成给客户端的配置
  119 +func (c *CardActivityConfig) GenerateConfigClient() {
  120 + configClient := &CardActivityConfigClient{
  121 + Id: c.Id,
  122 + RoundAwards: c.Awards,
  123 + Albums: make([]AlbumConfig, 0),
  124 + Cards: make([]CardConfig, 0),
  125 + Holders: make([]OpenCardholderConfig, 0),
  126 + StarShop: make([]StarShopConfig, 0),
  127 + }
  128 + for _, i2 := range c.AlbumConfig {
  129 + configClient.Albums = append(configClient.Albums, i2)
  130 + }
  131 + for _, i2 := range c.CardConfig {
  132 + configClient.Cards = append(configClient.Cards, i2)
  133 + }
  134 + for _, i2 := range c.CardholderConfig {
  135 + configClient.Holders = append(configClient.Holders, i2)
  136 + }
  137 + for _, i2 := range c.StarShopConfig {
  138 + configClient.StarShop = append(configClient.StarShop, i2)
  139 + }
  140 + c.Client = configClient
  141 +}
  142 +
  143 +// CombineIdSequenceIdCohort 组合ID k=ID_用户序列_用户分组
  144 +func CombineIdSequenceIdCohort(id, sequenceId, cohort string) string {
  145 + return fmt.Sprintf("%s_%s_%s", id, sequenceId, cohort)
  146 +}
  147 +
  148 +// FindNormalCardStarConfig 查找配置 非保底卡星级ID
  149 +func (c *CardActivityConfig) FindNormalCardStarConfig(id, sequenceId, cohort string) (conf NormalCardStarConfig, has bool) {
  150 + combineId := CombineIdSequenceIdCohort(id, sequenceId, cohort)
  151 + conf, has = c.NormalCardStarConfig[combineId]
  152 + if !has {
  153 + lxalilog.Errors(errors.New("ht_cardholder NormalCardStarConfig error"), id, sequenceId, cohort)
  154 + }
  155 + return
  156 +}
  157 +
  158 +// FindCardSequenceConfig 查找配置 星级ID对应的卡片
  159 +func (c *CardActivityConfig) FindCardSequenceConfig(id, sequenceId, cohort string) (conf CardSequenceConfig, has bool) {
  160 + combineId := CombineIdSequenceIdCohort(id, sequenceId, cohort)
  161 + conf, has = c.CardSequenceConfig[combineId]
  162 + if !has {
  163 + lxalilog.Errors(errors.New("ht_cardholder CardSequenceConfig error"), id, sequenceId, cohort)
  164 + fmt.Println(id)
  165 + fmt.Println(sequenceId)
  166 + fmt.Println(cohort)
  167 + }
  168 + return
  169 +}
... ...
configs/feat-cardholder.go
... ... @@ -3,17 +3,23 @@ package configs
3 3 import (
4 4 "apigame/common/svconst"
5 5 "apigame/common/svdto"
  6 + "apigame/common/svmysql"
  7 + "apigame/common/svredis"
6 8 "apigame/service/constd"
7   - "apigame/util/utdto"
8 9 "fmt"
9 10 )
10 11  
11 12 // CardActivityConfig 卡牌活动配置 分析后数据
12 13 type CardActivityConfig struct {
13   - Raw *CardActivityConfigRaw
14   - Client *CardActivityConfigClient
15   - GameId string // 所属游戏ID
16   - Id int64 // ID
  14 + Raw *CardActivityConfigRaw `json:"-"`
  15 +
  16 + Id int64 // ID
  17 + OpenLevel int // 开启等级
  18 + PreviewTime int64 // 预告时间
  19 + StartTime int64 // 开始时间
  20 + EndTime int64 // 结束时间
  21 + Round int // 轮数
  22 +
17 23 Awards map[string]string // 奖励配置
18 24 AlbumConfig map[int]AlbumConfig // 卡组配置
19 25 CardConfig map[int]CardConfig // 卡牌配置
... ... @@ -21,15 +27,14 @@ type CardActivityConfig struct {
21 27 NormalCardStarConfig map[string]NormalCardStarConfig // k=ID_用户序列_用户分组 卡片星级配置
22 28 CardSequenceConfig map[string]CardSequenceConfig // k=ID_用户序列_用户分组 卡片星级对应卡牌配置
23 29 StarShopConfig map[int]StarShopConfig // 星星商店配置
24   -}
25 30  
26   -func (c *CardActivityConfigRaw) TableName() string { return utdto.MYSQL_TABLE_TEMPLATE }
  31 + Client *CardActivityConfigClient
  32 + GameId string // 所属游戏ID
  33 +}
27 34  
28   -func (c *CardActivityConfigRaw) GetRule(gameId string) *svdto.DtoRule {
  35 +func (c *CardActivityConfig) RedisInfo(gameId string) *svredis.RedisInfo {
29 36 tableName := constd.MYSQL_TABLE_S_CARDHOLDER_CONFIG
30   - return &svdto.DtoRule{
31   - DbMysql: svconst.DbConfig,
32   - TableName: tableName + gameId,
  37 + return &svredis.RedisInfo{
33 38 CacheKey: fmt.Sprintf("%s:%s:%s", svdto.REDIS_CACHEP_REFIX, tableName, gameId),
34 39 CacheTime: 300,
35 40 }
... ... @@ -55,6 +60,14 @@ type CardActivityConfigRaw struct {
55 60 UpdateTime int64 // 修改时间戳
56 61 }
57 62  
  63 +func (c *CardActivityConfigRaw) MysqlInfo(gameId string) *svmysql.MysqlInfo {
  64 + tableName := constd.MYSQL_TABLE_S_CARDHOLDER_CONFIG
  65 + return &svmysql.MysqlInfo{
  66 + DbMysql: svconst.DbConfig.Where("status = ?", 1),
  67 + TableName: tableName + gameId,
  68 + }
  69 +}
  70 +
58 71 // CardActivityConfigClient 卡牌活动配置 给客户端数据
59 72 type CardActivityConfigClient struct {
60 73 Id int64 `form:"id" json:"id"` // ID
... ... @@ -100,11 +113,11 @@ type OpenCardholderConfig struct {
100 113  
101 114 // NormalCardStarConfig 非保底卡星级ID
102 115 type NormalCardStarConfig struct {
103   - Id string `json:"id"` // ID
104   - SequenceId string `json:"user_sequence_id"` // 用户序列组ID
105   - Cohort string `json:"cohort"` // 用户分组
106   - NormalCardSequenceId string `json:"normal_card_sequence_id"` // 非保底星级序列
107   - NormalCardSequenceIds []string `json:"-"` // 非保底星级序列
  116 + Id string `json:"id"` // ID
  117 + SequenceId string `json:"user_sequence_id"` // 用户序列组ID
  118 + Cohort string `json:"cohort"` // 用户分组
  119 + NormalCardSequenceId string `json:"normal_card_sequence_id"` // 非保底星级序列
  120 + NormalCardSequenceIds []string `json:"normal_card_sequence_ids"` // 非保底星级序列
108 121 }
109 122  
110 123 // CardSequenceConfig 星级ID对应的卡片
... ... @@ -113,7 +126,7 @@ type CardSequenceConfig struct {
113 126 SequenceId string `json:"user_sequence_id"` // 用户序列组ID
114 127 Cohort string `json:"cohort"` // 用户分组
115 128 CardIdList string `json:"card_id_list"` // 卡牌抽取序列
116   - CardIdLists []string `json:"-"` // 卡牌抽取序列
  129 + CardIdLists []string `json:"card_id_lists"` // 卡牌抽取序列
117 130 }
118 131  
119 132 // StarShopConfig 星星商店配置
... ...
configs/init.go
... ... @@ -3,28 +3,9 @@ package configs
3 3 func Init() bool {
4 4  
5 5 gameId := "10149"
6   - ////{
7   - //// conf := &ApiGameConfig{AppId: "dsadsads", GameId: gameId, Name: "Name"}
8   - //// CacheSave(gameId, conf)
9   - ////}
10   - //{
11   - // conf, has := CacheLoad(gameId, &ApiGameConfig{})
12   - // fmt.Println("dwjw🐸", conf, has)
13   - //}
14 6  
15   - //{
16   - // conf := &CardActivityConfigRaw{}
17   - // rule := conf.GetRule(gameId)
18   - // db := rule.DbMysql.Where("status = ?", 1)
19   - // has, err := svdto.First(db, conf, gameId)
20   - // fmt.Println("dwjw🐸", conf, has, err)
21   - //}
22   -
23   - //for _, gameId := range svconst.GameListCardHolder {
24   - // LoadConfig(gameId)
25   - //}
26   -
27   - _, _ = GetApiGame(gameId)
  7 + _, _ = GetApiGameConfig(gameId)
  8 + _, _ = GetCardActivityConfig(gameId)
28 9  
29 10 return true
30 11 }
... ...
configs/registry.go
... ... @@ -6,20 +6,48 @@ import (
6 6 "fmt"
7 7 )
8 8  
9   -// GetApiGame 获取 api游戏配置
10   -func GetApiGame(gameId string) (conf *ApiGameConfig, err error) {
  9 +// GetApiGameConfig 获取 api游戏配置
  10 +func GetApiGameConfig(gameId string) (conf *ApiGameConfig, err error) {
11 11 conf = new(ApiGameConfig)
12 12 has := svredis.LoadData(gameId, conf)
13 13 if has {
14   - fmt.Println("dwjw GetApiGame use cache")
  14 + fmt.Println("dwjw GetApiGameConfig use cache")
15 15 return
16 16 }
17 17 has, err = svmysql.First(conf, gameId)
18 18 if err != nil {
19 19 return
20 20 }
  21 + if !has {
  22 + return
  23 + }
  24 + fmt.Println("dwjw GetApiGameConfig save cache")
  25 + svredis.SaveData(gameId, conf)
  26 +
  27 + return
  28 +}
  29 +
  30 +// GetCardActivityConfig 获取 卡牌活动配置
  31 +func GetCardActivityConfig(gameId string) (conf *CardActivityConfig, has bool) {
  32 + var err error
  33 + conf = new(CardActivityConfig)
  34 + has = svredis.LoadData(gameId, conf)
  35 + if has {
  36 + fmt.Println("dwjw GetCardActivityConfig use cache")
  37 + return
  38 + }
  39 + confRaw := new(CardActivityConfigRaw)
  40 + has, err = svmysql.First(confRaw, gameId)
  41 + if err != nil {
  42 + return
  43 + }
  44 + if !has {
  45 + return
  46 + }
  47 +
  48 + conf.Decode(gameId, confRaw)
21 49  
22   - fmt.Println("dwjw GetApiGame save cache")
  50 + fmt.Println("dwjw GetCardActivityConfig save cache")
23 51 svredis.SaveData(gameId, conf)
24 52  
25 53 return
... ...
middleware/sign/index.go
... ... @@ -223,7 +223,7 @@ func CheckSign(data interface{}, checkToken bool) (code string, gameconfig *conf
223 223  
224 224 gameid := newdata["gameid"].(string)
225 225  
226   - gameconfig, err = configs.GetApiGame(gameid)
  226 + gameconfig, err = configs.GetApiGameConfig(gameid)
227 227 if err != nil {
228 228 lxalilog.Errors(err)
229 229 return
... ...
service/cardholder/config-client.go
... ... @@ -1,11 +0,0 @@
1   -package cardholder
2   -
3   -// CardActivityConfigClient 卡牌活动配置 给客户端数据
4   -type CardActivityConfigClient struct {
5   - Id int64 `form:"id" json:"id"` // ID
6   - RoundAwards map[string]string `form:"round_awards" json:"round_awards"` // 轮次奖励配置
7   - Albums []AlbumConfig `form:"albums" json:"albums"` // 卡组配置
8   - Cards []CardConfig `form:"cards" json:"cards"` // 卡牌配置
9   - Holders []OpenCardholderConfig `form:"holders" json:"holders"` // 卡包开卡规则
10   - StarShop []StarShopConfig `form:"star_shop" json:"star_shop"` // 星星商店配置
11   -}
service/cardholder/config-load.go
... ... @@ -1,77 +0,0 @@
1   -package cardholder
2   -
3   -import (
4   - "apigame/common/svconst"
5   -)
6   -
7   -// Init1 初始化
8   -func Init1() {
9   -
10   - NewConfigs()
11   -
12   - TryUpdateConfigs()
13   -}
14   -
15   -// TryUpdateConfigs 尝试更新配置表
16   -func TryUpdateConfigs() {
17   - LoadConfigs()
18   -}
19   -
20   -// LoadConfigs 读取mysql配置
21   -func LoadConfigs() {
22   - for _, gameId := range svconst.GameListCardHolder {
23   - LoadConfig(gameId)
24   - }
25   -}
26   -
27   -// TryUpdateConfig 尝试更新配置表
28   -func TryUpdateConfig(gameId string) (config *CardActivityConfig, has bool) {
29   - LoadConfig(gameId)
30   - return GetConfig(gameId)
31   -}
32   -
33   -// LoadConfig 读取mysql配置
34   -func LoadConfig(gameId string) {
35   - //// 找到当前开放的活动
36   - //configOpen := CardActivityUpdateConfig{Id: 0}
37   - //{
38   - // conf := make([]CardActivityUpdateConfig, 0)
39   - // _, err := svdto.Find(&conf, new(CardActivityUpdateConfig), gameId)
40   - // if err != nil {
41   - // return
42   - // }
43   - // for _, config := range conf {
44   - // if config.Status != 0 {
45   - // configOpen = config
46   - // continue
47   - // }
48   - // }
49   - // fmt.Println(configOpen)
50   - //}
51   - //// 没有开放的活动
52   - //if configOpen.Id == 0 {
53   - // return
54   - //}
55   - //// 判断是否需要更新
56   - //needUpdate := false
57   - //configOld, hasConfigOld := GetConfig(gameId)
58   - //if hasConfigOld {
59   - // if configOpen.Id != configOld.Raw.Id || configOpen.UpdateTime != configOld.Raw.UpdateTime {
60   - // needUpdate = true
61   - // }
62   - //} else {
63   - // needUpdate = true
64   - //}
65   - //// 更新数据
66   - //if needUpdate {
67   - // confNew := &CardActivityConfigRaw{}
68   - // hasConfNew, err := svdto.First(confNew, gameId)
69   - // if err != nil {
70   - // return
71   - // }
72   - // if !hasConfNew {
73   - // return
74   - // }
75   - // ConfigDecode(gameId, confNew)
76   - //}
77   -}
service/cardholder/config-registry.go
... ... @@ -1,175 +0,0 @@
1   -package cardholder
2   -
3   -import (
4   - "apigame/util/util-lx/lxalilog"
5   - "encoding/json"
6   - "errors"
7   - "fmt"
8   - "strings"
9   -)
10   -
11   -var (
12   - _Configs map[string]*CardActivityConfig // 配置列表 k=GameId v=配置
13   -)
14   -
15   -func NewConfigs() {
16   - _Configs = make(map[string]*CardActivityConfig)
17   -}
18   -
19   -func GetConfig(gameId string) (config *CardActivityConfig, has bool) {
20   - config, has = _Configs[gameId]
21   - return
22   -}
23   -
24   -// ConfigDecode 解析配置原始数据
25   -func ConfigDecode(gameId string, configRaw *CardActivityConfigRaw) {
26   - Config := &CardActivityConfig{
27   - Raw: configRaw,
28   - GameId: gameId,
29   - Id: configRaw.Id,
30   - Awards: make(map[string]string),
31   - AlbumConfig: make(map[int]AlbumConfig),
32   - CardConfig: make(map[int]CardConfig),
33   - CardholderConfig: make(map[string]OpenCardholderConfig),
34   - NormalCardStarConfig: make(map[string]NormalCardStarConfig),
35   - CardSequenceConfig: make(map[string]CardSequenceConfig),
36   - StarShopConfig: make(map[int]StarShopConfig),
37   - }
38   - // 解析奖励
39   - {
40   - err := json.Unmarshal([]byte(configRaw.Awards), &Config.Awards)
41   - if err != nil {
42   - lxalilog.Errors(err, configRaw.Awards, gameId, configRaw.Id)
43   - return
44   - }
45   - }
46   - // 卡组配置
47   - {
48   - configs := make([]AlbumConfig, 0)
49   - err := json.Unmarshal([]byte(configRaw.AlbumConfig), &configs)
50   - if err != nil {
51   - lxalilog.Errors(err, configRaw.AlbumConfig, gameId, configRaw.Id)
52   - return
53   - }
54   - for _, i2 := range configs {
55   - Config.AlbumConfig[i2.SetId] = i2
56   - }
57   - }
58   - // 卡牌配置
59   - {
60   - configs := make([]CardConfig, 0)
61   - err := json.Unmarshal([]byte(configRaw.CardConfig), &configs)
62   - if err != nil {
63   - lxalilog.Errors(err, configRaw.CardConfig, gameId, configRaw.Id)
64   - return
65   - }
66   - for _, i2 := range configs {
67   - Config.CardConfig[i2.Id] = i2
68   - }
69   - }
70   - // 卡包开卡规则
71   - {
72   - configs := make([]OpenCardholderConfig, 0)
73   - err := json.Unmarshal([]byte(configRaw.CardHolderConfig), &configs)
74   - if err != nil {
75   - lxalilog.Errors(err, configRaw.CardHolderConfig, gameId, configRaw.Id)
76   - return
77   - }
78   - for _, i2 := range configs {
79   - Config.CardholderConfig[i2.Id] = i2
80   - }
81   - }
82   - // 卡片星级配置
83   - {
84   - configs := make([]NormalCardStarConfig, 0)
85   - err := json.Unmarshal([]byte(configRaw.NormalCardStarSequence), &configs)
86   - if err != nil {
87   - lxalilog.Errors(err, configRaw.NormalCardStarSequence, gameId, configRaw.Id)
88   - return
89   - }
90   - for _, i2 := range configs {
91   - i2.NormalCardSequenceIds = strings.Split(i2.NormalCardSequenceId, ",")
92   - combineId := CombineIdSequenceIdCohort(i2.Id, i2.SequenceId, i2.Cohort)
93   - Config.NormalCardStarConfig[combineId] = i2
94   - }
95   - }
96   - // 卡片星级对应卡牌配置
97   - {
98   - configs := make([]CardSequenceConfig, 0)
99   - err := json.Unmarshal([]byte(configRaw.CardSequenceConfig), &configs)
100   - if err != nil {
101   - lxalilog.Errors(err, configRaw.CardSequenceConfig, gameId, configRaw.Id)
102   - return
103   - }
104   - for _, i2 := range configs {
105   - i2.CardIdLists = strings.Split(i2.CardIdList, ",")
106   - combineId := CombineIdSequenceIdCohort(i2.Id, i2.SequenceId, i2.Cohort)
107   - Config.CardSequenceConfig[combineId] = i2
108   - }
109   - }
110   - // 星星商店配置
111   - {
112   - configs := make([]StarShopConfig, 0)
113   - err := json.Unmarshal([]byte(configRaw.StarShopConfig), &configs)
114   - if err != nil {
115   - lxalilog.Errors(err, configRaw.StarShopConfig, gameId, configRaw.Id)
116   - return
117   - }
118   - for _, i2 := range configs {
119   - Config.StarShopConfig[i2.Id] = i2
120   - }
121   - }
122   - _Configs[gameId] = Config
123   -
124   - GenerateConfigClient(Config)
125   -}
126   -
127   -// GenerateConfigClient 生成给客户端的配置
128   -func GenerateConfigClient(config *CardActivityConfig) {
129   - configClient := &CardActivityConfigClient{
130   - Id: config.Id,
131   - RoundAwards: config.Awards,
132   - Albums: make([]AlbumConfig, 0),
133   - Cards: make([]CardConfig, 0),
134   - Holders: make([]OpenCardholderConfig, 0),
135   - StarShop: make([]StarShopConfig, 0),
136   - }
137   - for _, i2 := range config.AlbumConfig {
138   - configClient.Albums = append(configClient.Albums, i2)
139   - }
140   - for _, i2 := range config.CardConfig {
141   - configClient.Cards = append(configClient.Cards, i2)
142   - }
143   - for _, i2 := range config.CardholderConfig {
144   - configClient.Holders = append(configClient.Holders, i2)
145   - }
146   - for _, i2 := range config.StarShopConfig {
147   - configClient.StarShop = append(configClient.StarShop, i2)
148   - }
149   - config.Client = configClient
150   -}
151   -
152   -// CombineIdSequenceIdCohort 组合ID k=ID_用户序列_用户分组
153   -func CombineIdSequenceIdCohort(id, sequenceId, cohort string) string {
154   - return fmt.Sprintf("%s_%s_%s", id, sequenceId, cohort)
155   -}
156   -
157   -// FindNormalCardStarConfig 查找配置 非保底卡星级ID
158   -func (c *CardActivityConfig) FindNormalCardStarConfig(id, sequenceId, cohort string) (conf NormalCardStarConfig, has bool) {
159   - combineId := CombineIdSequenceIdCohort(id, sequenceId, cohort)
160   - conf, has = c.NormalCardStarConfig[combineId]
161   - if !has {
162   - lxalilog.Errors(errors.New("ht_cardholder NormalCardStarConfig error"), id, sequenceId, cohort)
163   - }
164   - return
165   -}
166   -
167   -// FindCardSequenceConfig 查找配置 星级ID对应的卡片
168   -func (c *CardActivityConfig) FindCardSequenceConfig(id, sequenceId, cohort string) (conf CardSequenceConfig, has bool) {
169   - combineId := CombineIdSequenceIdCohort(id, sequenceId, cohort)
170   - conf, has = c.CardSequenceConfig[combineId]
171   - if !has {
172   - lxalilog.Errors(errors.New("ht_cardholder CardSequenceConfig error"), id, sequenceId, cohort)
173   - }
174   - return
175   -}
service/cardholder/config.go
... ... @@ -1,122 +0,0 @@
1   -package cardholder
2   -
3   -import (
4   - "apigame/service/constd"
5   - "apigame/util/utdto"
6   -)
7   -
8   -// CardActivityUpdateConfig 卡牌活动更新配置
9   -type CardActivityUpdateConfig struct {
10   - Id int64 // ID
11   - Status int // 状态 0=关闭 1=开启
12   - UpdateTime int64 // 修改时间戳
13   -}
14   -
15   -func (d *CardActivityUpdateConfig) TableName() string {
16   - return utdto.MYSQL_TABLE_TEMPLATE
17   -}
18   -
19   -func (d *CardActivityUpdateConfig) GetTableName(gameId string) string {
20   - return constd.MYSQL_TABLE_S_CARDHOLDER_CONFIG + gameId
21   -}
22   -
23   -// CardActivityConfig 卡牌活动配置 分析后数据
24   -type CardActivityConfig struct {
25   - Raw *CardActivityConfigRaw
26   - Client *CardActivityConfigClient
27   - GameId string // 所属游戏ID
28   - Id int64 // ID
29   - Awards map[string]string // 奖励配置
30   - AlbumConfig map[int]AlbumConfig // 卡组配置
31   - CardConfig map[int]CardConfig // 卡牌配置
32   - CardholderConfig map[string]OpenCardholderConfig // 卡包开卡规则
33   - NormalCardStarConfig map[string]NormalCardStarConfig // k=ID_用户序列_用户分组 卡片星级配置
34   - CardSequenceConfig map[string]CardSequenceConfig // k=ID_用户序列_用户分组 卡片星级对应卡牌配置
35   - StarShopConfig map[int]StarShopConfig // 星星商店配置
36   -}
37   -
38   -// CardActivityConfigRaw 卡牌活动配置 原始数据
39   -type CardActivityConfigRaw struct {
40   - Id int64 // ID
41   - OpenLevel int // 开启等级
42   - PreviewTime int64 // 预告时间
43   - StartTime int64 // 开始时间
44   - EndTime int64 // 结束时间
45   - Round int // 轮数
46   - Awards string `json:"-"` // 奖励配置
47   - AlbumConfig string `json:"-"` // 卡组配置
48   - CardConfig string `json:"-"` // 卡牌配置
49   - CardHolderConfig string `json:"-"` // 卡包开卡规则
50   - NormalCardStarSequence string `json:"-"` // 卡片星级配置
51   - CardSequenceConfig string `json:"-"` // 卡片星级对应卡牌配置
52   - StarShopConfig string `json:"-"` // 星星商店配置
53   - Ver string // 版本号
54   - Status int // 状态 0=关闭 1=开启
55   - UpdateTime int64 // 修改时间戳
56   -}
57   -
58   -func (d *CardActivityConfigRaw) TableName() string {
59   - return utdto.MYSQL_TABLE_TEMPLATE
60   -}
61   -
62   -func (d *CardActivityConfigRaw) GetTableName(gameId string) string {
63   - return constd.MYSQL_TABLE_S_CARDHOLDER_CONFIG + gameId
64   -}
65   -
66   -// AlbumConfig 卡组表
67   -type AlbumConfig struct {
68   - SetId int `json:"set_id"` // 卡组名
69   - Name int `json:"name"` // 卡组图片
70   - Icon string `json:"icon"` // 卡组id
71   - Rewards map[string]string `json:"rewards"` // 集齐奖励 k=轮次
72   - StartTime int64 `json:"start_time"` // 开始时间
73   - EndTime int64 `json:"end_time"` // 结束时间
74   -}
75   -
76   -// CardConfig 卡牌表
77   -type CardConfig struct {
78   - Id int `json:"id"` // ID
79   - Name int `json:"name"` // 卡牌名字
80   - Icon int `json:"icon"` // 卡牌图标
81   - Desc int `json:"desc"` // 卡牌描述
82   - SetId int `json:"album_setid"` // 卡组id
83   - Star int `json:"star"` // 星级
84   - IsGold int `json:"is_gold"` // 是否是金卡
85   - IsSend int `json:"is_send"` // 卡片是否可赠送
86   -}
87   -
88   -// OpenCardholderConfig 卡包开卡规则表
89   -type OpenCardholderConfig struct {
90   - Id string `json:"id"` // ID
91   - IsGoldCardholder int `json:"is_gold_card_holder"` // 是否是金卡包
92   - IsNew int `json:"is_new"` // 是否是新卡包
93   - GuaranteedStarCardId string `json:"guaranteed_star_card_id"` // 保底卡星级序列ID
94   - NormalCardNumber int `json:"normal_card_number"` // 非保底卡数量
95   - MinimumGuaranteeCardId string `json:"minimum_guarantee_card_id"` // 非保底卡牌序列ID
96   - ActivityId int `json:"activity_id"` // 对应活动ID
97   -}
98   -
99   -// NormalCardStarConfig 非保底卡星级ID
100   -type NormalCardStarConfig struct {
101   - Id string `json:"id"` // ID
102   - SequenceId string `json:"user_sequence_id"` // 用户序列组ID
103   - Cohort string `json:"cohort"` // 用户分组
104   - NormalCardSequenceId string `json:"normal_card_sequence_id"` // 非保底星级序列
105   - NormalCardSequenceIds []string `json:"-"` // 非保底星级序列
106   -}
107   -
108   -// CardSequenceConfig 星级ID对应的卡片
109   -type CardSequenceConfig struct {
110   - Id string `json:"id"` // ID
111   - SequenceId string `json:"user_sequence_id"` // 用户序列组ID
112   - Cohort string `json:"cohort"` // 用户分组
113   - CardIdList string `json:"card_id_list"` // 卡牌抽取序列
114   - CardIdLists []string `json:"-"` // 卡牌抽取序列
115   -}
116   -
117   -// StarShopConfig 星星商店配置
118   -type StarShopConfig struct {
119   - Id int `json:"id"` // ID
120   - NeedStarNumber int `json:"need_star_number"` // 需求星星数
121   - CardBagIds []int `json:"card_bag_ids"` // 可换取的卡包ID {卡包类型,卡包ID,卡包数量}
122   -}
service/cardholder/handle.go
1 1 package cardholder
2 2  
3 3 import (
  4 + "apigame/configs"
4 5 "apigame/models"
5 6 "apigame/service/constd"
6 7 "apigame/util/util-lx/lxalilog"
... ... @@ -15,12 +16,12 @@ func HandleGetConfig(req *models.ReqCardHolderGetConfig) (code string, rsp model
15 16 code = constd.RECODE_OK
16 17  
17 18 // 尝试更新配置
18   - config, _ := TryUpdateConfig(req.GameID)
  19 + config, _ := configs.GetCardActivityConfig(req.GameID)
19 20 rsp.ActivityId = config.Id
20   - rsp.PrepareTime = config.Raw.PreviewTime
21   - rsp.StartTime = config.Raw.StartTime
22   - rsp.EndTime = config.Raw.EndTime
23   - rsp.OpenLevel = config.Raw.OpenLevel
  21 + rsp.PrepareTime = config.PreviewTime
  22 + rsp.StartTime = config.StartTime
  23 + rsp.EndTime = config.EndTime
  24 + rsp.OpenLevel = config.OpenLevel
24 25  
25 26 rsp.Config = config.Client
26 27  
... ... @@ -33,7 +34,7 @@ func HandleInfo(req *models.ReqCardHolderInfo) (code string, rsp models.RspCardH
33 34 code = constd.RECODE_OK
34 35  
35 36 // 尝试更新配置
36   - config, hasConfig := TryUpdateConfig(req.GameID)
  37 + config, hasConfig := configs.GetCardActivityConfig(req.GameID)
37 38 if !hasConfig {
38 39 code = constd.RECODE_MERGE_CARDHOLDER_NOTOPEN_ERROR
39 40 return
... ... @@ -41,7 +42,7 @@ func HandleInfo(req *models.ReqCardHolderInfo) (code string, rsp models.RspCardH
41 42  
42 43 // 判断预告时间
43 44 sec := lxtime.NowUninx()
44   - if sec < config.Raw.StartTime {
  45 + if sec < config.StartTime {
45 46 code = constd.RECODE_MERGE_CARDHOLDER_NOTOPEN_ERROR
46 47 return
47 48 }
... ... @@ -63,7 +64,7 @@ func HandleOpen(req *models.ReqCardHolderOpen) (code string, rsp models.RspCardH
63 64 code = constd.RECODE_OK
64 65  
65 66 // 尝试更新配置
66   - config, hasConfig := TryUpdateConfig(req.GameID)
  67 + config, hasConfig := configs.GetCardActivityConfig(req.GameID)
67 68 if !hasConfig {
68 69 code = constd.RECODE_MERGE_CARDHOLDER_NOTOPEN_ERROR
69 70 return
... ... @@ -138,7 +139,7 @@ func HandleShopExchange(req *models.ReqStarShopExchange) (code string, rsp model
138 139 code = constd.RECODE_OK
139 140  
140 141 // 尝试更新配置
141   - config, hasConfig := TryUpdateConfig(req.GameID)
  142 + config, hasConfig := configs.GetCardActivityConfig(req.GameID)
142 143 if !hasConfig {
143 144 code = constd.RECODE_MERGE_CARDHOLDER_NOTOPEN_ERROR
144 145 return
... ... @@ -244,7 +245,7 @@ func HandleAutoExchangeInfo(req *models.ReqAutoExchangeInfo) (code string, rsp m
244 245 code = constd.RECODE_OK
245 246  
246 247 // 尝试更新配置
247   - config, hasConfig := TryUpdateConfig(req.GameID)
  248 + config, hasConfig := configs.GetCardActivityConfig(req.GameID)
248 249 if !hasConfig {
249 250 code = constd.RECODE_MERGE_CARDHOLDER_NOTOPEN_ERROR
250 251 return
... ...
service/cardholder/logic.go
... ... @@ -2,6 +2,7 @@ package cardholder
2 2  
3 3 import (
4 4 "apigame/common/svdto"
  5 + "apigame/configs"
5 6 "apigame/models"
6 7 "apigame/service/constd"
7 8 "apigame/util/util-lx/lxalilog"
... ... @@ -38,7 +39,7 @@ func _LoadData(gameId string, uid int64) (d *CardHolderData) {
38 39 }
39 40  
40 41 // LoadData 获取数据 外部接口
41   -func LoadData(gameId string, uid int64, config *CardActivityConfig) (d *CardHolderData) {
  42 +func LoadData(gameId string, uid int64, config *configs.CardActivityConfig) (d *CardHolderData) {
42 43 configId := config.Id
43 44 d = _LoadData(gameId, uid)
44 45 // 如果当前有上线活动(活动ID不为0),且活动ID和玩家数据不同,说明活动已切换 需更新
... ... @@ -61,23 +62,23 @@ func LoadData(gameId string, uid int64, config *CardActivityConfig) (d *CardHold
61 62 }
62 63  
63 64 // CheckStatus 判断活动是否开启
64   -func CheckStatus(conf *CardActivityConfig) string {
  65 +func CheckStatus(conf *configs.CardActivityConfig) string {
65 66 sec := lxtime.NowUninx()
66 67 if conf.Id == 0 {
67 68 return constd.RECODE_MERGE_CARDHOLDER_NOTOPEN1_ERROR
68 69 }
69   - if sec < conf.Raw.StartTime {
  70 + if sec < conf.StartTime {
70 71 return constd.RECODE_MERGE_CARDHOLDER_NOTOPEN1_ERROR
71 72 }
72   - if sec > conf.Raw.EndTime {
  73 + if sec > conf.EndTime {
73 74 return constd.RECODE_MERGE_CARDHOLDER_NOTOPEN2_ERROR
74 75 }
75 76 return constd.RECODE_OK
76 77 }
77 78  
78 79 // CheckGameData 检查游戏数据 轮次等
79   -func CheckGameData(d *CardHolderData, conf *CardActivityConfig) string {
80   - if d.Details.Round > conf.Raw.Round {
  80 +func CheckGameData(d *CardHolderData, conf *configs.CardActivityConfig) string {
  81 + if d.Details.Round > conf.Round {
81 82 return constd.RECODE_MERGE_CARDHOLDER_ROUNDFINISH_ERROR
82 83 }
83 84 return constd.RECODE_OK
... ... @@ -119,7 +120,7 @@ func GetListFromArray(array []string, scale, count int) []string {
119 120 }
120 121  
121 122 // GetNewCard 按顺序查找数目最少的一张卡抽取
122   -func GetNewCard(gameData *CardHolderData, conf *CardActivityConfig) int {
  123 +func GetNewCard(gameData *CardHolderData, conf *configs.CardActivityConfig) int {
123 124 if len(conf.CardConfig) < 1 {
124 125 return 0
125 126 }
... ... @@ -136,7 +137,7 @@ func GetNewCard(gameData *CardHolderData, conf *CardActivityConfig) int {
136 137 }
137 138  
138 139 // CheckAlbumFinish 判断卡组是否已集齐
139   -func CheckAlbumFinish(albumId int, gameData *CardHolderData, config *CardActivityConfig) bool {
  140 +func CheckAlbumFinish(albumId int, gameData *CardHolderData, config *configs.CardActivityConfig) bool {
140 141 for _, conf := range config.CardConfig {
141 142 if conf.SetId == albumId {
142 143 count := gameData.Details.Cards[conf.Id]
... ... @@ -149,7 +150,7 @@ func CheckAlbumFinish(albumId int, gameData *CardHolderData, config *CardActivit
149 150 }
150 151  
151 152 // CheckRoundFinish 判断轮次是否已集齐(所有卡组集齐)
152   -func CheckRoundFinish(gameData *CardHolderData, config *CardActivityConfig) bool {
  153 +func CheckRoundFinish(gameData *CardHolderData, config *configs.CardActivityConfig) bool {
153 154 for _, conf := range config.AlbumConfig {
154 155 count := gameData.Details.Album[conf.SetId]
155 156 if count < 1 {
... ... @@ -167,7 +168,7 @@ func HandleNextRound(gameData *CardHolderData) {
167 168 }
168 169  
169 170 // GetInfo 玩家卡牌活动信息
170   -func GetInfo(gameData *CardHolderData, conf *CardActivityConfig) models.CardHolderInfo {
  171 +func GetInfo(gameData *CardHolderData, conf *configs.CardActivityConfig) models.CardHolderInfo {
171 172 info := models.CardHolderInfo{
172 173 Cards: make(map[int]int),
173 174 Album: make(map[int]int),
... ... @@ -188,8 +189,8 @@ func GetInfo(gameData *CardHolderData, conf *CardActivityConfig) models.CardHold
188 189 // openMode:开包类型0客户端驱动1星星商店购买2剩余星星兑换
189 190 func DoOpen(gameId string,
190 191 gameData *CardHolderData,
191   - config *CardActivityConfig,
192   - confCardholder OpenCardholderConfig,
  192 + config *configs.CardActivityConfig,
  193 + confCardholder configs.OpenCardholderConfig,
193 194 sequenceId, cohort string,
194 195 openMode int) (newCards []int) {
195 196  
... ... @@ -205,7 +206,7 @@ func DoOpen(gameId string,
205 206 getCardFunc := func(cardConfigId string) {
206 207 confCardSequence, hasCardSequence := config.FindCardSequenceConfig(cardConfigId, sequenceId, cohort)
207 208 if hasCardSequence {
208   - combineId := CombineIdSequenceIdCohort(cardConfigId, sequenceId, cohort)
  209 + combineId := configs.CombineIdSequenceIdCohort(cardConfigId, sequenceId, cohort)
209 210 scale := gameData.Details.CardSequenceScales[combineId]
210 211 cardId := GetOneFromArray(confCardSequence.CardIdLists, scale)
211 212 cardIdInt := utstring.StringToInt(cardId)
... ... @@ -226,7 +227,7 @@ func DoOpen(gameId string,
226 227 count := confCardholder.NormalCardNumber
227 228 confNormalCardStar, hasNormalCardStar := config.FindNormalCardStarConfig(confCardholder.MinimumGuaranteeCardId, sequenceId, cohort)
228 229 if hasNormalCardStar {
229   - combineIdStar := CombineIdSequenceIdCohort(confCardholder.MinimumGuaranteeCardId, sequenceId, cohort)
  230 + combineIdStar := configs.CombineIdSequenceIdCohort(confCardholder.MinimumGuaranteeCardId, sequenceId, cohort)
230 231 scaleStar := gameData.Details.StarSequenceScales[combineIdStar]
231 232 starIds := GetListFromArray(confNormalCardStar.NormalCardSequenceIds, scaleStar, count)
232 233 // 增加星级刻度
... ... @@ -251,7 +252,7 @@ func DoOpen(gameId string,
251 252 // DoOpenCheckAward 封装的新卡判断是否出发卡组和轮次奖励的逻辑
252 253 func DoOpenCheckAward(gameId string,
253 254 gameData *CardHolderData,
254   - config *CardActivityConfig,
  255 + config *configs.CardActivityConfig,
255 256 sequenceId, cohort string,
256 257 newCards []int,
257 258 openMode int) (awardAlbum map[int]string, awardRound string) {
... ... @@ -312,7 +313,7 @@ func DoOpenCheckAward(gameId string,
312 313 }
313 314  
314 315 // CalculateStarCount 计算星星点数
315   -func CalculateStarCount(gameData *CardHolderData, config *CardActivityConfig) {
  316 +func CalculateStarCount(gameData *CardHolderData, config *configs.CardActivityConfig) {
316 317 starCount := 0
317 318 for cardId, cardCount := range gameData.Details.Cards {
318 319 if cardCount <= 1 {
... ... @@ -334,7 +335,7 @@ func CalculateStarCount(gameData *CardHolderData, config *CardActivityConfig) {
334 335 }
335 336  
336 337 // GetStarCardList 按照规则扣除星星数找到需要扣除的卡牌列表
337   -func GetStarCardList(gameData *CardHolderData, config *CardActivityConfig, needStar int) (enough bool, cardList map[int]int) {
  338 +func GetStarCardList(gameData *CardHolderData, config *configs.CardActivityConfig, needStar int) (enough bool, cardList map[int]int) {
338 339 enough = false
339 340 cardList = make(map[int]int)
340 341 starAmount := 0
... ... @@ -403,10 +404,10 @@ func GetStarCardList(gameData *CardHolderData, config *CardActivityConfig, needS
403 404 }
404 405  
405 406 // NextActivityAutoExchange 活动切换时自动兑换卡包
406   -func NextActivityAutoExchange(gameId string, gameData *CardHolderData, config *CardActivityConfig) {
  407 +func NextActivityAutoExchange(gameId string, gameData *CardHolderData, config *configs.CardActivityConfig) {
407 408 starCount := gameData.Details.LastStarCount
408 409 // 把星星的配置按照需要的星星数降序排列
409   - list := lo.Values[int, StarShopConfig](config.StarShopConfig)
  410 + list := lo.Values[int, configs.StarShopConfig](config.StarShopConfig)
410 411 sort.Slice(list, func(i, j int) bool {
411 412 return list[i].NeedStarNumber < list[j].NeedStarNumber
412 413 })
... ...
util/utdto/base.go
1 1 package utdto
2 2  
3 3 import (
4   - "fmt"
5 4 "gorm.io/gorm"
6 5 "strings"
7 6 )
... ... @@ -33,7 +32,6 @@ func Save(db *gorm.DB, value any, tableName string) *gorm.DB {
33 32 func First(db *gorm.DB, value any, tableName string) *gorm.DB {
34 33 stmt := db.Session(&gorm.Session{DryRun: true}).First(value).Statement
35 34 stmtSQL := stmt.SQL.String()
36   - fmt.Println("dwjw🐷 stmt.Table", stmt.Table)
37 35 sql := strings.Replace(stmtSQL, MYSQL_TABLE_TEMPLATE, tableName, -1)
38 36 return db.Raw(sql, stmt.Vars...).Scan(value)
39 37 }
... ...