Commit fbe6e0e97576a871b434dfa9c88d94ee66e486b5

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

refactor♻️:项目目录重构

@@ -3,7 +3,6 @@ @@ -3,7 +3,6 @@
3 3
4 | 项目目录 | 目录说明 | 4 | 项目目录 | 目录说明 |
5 |-------------|----------| 5 |-------------|----------|
6 -| api-common | 公共模块 |  
7 | conf | beego配置 | 6 | conf | beego配置 |
8 | controllers | 控制器 | 7 | controllers | 控制器 |
9 | dto | 数据库存储对象 | 8 | dto | 数据库存储对象 |
api-common/config/api.go
@@ -1,209 +0,0 @@ @@ -1,209 +0,0 @@
1 -package config  
2 -  
3 -import (  
4 - "apigame/util/util-lx/lxalilog"  
5 - "apigame/util/util-lx/lxconv"  
6 - "apigame/util/util-lx/lxmysql"  
7 - "encoding/json"  
8 - "errors"  
9 - "fmt"  
10 -)  
11 -  
12 -type MApiGameConfig struct {  
13 - AppID string `json:"appid"`  
14 - Secret string `json:"secret"`  
15 - Appkey string `json:"appkey"`  
16 - Name string `json:"name"`  
17 -}  
18 -  
19 -// GetApiGameConfig 获取游戏配置文件  
20 -func GetApiGameConfig(gameid string) (data MApiGameConfig, err error) {  
21 -  
22 - config := lxmysql.QueryCacheConfig{  
23 - SQL: fmt.Sprintf("select appid,secret,appkey,name from s_game_config where isdel=0 and status=1 and gameid='%s' order by id desc limit 1", gameid),  
24 - DBIndex: CONST_APIDBINDEX,  
25 - Exexpire: CONST_CACHETIME,  
26 - }  
27 -  
28 - var datas []MApiGameConfig  
29 -  
30 - err = lxmysql.QueryWithCache(config, &datas)  
31 - if err != nil {  
32 - lxalilog.Errors(err, lxconv.JsonEncode(config))  
33 - return  
34 - }  
35 -  
36 - if len(datas) < 1 {  
37 - err = errors.New("no rows")  
38 - lxalilog.Errors(err)  
39 - return  
40 - }  
41 -  
42 - data = datas[0]  
43 -  
44 - return  
45 -}  
46 -  
47 -type MApiServerConfig struct {  
48 - Egift MApiServerEgift `json:"egift"` //无尽轮换  
49 - Membership []Membership `json:"membership"` //周卡 月卡  
50 - Novicegift Novicegift `json:"novicegift"` // 新手礼包  
51 - PassCheck []PassCheck `json:"pass_check"` //通行证  
52 - Qixi QixiConfig `json:"qixi"` //七夕活动  
53 - Thinkingdata ThinkingdataConfig `json:"thinkingdata"` //数数配置  
54 -}  
55 -  
56 -// --------------------------- 无尽轮换礼包配置表 ---------------------------  
57 -  
58 -// MApiServerEgift 无尽轮换礼包配置表  
59 -type MApiServerEgift struct {  
60 - Config []MApiServerEgiftConfig `json:"config"`  
61 - ListLength string `json:"list_length"`  
62 - Days string `json:"days"`  
63 - Date string `json:"date"`  
64 -}  
65 -  
66 -type MApiServerEgiftConfig struct {  
67 - ID string `json:"id"`  
68 - Award string `json:"award"`  
69 - Type string `json:"type"`  
70 - ShopID string `json:"shop_id"`  
71 - GroupID string `json:"group_id,omitempty"`  
72 -}  
73 -  
74 -// --------------------------- 无尽轮换礼包配置表 ---------------------------  
75 -  
76 -// --------------------------- 周卡 月卡 配置 ---------------------------  
77 -  
78 -type Membership struct {  
79 - Name string `json:"name"` // 模式名称  
80 - Days string `json:"days"` // 第几天  
81 - Goodid string `json:"goodid"` // 商品ID  
82 - Award string `json:"award"` // 奖励  
83 - Naturalday string `json:"naturalday"` // 是否自然日  
84 -}  
85 -  
86 -// --------------------------- 周卡 月卡 配置 ---------------------------  
87 -  
88 -// --------------------------- 新手 配置 ---------------------------  
89 -  
90 -type Novicegift struct {  
91 - Goodid string `json:"goodid"` // 商品ID  
92 - List []struct {  
93 - Days string `json:"days"` // 第几天  
94 - Award string `json:"award"` // 奖励  
95 - } `json:"list"`  
96 -}  
97 -  
98 -// --------------------------- 新手礼包 配置 ---------------------------  
99 -  
100 -type PassCheck struct {  
101 - ID string `json:"ID"`  
102 - Level string `json:"Level"`  
103 - GroupId string `json:"GroupId"`  
104 - GoodId string `json:"GoodId"`  
105 - Experience string `json:"Experience"`  
106 - AwardFree string `json:"AwardFree"`  
107 - AwardPay string `json:"AwardPay"`  
108 - DrawTime int64 `json:"DrawTime"`  
109 -}  
110 -  
111 -// --------------------------- 七夕活动 ---------------------------  
112 -  
113 -type QixiConfig struct {  
114 - ActivityId string `json:"activity_id"`  
115 - StartTime int64 `json:"start_time"`  
116 - EndTime int64 `json:"end_time"`  
117 - Awards []QixiConfigAwards `json:"awards"`  
118 - FalseProgress []QixiConfigFalseProgress `json:"false_progress"`  
119 - Mail QixiConfigMail `json:"mail"`  
120 - RankConfig QixiConfigRankConfig `json:"rank_config"`  
121 - AlilogName string `json:"alilog_name"`  
122 - AddMax int64 `json:"add_max"`  
123 -}  
124 -  
125 -type QixiConfigFalseProgress struct {  
126 - Day string `json:"day"`  
127 - Time string `json:"time"`  
128 - ChangeLowest string `json:"change_lowest"`  
129 - ChangeHighest string `json:"change_highest"`  
130 - Must string `json:"must"`  
131 -}  
132 -  
133 -type QixiConfigAwards struct {  
134 - Point string `json:"point"`  
135 - AwardType string `json:"award_type"`  
136 - AwardNumber string `json:"award_number"`  
137 - LowLimit string `json:"low_limit"`  
138 - HighLimit string `json:"high_limit"`  
139 -}  
140 -  
141 -type QixiConfigMail struct {  
142 - Title string `json:"title"`  
143 - Sender string `json:"sender"`  
144 - Content string `json:"content"`  
145 - Ex int64 `json:"ex"`  
146 -}  
147 -  
148 -type QixiConfigRankConfig struct {  
149 - MinPoint int64 `json:"min_point"`  
150 -}  
151 -  
152 -// --------------------------- 七夕活动 ---------------------------  
153 -  
154 -// --------------------------- 数数配置 ---------------------------  
155 -  
156 -type ThinkingdataConfig struct {  
157 - Appid string `json:"appid"`  
158 - Id int `json:"id"`  
159 - Swich struct {  
160 - Engine int `json:"engine"`  
161 - Order int `json:"order"`  
162 - Pass int `json:"pass"`  
163 - Recharge int `json:"recharge"` // 累计充值 开启  
164 - } `json:"switch"`  
165 -}  
166 -  
167 -// --------------------------- 数数配置 ---------------------------  
168 -  
169 -// GetApiServerConfig 获取游服务端置文件  
170 -func GetApiServerConfig(gameid string, dbindex ...string) (data MApiServerConfig, content string, err error) {  
171 -  
172 - var dindex = CONST_APIDBINDEX  
173 - if len(dbindex) > 0 {  
174 - dindex = dbindex[0]  
175 - }  
176 -  
177 - config := lxmysql.QueryCacheConfig{  
178 - SQL: fmt.Sprintf("select * from s_server_config where gameid='%s' limit 1", gameid),  
179 - DBIndex: dindex,  
180 - Exexpire: CONST_CACHETIME,  
181 - }  
182 -  
183 - var datas []struct {  
184 - Content string `json:"content"`  
185 - }  
186 -  
187 - err = lxmysql.QueryWithCache(config, &datas)  
188 - if err != nil {  
189 - lxalilog.Errors(err, lxconv.JsonEncode(config))  
190 - return  
191 - }  
192 -  
193 - if len(datas) < 1 {  
194 - err = errors.New("no rows")  
195 - lxalilog.Errors(err)  
196 - return  
197 - }  
198 -  
199 - if datas[0].Content == "" {  
200 - err = errors.New("content nil")  
201 - lxalilog.Errors(err)  
202 - }  
203 -  
204 - content = datas[0].Content  
205 -  
206 - _ = json.Unmarshal([]byte(content), &data)  
207 -  
208 - return  
209 -}  
api-common/config/const.go
@@ -1,6 +0,0 @@ @@ -1,6 +0,0 @@
1 -package config  
2 -  
3 -const (  
4 - CONST_CACHETIME = 600 //默认缓存时间  
5 - CONST_APIDBINDEX = "api"  
6 -)  
common/svconfig/index.go
@@ -1,6 +0,0 @@ @@ -1,6 +0,0 @@
1 -package svconfig  
2 -  
3 -func Init() bool {  
4 -  
5 - return true  
6 -}  
common/svconfig/interface.go
@@ -1,23 +0,0 @@ @@ -1,23 +0,0 @@
1 -package svconfig  
2 -  
3 -import "gorm.io/gorm"  
4 -  
5 -const (  
6 - MYSQL_TABLE_TEMPLATE = "all_table_template" // 表名模板  
7 - REDIS_CACHEP_REFIX = "apigame" // 缓存前缀  
8 -)  
9 -  
10 -// ConfigRule 配置数据  
11 -type ConfigRule struct {  
12 - DbMysql *gorm.DB  
13 - TableNameTemplate string  
14 - TableName string  
15 - CacheKey string  
16 - CacheTime int  
17 -}  
18 -  
19 -// IConfigRule 配置数据  
20 -type IConfigRule interface {  
21 - // GetRule 表名模板  
22 - GetRule(gameId string) *ConfigRule  
23 -}  
common/svconst/vars.go
@@ -8,4 +8,6 @@ var ( @@ -8,4 +8,6 @@ var (
8 DbApi *gorm.DB 8 DbApi *gorm.DB
9 DbCommon *gorm.DB 9 DbCommon *gorm.DB
10 DbConfig *gorm.DB 10 DbConfig *gorm.DB
  11 +
  12 + GameListCardHolder = []string{"10149"}
11 ) 13 )
common/svdto/dto.go
@@ -3,16 +3,16 @@ package svdto @@ -3,16 +3,16 @@ package svdto
3 import ( 3 import (
4 "apigame/util/utdto" 4 "apigame/util/utdto"
5 "apigame/util/util-lx/lxalilog" 5 "apigame/util/util-lx/lxalilog"
6 - "gorm.io/gorm"  
7 ) 6 )
8 7
9 -func InitTable(db *gorm.DB, tb IDtoData, gameId string) {  
10 - tableName := tb.GetTableName(gameId)  
11 - utdto.InitTable(db, tb, tableName) 8 +func InitTable(tb IDtoData, gameId string) {
  9 + rule := tb.GetRule(gameId)
  10 + utdto.InitTable(rule.DbMysql, tb, rule.TableName)
12 } 11 }
13 12
14 -func Insert(db *gorm.DB, data IDtoData, gameId string) (err error) {  
15 - result := utdto.Insert(db, data, data.GetTableName(gameId)) 13 +func Insert(data IDtoData, gameId string) (err error) {
  14 + rule := data.GetRule(gameId)
  15 + result := utdto.Insert(rule.DbMysql, data, rule.TableName)
16 err = result.Error 16 err = result.Error
17 if err != nil { 17 if err != nil {
18 lxalilog.Errors(err, gameId) 18 lxalilog.Errors(err, gameId)
@@ -21,8 +21,9 @@ func Insert(db *gorm.DB, data IDtoData, gameId string) (err error) { @@ -21,8 +21,9 @@ func Insert(db *gorm.DB, data IDtoData, gameId string) (err error) {
21 return 21 return
22 } 22 }
23 23
24 -func Update(db *gorm.DB, data IDtoData, gameId string) (err error) {  
25 - result := utdto.Update(db, data, data.GetTableName(gameId)) 24 +func Update(data IDtoData, gameId string) (err error) {
  25 + rule := data.GetRule(gameId)
  26 + result := utdto.Update(rule.DbMysql, data, rule.TableName)
26 err = result.Error 27 err = result.Error
27 if err != nil { 28 if err != nil {
28 lxalilog.Errors(err, gameId) 29 lxalilog.Errors(err, gameId)
@@ -31,8 +32,9 @@ func Update(db *gorm.DB, data IDtoData, gameId string) (err error) { @@ -31,8 +32,9 @@ func Update(db *gorm.DB, data IDtoData, gameId string) (err error) {
31 return 32 return
32 } 33 }
33 34
34 -func Save(db *gorm.DB, data IDtoData, gameId string) (err error) {  
35 - result := utdto.Save(db, data, data.GetTableName(gameId)) 35 +func Save(data IDtoData, gameId string) (err error) {
  36 + rule := data.GetRule(gameId)
  37 + result := utdto.Save(rule.DbMysql, data, rule.TableName)
36 err = result.Error 38 err = result.Error
37 if err != nil { 39 if err != nil {
38 lxalilog.Errors(err, gameId) 40 lxalilog.Errors(err, gameId)
@@ -41,8 +43,9 @@ func Save(db *gorm.DB, data IDtoData, gameId string) (err error) { @@ -41,8 +43,9 @@ func Save(db *gorm.DB, data IDtoData, gameId string) (err error) {
41 return 43 return
42 } 44 }
43 45
44 -func First(db *gorm.DB, data IDtoData, gameId string) (has bool, err error) {  
45 - result := utdto.First(db, data, data.GetTableName(gameId)) 46 +func First(data IDtoData, gameId string) (has bool, err error) {
  47 + rule := data.GetRule(gameId)
  48 + result := utdto.First(rule.DbMysql, data, rule.TableName)
46 has = result.RowsAffected != 0 49 has = result.RowsAffected != 0
47 err = result.Error 50 err = result.Error
48 if err != nil { 51 if err != nil {
@@ -52,12 +55,13 @@ func First(db *gorm.DB, data IDtoData, gameId string) (has bool, err error) { @@ -52,12 +55,13 @@ func First(db *gorm.DB, data IDtoData, gameId string) (has bool, err error) {
52 return 55 return
53 } 56 }
54 57
55 -func Find(db *gorm.DB, data any, tableName string) (has bool, err error) {  
56 - result := utdto.Find(db, data, tableName) 58 +func Find(data any, dataTemp IDtoData, gameId string) (has bool, err error) {
  59 + rule := dataTemp.GetRule(gameId)
  60 + result := utdto.Find(rule.DbMysql, data, rule.TableName)
57 has = result.RowsAffected != 0 61 has = result.RowsAffected != 0
58 err = result.Error 62 err = result.Error
59 if err != nil { 63 if err != nil {
60 - lxalilog.Errors(err, tableName) 64 + lxalilog.Errors(err, rule.TableName)
61 return 65 return
62 } 66 }
63 return 67 return
common/svdto/init.go
1 package svdto 1 package svdto
2 2
3 -import (  
4 - "apigame/common/svconst"  
5 - "apigame/dto"  
6 - "apigame/service/constd"  
7 -)  
8 -  
9 -func Init() {  
10 -  
11 - // create table  
12 - // 卡牌卡包  
13 - for _, gameId := range constd.GameListCardHolder {  
14 - InitTable(svconst.DbCommon, new(dto.CardHolderData), gameId)  
15 - InitTable(svconst.DbCommon, new(dto.CardHolderRecordOpen), gameId)  
16 - InitTable(svconst.DbCommon, new(dto.CardHolderRecordRewardAlbum), gameId)  
17 - InitTable(svconst.DbCommon, new(dto.CardHolderRecordRewardRound), gameId)  
18 - }  
19 -  
20 -}  
common/svdto/interface.go
1 package svdto 1 package svdto
2 2
  3 +import "gorm.io/gorm"
  4 +
  5 +const (
  6 + REDIS_CACHEP_REFIX = "apigame" // 缓存前缀
  7 +)
  8 +
  9 +// DtoRule dto参数
  10 +type DtoRule struct {
  11 + DbMysql *gorm.DB
  12 + TableName string
  13 + CacheKey string
  14 + CacheTime int
  15 +}
  16 +
3 // IDtoData dto数据 17 // IDtoData dto数据
4 type IDtoData interface { 18 type IDtoData interface {
5 // TableName 表名模板 19 // TableName 表名模板
6 TableName() string 20 TableName() string
7 - // GetTableName 表名 后缀是 gameId  
8 - GetTableName(gameId string) string 21 + // GetRule 表名模板
  22 + GetRule(gameId string) *DtoRule
9 } 23 }
common/svdto/record.go
1 package svdto 1 package svdto
2 2
3 import ( 3 import (
4 - "apigame/common/svconst"  
5 "apigame/util/utdto" 4 "apigame/util/utdto"
6 ) 5 )
7 6
8 func SaveRecord(gameId string, data IDtoData) { 7 func SaveRecord(gameId string, data IDtoData) {
9 - utdto.Insert(svconst.DbCommon, data, data.GetTableName(gameId)) 8 + rule := data.GetRule(gameId)
  9 + utdto.Insert(rule.DbMysql, data, rule.TableName)
10 } 10 }
configs/api.go
@@ -1,39 +0,0 @@ @@ -1,39 +0,0 @@
1 -package configs  
2 -  
3 -import (  
4 - "apigame/common/svconfig"  
5 - "apigame/common/svconst"  
6 - "apigame/service/constd"  
7 - "fmt"  
8 -)  
9 -  
10 -type ApiGameConfig struct {  
11 - AppId string `json:"appid"`  
12 - GameId string `json:"gameid"`  
13 - Secret string `json:"secret"`  
14 - AppKey string `json:"appkey"`  
15 - Name string `json:"name"`  
16 -}  
17 -  
18 -func (c *ApiGameConfig) GetRule(gameId string) *svconfig.ConfigRule {  
19 - tableName := constd.MYSQL_TABLE_S_CARDHOLDER_CONFIG  
20 - return &svconfig.ConfigRule{  
21 - DbMysql: svconst.DbApi,  
22 - TableNameTemplate: svconfig.MYSQL_TABLE_TEMPLATE,  
23 - TableName: tableName + gameId,  
24 - CacheKey: fmt.Sprintf("%s::%s::%s", svconfig.REDIS_CACHEP_REFIX, tableName, gameId),  
25 - CacheTime: 300,  
26 - }  
27 -}  
28 -  
29 -func (c *ApiGameConfig) ReadFromMysql(gameId string) *ApiGameConfig {  
30 - //rule := c.GetRule(gameId)  
31 -  
32 - return &ApiGameConfig{}  
33 -}  
34 -  
35 -func GetApiGameConfig(gameId string) (config *ApiGameConfig, err error) {  
36 - //rds := zredis.GetConn()  
37 - //zredis.HGetData(rds, player)  
38 - return  
39 -}  
configs/feat-api.go 0 → 100644
@@ -0,0 +1,28 @@ @@ -0,0 +1,28 @@
  1 +package configs
  2 +
  3 +import (
  4 + "apigame/common/svconst"
  5 + "apigame/common/svdto"
  6 + "apigame/util/utdto"
  7 + "fmt"
  8 +)
  9 +
  10 +type ApiGameConfig struct {
  11 + AppId string `gorm:"column:appid"`
  12 + GameId string `gorm:"column:gameid"`
  13 + Secret string `gorm:"column:secret"`
  14 + AppKey string `gorm:"column:appkey"`
  15 + Name string `gorm:"column:name"`
  16 +}
  17 +
  18 +func (c *ApiGameConfig) TableName() string { return utdto.MYSQL_TABLE_TEMPLATE }
  19 +
  20 +func (c *ApiGameConfig) GetRule(gameId string) *svdto.DtoRule {
  21 + tableName := "s_game_config"
  22 + return &svdto.DtoRule{
  23 + DbMysql: svconst.DbApi.Where("gameid = ?", gameId),
  24 + TableName: tableName,
  25 + CacheKey: fmt.Sprintf("%s:%s:%s", svdto.REDIS_CACHEP_REFIX, tableName, gameId),
  26 + CacheTime: 300,
  27 + }
  28 +}
configs/feat-cardholder.go 0 → 100644
@@ -0,0 +1,124 @@ @@ -0,0 +1,124 @@
  1 +package configs
  2 +
  3 +import (
  4 + "apigame/common/svconst"
  5 + "apigame/common/svdto"
  6 + "apigame/service/constd"
  7 + "apigame/util/utdto"
  8 + "fmt"
  9 +)
  10 +
  11 +// CardActivityConfig 卡牌活动配置 分析后数据
  12 +type CardActivityConfig struct {
  13 + Raw *CardActivityConfigRaw
  14 + Client *CardActivityConfigClient
  15 + GameId string // 所属游戏ID
  16 + Id int64 // ID
  17 + Awards map[string]string // 奖励配置
  18 + AlbumConfig map[int]AlbumConfig // 卡组配置
  19 + CardConfig map[int]CardConfig // 卡牌配置
  20 + CardholderConfig map[string]OpenCardholderConfig // 卡包开卡规则
  21 + NormalCardStarConfig map[string]NormalCardStarConfig // k=ID_用户序列_用户分组 卡片星级配置
  22 + CardSequenceConfig map[string]CardSequenceConfig // k=ID_用户序列_用户分组 卡片星级对应卡牌配置
  23 + StarShopConfig map[int]StarShopConfig // 星星商店配置
  24 +}
  25 +
  26 +func (c *CardActivityConfigRaw) TableName() string { return utdto.MYSQL_TABLE_TEMPLATE }
  27 +
  28 +func (d *CardActivityConfigRaw) GetRule(gameId string) *svdto.DtoRule {
  29 + tableName := constd.MYSQL_TABLE_S_CARDHOLDER_CONFIG
  30 + return &svdto.DtoRule{
  31 + DbMysql: svconst.DbConfig,
  32 + TableName: tableName + gameId,
  33 + CacheKey: fmt.Sprintf("%s:%s:%s", svdto.REDIS_CACHEP_REFIX, tableName, gameId),
  34 + CacheTime: 300,
  35 + }
  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 +// CardActivityConfigClient 卡牌活动配置 给客户端数据
  59 +type CardActivityConfigClient struct {
  60 + Id int64 `form:"id" json:"id"` // ID
  61 + RoundAwards map[string]string `form:"round_awards" json:"round_awards"` // 轮次奖励配置
  62 + Albums []AlbumConfig `form:"albums" json:"albums"` // 卡组配置
  63 + Cards []CardConfig `form:"cards" json:"cards"` // 卡牌配置
  64 + Holders []OpenCardholderConfig `form:"holders" json:"holders"` // 卡包开卡规则
  65 + StarShop []StarShopConfig `form:"star_shop" json:"star_shop"` // 星星商店配置
  66 +}
  67 +
  68 +// AlbumConfig 卡组表
  69 +type AlbumConfig struct {
  70 + SetId int `json:"set_id"` // 卡组名
  71 + Name int `json:"name"` // 卡组图片
  72 + Icon string `json:"icon"` // 卡组id
  73 + Rewards map[string]string `json:"rewards"` // 集齐奖励 k=轮次
  74 + StartTime int64 `json:"start_time"` // 开始时间
  75 + EndTime int64 `json:"end_time"` // 结束时间
  76 +}
  77 +
  78 +// CardConfig 卡牌表
  79 +type CardConfig struct {
  80 + Id int `json:"id"` // ID
  81 + Name int `json:"name"` // 卡牌名字
  82 + Icon int `json:"icon"` // 卡牌图标
  83 + Desc int `json:"desc"` // 卡牌描述
  84 + SetId int `json:"album_setid"` // 卡组id
  85 + Star int `json:"star"` // 星级
  86 + IsGold int `json:"is_gold"` // 是否是金卡
  87 + IsSend int `json:"is_send"` // 卡片是否可赠送
  88 +}
  89 +
  90 +// OpenCardholderConfig 卡包开卡规则表
  91 +type OpenCardholderConfig struct {
  92 + Id string `json:"id"` // ID
  93 + IsGoldCardholder int `json:"is_gold_card_holder"` // 是否是金卡包
  94 + IsNew int `json:"is_new"` // 是否是新卡包
  95 + GuaranteedStarCardId string `json:"guaranteed_star_card_id"` // 保底卡星级序列ID
  96 + NormalCardNumber int `json:"normal_card_number"` // 非保底卡数量
  97 + MinimumGuaranteeCardId string `json:"minimum_guarantee_card_id"` // 非保底卡牌序列ID
  98 + ActivityId int `json:"activity_id"` // 对应活动ID
  99 +}
  100 +
  101 +// NormalCardStarConfig 非保底卡星级ID
  102 +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:"-"` // 非保底星级序列
  108 +}
  109 +
  110 +// CardSequenceConfig 星级ID对应的卡片
  111 +type CardSequenceConfig struct {
  112 + Id string `json:"id"` // ID
  113 + SequenceId string `json:"user_sequence_id"` // 用户序列组ID
  114 + Cohort string `json:"cohort"` // 用户分组
  115 + CardIdList string `json:"card_id_list"` // 卡牌抽取序列
  116 + CardIdLists []string `json:"-"` // 卡牌抽取序列
  117 +}
  118 +
  119 +// StarShopConfig 星星商店配置
  120 +type StarShopConfig struct {
  121 + Id int `json:"id"` // ID
  122 + NeedStarNumber int `json:"need_star_number"` // 需求星星数
  123 + CardBagIds []int `json:"card_bag_ids"` // 可换取的卡包ID {卡包类型,卡包ID,卡包数量}
  124 +}
configs/index.go
1 package configs 1 package configs
2 2
3 -import "apigame/common/svconfig" 3 +import (
  4 + "apigame/common/svdto"
  5 + "apigame/util/zjson"
  6 + "apigame/util/zredis"
  7 + "fmt"
  8 +)
4 9
5 -func Init() bool {  
6 -  
7 - return true 10 +// func GetConfigRedis[T svconfig.IDtoData](gameId string) (result *T, has bool) {
  11 +// t = new(T)
  12 +// var rule = t.GetRule(gameId)
  13 +// return
  14 +// }
  15 +func GetConfigMysql[T svdto.IDtoData](gameId string, t T) (result *T, has bool) {
  16 + return
8 } 17 }
9 18
10 -func GetConfigRedis[T svconfig.IConfigRule](gameId string) { 19 +func GetConfig[T svdto.IDtoData](gameId string, t T) (has bool) {
  20 + has = CacheLoad[T](gameId, t)
  21 + if !has {
11 22
  23 + }
  24 + return
12 } 25 }
13 26
14 -func GetConfigMysql[T svconfig.IConfigRule](gameId string) { 27 +func CacheSave(gameId string, conf svdto.IDtoData) {
  28 + rule := conf.GetRule(gameId)
  29 + _ = zredis.SetEx(zredis.GetConn(), rule.CacheKey, zjson.Str(conf), rule.CacheTime)
  30 +}
15 31
  32 +func CacheLoad[T svdto.IDtoData](gameId string, t T) (has bool) {
  33 + has = true
  34 + rule := t.GetRule(gameId)
  35 + text, err := zredis.Get(zredis.GetConn(), rule.CacheKey)
  36 + if err != nil {
  37 + has = false
  38 + return
  39 + }
  40 + err = zjson.Obj(text, &t)
  41 + if err != nil {
  42 + fmt.Println(err)
  43 + has = false
  44 + return
  45 + }
  46 + return
16 } 47 }
configs/init.go 0 → 100644
@@ -0,0 +1,30 @@ @@ -0,0 +1,30 @@
  1 +package configs
  2 +
  3 +func Init() bool {
  4 +
  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 +
  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("10149")
  28 +
  29 + return true
  30 +}
configs/registry.go
1 package configs 1 package configs
  2 +
  3 +import (
  4 + "apigame/util/utdto"
  5 + "apigame/util/util-lx/lxalilog"
  6 + "fmt"
  7 +)
  8 +
  9 +func GetApiGame(gameId string) (conf *ApiGameConfig, err error) {
  10 + conf = new(ApiGameConfig)
  11 + has := CacheLoad(gameId, conf)
  12 + if has {
  13 + fmt.Println("GetApiGame use cache")
  14 + return
  15 + }
  16 + rule := conf.GetRule(gameId)
  17 + result := utdto.First(rule.DbMysql, conf, rule.TableName)
  18 + has = result.RowsAffected != 0
  19 + err = result.Error
  20 + if err != nil {
  21 + lxalilog.Errors(err, gameId)
  22 + return
  23 + }
  24 + fmt.Println("GetApiGame save cache")
  25 + CacheSave(gameId, conf)
  26 +
  27 + return
  28 +}
dto/cardholder-record.go
@@ -1,101 +0,0 @@ @@ -1,101 +0,0 @@
1 -package dto  
2 -  
3 -import (  
4 - "apigame/service/constd"  
5 - "apigame/util/utdto"  
6 - "apigame/util/util-lx/lxtime"  
7 -)  
8 -  
9 -// CardHolderRecordBase 开卡包活动日志公共  
10 -type CardHolderRecordBase struct {  
11 - Id int64 `gorm:"primaryKey;comment:日志ID"`  
12 - Uid int64 `gorm:"comment:玩家唯一ID"`  
13 - SequenceId string `gorm:"type:varchar(255);comment:用户序列组ID"`  
14 - Cohort string `gorm:"type:varchar(255);comment:用户分组ID"`  
15 - ActivityId int64 `gorm:"comment:当前活动ID"`  
16 - Round int `gorm:"comment:当前轮次"`  
17 - CreateTime int64 `gorm:"comment:创建时间戳"`  
18 - UpdateTime int64 `gorm:"comment:修改时间戳"`  
19 -}  
20 -  
21 -func NewCardHolderRecordBase(uid int64, sequenceId string, cohort string, activityId int64, round int) CardHolderRecordBase {  
22 - secNow := lxtime.NowUninx()  
23 - return CardHolderRecordBase{  
24 - CreateTime: secNow,  
25 - UpdateTime: secNow,  
26 - Uid: uid,  
27 - SequenceId: sequenceId,  
28 - Cohort: cohort,  
29 - ActivityId: activityId,  
30 - Round: round,  
31 - }  
32 -}  
33 -  
34 -// CardHolderRecordOpen 开卡包活动日志开卡包  
35 -type CardHolderRecordOpen struct {  
36 - CardHolderRecordBase  
37 - OpenMode int `gorm:"comment:开包类型0客户端驱动1星星商店购买2剩余星星兑换"`  
38 - CardholderId int `gorm:"comment:卡包ID"`  
39 - CardList string `gorm:"type:varchar(255);comment:开卡内容"`  
40 -}  
41 -  
42 -func (d *CardHolderRecordOpen) TableName() string {  
43 - return utdto.MYSQL_TABLE_TEMPLATE  
44 -}  
45 -func (d *CardHolderRecordOpen) GetTableName(gameId string) string {  
46 - return constd.MYSQL_TABLE_S_CARDHOLDER_RECORD_OPEN + gameId  
47 -}  
48 -  
49 -func NewCardHolderRecordOpen(recordBase CardHolderRecordBase,  
50 - openMode int, cardholderId int, cardList string) *CardHolderRecordOpen {  
51 - return &CardHolderRecordOpen{  
52 - CardHolderRecordBase: recordBase,  
53 - OpenMode: openMode,  
54 - CardholderId: cardholderId,  
55 - CardList: cardList,  
56 - }  
57 -}  
58 -  
59 -// CardHolderRecordRewardAlbum 开卡包活动日志领取卡组奖励  
60 -type CardHolderRecordRewardAlbum struct {  
61 - CardHolderRecordBase  
62 - AlbumId int `gorm:"comment:卡组ID"`  
63 - Award string `gorm:"type:varchar(255);comment:奖励内容"`  
64 -}  
65 -  
66 -func (d *CardHolderRecordRewardAlbum) TableName() string {  
67 - return utdto.MYSQL_TABLE_TEMPLATE  
68 -}  
69 -func (d *CardHolderRecordRewardAlbum) GetTableName(gameId string) string {  
70 - return constd.MYSQL_TABLE_S_CARDHOLDER_RECORD_REWARDALBUM + gameId  
71 -}  
72 -  
73 -func NewCardHolderRecordRewardAlbum(recordBase CardHolderRecordBase,  
74 - albumId int, award string) *CardHolderRecordRewardAlbum {  
75 - return &CardHolderRecordRewardAlbum{  
76 - CardHolderRecordBase: recordBase,  
77 - AlbumId: albumId,  
78 - Award: award,  
79 - }  
80 -}  
81 -  
82 -// CardHolderRecordRewardRound 开卡包活动日志领取轮次奖励  
83 -type CardHolderRecordRewardRound struct {  
84 - CardHolderRecordBase  
85 - Award string `gorm:"type:varchar(255);comment:奖励内容"`  
86 -}  
87 -  
88 -func (d *CardHolderRecordRewardRound) TableName() string {  
89 - return utdto.MYSQL_TABLE_TEMPLATE  
90 -}  
91 -func (d *CardHolderRecordRewardRound) GetTableName(gameId string) string {  
92 - return constd.MYSQL_TABLE_S_CARDHOLDER_RECORD_REWARDROUND + gameId  
93 -}  
94 -  
95 -func NewCardHolderRecordRewardRound(recordBase CardHolderRecordBase,  
96 - award string) *CardHolderRecordRewardRound {  
97 - return &CardHolderRecordRewardRound{  
98 - CardHolderRecordBase: recordBase,  
99 - Award: award,  
100 - }  
101 -}  
dto/cardholder.go
@@ -1,84 +0,0 @@ @@ -1,84 +0,0 @@
1 -package dto  
2 -  
3 -import (  
4 - "apigame/service/constd"  
5 - "apigame/util/utdto"  
6 - "apigame/util/util-lx/lxalilog"  
7 - "apigame/util/util-lx/lxtime"  
8 - "encoding/json"  
9 -)  
10 -  
11 -// CardHolderData 卡牌活动持久数据  
12 -type CardHolderData struct {  
13 - Uid int64 `gorm:"column:uid;primaryKey;comment:玩家唯一ID"`  
14 - ActivityId int64 `gorm:"comment:活动ID"`  
15 - Details *CardHolderDataDetails `gorm:"-"` // 活动详情  
16 - DetailsText string `gorm:"comment:活动详情封装"`  
17 - CreateTime int64 `gorm:"comment:创建时间戳"`  
18 - UpdateTime int64 `gorm:"comment:修改时间戳"`  
19 -}  
20 -  
21 -// CardHolderDataDetails 卡牌活动详情  
22 -type CardHolderDataDetails struct {  
23 - Cards map[int]int // 每张卡集了多少张 k=卡牌ID v=数量  
24 - Album map[int]int // 卡组奖励领取 k=卡组ID v=数量  
25 - StarSequenceScales map[string]int // 星级序列刻度 k=ID_用户序列_用户分组 v=刻度  
26 - CardSequenceScales map[string]int // 卡牌序列刻度 k=ID_用户序列_用户分组 v=刻度  
27 - Round int // 卡册当前轮次  
28 - StarCount int // 星星点数  
29 - LastStarCount int // 上期活动剩余星星点数  
30 - AutoExchangeHolder []int // 活动切换时自动兑换的卡包列表  
31 -}  
32 -  
33 -func NewCardHolderData(uid int64) *CardHolderData {  
34 - d := &CardHolderData{  
35 - Uid: uid,  
36 - Details: NewCardHolderDataDetails(),  
37 - }  
38 - d.Encode()  
39 - return d  
40 -}  
41 -  
42 -func NewCardHolderDataDetails() *CardHolderDataDetails {  
43 - return &CardHolderDataDetails{  
44 - Cards: make(map[int]int),  
45 - Album: make(map[int]int),  
46 - StarSequenceScales: make(map[string]int),  
47 - CardSequenceScales: make(map[string]int),  
48 - Round: 1,  
49 - StarCount: 0,  
50 - AutoExchangeHolder: make([]int, 0),  
51 - }  
52 -}  
53 -  
54 -func (d *CardHolderData) TableName() string {  
55 - return utdto.MYSQL_TABLE_TEMPLATE  
56 -}  
57 -  
58 -func (d *CardHolderData) GetTableName(gameId string) string {  
59 - return constd.MYSQL_TABLE_S_CARDHOLDER_DATA + gameId  
60 -}  
61 -  
62 -func (d *CardHolderData) Init(uid int64) {  
63 - d.Uid = uid  
64 - d.CreateTime = lxtime.NowUninx()  
65 -}  
66 -  
67 -// Encode 打包数据  
68 -func (d *CardHolderData) Encode() {  
69 - details, err := json.Marshal(d.Details)  
70 - if err != nil {  
71 - lxalilog.Errors(err, "CardHolderData Encode Error", d.Uid, d.ActivityId)  
72 - return  
73 - }  
74 - d.DetailsText = string(details)  
75 -}  
76 -  
77 -// Decode 分包数据  
78 -func (d *CardHolderData) Decode() {  
79 - err := json.Unmarshal([]byte(d.DetailsText), d.Details)  
80 - if err != nil {  
81 - lxalilog.Errors(err, "CardHolderData Decode Error", d.Uid, d.ActivityId)  
82 - return  
83 - }  
84 -}  
1 package main 1 package main
2 2
3 import ( 3 import (
4 - "apigame/common/svconfig"  
5 "apigame/common/svconst" 4 "apigame/common/svconst"
6 - "apigame/common/svdto"  
7 "apigame/common/svlog" 5 "apigame/common/svlog"
8 "apigame/common/svmysql" 6 "apigame/common/svmysql"
9 "apigame/common/svredis" 7 "apigame/common/svredis"
@@ -33,12 +31,14 @@ func main() { @@ -33,12 +31,14 @@ func main() {
33 beego.BConfig.WebConfig.StaticDir["/swagger"] = "swagger" 31 beego.BConfig.WebConfig.StaticDir["/swagger"] = "swagger"
34 } 32 }
35 33
36 - Init() 34 + if !Init() {
  35 + return
  36 + }
37 37
38 beego.Run() 38 beego.Run()
39 } 39 }
40 40
41 -func Init() { 41 +func Init() bool {
42 42
43 svconst.AppName = beego.AppConfig.String("appname") 43 svconst.AppName = beego.AppConfig.String("appname")
44 44
@@ -47,11 +47,11 @@ func Init() { @@ -47,11 +47,11 @@ func Init() {
47 svlog.InitAliLog(svconst.AppName) 47 svlog.InitAliLog(svconst.AppName)
48 48
49 if !svredis.Init() { 49 if !svredis.Init() {
50 - return 50 + return false
51 } 51 }
52 52
53 if !svmysql.Init() { 53 if !svmysql.Init() {
54 - return 54 + return false
55 } 55 }
56 56
57 //// 初始化数数打点 57 //// 初始化数数打点
@@ -59,15 +59,11 @@ func Init() { @@ -59,15 +59,11 @@ func Init() {
59 // 59 //
60 //_ = config.InitLxLimit() 60 //_ = config.InitLxLimit()
61 61
62 - if !svconfig.Init() {  
63 - return  
64 - }  
65 if !configs.Init() { 62 if !configs.Init() {
66 - return 63 + return false
67 } 64 }
68 65
69 - svdto.Init()  
70 -  
71 - // 初始化配置  
72 cardholder.Init() 66 cardholder.Init()
  67 +
  68 + return true
73 } 69 }
middleware/sign/index.go
1 package sign 1 package sign
2 2
3 import ( 3 import (
4 - "apigame/api-common/config" 4 + "apigame/configs"
5 "apigame/middleware/sdk" 5 "apigame/middleware/sdk"
6 "apigame/service/constd" 6 "apigame/service/constd"
7 "apigame/util/util-lx/lxalilog" 7 "apigame/util/util-lx/lxalilog"
@@ -59,7 +59,7 @@ func getTimeStamp(time_stamp interface{}) (timestamp int64) { @@ -59,7 +59,7 @@ func getTimeStamp(time_stamp interface{}) (timestamp int64) {
59 59
60 } 60 }
61 61
62 -func InitCheck(postdata interface{}, cgg MCheckConfig) (code string, gameconfig config.MApiGameConfig, err error) { 62 +func InitCheck(postdata interface{}, cgg MCheckConfig) (code string, gameconfig *configs.ApiGameConfig, err error) {
63 63
64 var ( 64 var (
65 postGameId string 65 postGameId string
@@ -195,7 +195,7 @@ func Check(req []byte, postdata interface{}, checkSign bool, checkToken bool) (c @@ -195,7 +195,7 @@ func Check(req []byte, postdata interface{}, checkSign bool, checkToken bool) (c
195 } 195 }
196 196
197 // CheckSign 校验签名 197 // CheckSign 校验签名
198 -func CheckSign(data interface{}, checkToken bool) (code string, gameconfig config.MApiGameConfig, err error) { 198 +func CheckSign(data interface{}, checkToken bool) (code string, gameconfig *configs.ApiGameConfig, err error) {
199 199
200 var ( 200 var (
201 logstr string 201 logstr string
@@ -223,7 +223,7 @@ func CheckSign(data interface{}, checkToken bool) (code string, gameconfig confi @@ -223,7 +223,7 @@ func CheckSign(data interface{}, checkToken bool) (code string, gameconfig confi
223 223
224 gameid := newdata["gameid"].(string) 224 gameid := newdata["gameid"].(string)
225 225
226 - gameconfig, err = config.GetApiGameConfig(gameid) 226 + gameconfig, err = configs.GetApiGame(gameid)
227 if err != nil { 227 if err != nil {
228 lxalilog.Errors(err) 228 lxalilog.Errors(err)
229 return 229 return
@@ -233,7 +233,7 @@ func CheckSign(data interface{}, checkToken bool) (code string, gameconfig confi @@ -233,7 +233,7 @@ func CheckSign(data interface{}, checkToken bool) (code string, gameconfig confi
233 return 233 return
234 } 234 }
235 235
236 - appkey := gameconfig.Appkey 236 + appkey := gameconfig.AppKey
237 237
238 if appkey == "" { 238 if appkey == "" {
239 code = constd.RECODE_SIGNERROR 239 code = constd.RECODE_SIGNERROR
service/cardholder/config-load.go
@@ -2,13 +2,10 @@ package cardholder @@ -2,13 +2,10 @@ package cardholder
2 2
3 import ( 3 import (
4 "apigame/common/svconst" 4 "apigame/common/svconst"
5 - "apigame/common/svdto"  
6 - "apigame/service/constd"  
7 - "fmt"  
8 ) 5 )
9 6
10 -// Init 初始化  
11 -func Init() { 7 +// Init1 初始化
  8 +func Init1() {
12 9
13 NewConfigs() 10 NewConfigs()
14 11
@@ -22,7 +19,7 @@ func TryUpdateConfigs() { @@ -22,7 +19,7 @@ func TryUpdateConfigs() {
22 19
23 // LoadConfigs 读取mysql配置 20 // LoadConfigs 读取mysql配置
24 func LoadConfigs() { 21 func LoadConfigs() {
25 - for _, gameId := range constd.GameListCardHolder { 22 + for _, gameId := range svconst.GameListCardHolder {
26 LoadConfig(gameId) 23 LoadConfig(gameId)
27 } 24 }
28 } 25 }
@@ -35,46 +32,46 @@ func TryUpdateConfig(gameId string) (config *CardActivityConfig, has bool) { @@ -35,46 +32,46 @@ func TryUpdateConfig(gameId string) (config *CardActivityConfig, has bool) {
35 32
36 // LoadConfig 读取mysql配置 33 // LoadConfig 读取mysql配置
37 func LoadConfig(gameId string) { 34 func LoadConfig(gameId string) {
38 - // 找到当前开放的活动  
39 - configOpen := CardActivityUpdateConfig{Id: 0}  
40 - {  
41 - conf := make([]CardActivityUpdateConfig, 0)  
42 - _, err := svdto.Find(svconst.DbConfig, &conf, new(CardActivityUpdateConfig).GetTableName(gameId))  
43 - if err != nil {  
44 - return  
45 - }  
46 - for _, config := range conf {  
47 - if config.Status != 0 {  
48 - configOpen = config  
49 - continue  
50 - }  
51 - }  
52 - fmt.Println(configOpen)  
53 - }  
54 - // 没有开放的活动  
55 - if configOpen.Id == 0 {  
56 - return  
57 - }  
58 - // 判断是否需要更新  
59 - needUpdate := false  
60 - configOld, hasConfigOld := GetConfig(gameId)  
61 - if hasConfigOld {  
62 - if configOpen.Id != configOld.Raw.Id || configOpen.UpdateTime != configOld.Raw.UpdateTime {  
63 - needUpdate = true  
64 - }  
65 - } else {  
66 - needUpdate = true  
67 - }  
68 - // 更新数据  
69 - if needUpdate {  
70 - confNew := &CardActivityConfigRaw{}  
71 - hasConfNew, err := svdto.First(svconst.DbConfig, confNew, gameId)  
72 - if err != nil {  
73 - return  
74 - }  
75 - if !hasConfNew {  
76 - return  
77 - }  
78 - ConfigDecode(gameId, confNew)  
79 - } 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 + //}
80 } 77 }
service/cardholder/dto-game.go 0 → 100644
@@ -0,0 +1,91 @@ @@ -0,0 +1,91 @@
  1 +package cardholder
  2 +
  3 +import (
  4 + "apigame/common/svconst"
  5 + "apigame/common/svdto"
  6 + "apigame/service/constd"
  7 + "apigame/util/utdto"
  8 + "apigame/util/util-lx/lxalilog"
  9 + "apigame/util/util-lx/lxtime"
  10 + "encoding/json"
  11 + "fmt"
  12 +)
  13 +
  14 +// CardHolderData 卡牌活动持久数据
  15 +type CardHolderData struct {
  16 + Uid int64 `gorm:"column:uid;primaryKey;comment:玩家唯一ID"`
  17 + ActivityId int64 `gorm:"comment:活动ID"`
  18 + Details *CardHolderDataDetails `gorm:"-"` // 活动详情
  19 + DetailsText string `gorm:"comment:活动详情封装"`
  20 + CreateTime int64 `gorm:"comment:创建时间戳"`
  21 + UpdateTime int64 `gorm:"comment:修改时间戳"`
  22 +}
  23 +
  24 +func (c *CardHolderData) TableName() string { return utdto.MYSQL_TABLE_TEMPLATE }
  25 +
  26 +func (d *CardHolderData) GetRule(gameId string) *svdto.DtoRule {
  27 + tableName := constd.MYSQL_TABLE_S_CARDHOLDER_DATA
  28 + return &svdto.DtoRule{
  29 + DbMysql: svconst.DbCommon,
  30 + TableName: tableName + gameId,
  31 + CacheKey: fmt.Sprintf("%s:%s:%s", svdto.REDIS_CACHEP_REFIX, tableName, gameId),
  32 + CacheTime: 300,
  33 + }
  34 +}
  35 +
  36 +// CardHolderDataDetails 卡牌活动详情
  37 +type CardHolderDataDetails struct {
  38 + Cards map[int]int // 每张卡集了多少张 k=卡牌ID v=数量
  39 + Album map[int]int // 卡组奖励领取 k=卡组ID v=数量
  40 + StarSequenceScales map[string]int // 星级序列刻度 k=ID_用户序列_用户分组 v=刻度
  41 + CardSequenceScales map[string]int // 卡牌序列刻度 k=ID_用户序列_用户分组 v=刻度
  42 + Round int // 卡册当前轮次
  43 + StarCount int // 星星点数
  44 + LastStarCount int // 上期活动剩余星星点数
  45 + AutoExchangeHolder []int // 活动切换时自动兑换的卡包列表
  46 +}
  47 +
  48 +func NewCardHolderData(uid int64) *CardHolderData {
  49 + d := &CardHolderData{
  50 + Uid: uid,
  51 + Details: NewCardHolderDataDetails(),
  52 + }
  53 + d.Encode()
  54 + return d
  55 +}
  56 +
  57 +func NewCardHolderDataDetails() *CardHolderDataDetails {
  58 + return &CardHolderDataDetails{
  59 + Cards: make(map[int]int),
  60 + Album: make(map[int]int),
  61 + StarSequenceScales: make(map[string]int),
  62 + CardSequenceScales: make(map[string]int),
  63 + Round: 1,
  64 + StarCount: 0,
  65 + AutoExchangeHolder: make([]int, 0),
  66 + }
  67 +}
  68 +
  69 +func (d *CardHolderData) Init(uid int64) {
  70 + d.Uid = uid
  71 + d.CreateTime = lxtime.NowUninx()
  72 +}
  73 +
  74 +// Encode 打包数据
  75 +func (d *CardHolderData) Encode() {
  76 + details, err := json.Marshal(d.Details)
  77 + if err != nil {
  78 + lxalilog.Errors(err, "CardHolderData Encode Error", d.Uid, d.ActivityId)
  79 + return
  80 + }
  81 + d.DetailsText = string(details)
  82 +}
  83 +
  84 +// Decode 分包数据
  85 +func (d *CardHolderData) Decode() {
  86 + err := json.Unmarshal([]byte(d.DetailsText), d.Details)
  87 + if err != nil {
  88 + lxalilog.Errors(err, "CardHolderData Decode Error", d.Uid, d.ActivityId)
  89 + return
  90 + }
  91 +}
service/cardholder/dto-record.go 0 → 100644
@@ -0,0 +1,119 @@ @@ -0,0 +1,119 @@
  1 +package cardholder
  2 +
  3 +import (
  4 + "apigame/common/svconst"
  5 + "apigame/common/svdto"
  6 + "apigame/service/constd"
  7 + "apigame/util/utdto"
  8 + "apigame/util/util-lx/lxtime"
  9 + "fmt"
  10 +)
  11 +
  12 +// CardHolderRecordBase 开卡包活动日志公共
  13 +type CardHolderRecordBase struct {
  14 + Id int64 `gorm:"primaryKey;comment:日志ID"`
  15 + Uid int64 `gorm:"comment:玩家唯一ID"`
  16 + SequenceId string `gorm:"type:varchar(255);comment:用户序列组ID"`
  17 + Cohort string `gorm:"type:varchar(255);comment:用户分组ID"`
  18 + ActivityId int64 `gorm:"comment:当前活动ID"`
  19 + Round int `gorm:"comment:当前轮次"`
  20 + CreateTime int64 `gorm:"comment:创建时间戳"`
  21 + UpdateTime int64 `gorm:"comment:修改时间戳"`
  22 +}
  23 +
  24 +func NewCardHolderRecordBase(uid int64, sequenceId string, cohort string, activityId int64, round int) CardHolderRecordBase {
  25 + secNow := lxtime.NowUninx()
  26 + return CardHolderRecordBase{
  27 + CreateTime: secNow,
  28 + UpdateTime: secNow,
  29 + Uid: uid,
  30 + SequenceId: sequenceId,
  31 + Cohort: cohort,
  32 + ActivityId: activityId,
  33 + Round: round,
  34 + }
  35 +}
  36 +
  37 +// CardHolderRecordOpen 开卡包活动日志开卡包
  38 +type CardHolderRecordOpen struct {
  39 + CardHolderRecordBase
  40 + OpenMode int `gorm:"comment:开包类型0客户端驱动1星星商店购买2剩余星星兑换"`
  41 + CardholderId int `gorm:"comment:卡包ID"`
  42 + CardList string `gorm:"type:varchar(255);comment:开卡内容"`
  43 +}
  44 +
  45 +func (c *CardHolderRecordOpen) TableName() string { return utdto.MYSQL_TABLE_TEMPLATE }
  46 +
  47 +func (d *CardHolderRecordOpen) GetRule(gameId string) *svdto.DtoRule {
  48 + tableName := constd.MYSQL_TABLE_S_CARDHOLDER_RECORD_OPEN
  49 + return &svdto.DtoRule{
  50 + DbMysql: svconst.DbCommon,
  51 + TableName: tableName + gameId,
  52 + CacheKey: fmt.Sprintf("%s:%s:%s", svdto.REDIS_CACHEP_REFIX, tableName, gameId),
  53 + CacheTime: 300,
  54 + }
  55 +}
  56 +
  57 +func NewCardHolderRecordOpen(recordBase CardHolderRecordBase,
  58 + openMode int, cardholderId int, cardList string) *CardHolderRecordOpen {
  59 + return &CardHolderRecordOpen{
  60 + CardHolderRecordBase: recordBase,
  61 + OpenMode: openMode,
  62 + CardholderId: cardholderId,
  63 + CardList: cardList,
  64 + }
  65 +}
  66 +
  67 +// CardHolderRecordRewardAlbum 开卡包活动日志领取卡组奖励
  68 +type CardHolderRecordRewardAlbum struct {
  69 + CardHolderRecordBase
  70 + AlbumId int `gorm:"comment:卡组ID"`
  71 + Award string `gorm:"type:varchar(255);comment:奖励内容"`
  72 +}
  73 +
  74 +func (c *CardHolderRecordRewardAlbum) TableName() string { return utdto.MYSQL_TABLE_TEMPLATE }
  75 +
  76 +func (d *CardHolderRecordRewardAlbum) GetRule(gameId string) *svdto.DtoRule {
  77 + tableName := constd.MYSQL_TABLE_S_CARDHOLDER_RECORD_REWARDALBUM
  78 + return &svdto.DtoRule{
  79 + DbMysql: svconst.DbCommon,
  80 + TableName: tableName + gameId,
  81 + CacheKey: fmt.Sprintf("%s:%s:%s", svdto.REDIS_CACHEP_REFIX, tableName, gameId),
  82 + CacheTime: 300,
  83 + }
  84 +}
  85 +
  86 +func NewCardHolderRecordRewardAlbum(recordBase CardHolderRecordBase,
  87 + albumId int, award string) *CardHolderRecordRewardAlbum {
  88 + return &CardHolderRecordRewardAlbum{
  89 + CardHolderRecordBase: recordBase,
  90 + AlbumId: albumId,
  91 + Award: award,
  92 + }
  93 +}
  94 +
  95 +// CardHolderRecordRewardRound 开卡包活动日志领取轮次奖励
  96 +type CardHolderRecordRewardRound struct {
  97 + CardHolderRecordBase
  98 + Award string `gorm:"type:varchar(255);comment:奖励内容"`
  99 +}
  100 +
  101 +func (c *CardHolderRecordRewardRound) TableName() string { return utdto.MYSQL_TABLE_TEMPLATE }
  102 +
  103 +func (d *CardHolderRecordRewardRound) GetRule(gameId string) *svdto.DtoRule {
  104 + tableName := constd.MYSQL_TABLE_S_CARDHOLDER_RECORD_REWARDROUND
  105 + return &svdto.DtoRule{
  106 + DbMysql: svconst.DbCommon,
  107 + TableName: tableName + gameId,
  108 + CacheKey: fmt.Sprintf("%s:%s:%s", svdto.REDIS_CACHEP_REFIX, tableName, gameId),
  109 + CacheTime: 300,
  110 + }
  111 +}
  112 +
  113 +func NewCardHolderRecordRewardRound(recordBase CardHolderRecordBase,
  114 + award string) *CardHolderRecordRewardRound {
  115 + return &CardHolderRecordRewardRound{
  116 + CardHolderRecordBase: recordBase,
  117 + Award: award,
  118 + }
  119 +}
service/cardholder/init.go 0 → 100644
@@ -0,0 +1,19 @@ @@ -0,0 +1,19 @@
  1 +package cardholder
  2 +
  3 +import (
  4 + "apigame/common/svconst"
  5 + "apigame/common/svdto"
  6 +)
  7 +
  8 +func Init() {
  9 +
  10 + // create table
  11 + // 卡牌卡包
  12 + for _, gameId := range svconst.GameListCardHolder {
  13 + svdto.InitTable(new(CardHolderData), gameId)
  14 + svdto.InitTable(new(CardHolderRecordOpen), gameId)
  15 + svdto.InitTable(new(CardHolderRecordRewardAlbum), gameId)
  16 + svdto.InitTable(new(CardHolderRecordRewardRound), gameId)
  17 + }
  18 +
  19 +}
service/cardholder/logic.go
1 package cardholder 1 package cardholder
2 2
3 import ( 3 import (
4 - "apigame/common/svconst"  
5 "apigame/common/svdto" 4 "apigame/common/svdto"
6 - "apigame/dto"  
7 "apigame/models" 5 "apigame/models"
8 "apigame/service/constd" 6 "apigame/service/constd"
9 "apigame/util/util-lx/lxalilog" 7 "apigame/util/util-lx/lxalilog"
@@ -17,16 +15,16 @@ import ( @@ -17,16 +15,16 @@ import (
17 ) 15 )
18 16
19 // SaveData 存储数据 17 // SaveData 存储数据
20 -func SaveData(gameId string, d *dto.CardHolderData) { 18 +func SaveData(gameId string, d *CardHolderData) {
21 d.UpdateTime = lxtime.NowUninx() 19 d.UpdateTime = lxtime.NowUninx()
22 d.Encode() 20 d.Encode()
23 21
24 - svdto.Save(svconst.DbCommon, d, gameId) 22 + svdto.Save(d, gameId)
25 } 23 }
26 24
27 -func _LoadData(gameId string, uid int64) (d *dto.CardHolderData) {  
28 - d = dto.NewCardHolderData(uid)  
29 - has, err := svdto.First(svconst.DbCommon, d, gameId) 25 +func _LoadData(gameId string, uid int64) (d *CardHolderData) {
  26 + d = NewCardHolderData(uid)
  27 + has, err := svdto.First(d, gameId)
30 if err != nil { 28 if err != nil {
31 return 29 return
32 } 30 }
@@ -34,13 +32,13 @@ func _LoadData(gameId string, uid int64) (d *dto.CardHolderData) { @@ -34,13 +32,13 @@ func _LoadData(gameId string, uid int64) (d *dto.CardHolderData) {
34 d.Decode() 32 d.Decode()
35 } else { 33 } else {
36 d.Init(uid) 34 d.Init(uid)
37 - svdto.Insert(svconst.DbCommon, d, gameId) 35 + svdto.Insert(d, gameId)
38 } 36 }
39 return 37 return
40 } 38 }
41 39
42 // LoadData 获取数据 外部接口 40 // LoadData 获取数据 外部接口
43 -func LoadData(gameId string, uid int64, config *CardActivityConfig) (d *dto.CardHolderData) { 41 +func LoadData(gameId string, uid int64, config *CardActivityConfig) (d *CardHolderData) {
44 configId := config.Id 42 configId := config.Id
45 d = _LoadData(gameId, uid) 43 d = _LoadData(gameId, uid)
46 // 如果当前有上线活动(活动ID不为0),且活动ID和玩家数据不同,说明活动已切换 需更新 44 // 如果当前有上线活动(活动ID不为0),且活动ID和玩家数据不同,说明活动已切换 需更新
@@ -51,7 +49,7 @@ func LoadData(gameId string, uid int64, config *CardActivityConfig) (d *dto.Card @@ -51,7 +49,7 @@ func LoadData(gameId string, uid int64, config *CardActivityConfig) (d *dto.Card
51 starCount := d.Details.StarCount 49 starCount := d.Details.StarCount
52 50
53 d.ActivityId = configId 51 d.ActivityId = configId
54 - d.Details = dto.NewCardHolderDataDetails() 52 + d.Details = NewCardHolderDataDetails()
55 53
56 // 使用剩余的星星数来自动兑换卡包 54 // 使用剩余的星星数来自动兑换卡包
57 d.Details.LastStarCount = starCount 55 d.Details.LastStarCount = starCount
@@ -78,7 +76,7 @@ func CheckStatus(conf *CardActivityConfig) string { @@ -78,7 +76,7 @@ func CheckStatus(conf *CardActivityConfig) string {
78 } 76 }
79 77
80 // CheckGameData 检查游戏数据 轮次等 78 // CheckGameData 检查游戏数据 轮次等
81 -func CheckGameData(d *dto.CardHolderData, conf *CardActivityConfig) string { 79 +func CheckGameData(d *CardHolderData, conf *CardActivityConfig) string {
82 if d.Details.Round > conf.Raw.Round { 80 if d.Details.Round > conf.Raw.Round {
83 return constd.RECODE_MERGE_CARDHOLDER_ROUNDFINISH_ERROR 81 return constd.RECODE_MERGE_CARDHOLDER_ROUNDFINISH_ERROR
84 } 82 }
@@ -121,7 +119,7 @@ func GetListFromArray(array []string, scale, count int) []string { @@ -121,7 +119,7 @@ func GetListFromArray(array []string, scale, count int) []string {
121 } 119 }
122 120
123 // GetNewCard 按顺序查找数目最少的一张卡抽取 121 // GetNewCard 按顺序查找数目最少的一张卡抽取
124 -func GetNewCard(gameData *dto.CardHolderData, conf *CardActivityConfig) int { 122 +func GetNewCard(gameData *CardHolderData, conf *CardActivityConfig) int {
125 if len(conf.CardConfig) < 1 { 123 if len(conf.CardConfig) < 1 {
126 return 0 124 return 0
127 } 125 }
@@ -138,7 +136,7 @@ func GetNewCard(gameData *dto.CardHolderData, conf *CardActivityConfig) int { @@ -138,7 +136,7 @@ func GetNewCard(gameData *dto.CardHolderData, conf *CardActivityConfig) int {
138 } 136 }
139 137
140 // CheckAlbumFinish 判断卡组是否已集齐 138 // CheckAlbumFinish 判断卡组是否已集齐
141 -func CheckAlbumFinish(albumId int, gameData *dto.CardHolderData, config *CardActivityConfig) bool { 139 +func CheckAlbumFinish(albumId int, gameData *CardHolderData, config *CardActivityConfig) bool {
142 for _, conf := range config.CardConfig { 140 for _, conf := range config.CardConfig {
143 if conf.SetId == albumId { 141 if conf.SetId == albumId {
144 count := gameData.Details.Cards[conf.Id] 142 count := gameData.Details.Cards[conf.Id]
@@ -151,7 +149,7 @@ func CheckAlbumFinish(albumId int, gameData *dto.CardHolderData, config *CardAct @@ -151,7 +149,7 @@ func CheckAlbumFinish(albumId int, gameData *dto.CardHolderData, config *CardAct
151 } 149 }
152 150
153 // CheckRoundFinish 判断轮次是否已集齐(所有卡组集齐) 151 // CheckRoundFinish 判断轮次是否已集齐(所有卡组集齐)
154 -func CheckRoundFinish(gameData *dto.CardHolderData, config *CardActivityConfig) bool { 152 +func CheckRoundFinish(gameData *CardHolderData, config *CardActivityConfig) bool {
155 for _, conf := range config.AlbumConfig { 153 for _, conf := range config.AlbumConfig {
156 count := gameData.Details.Album[conf.SetId] 154 count := gameData.Details.Album[conf.SetId]
157 if count < 1 { 155 if count < 1 {
@@ -162,14 +160,14 @@ func CheckRoundFinish(gameData *dto.CardHolderData, config *CardActivityConfig) @@ -162,14 +160,14 @@ func CheckRoundFinish(gameData *dto.CardHolderData, config *CardActivityConfig)
162 } 160 }
163 161
164 // HandleNextRound 处理轮次完成 星级序列刻度 卡牌序列刻度 162 // HandleNextRound 处理轮次完成 星级序列刻度 卡牌序列刻度
165 -func HandleNextRound(gameData *dto.CardHolderData) { 163 +func HandleNextRound(gameData *CardHolderData) {
166 gameData.Details.Round += 1 164 gameData.Details.Round += 1
167 gameData.Details.Cards = make(map[int]int) 165 gameData.Details.Cards = make(map[int]int)
168 gameData.Details.Album = make(map[int]int) 166 gameData.Details.Album = make(map[int]int)
169 } 167 }
170 168
171 // GetInfo 玩家卡牌活动信息 169 // GetInfo 玩家卡牌活动信息
172 -func GetInfo(gameData *dto.CardHolderData, conf *CardActivityConfig) models.CardHolderInfo { 170 +func GetInfo(gameData *CardHolderData, conf *CardActivityConfig) models.CardHolderInfo {
173 info := models.CardHolderInfo{ 171 info := models.CardHolderInfo{
174 Cards: make(map[int]int), 172 Cards: make(map[int]int),
175 Album: make(map[int]int), 173 Album: make(map[int]int),
@@ -189,7 +187,7 @@ func GetInfo(gameData *dto.CardHolderData, conf *CardActivityConfig) models.Card @@ -189,7 +187,7 @@ func GetInfo(gameData *dto.CardHolderData, conf *CardActivityConfig) models.Card
189 // DoOpen 封装的抽卡逻辑 187 // DoOpen 封装的抽卡逻辑
190 // openMode:开包类型0客户端驱动1星星商店购买2剩余星星兑换 188 // openMode:开包类型0客户端驱动1星星商店购买2剩余星星兑换
191 func DoOpen(gameId string, 189 func DoOpen(gameId string,
192 - gameData *dto.CardHolderData, 190 + gameData *CardHolderData,
193 config *CardActivityConfig, 191 config *CardActivityConfig,
194 confCardholder OpenCardholderConfig, 192 confCardholder OpenCardholderConfig,
195 sequenceId, cohort string, 193 sequenceId, cohort string,
@@ -242,8 +240,8 @@ func DoOpen(gameId string, @@ -242,8 +240,8 @@ func DoOpen(gameId string,
242 } 240 }
243 // 记录开卡包日志 241 // 记录开卡包日志
244 { 242 {
245 - recordBase := dto.NewCardHolderRecordBase(gameData.Uid, sequenceId, cohort, config.Id, gameData.Details.Round)  
246 - svdto.SaveRecord(gameId, dto.NewCardHolderRecordOpen(recordBase, 243 + recordBase := NewCardHolderRecordBase(gameData.Uid, sequenceId, cohort, config.Id, gameData.Details.Round)
  244 + svdto.SaveRecord(gameId, NewCardHolderRecordOpen(recordBase,
247 openMode, utstring.StringToInt(confCardholder.Id), utjson.JsonString(newCards))) 245 openMode, utstring.StringToInt(confCardholder.Id), utjson.JsonString(newCards)))
248 } 246 }
249 247
@@ -252,7 +250,7 @@ func DoOpen(gameId string, @@ -252,7 +250,7 @@ func DoOpen(gameId string,
252 250
253 // DoOpenCheckAward 封装的新卡判断是否出发卡组和轮次奖励的逻辑 251 // DoOpenCheckAward 封装的新卡判断是否出发卡组和轮次奖励的逻辑
254 func DoOpenCheckAward(gameId string, 252 func DoOpenCheckAward(gameId string,
255 - gameData *dto.CardHolderData, 253 + gameData *CardHolderData,
256 config *CardActivityConfig, 254 config *CardActivityConfig,
257 sequenceId, cohort string, 255 sequenceId, cohort string,
258 newCards []int, 256 newCards []int,
@@ -290,8 +288,8 @@ func DoOpenCheckAward(gameId string, @@ -290,8 +288,8 @@ func DoOpenCheckAward(gameId string,
290 awardAlbum[albumId] = award 288 awardAlbum[albumId] = award
291 { 289 {
292 // 记录日志 290 // 记录日志
293 - recordBase := dto.NewCardHolderRecordBase(gameData.Uid, sequenceId, cohort, config.Id, gameData.Details.Round)  
294 - svdto.SaveRecord(gameId, dto.NewCardHolderRecordRewardAlbum(recordBase, 291 + recordBase := NewCardHolderRecordBase(gameData.Uid, sequenceId, cohort, config.Id, gameData.Details.Round)
  292 + svdto.SaveRecord(gameId, NewCardHolderRecordRewardAlbum(recordBase,
295 albumId, award)) 293 albumId, award))
296 } 294 }
297 } 295 }
@@ -301,8 +299,8 @@ func DoOpenCheckAward(gameId string, @@ -301,8 +299,8 @@ func DoOpenCheckAward(gameId string,
301 awardRound = config.Awards[utstring.IntToString(gameData.Details.Round)] 299 awardRound = config.Awards[utstring.IntToString(gameData.Details.Round)]
302 300
303 // 记录日志 301 // 记录日志
304 - recordBase := dto.NewCardHolderRecordBase(gameData.Uid, sequenceId, cohort, config.Id, gameData.Details.Round)  
305 - svdto.SaveRecord(gameId, dto.NewCardHolderRecordRewardRound(recordBase, 302 + recordBase := NewCardHolderRecordBase(gameData.Uid, sequenceId, cohort, config.Id, gameData.Details.Round)
  303 + svdto.SaveRecord(gameId, NewCardHolderRecordRewardRound(recordBase,
306 awardRound)) 304 awardRound))
307 305
308 // 处理轮次完成 306 // 处理轮次完成
@@ -314,7 +312,7 @@ func DoOpenCheckAward(gameId string, @@ -314,7 +312,7 @@ func DoOpenCheckAward(gameId string,
314 } 312 }
315 313
316 // CalculateStarCount 计算星星点数 314 // CalculateStarCount 计算星星点数
317 -func CalculateStarCount(gameData *dto.CardHolderData, config *CardActivityConfig) { 315 +func CalculateStarCount(gameData *CardHolderData, config *CardActivityConfig) {
318 starCount := 0 316 starCount := 0
319 for cardId, cardCount := range gameData.Details.Cards { 317 for cardId, cardCount := range gameData.Details.Cards {
320 if cardCount <= 1 { 318 if cardCount <= 1 {
@@ -336,7 +334,7 @@ func CalculateStarCount(gameData *dto.CardHolderData, config *CardActivityConfig @@ -336,7 +334,7 @@ func CalculateStarCount(gameData *dto.CardHolderData, config *CardActivityConfig
336 } 334 }
337 335
338 // GetStarCardList 按照规则扣除星星数找到需要扣除的卡牌列表 336 // GetStarCardList 按照规则扣除星星数找到需要扣除的卡牌列表
339 -func GetStarCardList(gameData *dto.CardHolderData, config *CardActivityConfig, needStar int) (enough bool, cardList map[int]int) { 337 +func GetStarCardList(gameData *CardHolderData, config *CardActivityConfig, needStar int) (enough bool, cardList map[int]int) {
340 enough = false 338 enough = false
341 cardList = make(map[int]int) 339 cardList = make(map[int]int)
342 starAmount := 0 340 starAmount := 0
@@ -405,7 +403,7 @@ func GetStarCardList(gameData *dto.CardHolderData, config *CardActivityConfig, n @@ -405,7 +403,7 @@ func GetStarCardList(gameData *dto.CardHolderData, config *CardActivityConfig, n
405 } 403 }
406 404
407 // NextActivityAutoExchange 活动切换时自动兑换卡包 405 // NextActivityAutoExchange 活动切换时自动兑换卡包
408 -func NextActivityAutoExchange(gameId string, gameData *dto.CardHolderData, config *CardActivityConfig) { 406 +func NextActivityAutoExchange(gameId string, gameData *CardHolderData, config *CardActivityConfig) {
409 starCount := gameData.Details.LastStarCount 407 starCount := gameData.Details.LastStarCount
410 // 把星星的配置按照需要的星星数降序排列 408 // 把星星的配置按照需要的星星数降序排列
411 list := lo.Values[int, StarShopConfig](config.StarShopConfig) 409 list := lo.Values[int, StarShopConfig](config.StarShopConfig)
service/constd/games.go
@@ -1,5 +0,0 @@ @@ -1,5 +0,0 @@
1 -package constd  
2 -  
3 -var (  
4 - GameListCardHolder = []string{"10149"}  
5 -)  
util/zredis/kv.go
@@ -24,6 +24,11 @@ func Set(conn redis.Conn, key, value string) (err error) { @@ -24,6 +24,11 @@ func Set(conn redis.Conn, key, value string) (err error) {
24 } 24 }
25 25
26 func Get(conn redis.Conn, key string) (value string, err error) { 26 func Get(conn redis.Conn, key string) (value string, err error) {
27 - value, err = redis.String(conn.Do("Get", "name")) 27 + value, err = redis.String(conn.Do("Get", key))
  28 + return
  29 +}
  30 +
  31 +func SetEx(conn redis.Conn, key, value string, exTime int) (err error) {
  32 + _, err = conn.Do("Set", key, value, "EX", exTime)
28 return 33 return
29 } 34 }