From fbe6e0e97576a871b434dfa9c88d94ee66e486b5 Mon Sep 17 00:00:00 2001 From: 王家文 Date: Tue, 16 Apr 2024 19:37:26 +0800 Subject: [PATCH] refactor♻️:项目目录重构 --- README.md | 1 - api-common/config/api.go | 209 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- api-common/config/const.go | 6 ------ common/svconfig/index.go | 6 ------ common/svconfig/interface.go | 23 ----------------------- common/svconst/vars.go | 2 ++ common/svdto/dto.go | 34 +++++++++++++++++++--------------- common/svdto/init.go | 18 ------------------ common/svdto/interface.go | 18 ++++++++++++++++-- common/svdto/record.go | 4 ++-- configs/api.go | 39 --------------------------------------- configs/feat-api.go | 28 ++++++++++++++++++++++++++++ configs/feat-cardholder.go | 124 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ configs/index.go | 43 +++++++++++++++++++++++++++++++++++++------ configs/init.go | 30 ++++++++++++++++++++++++++++++ configs/registry.go | 27 +++++++++++++++++++++++++++ dto/cardholder-record.go | 101 ----------------------------------------------------------------------------------------------------- dto/cardholder.go | 84 ------------------------------------------------------------------------------------ main.go | 22 +++++++++------------- middleware/sign/index.go | 10 +++++----- service/cardholder/config-load.go | 93 +++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------ service/cardholder/dto-game.go | 91 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ service/cardholder/dto-record.go | 119 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ service/cardholder/init.go | 19 +++++++++++++++++++ service/cardholder/logic.go | 52 +++++++++++++++++++++++++--------------------------- service/constd/games.go | 5 ----- util/zredis/kv.go | 7 ++++++- 27 files changed, 604 insertions(+), 611 deletions(-) delete mode 100644 api-common/config/api.go delete mode 100644 api-common/config/const.go delete mode 100644 common/svconfig/index.go delete mode 100644 common/svconfig/interface.go delete mode 100644 configs/api.go create mode 100644 configs/feat-api.go create mode 100644 configs/feat-cardholder.go create mode 100644 configs/init.go delete mode 100644 dto/cardholder-record.go delete mode 100644 dto/cardholder.go create mode 100644 service/cardholder/dto-game.go create mode 100644 service/cardholder/dto-record.go create mode 100644 service/cardholder/init.go delete mode 100644 service/constd/games.go diff --git a/README.md b/README.md index da77605..d4c00a5 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,6 @@ | 项目目录 | 目录说明 | |-------------|----------| -| api-common | 公共模块 | | conf | beego配置 | | controllers | 控制器 | | dto | 数据库存储对象 | diff --git a/api-common/config/api.go b/api-common/config/api.go deleted file mode 100644 index 36152a0..0000000 --- a/api-common/config/api.go +++ /dev/null @@ -1,209 +0,0 @@ -package config - -import ( - "apigame/util/util-lx/lxalilog" - "apigame/util/util-lx/lxconv" - "apigame/util/util-lx/lxmysql" - "encoding/json" - "errors" - "fmt" -) - -type MApiGameConfig struct { - AppID string `json:"appid"` - Secret string `json:"secret"` - Appkey string `json:"appkey"` - Name string `json:"name"` -} - -// GetApiGameConfig 获取游戏配置文件 -func GetApiGameConfig(gameid string) (data MApiGameConfig, err error) { - - config := lxmysql.QueryCacheConfig{ - 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), - DBIndex: CONST_APIDBINDEX, - Exexpire: CONST_CACHETIME, - } - - var datas []MApiGameConfig - - err = lxmysql.QueryWithCache(config, &datas) - if err != nil { - lxalilog.Errors(err, lxconv.JsonEncode(config)) - return - } - - if len(datas) < 1 { - err = errors.New("no rows") - lxalilog.Errors(err) - return - } - - data = datas[0] - - return -} - -type MApiServerConfig struct { - Egift MApiServerEgift `json:"egift"` //无尽轮换 - Membership []Membership `json:"membership"` //周卡 月卡 - Novicegift Novicegift `json:"novicegift"` // 新手礼包 - PassCheck []PassCheck `json:"pass_check"` //通行证 - Qixi QixiConfig `json:"qixi"` //七夕活动 - Thinkingdata ThinkingdataConfig `json:"thinkingdata"` //数数配置 -} - -// --------------------------- 无尽轮换礼包配置表 --------------------------- - -// MApiServerEgift 无尽轮换礼包配置表 -type MApiServerEgift struct { - Config []MApiServerEgiftConfig `json:"config"` - ListLength string `json:"list_length"` - Days string `json:"days"` - Date string `json:"date"` -} - -type MApiServerEgiftConfig struct { - ID string `json:"id"` - Award string `json:"award"` - Type string `json:"type"` - ShopID string `json:"shop_id"` - GroupID string `json:"group_id,omitempty"` -} - -// --------------------------- 无尽轮换礼包配置表 --------------------------- - -// --------------------------- 周卡 月卡 配置 --------------------------- - -type Membership struct { - Name string `json:"name"` // 模式名称 - Days string `json:"days"` // 第几天 - Goodid string `json:"goodid"` // 商品ID - Award string `json:"award"` // 奖励 - Naturalday string `json:"naturalday"` // 是否自然日 -} - -// --------------------------- 周卡 月卡 配置 --------------------------- - -// --------------------------- 新手 配置 --------------------------- - -type Novicegift struct { - Goodid string `json:"goodid"` // 商品ID - List []struct { - Days string `json:"days"` // 第几天 - Award string `json:"award"` // 奖励 - } `json:"list"` -} - -// --------------------------- 新手礼包 配置 --------------------------- - -type PassCheck struct { - ID string `json:"ID"` - Level string `json:"Level"` - GroupId string `json:"GroupId"` - GoodId string `json:"GoodId"` - Experience string `json:"Experience"` - AwardFree string `json:"AwardFree"` - AwardPay string `json:"AwardPay"` - DrawTime int64 `json:"DrawTime"` -} - -// --------------------------- 七夕活动 --------------------------- - -type QixiConfig struct { - ActivityId string `json:"activity_id"` - StartTime int64 `json:"start_time"` - EndTime int64 `json:"end_time"` - Awards []QixiConfigAwards `json:"awards"` - FalseProgress []QixiConfigFalseProgress `json:"false_progress"` - Mail QixiConfigMail `json:"mail"` - RankConfig QixiConfigRankConfig `json:"rank_config"` - AlilogName string `json:"alilog_name"` - AddMax int64 `json:"add_max"` -} - -type QixiConfigFalseProgress struct { - Day string `json:"day"` - Time string `json:"time"` - ChangeLowest string `json:"change_lowest"` - ChangeHighest string `json:"change_highest"` - Must string `json:"must"` -} - -type QixiConfigAwards struct { - Point string `json:"point"` - AwardType string `json:"award_type"` - AwardNumber string `json:"award_number"` - LowLimit string `json:"low_limit"` - HighLimit string `json:"high_limit"` -} - -type QixiConfigMail struct { - Title string `json:"title"` - Sender string `json:"sender"` - Content string `json:"content"` - Ex int64 `json:"ex"` -} - -type QixiConfigRankConfig struct { - MinPoint int64 `json:"min_point"` -} - -// --------------------------- 七夕活动 --------------------------- - -// --------------------------- 数数配置 --------------------------- - -type ThinkingdataConfig struct { - Appid string `json:"appid"` - Id int `json:"id"` - Swich struct { - Engine int `json:"engine"` - Order int `json:"order"` - Pass int `json:"pass"` - Recharge int `json:"recharge"` // 累计充值 开启 - } `json:"switch"` -} - -// --------------------------- 数数配置 --------------------------- - -// GetApiServerConfig 获取游服务端置文件 -func GetApiServerConfig(gameid string, dbindex ...string) (data MApiServerConfig, content string, err error) { - - var dindex = CONST_APIDBINDEX - if len(dbindex) > 0 { - dindex = dbindex[0] - } - - config := lxmysql.QueryCacheConfig{ - SQL: fmt.Sprintf("select * from s_server_config where gameid='%s' limit 1", gameid), - DBIndex: dindex, - Exexpire: CONST_CACHETIME, - } - - var datas []struct { - Content string `json:"content"` - } - - err = lxmysql.QueryWithCache(config, &datas) - if err != nil { - lxalilog.Errors(err, lxconv.JsonEncode(config)) - return - } - - if len(datas) < 1 { - err = errors.New("no rows") - lxalilog.Errors(err) - return - } - - if datas[0].Content == "" { - err = errors.New("content nil") - lxalilog.Errors(err) - } - - content = datas[0].Content - - _ = json.Unmarshal([]byte(content), &data) - - return -} diff --git a/api-common/config/const.go b/api-common/config/const.go deleted file mode 100644 index 5489f4a..0000000 --- a/api-common/config/const.go +++ /dev/null @@ -1,6 +0,0 @@ -package config - -const ( - CONST_CACHETIME = 600 //默认缓存时间 - CONST_APIDBINDEX = "api" -) diff --git a/common/svconfig/index.go b/common/svconfig/index.go deleted file mode 100644 index b2ad036..0000000 --- a/common/svconfig/index.go +++ /dev/null @@ -1,6 +0,0 @@ -package svconfig - -func Init() bool { - - return true -} diff --git a/common/svconfig/interface.go b/common/svconfig/interface.go deleted file mode 100644 index 628f954..0000000 --- a/common/svconfig/interface.go +++ /dev/null @@ -1,23 +0,0 @@ -package svconfig - -import "gorm.io/gorm" - -const ( - MYSQL_TABLE_TEMPLATE = "all_table_template" // 表名模板 - REDIS_CACHEP_REFIX = "apigame" // 缓存前缀 -) - -// ConfigRule 配置数据 -type ConfigRule struct { - DbMysql *gorm.DB - TableNameTemplate string - TableName string - CacheKey string - CacheTime int -} - -// IConfigRule 配置数据 -type IConfigRule interface { - // GetRule 表名模板 - GetRule(gameId string) *ConfigRule -} diff --git a/common/svconst/vars.go b/common/svconst/vars.go index efde083..c2c254a 100644 --- a/common/svconst/vars.go +++ b/common/svconst/vars.go @@ -8,4 +8,6 @@ var ( DbApi *gorm.DB DbCommon *gorm.DB DbConfig *gorm.DB + + GameListCardHolder = []string{"10149"} ) diff --git a/common/svdto/dto.go b/common/svdto/dto.go index 8ac0c5a..39630e2 100644 --- a/common/svdto/dto.go +++ b/common/svdto/dto.go @@ -3,16 +3,16 @@ package svdto import ( "apigame/util/utdto" "apigame/util/util-lx/lxalilog" - "gorm.io/gorm" ) -func InitTable(db *gorm.DB, tb IDtoData, gameId string) { - tableName := tb.GetTableName(gameId) - utdto.InitTable(db, tb, tableName) +func InitTable(tb IDtoData, gameId string) { + rule := tb.GetRule(gameId) + utdto.InitTable(rule.DbMysql, tb, rule.TableName) } -func Insert(db *gorm.DB, data IDtoData, gameId string) (err error) { - result := utdto.Insert(db, data, data.GetTableName(gameId)) +func Insert(data IDtoData, gameId string) (err error) { + rule := data.GetRule(gameId) + result := utdto.Insert(rule.DbMysql, data, rule.TableName) err = result.Error if err != nil { lxalilog.Errors(err, gameId) @@ -21,8 +21,9 @@ func Insert(db *gorm.DB, data IDtoData, gameId string) (err error) { return } -func Update(db *gorm.DB, data IDtoData, gameId string) (err error) { - result := utdto.Update(db, data, data.GetTableName(gameId)) +func Update(data IDtoData, gameId string) (err error) { + rule := data.GetRule(gameId) + result := utdto.Update(rule.DbMysql, data, rule.TableName) err = result.Error if err != nil { lxalilog.Errors(err, gameId) @@ -31,8 +32,9 @@ func Update(db *gorm.DB, data IDtoData, gameId string) (err error) { return } -func Save(db *gorm.DB, data IDtoData, gameId string) (err error) { - result := utdto.Save(db, data, data.GetTableName(gameId)) +func Save(data IDtoData, gameId string) (err error) { + rule := data.GetRule(gameId) + result := utdto.Save(rule.DbMysql, data, rule.TableName) err = result.Error if err != nil { lxalilog.Errors(err, gameId) @@ -41,8 +43,9 @@ func Save(db *gorm.DB, data IDtoData, gameId string) (err error) { return } -func First(db *gorm.DB, data IDtoData, gameId string) (has bool, err error) { - result := utdto.First(db, data, data.GetTableName(gameId)) +func First(data IDtoData, gameId string) (has bool, err error) { + rule := data.GetRule(gameId) + result := utdto.First(rule.DbMysql, data, rule.TableName) has = result.RowsAffected != 0 err = result.Error if err != nil { @@ -52,12 +55,13 @@ func First(db *gorm.DB, data IDtoData, gameId string) (has bool, err error) { return } -func Find(db *gorm.DB, data any, tableName string) (has bool, err error) { - result := utdto.Find(db, data, tableName) +func Find(data any, dataTemp IDtoData, gameId string) (has bool, err error) { + rule := dataTemp.GetRule(gameId) + result := utdto.Find(rule.DbMysql, data, rule.TableName) has = result.RowsAffected != 0 err = result.Error if err != nil { - lxalilog.Errors(err, tableName) + lxalilog.Errors(err, rule.TableName) return } return diff --git a/common/svdto/init.go b/common/svdto/init.go index d2231c2..61eee7b 100644 --- a/common/svdto/init.go +++ b/common/svdto/init.go @@ -1,20 +1,2 @@ package svdto -import ( - "apigame/common/svconst" - "apigame/dto" - "apigame/service/constd" -) - -func Init() { - - // create table - // 卡牌卡包 - for _, gameId := range constd.GameListCardHolder { - InitTable(svconst.DbCommon, new(dto.CardHolderData), gameId) - InitTable(svconst.DbCommon, new(dto.CardHolderRecordOpen), gameId) - InitTable(svconst.DbCommon, new(dto.CardHolderRecordRewardAlbum), gameId) - InitTable(svconst.DbCommon, new(dto.CardHolderRecordRewardRound), gameId) - } - -} diff --git a/common/svdto/interface.go b/common/svdto/interface.go index e57ba41..fb3e7a2 100644 --- a/common/svdto/interface.go +++ b/common/svdto/interface.go @@ -1,9 +1,23 @@ package svdto +import "gorm.io/gorm" + +const ( + REDIS_CACHEP_REFIX = "apigame" // 缓存前缀 +) + +// DtoRule dto参数 +type DtoRule struct { + DbMysql *gorm.DB + TableName string + CacheKey string + CacheTime int +} + // IDtoData dto数据 type IDtoData interface { // TableName 表名模板 TableName() string - // GetTableName 表名 后缀是 gameId - GetTableName(gameId string) string + // GetRule 表名模板 + GetRule(gameId string) *DtoRule } diff --git a/common/svdto/record.go b/common/svdto/record.go index a22134e..274e2d3 100644 --- a/common/svdto/record.go +++ b/common/svdto/record.go @@ -1,10 +1,10 @@ package svdto import ( - "apigame/common/svconst" "apigame/util/utdto" ) func SaveRecord(gameId string, data IDtoData) { - utdto.Insert(svconst.DbCommon, data, data.GetTableName(gameId)) + rule := data.GetRule(gameId) + utdto.Insert(rule.DbMysql, data, rule.TableName) } diff --git a/configs/api.go b/configs/api.go deleted file mode 100644 index f3500db..0000000 --- a/configs/api.go +++ /dev/null @@ -1,39 +0,0 @@ -package configs - -import ( - "apigame/common/svconfig" - "apigame/common/svconst" - "apigame/service/constd" - "fmt" -) - -type ApiGameConfig struct { - AppId string `json:"appid"` - GameId string `json:"gameid"` - Secret string `json:"secret"` - AppKey string `json:"appkey"` - Name string `json:"name"` -} - -func (c *ApiGameConfig) GetRule(gameId string) *svconfig.ConfigRule { - tableName := constd.MYSQL_TABLE_S_CARDHOLDER_CONFIG - return &svconfig.ConfigRule{ - DbMysql: svconst.DbApi, - TableNameTemplate: svconfig.MYSQL_TABLE_TEMPLATE, - TableName: tableName + gameId, - CacheKey: fmt.Sprintf("%s::%s::%s", svconfig.REDIS_CACHEP_REFIX, tableName, gameId), - CacheTime: 300, - } -} - -func (c *ApiGameConfig) ReadFromMysql(gameId string) *ApiGameConfig { - //rule := c.GetRule(gameId) - - return &ApiGameConfig{} -} - -func GetApiGameConfig(gameId string) (config *ApiGameConfig, err error) { - //rds := zredis.GetConn() - //zredis.HGetData(rds, player) - return -} diff --git a/configs/feat-api.go b/configs/feat-api.go new file mode 100644 index 0000000..8c69fcf --- /dev/null +++ b/configs/feat-api.go @@ -0,0 +1,28 @@ +package configs + +import ( + "apigame/common/svconst" + "apigame/common/svdto" + "apigame/util/utdto" + "fmt" +) + +type ApiGameConfig struct { + AppId string `gorm:"column:appid"` + GameId string `gorm:"column:gameid"` + Secret string `gorm:"column:secret"` + AppKey string `gorm:"column:appkey"` + Name string `gorm:"column:name"` +} + +func (c *ApiGameConfig) TableName() string { return utdto.MYSQL_TABLE_TEMPLATE } + +func (c *ApiGameConfig) GetRule(gameId string) *svdto.DtoRule { + tableName := "s_game_config" + return &svdto.DtoRule{ + DbMysql: svconst.DbApi.Where("gameid = ?", gameId), + TableName: tableName, + CacheKey: fmt.Sprintf("%s:%s:%s", svdto.REDIS_CACHEP_REFIX, tableName, gameId), + CacheTime: 300, + } +} diff --git a/configs/feat-cardholder.go b/configs/feat-cardholder.go new file mode 100644 index 0000000..0eaf684 --- /dev/null +++ b/configs/feat-cardholder.go @@ -0,0 +1,124 @@ +package configs + +import ( + "apigame/common/svconst" + "apigame/common/svdto" + "apigame/service/constd" + "apigame/util/utdto" + "fmt" +) + +// CardActivityConfig 卡牌活动配置 分析后数据 +type CardActivityConfig struct { + Raw *CardActivityConfigRaw + Client *CardActivityConfigClient + GameId string // 所属游戏ID + Id int64 // ID + Awards map[string]string // 奖励配置 + AlbumConfig map[int]AlbumConfig // 卡组配置 + CardConfig map[int]CardConfig // 卡牌配置 + CardholderConfig map[string]OpenCardholderConfig // 卡包开卡规则 + NormalCardStarConfig map[string]NormalCardStarConfig // k=ID_用户序列_用户分组 卡片星级配置 + CardSequenceConfig map[string]CardSequenceConfig // k=ID_用户序列_用户分组 卡片星级对应卡牌配置 + StarShopConfig map[int]StarShopConfig // 星星商店配置 +} + +func (c *CardActivityConfigRaw) TableName() string { return utdto.MYSQL_TABLE_TEMPLATE } + +func (d *CardActivityConfigRaw) GetRule(gameId string) *svdto.DtoRule { + tableName := constd.MYSQL_TABLE_S_CARDHOLDER_CONFIG + return &svdto.DtoRule{ + DbMysql: svconst.DbConfig, + TableName: tableName + gameId, + CacheKey: fmt.Sprintf("%s:%s:%s", svdto.REDIS_CACHEP_REFIX, tableName, gameId), + CacheTime: 300, + } +} + +// CardActivityConfigRaw 卡牌活动配置 原始数据 +type CardActivityConfigRaw struct { + Id int64 // ID + OpenLevel int // 开启等级 + PreviewTime int64 // 预告时间 + StartTime int64 // 开始时间 + EndTime int64 // 结束时间 + Round int // 轮数 + Awards string `json:"-"` // 奖励配置 + AlbumConfig string `json:"-"` // 卡组配置 + CardConfig string `json:"-"` // 卡牌配置 + CardHolderConfig string `json:"-"` // 卡包开卡规则 + NormalCardStarSequence string `json:"-"` // 卡片星级配置 + CardSequenceConfig string `json:"-"` // 卡片星级对应卡牌配置 + StarShopConfig string `json:"-"` // 星星商店配置 + Ver string // 版本号 + Status int // 状态 0=关闭 1=开启 + UpdateTime int64 // 修改时间戳 +} + +// CardActivityConfigClient 卡牌活动配置 给客户端数据 +type CardActivityConfigClient struct { + Id int64 `form:"id" json:"id"` // ID + RoundAwards map[string]string `form:"round_awards" json:"round_awards"` // 轮次奖励配置 + Albums []AlbumConfig `form:"albums" json:"albums"` // 卡组配置 + Cards []CardConfig `form:"cards" json:"cards"` // 卡牌配置 + Holders []OpenCardholderConfig `form:"holders" json:"holders"` // 卡包开卡规则 + StarShop []StarShopConfig `form:"star_shop" json:"star_shop"` // 星星商店配置 +} + +// AlbumConfig 卡组表 +type AlbumConfig struct { + SetId int `json:"set_id"` // 卡组名 + Name int `json:"name"` // 卡组图片 + Icon string `json:"icon"` // 卡组id + Rewards map[string]string `json:"rewards"` // 集齐奖励 k=轮次 + StartTime int64 `json:"start_time"` // 开始时间 + EndTime int64 `json:"end_time"` // 结束时间 +} + +// CardConfig 卡牌表 +type CardConfig struct { + Id int `json:"id"` // ID + Name int `json:"name"` // 卡牌名字 + Icon int `json:"icon"` // 卡牌图标 + Desc int `json:"desc"` // 卡牌描述 + SetId int `json:"album_setid"` // 卡组id + Star int `json:"star"` // 星级 + IsGold int `json:"is_gold"` // 是否是金卡 + IsSend int `json:"is_send"` // 卡片是否可赠送 +} + +// OpenCardholderConfig 卡包开卡规则表 +type OpenCardholderConfig struct { + Id string `json:"id"` // ID + IsGoldCardholder int `json:"is_gold_card_holder"` // 是否是金卡包 + IsNew int `json:"is_new"` // 是否是新卡包 + GuaranteedStarCardId string `json:"guaranteed_star_card_id"` // 保底卡星级序列ID + NormalCardNumber int `json:"normal_card_number"` // 非保底卡数量 + MinimumGuaranteeCardId string `json:"minimum_guarantee_card_id"` // 非保底卡牌序列ID + ActivityId int `json:"activity_id"` // 对应活动ID +} + +// NormalCardStarConfig 非保底卡星级ID +type NormalCardStarConfig struct { + Id string `json:"id"` // ID + SequenceId string `json:"user_sequence_id"` // 用户序列组ID + Cohort string `json:"cohort"` // 用户分组 + NormalCardSequenceId string `json:"normal_card_sequence_id"` // 非保底星级序列 + NormalCardSequenceIds []string `json:"-"` // 非保底星级序列 +} + +// CardSequenceConfig 星级ID对应的卡片 +type CardSequenceConfig struct { + Id string `json:"id"` // ID + SequenceId string `json:"user_sequence_id"` // 用户序列组ID + Cohort string `json:"cohort"` // 用户分组 + CardIdList string `json:"card_id_list"` // 卡牌抽取序列 + CardIdLists []string `json:"-"` // 卡牌抽取序列 +} + +// StarShopConfig 星星商店配置 +type StarShopConfig struct { + Id int `json:"id"` // ID + NeedStarNumber int `json:"need_star_number"` // 需求星星数 + CardBagIds []int `json:"card_bag_ids"` // 可换取的卡包ID {卡包类型,卡包ID,卡包数量} +} diff --git a/configs/index.go b/configs/index.go index 8771377..27d87c8 100644 --- a/configs/index.go +++ b/configs/index.go @@ -1,16 +1,47 @@ package configs -import "apigame/common/svconfig" +import ( + "apigame/common/svdto" + "apigame/util/zjson" + "apigame/util/zredis" + "fmt" +) -func Init() bool { - - return true +// func GetConfigRedis[T svconfig.IDtoData](gameId string) (result *T, has bool) { +// t = new(T) +// var rule = t.GetRule(gameId) +// return +// } +func GetConfigMysql[T svdto.IDtoData](gameId string, t T) (result *T, has bool) { + return } -func GetConfigRedis[T svconfig.IConfigRule](gameId string) { +func GetConfig[T svdto.IDtoData](gameId string, t T) (has bool) { + has = CacheLoad[T](gameId, t) + if !has { + } + return } -func GetConfigMysql[T svconfig.IConfigRule](gameId string) { +func CacheSave(gameId string, conf svdto.IDtoData) { + rule := conf.GetRule(gameId) + _ = zredis.SetEx(zredis.GetConn(), rule.CacheKey, zjson.Str(conf), rule.CacheTime) +} +func CacheLoad[T svdto.IDtoData](gameId string, t T) (has bool) { + has = true + rule := t.GetRule(gameId) + text, err := zredis.Get(zredis.GetConn(), rule.CacheKey) + if err != nil { + has = false + return + } + err = zjson.Obj(text, &t) + if err != nil { + fmt.Println(err) + has = false + return + } + return } diff --git a/configs/init.go b/configs/init.go new file mode 100644 index 0000000..6653d6a --- /dev/null +++ b/configs/init.go @@ -0,0 +1,30 @@ +package configs + +func Init() bool { + + //gameId := "10149" + ////{ + //// conf := &ApiGameConfig{AppId: "dsadsads", GameId: gameId, Name: "Name"} + //// CacheSave(gameId, conf) + ////} + //{ + // conf, has := CacheLoad(gameId, &ApiGameConfig{}) + // fmt.Println("dwjw🐸", conf, has) + //} + + //{ + // conf := &CardActivityConfigRaw{} + // rule := conf.GetRule(gameId) + // db := rule.DbMysql.Where("status = ?", 1) + // has, err := svdto.First(db, conf, gameId) + // fmt.Println("dwjw🐸", conf, has, err) + //} + + //for _, gameId := range svconst.GameListCardHolder { + // LoadConfig(gameId) + //} + + _, _ = GetApiGame("10149") + + return true +} diff --git a/configs/registry.go b/configs/registry.go index 27459e6..6e4f852 100644 --- a/configs/registry.go +++ b/configs/registry.go @@ -1 +1,28 @@ package configs + +import ( + "apigame/util/utdto" + "apigame/util/util-lx/lxalilog" + "fmt" +) + +func GetApiGame(gameId string) (conf *ApiGameConfig, err error) { + conf = new(ApiGameConfig) + has := CacheLoad(gameId, conf) + if has { + fmt.Println("GetApiGame use cache") + return + } + rule := conf.GetRule(gameId) + result := utdto.First(rule.DbMysql, conf, rule.TableName) + has = result.RowsAffected != 0 + err = result.Error + if err != nil { + lxalilog.Errors(err, gameId) + return + } + fmt.Println("GetApiGame save cache") + CacheSave(gameId, conf) + + return +} diff --git a/dto/cardholder-record.go b/dto/cardholder-record.go deleted file mode 100644 index 9e01ed6..0000000 --- a/dto/cardholder-record.go +++ /dev/null @@ -1,101 +0,0 @@ -package dto - -import ( - "apigame/service/constd" - "apigame/util/utdto" - "apigame/util/util-lx/lxtime" -) - -// CardHolderRecordBase 开卡包活动日志公共 -type CardHolderRecordBase struct { - Id int64 `gorm:"primaryKey;comment:日志ID"` - Uid int64 `gorm:"comment:玩家唯一ID"` - SequenceId string `gorm:"type:varchar(255);comment:用户序列组ID"` - Cohort string `gorm:"type:varchar(255);comment:用户分组ID"` - ActivityId int64 `gorm:"comment:当前活动ID"` - Round int `gorm:"comment:当前轮次"` - CreateTime int64 `gorm:"comment:创建时间戳"` - UpdateTime int64 `gorm:"comment:修改时间戳"` -} - -func NewCardHolderRecordBase(uid int64, sequenceId string, cohort string, activityId int64, round int) CardHolderRecordBase { - secNow := lxtime.NowUninx() - return CardHolderRecordBase{ - CreateTime: secNow, - UpdateTime: secNow, - Uid: uid, - SequenceId: sequenceId, - Cohort: cohort, - ActivityId: activityId, - Round: round, - } -} - -// CardHolderRecordOpen 开卡包活动日志开卡包 -type CardHolderRecordOpen struct { - CardHolderRecordBase - OpenMode int `gorm:"comment:开包类型0客户端驱动1星星商店购买2剩余星星兑换"` - CardholderId int `gorm:"comment:卡包ID"` - CardList string `gorm:"type:varchar(255);comment:开卡内容"` -} - -func (d *CardHolderRecordOpen) TableName() string { - return utdto.MYSQL_TABLE_TEMPLATE -} -func (d *CardHolderRecordOpen) GetTableName(gameId string) string { - return constd.MYSQL_TABLE_S_CARDHOLDER_RECORD_OPEN + gameId -} - -func NewCardHolderRecordOpen(recordBase CardHolderRecordBase, - openMode int, cardholderId int, cardList string) *CardHolderRecordOpen { - return &CardHolderRecordOpen{ - CardHolderRecordBase: recordBase, - OpenMode: openMode, - CardholderId: cardholderId, - CardList: cardList, - } -} - -// CardHolderRecordRewardAlbum 开卡包活动日志领取卡组奖励 -type CardHolderRecordRewardAlbum struct { - CardHolderRecordBase - AlbumId int `gorm:"comment:卡组ID"` - Award string `gorm:"type:varchar(255);comment:奖励内容"` -} - -func (d *CardHolderRecordRewardAlbum) TableName() string { - return utdto.MYSQL_TABLE_TEMPLATE -} -func (d *CardHolderRecordRewardAlbum) GetTableName(gameId string) string { - return constd.MYSQL_TABLE_S_CARDHOLDER_RECORD_REWARDALBUM + gameId -} - -func NewCardHolderRecordRewardAlbum(recordBase CardHolderRecordBase, - albumId int, award string) *CardHolderRecordRewardAlbum { - return &CardHolderRecordRewardAlbum{ - CardHolderRecordBase: recordBase, - AlbumId: albumId, - Award: award, - } -} - -// CardHolderRecordRewardRound 开卡包活动日志领取轮次奖励 -type CardHolderRecordRewardRound struct { - CardHolderRecordBase - Award string `gorm:"type:varchar(255);comment:奖励内容"` -} - -func (d *CardHolderRecordRewardRound) TableName() string { - return utdto.MYSQL_TABLE_TEMPLATE -} -func (d *CardHolderRecordRewardRound) GetTableName(gameId string) string { - return constd.MYSQL_TABLE_S_CARDHOLDER_RECORD_REWARDROUND + gameId -} - -func NewCardHolderRecordRewardRound(recordBase CardHolderRecordBase, - award string) *CardHolderRecordRewardRound { - return &CardHolderRecordRewardRound{ - CardHolderRecordBase: recordBase, - Award: award, - } -} diff --git a/dto/cardholder.go b/dto/cardholder.go deleted file mode 100644 index e5f65a7..0000000 --- a/dto/cardholder.go +++ /dev/null @@ -1,84 +0,0 @@ -package dto - -import ( - "apigame/service/constd" - "apigame/util/utdto" - "apigame/util/util-lx/lxalilog" - "apigame/util/util-lx/lxtime" - "encoding/json" -) - -// CardHolderData 卡牌活动持久数据 -type CardHolderData struct { - Uid int64 `gorm:"column:uid;primaryKey;comment:玩家唯一ID"` - ActivityId int64 `gorm:"comment:活动ID"` - Details *CardHolderDataDetails `gorm:"-"` // 活动详情 - DetailsText string `gorm:"comment:活动详情封装"` - CreateTime int64 `gorm:"comment:创建时间戳"` - UpdateTime int64 `gorm:"comment:修改时间戳"` -} - -// CardHolderDataDetails 卡牌活动详情 -type CardHolderDataDetails struct { - Cards map[int]int // 每张卡集了多少张 k=卡牌ID v=数量 - Album map[int]int // 卡组奖励领取 k=卡组ID v=数量 - StarSequenceScales map[string]int // 星级序列刻度 k=ID_用户序列_用户分组 v=刻度 - CardSequenceScales map[string]int // 卡牌序列刻度 k=ID_用户序列_用户分组 v=刻度 - Round int // 卡册当前轮次 - StarCount int // 星星点数 - LastStarCount int // 上期活动剩余星星点数 - AutoExchangeHolder []int // 活动切换时自动兑换的卡包列表 -} - -func NewCardHolderData(uid int64) *CardHolderData { - d := &CardHolderData{ - Uid: uid, - Details: NewCardHolderDataDetails(), - } - d.Encode() - return d -} - -func NewCardHolderDataDetails() *CardHolderDataDetails { - return &CardHolderDataDetails{ - Cards: make(map[int]int), - Album: make(map[int]int), - StarSequenceScales: make(map[string]int), - CardSequenceScales: make(map[string]int), - Round: 1, - StarCount: 0, - AutoExchangeHolder: make([]int, 0), - } -} - -func (d *CardHolderData) TableName() string { - return utdto.MYSQL_TABLE_TEMPLATE -} - -func (d *CardHolderData) GetTableName(gameId string) string { - return constd.MYSQL_TABLE_S_CARDHOLDER_DATA + gameId -} - -func (d *CardHolderData) Init(uid int64) { - d.Uid = uid - d.CreateTime = lxtime.NowUninx() -} - -// Encode 打包数据 -func (d *CardHolderData) Encode() { - details, err := json.Marshal(d.Details) - if err != nil { - lxalilog.Errors(err, "CardHolderData Encode Error", d.Uid, d.ActivityId) - return - } - d.DetailsText = string(details) -} - -// Decode 分包数据 -func (d *CardHolderData) Decode() { - err := json.Unmarshal([]byte(d.DetailsText), d.Details) - if err != nil { - lxalilog.Errors(err, "CardHolderData Decode Error", d.Uid, d.ActivityId) - return - } -} diff --git a/main.go b/main.go index 9aeea2e..3e7a817 100644 --- a/main.go +++ b/main.go @@ -1,9 +1,7 @@ package main import ( - "apigame/common/svconfig" "apigame/common/svconst" - "apigame/common/svdto" "apigame/common/svlog" "apigame/common/svmysql" "apigame/common/svredis" @@ -33,12 +31,14 @@ func main() { beego.BConfig.WebConfig.StaticDir["/swagger"] = "swagger" } - Init() + if !Init() { + return + } beego.Run() } -func Init() { +func Init() bool { svconst.AppName = beego.AppConfig.String("appname") @@ -47,11 +47,11 @@ func Init() { svlog.InitAliLog(svconst.AppName) if !svredis.Init() { - return + return false } if !svmysql.Init() { - return + return false } //// 初始化数数打点 @@ -59,15 +59,11 @@ func Init() { // //_ = config.InitLxLimit() - if !svconfig.Init() { - return - } if !configs.Init() { - return + return false } - svdto.Init() - - // 初始化配置 cardholder.Init() + + return true } diff --git a/middleware/sign/index.go b/middleware/sign/index.go index 20c17f8..3475c41 100644 --- a/middleware/sign/index.go +++ b/middleware/sign/index.go @@ -1,7 +1,7 @@ package sign import ( - "apigame/api-common/config" + "apigame/configs" "apigame/middleware/sdk" "apigame/service/constd" "apigame/util/util-lx/lxalilog" @@ -59,7 +59,7 @@ func getTimeStamp(time_stamp interface{}) (timestamp int64) { } -func InitCheck(postdata interface{}, cgg MCheckConfig) (code string, gameconfig config.MApiGameConfig, err error) { +func InitCheck(postdata interface{}, cgg MCheckConfig) (code string, gameconfig *configs.ApiGameConfig, err error) { var ( postGameId string @@ -195,7 +195,7 @@ func Check(req []byte, postdata interface{}, checkSign bool, checkToken bool) (c } // CheckSign 校验签名 -func CheckSign(data interface{}, checkToken bool) (code string, gameconfig config.MApiGameConfig, err error) { +func CheckSign(data interface{}, checkToken bool) (code string, gameconfig *configs.ApiGameConfig, err error) { var ( logstr string @@ -223,7 +223,7 @@ func CheckSign(data interface{}, checkToken bool) (code string, gameconfig confi gameid := newdata["gameid"].(string) - gameconfig, err = config.GetApiGameConfig(gameid) + gameconfig, err = configs.GetApiGame(gameid) if err != nil { lxalilog.Errors(err) return @@ -233,7 +233,7 @@ func CheckSign(data interface{}, checkToken bool) (code string, gameconfig confi return } - appkey := gameconfig.Appkey + appkey := gameconfig.AppKey if appkey == "" { code = constd.RECODE_SIGNERROR diff --git a/service/cardholder/config-load.go b/service/cardholder/config-load.go index c5d0ca8..18106b1 100644 --- a/service/cardholder/config-load.go +++ b/service/cardholder/config-load.go @@ -2,13 +2,10 @@ package cardholder import ( "apigame/common/svconst" - "apigame/common/svdto" - "apigame/service/constd" - "fmt" ) -// Init 初始化 -func Init() { +// Init1 初始化 +func Init1() { NewConfigs() @@ -22,7 +19,7 @@ func TryUpdateConfigs() { // LoadConfigs 读取mysql配置 func LoadConfigs() { - for _, gameId := range constd.GameListCardHolder { + for _, gameId := range svconst.GameListCardHolder { LoadConfig(gameId) } } @@ -35,46 +32,46 @@ func TryUpdateConfig(gameId string) (config *CardActivityConfig, has bool) { // LoadConfig 读取mysql配置 func LoadConfig(gameId string) { - // 找到当前开放的活动 - configOpen := CardActivityUpdateConfig{Id: 0} - { - conf := make([]CardActivityUpdateConfig, 0) - _, err := svdto.Find(svconst.DbConfig, &conf, new(CardActivityUpdateConfig).GetTableName(gameId)) - if err != nil { - return - } - for _, config := range conf { - if config.Status != 0 { - configOpen = config - continue - } - } - fmt.Println(configOpen) - } - // 没有开放的活动 - if configOpen.Id == 0 { - return - } - // 判断是否需要更新 - needUpdate := false - configOld, hasConfigOld := GetConfig(gameId) - if hasConfigOld { - if configOpen.Id != configOld.Raw.Id || configOpen.UpdateTime != configOld.Raw.UpdateTime { - needUpdate = true - } - } else { - needUpdate = true - } - // 更新数据 - if needUpdate { - confNew := &CardActivityConfigRaw{} - hasConfNew, err := svdto.First(svconst.DbConfig, confNew, gameId) - if err != nil { - return - } - if !hasConfNew { - return - } - ConfigDecode(gameId, confNew) - } + //// 找到当前开放的活动 + //configOpen := CardActivityUpdateConfig{Id: 0} + //{ + // conf := make([]CardActivityUpdateConfig, 0) + // _, err := svdto.Find(&conf, new(CardActivityUpdateConfig), gameId) + // if err != nil { + // return + // } + // for _, config := range conf { + // if config.Status != 0 { + // configOpen = config + // continue + // } + // } + // fmt.Println(configOpen) + //} + //// 没有开放的活动 + //if configOpen.Id == 0 { + // return + //} + //// 判断是否需要更新 + //needUpdate := false + //configOld, hasConfigOld := GetConfig(gameId) + //if hasConfigOld { + // if configOpen.Id != configOld.Raw.Id || configOpen.UpdateTime != configOld.Raw.UpdateTime { + // needUpdate = true + // } + //} else { + // needUpdate = true + //} + //// 更新数据 + //if needUpdate { + // confNew := &CardActivityConfigRaw{} + // hasConfNew, err := svdto.First(confNew, gameId) + // if err != nil { + // return + // } + // if !hasConfNew { + // return + // } + // ConfigDecode(gameId, confNew) + //} } diff --git a/service/cardholder/dto-game.go b/service/cardholder/dto-game.go new file mode 100644 index 0000000..ee5b75f --- /dev/null +++ b/service/cardholder/dto-game.go @@ -0,0 +1,91 @@ +package cardholder + +import ( + "apigame/common/svconst" + "apigame/common/svdto" + "apigame/service/constd" + "apigame/util/utdto" + "apigame/util/util-lx/lxalilog" + "apigame/util/util-lx/lxtime" + "encoding/json" + "fmt" +) + +// CardHolderData 卡牌活动持久数据 +type CardHolderData struct { + Uid int64 `gorm:"column:uid;primaryKey;comment:玩家唯一ID"` + ActivityId int64 `gorm:"comment:活动ID"` + Details *CardHolderDataDetails `gorm:"-"` // 活动详情 + DetailsText string `gorm:"comment:活动详情封装"` + CreateTime int64 `gorm:"comment:创建时间戳"` + UpdateTime int64 `gorm:"comment:修改时间戳"` +} + +func (c *CardHolderData) TableName() string { return utdto.MYSQL_TABLE_TEMPLATE } + +func (d *CardHolderData) GetRule(gameId string) *svdto.DtoRule { + tableName := constd.MYSQL_TABLE_S_CARDHOLDER_DATA + return &svdto.DtoRule{ + DbMysql: svconst.DbCommon, + TableName: tableName + gameId, + CacheKey: fmt.Sprintf("%s:%s:%s", svdto.REDIS_CACHEP_REFIX, tableName, gameId), + CacheTime: 300, + } +} + +// CardHolderDataDetails 卡牌活动详情 +type CardHolderDataDetails struct { + Cards map[int]int // 每张卡集了多少张 k=卡牌ID v=数量 + Album map[int]int // 卡组奖励领取 k=卡组ID v=数量 + StarSequenceScales map[string]int // 星级序列刻度 k=ID_用户序列_用户分组 v=刻度 + CardSequenceScales map[string]int // 卡牌序列刻度 k=ID_用户序列_用户分组 v=刻度 + Round int // 卡册当前轮次 + StarCount int // 星星点数 + LastStarCount int // 上期活动剩余星星点数 + AutoExchangeHolder []int // 活动切换时自动兑换的卡包列表 +} + +func NewCardHolderData(uid int64) *CardHolderData { + d := &CardHolderData{ + Uid: uid, + Details: NewCardHolderDataDetails(), + } + d.Encode() + return d +} + +func NewCardHolderDataDetails() *CardHolderDataDetails { + return &CardHolderDataDetails{ + Cards: make(map[int]int), + Album: make(map[int]int), + StarSequenceScales: make(map[string]int), + CardSequenceScales: make(map[string]int), + Round: 1, + StarCount: 0, + AutoExchangeHolder: make([]int, 0), + } +} + +func (d *CardHolderData) Init(uid int64) { + d.Uid = uid + d.CreateTime = lxtime.NowUninx() +} + +// Encode 打包数据 +func (d *CardHolderData) Encode() { + details, err := json.Marshal(d.Details) + if err != nil { + lxalilog.Errors(err, "CardHolderData Encode Error", d.Uid, d.ActivityId) + return + } + d.DetailsText = string(details) +} + +// Decode 分包数据 +func (d *CardHolderData) Decode() { + err := json.Unmarshal([]byte(d.DetailsText), d.Details) + if err != nil { + lxalilog.Errors(err, "CardHolderData Decode Error", d.Uid, d.ActivityId) + return + } +} diff --git a/service/cardholder/dto-record.go b/service/cardholder/dto-record.go new file mode 100644 index 0000000..e3edcb2 --- /dev/null +++ b/service/cardholder/dto-record.go @@ -0,0 +1,119 @@ +package cardholder + +import ( + "apigame/common/svconst" + "apigame/common/svdto" + "apigame/service/constd" + "apigame/util/utdto" + "apigame/util/util-lx/lxtime" + "fmt" +) + +// CardHolderRecordBase 开卡包活动日志公共 +type CardHolderRecordBase struct { + Id int64 `gorm:"primaryKey;comment:日志ID"` + Uid int64 `gorm:"comment:玩家唯一ID"` + SequenceId string `gorm:"type:varchar(255);comment:用户序列组ID"` + Cohort string `gorm:"type:varchar(255);comment:用户分组ID"` + ActivityId int64 `gorm:"comment:当前活动ID"` + Round int `gorm:"comment:当前轮次"` + CreateTime int64 `gorm:"comment:创建时间戳"` + UpdateTime int64 `gorm:"comment:修改时间戳"` +} + +func NewCardHolderRecordBase(uid int64, sequenceId string, cohort string, activityId int64, round int) CardHolderRecordBase { + secNow := lxtime.NowUninx() + return CardHolderRecordBase{ + CreateTime: secNow, + UpdateTime: secNow, + Uid: uid, + SequenceId: sequenceId, + Cohort: cohort, + ActivityId: activityId, + Round: round, + } +} + +// CardHolderRecordOpen 开卡包活动日志开卡包 +type CardHolderRecordOpen struct { + CardHolderRecordBase + OpenMode int `gorm:"comment:开包类型0客户端驱动1星星商店购买2剩余星星兑换"` + CardholderId int `gorm:"comment:卡包ID"` + CardList string `gorm:"type:varchar(255);comment:开卡内容"` +} + +func (c *CardHolderRecordOpen) TableName() string { return utdto.MYSQL_TABLE_TEMPLATE } + +func (d *CardHolderRecordOpen) GetRule(gameId string) *svdto.DtoRule { + tableName := constd.MYSQL_TABLE_S_CARDHOLDER_RECORD_OPEN + return &svdto.DtoRule{ + DbMysql: svconst.DbCommon, + TableName: tableName + gameId, + CacheKey: fmt.Sprintf("%s:%s:%s", svdto.REDIS_CACHEP_REFIX, tableName, gameId), + CacheTime: 300, + } +} + +func NewCardHolderRecordOpen(recordBase CardHolderRecordBase, + openMode int, cardholderId int, cardList string) *CardHolderRecordOpen { + return &CardHolderRecordOpen{ + CardHolderRecordBase: recordBase, + OpenMode: openMode, + CardholderId: cardholderId, + CardList: cardList, + } +} + +// CardHolderRecordRewardAlbum 开卡包活动日志领取卡组奖励 +type CardHolderRecordRewardAlbum struct { + CardHolderRecordBase + AlbumId int `gorm:"comment:卡组ID"` + Award string `gorm:"type:varchar(255);comment:奖励内容"` +} + +func (c *CardHolderRecordRewardAlbum) TableName() string { return utdto.MYSQL_TABLE_TEMPLATE } + +func (d *CardHolderRecordRewardAlbum) GetRule(gameId string) *svdto.DtoRule { + tableName := constd.MYSQL_TABLE_S_CARDHOLDER_RECORD_REWARDALBUM + return &svdto.DtoRule{ + DbMysql: svconst.DbCommon, + TableName: tableName + gameId, + CacheKey: fmt.Sprintf("%s:%s:%s", svdto.REDIS_CACHEP_REFIX, tableName, gameId), + CacheTime: 300, + } +} + +func NewCardHolderRecordRewardAlbum(recordBase CardHolderRecordBase, + albumId int, award string) *CardHolderRecordRewardAlbum { + return &CardHolderRecordRewardAlbum{ + CardHolderRecordBase: recordBase, + AlbumId: albumId, + Award: award, + } +} + +// CardHolderRecordRewardRound 开卡包活动日志领取轮次奖励 +type CardHolderRecordRewardRound struct { + CardHolderRecordBase + Award string `gorm:"type:varchar(255);comment:奖励内容"` +} + +func (c *CardHolderRecordRewardRound) TableName() string { return utdto.MYSQL_TABLE_TEMPLATE } + +func (d *CardHolderRecordRewardRound) GetRule(gameId string) *svdto.DtoRule { + tableName := constd.MYSQL_TABLE_S_CARDHOLDER_RECORD_REWARDROUND + return &svdto.DtoRule{ + DbMysql: svconst.DbCommon, + TableName: tableName + gameId, + CacheKey: fmt.Sprintf("%s:%s:%s", svdto.REDIS_CACHEP_REFIX, tableName, gameId), + CacheTime: 300, + } +} + +func NewCardHolderRecordRewardRound(recordBase CardHolderRecordBase, + award string) *CardHolderRecordRewardRound { + return &CardHolderRecordRewardRound{ + CardHolderRecordBase: recordBase, + Award: award, + } +} diff --git a/service/cardholder/init.go b/service/cardholder/init.go new file mode 100644 index 0000000..207b98a --- /dev/null +++ b/service/cardholder/init.go @@ -0,0 +1,19 @@ +package cardholder + +import ( + "apigame/common/svconst" + "apigame/common/svdto" +) + +func Init() { + + // create table + // 卡牌卡包 + for _, gameId := range svconst.GameListCardHolder { + svdto.InitTable(new(CardHolderData), gameId) + svdto.InitTable(new(CardHolderRecordOpen), gameId) + svdto.InitTable(new(CardHolderRecordRewardAlbum), gameId) + svdto.InitTable(new(CardHolderRecordRewardRound), gameId) + } + +} diff --git a/service/cardholder/logic.go b/service/cardholder/logic.go index 936d9b4..b42935e 100644 --- a/service/cardholder/logic.go +++ b/service/cardholder/logic.go @@ -1,9 +1,7 @@ package cardholder import ( - "apigame/common/svconst" "apigame/common/svdto" - "apigame/dto" "apigame/models" "apigame/service/constd" "apigame/util/util-lx/lxalilog" @@ -17,16 +15,16 @@ import ( ) // SaveData 存储数据 -func SaveData(gameId string, d *dto.CardHolderData) { +func SaveData(gameId string, d *CardHolderData) { d.UpdateTime = lxtime.NowUninx() d.Encode() - svdto.Save(svconst.DbCommon, d, gameId) + svdto.Save(d, gameId) } -func _LoadData(gameId string, uid int64) (d *dto.CardHolderData) { - d = dto.NewCardHolderData(uid) - has, err := svdto.First(svconst.DbCommon, d, gameId) +func _LoadData(gameId string, uid int64) (d *CardHolderData) { + d = NewCardHolderData(uid) + has, err := svdto.First(d, gameId) if err != nil { return } @@ -34,13 +32,13 @@ func _LoadData(gameId string, uid int64) (d *dto.CardHolderData) { d.Decode() } else { d.Init(uid) - svdto.Insert(svconst.DbCommon, d, gameId) + svdto.Insert(d, gameId) } return } // LoadData 获取数据 外部接口 -func LoadData(gameId string, uid int64, config *CardActivityConfig) (d *dto.CardHolderData) { +func LoadData(gameId string, uid int64, config *CardActivityConfig) (d *CardHolderData) { configId := config.Id d = _LoadData(gameId, uid) // 如果当前有上线活动(活动ID不为0),且活动ID和玩家数据不同,说明活动已切换 需更新 @@ -51,7 +49,7 @@ func LoadData(gameId string, uid int64, config *CardActivityConfig) (d *dto.Card starCount := d.Details.StarCount d.ActivityId = configId - d.Details = dto.NewCardHolderDataDetails() + d.Details = NewCardHolderDataDetails() // 使用剩余的星星数来自动兑换卡包 d.Details.LastStarCount = starCount @@ -78,7 +76,7 @@ func CheckStatus(conf *CardActivityConfig) string { } // CheckGameData 检查游戏数据 轮次等 -func CheckGameData(d *dto.CardHolderData, conf *CardActivityConfig) string { +func CheckGameData(d *CardHolderData, conf *CardActivityConfig) string { if d.Details.Round > conf.Raw.Round { return constd.RECODE_MERGE_CARDHOLDER_ROUNDFINISH_ERROR } @@ -121,7 +119,7 @@ func GetListFromArray(array []string, scale, count int) []string { } // GetNewCard 按顺序查找数目最少的一张卡抽取 -func GetNewCard(gameData *dto.CardHolderData, conf *CardActivityConfig) int { +func GetNewCard(gameData *CardHolderData, conf *CardActivityConfig) int { if len(conf.CardConfig) < 1 { return 0 } @@ -138,7 +136,7 @@ func GetNewCard(gameData *dto.CardHolderData, conf *CardActivityConfig) int { } // CheckAlbumFinish 判断卡组是否已集齐 -func CheckAlbumFinish(albumId int, gameData *dto.CardHolderData, config *CardActivityConfig) bool { +func CheckAlbumFinish(albumId int, gameData *CardHolderData, config *CardActivityConfig) bool { for _, conf := range config.CardConfig { if conf.SetId == albumId { count := gameData.Details.Cards[conf.Id] @@ -151,7 +149,7 @@ func CheckAlbumFinish(albumId int, gameData *dto.CardHolderData, config *CardAct } // CheckRoundFinish 判断轮次是否已集齐(所有卡组集齐) -func CheckRoundFinish(gameData *dto.CardHolderData, config *CardActivityConfig) bool { +func CheckRoundFinish(gameData *CardHolderData, config *CardActivityConfig) bool { for _, conf := range config.AlbumConfig { count := gameData.Details.Album[conf.SetId] if count < 1 { @@ -162,14 +160,14 @@ func CheckRoundFinish(gameData *dto.CardHolderData, config *CardActivityConfig) } // HandleNextRound 处理轮次完成 星级序列刻度 卡牌序列刻度 -func HandleNextRound(gameData *dto.CardHolderData) { +func HandleNextRound(gameData *CardHolderData) { gameData.Details.Round += 1 gameData.Details.Cards = make(map[int]int) gameData.Details.Album = make(map[int]int) } // GetInfo 玩家卡牌活动信息 -func GetInfo(gameData *dto.CardHolderData, conf *CardActivityConfig) models.CardHolderInfo { +func GetInfo(gameData *CardHolderData, conf *CardActivityConfig) models.CardHolderInfo { info := models.CardHolderInfo{ Cards: make(map[int]int), Album: make(map[int]int), @@ -189,7 +187,7 @@ func GetInfo(gameData *dto.CardHolderData, conf *CardActivityConfig) models.Card // DoOpen 封装的抽卡逻辑 // openMode:开包类型0客户端驱动1星星商店购买2剩余星星兑换 func DoOpen(gameId string, - gameData *dto.CardHolderData, + gameData *CardHolderData, config *CardActivityConfig, confCardholder OpenCardholderConfig, sequenceId, cohort string, @@ -242,8 +240,8 @@ func DoOpen(gameId string, } // 记录开卡包日志 { - recordBase := dto.NewCardHolderRecordBase(gameData.Uid, sequenceId, cohort, config.Id, gameData.Details.Round) - svdto.SaveRecord(gameId, dto.NewCardHolderRecordOpen(recordBase, + recordBase := NewCardHolderRecordBase(gameData.Uid, sequenceId, cohort, config.Id, gameData.Details.Round) + svdto.SaveRecord(gameId, NewCardHolderRecordOpen(recordBase, openMode, utstring.StringToInt(confCardholder.Id), utjson.JsonString(newCards))) } @@ -252,7 +250,7 @@ func DoOpen(gameId string, // DoOpenCheckAward 封装的新卡判断是否出发卡组和轮次奖励的逻辑 func DoOpenCheckAward(gameId string, - gameData *dto.CardHolderData, + gameData *CardHolderData, config *CardActivityConfig, sequenceId, cohort string, newCards []int, @@ -290,8 +288,8 @@ func DoOpenCheckAward(gameId string, awardAlbum[albumId] = award { // 记录日志 - recordBase := dto.NewCardHolderRecordBase(gameData.Uid, sequenceId, cohort, config.Id, gameData.Details.Round) - svdto.SaveRecord(gameId, dto.NewCardHolderRecordRewardAlbum(recordBase, + recordBase := NewCardHolderRecordBase(gameData.Uid, sequenceId, cohort, config.Id, gameData.Details.Round) + svdto.SaveRecord(gameId, NewCardHolderRecordRewardAlbum(recordBase, albumId, award)) } } @@ -301,8 +299,8 @@ func DoOpenCheckAward(gameId string, awardRound = config.Awards[utstring.IntToString(gameData.Details.Round)] // 记录日志 - recordBase := dto.NewCardHolderRecordBase(gameData.Uid, sequenceId, cohort, config.Id, gameData.Details.Round) - svdto.SaveRecord(gameId, dto.NewCardHolderRecordRewardRound(recordBase, + recordBase := NewCardHolderRecordBase(gameData.Uid, sequenceId, cohort, config.Id, gameData.Details.Round) + svdto.SaveRecord(gameId, NewCardHolderRecordRewardRound(recordBase, awardRound)) // 处理轮次完成 @@ -314,7 +312,7 @@ func DoOpenCheckAward(gameId string, } // CalculateStarCount 计算星星点数 -func CalculateStarCount(gameData *dto.CardHolderData, config *CardActivityConfig) { +func CalculateStarCount(gameData *CardHolderData, config *CardActivityConfig) { starCount := 0 for cardId, cardCount := range gameData.Details.Cards { if cardCount <= 1 { @@ -336,7 +334,7 @@ func CalculateStarCount(gameData *dto.CardHolderData, config *CardActivityConfig } // GetStarCardList 按照规则扣除星星数找到需要扣除的卡牌列表 -func GetStarCardList(gameData *dto.CardHolderData, config *CardActivityConfig, needStar int) (enough bool, cardList map[int]int) { +func GetStarCardList(gameData *CardHolderData, config *CardActivityConfig, needStar int) (enough bool, cardList map[int]int) { enough = false cardList = make(map[int]int) starAmount := 0 @@ -405,7 +403,7 @@ func GetStarCardList(gameData *dto.CardHolderData, config *CardActivityConfig, n } // NextActivityAutoExchange 活动切换时自动兑换卡包 -func NextActivityAutoExchange(gameId string, gameData *dto.CardHolderData, config *CardActivityConfig) { +func NextActivityAutoExchange(gameId string, gameData *CardHolderData, config *CardActivityConfig) { starCount := gameData.Details.LastStarCount // 把星星的配置按照需要的星星数降序排列 list := lo.Values[int, StarShopConfig](config.StarShopConfig) diff --git a/service/constd/games.go b/service/constd/games.go deleted file mode 100644 index 6b178ce..0000000 --- a/service/constd/games.go +++ /dev/null @@ -1,5 +0,0 @@ -package constd - -var ( - GameListCardHolder = []string{"10149"} -) diff --git a/util/zredis/kv.go b/util/zredis/kv.go index 43c54a1..10c0a2c 100644 --- a/util/zredis/kv.go +++ b/util/zredis/kv.go @@ -24,6 +24,11 @@ func Set(conn redis.Conn, key, value string) (err error) { } func Get(conn redis.Conn, key string) (value string, err error) { - value, err = redis.String(conn.Do("Get", "name")) + value, err = redis.String(conn.Do("Get", key)) + return +} + +func SetEx(conn redis.Conn, key, value string, exTime int) (err error) { + _, err = conn.Do("Set", key, value, "EX", exTime) return } -- libgit2 0.21.0