Commit d90ad8167b1f08a30f24f3101ca8272bb583fec3
1 parent
29088ea9
Exists in
master
and in
1 other branch
feat:从mysql读取配置原始数据
Showing
7 changed files
with
286 additions
and
8 deletions
Show diff stats
| @@ -0,0 +1,36 @@ | @@ -0,0 +1,36 @@ | ||
| 1 | +package umysql | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "github.com/astaxie/beego/orm" | ||
| 5 | + "strings" | ||
| 6 | +) | ||
| 7 | + | ||
| 8 | +// FindSql 查询数据 根据sql | ||
| 9 | +func FindSql(dbName string, sql string, result any) (err error) { | ||
| 10 | + orm := orm.NewOrm() | ||
| 11 | + orm.Using(dbName) | ||
| 12 | + | ||
| 13 | + if _, err = orm.Raw(sql).QueryRows(result); err != nil { | ||
| 14 | + if strings.Contains(err.Error(), "doesn't exist") { | ||
| 15 | + err = nil | ||
| 16 | + return | ||
| 17 | + } | ||
| 18 | + return | ||
| 19 | + } | ||
| 20 | + return | ||
| 21 | +} | ||
| 22 | + | ||
| 23 | +// FindOneSql 查询一条数据 根据sql | ||
| 24 | +func FindOneSql(dbName string, sql string, result any) (err error) { | ||
| 25 | + orm := orm.NewOrm() | ||
| 26 | + orm.Using(dbName) | ||
| 27 | + | ||
| 28 | + if err = orm.Raw(sql).QueryRow(result); err != nil { | ||
| 29 | + if strings.Contains(err.Error(), "doesn't exist") { | ||
| 30 | + err = nil | ||
| 31 | + return | ||
| 32 | + } | ||
| 33 | + return | ||
| 34 | + } | ||
| 35 | + return | ||
| 36 | +} |
controllers/ht-cardholder.go
| @@ -2,6 +2,7 @@ package controllers | @@ -2,6 +2,7 @@ package controllers | ||
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | "apigame/dto" | 4 | "apigame/dto" |
| 5 | + ht_cardholder "apigame/service/ht-cardholder" | ||
| 5 | ) | 6 | ) |
| 6 | 7 | ||
| 7 | // HtCardHolderController 绑定控制器 | 8 | // HtCardHolderController 绑定控制器 |
| @@ -16,6 +17,9 @@ func (c *HtCardHolderController) Info() { | @@ -16,6 +17,9 @@ func (c *HtCardHolderController) Info() { | ||
| 16 | return | 17 | return |
| 17 | } | 18 | } |
| 18 | 19 | ||
| 20 | + // 尝试更新配置 | ||
| 21 | + ht_cardholder.TryUpdateConfigs() | ||
| 22 | + | ||
| 19 | rsp := dto.RspHtCardHolderInfo{ | 23 | rsp := dto.RspHtCardHolderInfo{ |
| 20 | HtCardHolderInfo: dto.HtCardHolderInfo{ | 24 | HtCardHolderInfo: dto.HtCardHolderInfo{ |
| 21 | BagList: make(map[int]int), | 25 | BagList: make(map[int]int), |
main.go
| 1 | package main | 1 | package main |
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | + "apigame/models" | ||
| 4 | _ "apigame/routers" | 5 | _ "apigame/routers" |
| 5 | ht_draw "apigame/service/ht-cardholder" | 6 | ht_draw "apigame/service/ht-cardholder" |
| 6 | "fmt" | 7 | "fmt" |
| @@ -10,6 +11,7 @@ import ( | @@ -10,6 +11,7 @@ import ( | ||
| 10 | 11 | ||
| 11 | func main() { | 12 | func main() { |
| 12 | fmt.Println("apigame") | 13 | fmt.Println("apigame") |
| 14 | + //fmt.Println("😊🐸😺") | ||
| 13 | 15 | ||
| 14 | //解决跨域问题 | 16 | //解决跨域问题 |
| 15 | beego.InsertFilter("*", beego.BeforeRouter, cors.Allow(&cors.Options{ | 17 | beego.InsertFilter("*", beego.BeforeRouter, cors.Allow(&cors.Options{ |
| @@ -26,6 +28,8 @@ func main() { | @@ -26,6 +28,8 @@ func main() { | ||
| 26 | beego.BConfig.WebConfig.StaticDir["/swagger"] = "swagger" | 28 | beego.BConfig.WebConfig.StaticDir["/swagger"] = "swagger" |
| 27 | } | 29 | } |
| 28 | 30 | ||
| 31 | + _ = models.Inits() | ||
| 32 | + | ||
| 29 | // 初始化配置 | 33 | // 初始化配置 |
| 30 | ht_draw.Init() | 34 | ht_draw.Init() |
| 31 | 35 |
| @@ -0,0 +1,107 @@ | @@ -0,0 +1,107 @@ | ||
| 1 | +package models | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "apigame/lx-util/lxalilog" | ||
| 5 | + "apigame/lx-util/lxbeego" | ||
| 6 | + "apigame/lx-util/lxmysql" | ||
| 7 | + "apigame/service/constd" | ||
| 8 | + "fmt" | ||
| 9 | + "github.com/astaxie/beego" | ||
| 10 | + lalilog "github.com/lixu-any/go-tools/ali/log" | ||
| 11 | +) | ||
| 12 | + | ||
| 13 | +func Inits() (err error) { | ||
| 14 | + | ||
| 15 | + appname := beego.AppConfig.String("appname") | ||
| 16 | + | ||
| 17 | + // 初始化日志文件 | ||
| 18 | + logconfig, _ := beego.AppConfig.GetSection("log") | ||
| 19 | + logconfig["filename"] = logconfig["path"] + "api.log" | ||
| 20 | + | ||
| 21 | + if err = lxbeego.Inits(logconfig); err != nil { | ||
| 22 | + fmt.Println("lxbeelog.Inits Error::" + err.Error()) | ||
| 23 | + } | ||
| 24 | + | ||
| 25 | + fmt.Println(appname + " beelog init success") | ||
| 26 | + | ||
| 27 | + ////初始化Redis | ||
| 28 | + //redisconfig, _ := beego.AppConfig.GetSection("redis") | ||
| 29 | + //var mredisconfig lxredis.MapRedisConfig | ||
| 30 | + //err = mapstructure.Decode(redisconfig, &mredisconfig) | ||
| 31 | + //if err != nil { | ||
| 32 | + // fmt.Println(" mapstructure.Decode Error::" + err.Error()) | ||
| 33 | + //} else { | ||
| 34 | + // err = lxredis.InitRedis(mredisconfig) | ||
| 35 | + // if err != nil { | ||
| 36 | + // fmt.Println(" lxredis.InitRedis Error::" + err.Error()) | ||
| 37 | + // return err | ||
| 38 | + // } | ||
| 39 | + //} | ||
| 40 | + // | ||
| 41 | + //fmt.Println(appname + " redis init success") | ||
| 42 | + | ||
| 43 | + //初始化MYSQL | ||
| 44 | + var conns []lxmysql.MapMysqlConn | ||
| 45 | + | ||
| 46 | + //默认数据库 | ||
| 47 | + conns = append(conns, lxmysql.MapMysqlConn{ | ||
| 48 | + Name: constd.MYSQL_DEFAULT, | ||
| 49 | + SqlCon: beego.AppConfig.String("mysql::mergecommon"), | ||
| 50 | + }) | ||
| 51 | + | ||
| 52 | + conns = append(conns, lxmysql.MapMysqlConn{ | ||
| 53 | + Name: constd.MYSQL_MERGECONFIG, | ||
| 54 | + SqlCon: beego.AppConfig.String("mysql::" + constd.MYSQL_MERGECONFIG), | ||
| 55 | + }) | ||
| 56 | + | ||
| 57 | + err = lxmysql.InitMysqls(conns, beego.AppConfig.String("redis::cachedb")) | ||
| 58 | + if err != nil { | ||
| 59 | + fmt.Println(" InitMysqls Error::" + err.Error()) | ||
| 60 | + } | ||
| 61 | + | ||
| 62 | + for _, conn := range conns { | ||
| 63 | + fmt.Println(appname + " dbs::" + conn.Name + " init success") | ||
| 64 | + } | ||
| 65 | + | ||
| 66 | + //initAlilog(appname) | ||
| 67 | + | ||
| 68 | + //// 初始化数数打点 | ||
| 69 | + //_ = thinkingdata.InitThinkData() | ||
| 70 | + // | ||
| 71 | + //_ = config.InitLxLimit() | ||
| 72 | + | ||
| 73 | + return | ||
| 74 | + | ||
| 75 | +} | ||
| 76 | + | ||
| 77 | +func initAlilog(appname string) { | ||
| 78 | + | ||
| 79 | + //初始化阿里云日志 | ||
| 80 | + logm, _ := beego.AppConfig.GetSection("alilog") | ||
| 81 | + lxalilog.InitAliLog(lxalilog.MapAlilogConfig{ | ||
| 82 | + Endpoint: logm["endpoint"], | ||
| 83 | + AccessKeyId: logm["accesskeyid"], | ||
| 84 | + AccessKeySecret: logm["accesskeysecret"], | ||
| 85 | + Project: logm["project"], | ||
| 86 | + AppNaame: appname, | ||
| 87 | + On: logm["on"], | ||
| 88 | + Debug: logm["debug"], | ||
| 89 | + TableError: "api_code_merge", | ||
| 90 | + TableDebug: logm["tabledebug"], | ||
| 91 | + Env: beego.AppConfig.String("env"), | ||
| 92 | + }) | ||
| 93 | + | ||
| 94 | + lalilog.InitAliLog(lalilog.MapAlilogConfig{ | ||
| 95 | + Endpoint: logm["endpoint"], | ||
| 96 | + AccessKeyId: logm["accesskeyid"], | ||
| 97 | + AccessKeySecret: logm["accesskeysecret"], | ||
| 98 | + Project: logm["project"], | ||
| 99 | + On: logm["on"], | ||
| 100 | + Debug: logm["debug"], | ||
| 101 | + TableError: logm["tableerror"], | ||
| 102 | + TableDebug: logm["tabledebug"], | ||
| 103 | + Env: beego.AppConfig.String("env"), | ||
| 104 | + }) | ||
| 105 | + | ||
| 106 | + fmt.Println(appname + " alilog init success") | ||
| 107 | +} |
| @@ -0,0 +1,39 @@ | @@ -0,0 +1,39 @@ | ||
| 1 | +package constd | ||
| 2 | + | ||
| 3 | +// mysql | ||
| 4 | +// 创建时间:2023/4/3 15:28 | ||
| 5 | +// 创建人:lixu | ||
| 6 | + | ||
| 7 | +const ( | ||
| 8 | + MYSQL_DEFAULT = "default" | ||
| 9 | + MYSQL_MERGECOMMON = "merge_common" | ||
| 10 | + MYSQL_MERGECONFIG = "merge_config" | ||
| 11 | + MYSQL_DBMODS = "mods" | ||
| 12 | + MYSQL_DBAPI = "api" | ||
| 13 | + MYSQL_DBGAME = "game" | ||
| 14 | + MYSQL_DBMEMBER = "member" | ||
| 15 | + MYSQL_DBYUEDAO = "yuedao" | ||
| 16 | + MYSQL_DBMERGERANK = "merge_rank" | ||
| 17 | + MYSQL_DEFAULT_QUERY_MAXCOUNT = 100 | ||
| 18 | + | ||
| 19 | + MYSQL_TABLE_EGIFT_GOOD = "s_egift_goods" //无限轮换礼包 商品购买记录 | ||
| 20 | + MYSQL_TABLE_EGIFT_RECORD = "s_egift_record" //无限轮换礼包 领取记录 | ||
| 21 | + MYSQL_TABLE_MEMBERSHIP = "s_membership" //会员信息 | ||
| 22 | + MYSQL_TABLE_MEMBERSHIP_RECORD = "s_membership_record" //会员记录 | ||
| 23 | + MYSQL_TABLE_MEMBERSHIP_DRAW_RECORD = "s_membership_draw_record" //会员领取记录 | ||
| 24 | + | ||
| 25 | + MYSQL_TABLE_NOVICEGIFT = "s_novicegift" //新用户礼包 | ||
| 26 | + MYSQL_TABLE_NOVICEGIFT_RECORD = "s_novicegift_record" //新用户礼包记录 | ||
| 27 | + MYSQL_TABLE_ACTIVITY_PASS_CONFIG = "s_activity_pass_" //通行证配置 | ||
| 28 | + MYSQL_TABLE_ACTIVITY_PASS_RECORD = "s_activity_pass_record_" //通行证 记录 | ||
| 29 | + MYSQL_TABLE_RECHARGE_RECORD = "s_recharge_record_" //累计充值记录 | ||
| 30 | + MYSQL_TABLE_RECHARGE_CONFIG = "s_recharge_config_" //累计充值配置 | ||
| 31 | + | ||
| 32 | + MYSQL_TABLE_ACTIVITY_S_CARD_ACTIVITY = "s_card_activity_" // 开卡包活动配置 | ||
| 33 | + | ||
| 34 | + MYSQL_TABLE_DAYRANK_GROUP_CONFIG = "s_dayrank_group_config_" //每日排行榜分组配置 | ||
| 35 | + MYSQL_TABLE_DAYRANK_GROUP_MEMBER = "s_dayrank_group_member_" //每日排行榜人员 | ||
| 36 | + MYSQL_TABLE_DAYRANK_GROUP_DATA = "s_dayrank_group_data_" //每日排行榜数据 | ||
| 37 | + MYSQL_TABLE_DAYRANK_GROUP_AWARDS_CONFIG = "s_dayrank_group_awards_config" //每日排行榜奖励配置 | ||
| 38 | + MYSQL_TABLE_DAYRANK_GROUP_AWARDS_DATA = "s_dayrank_group_awards_data_" //每日排行榜奖励数据 | ||
| 39 | +) |
service/ht-cardholder/config.go
| 1 | package ht_cardholder | 1 | package ht_cardholder |
| 2 | 2 | ||
| 3 | +// CardActivityConfigs 卡牌活动配置 | ||
| 4 | +type CardActivityConfigs struct { | ||
| 5 | + CardActivityConfigs map[int64]CardActivityConfig // 活动配置列表 | ||
| 6 | +} | ||
| 7 | + | ||
| 8 | +// CardActivityUpdateConfig 卡牌活动更新配置 | ||
| 9 | +type CardActivityUpdateConfig struct { | ||
| 10 | + Id int64 `json:"id"` // ID | ||
| 11 | + UpdateTime int64 `json:"update_time"` // 修改时间戳 | ||
| 12 | +} | ||
| 13 | + | ||
| 14 | +// CardActivityConfig 卡牌活动配置 | ||
| 15 | +type CardActivityConfig struct { | ||
| 16 | + Id int64 `json:"id"` // ID | ||
| 17 | + OpenLevel int `json:"open_level"` // 开启等级 | ||
| 18 | + PreviewTime int64 `json:"preview_time"` // 预告时间 | ||
| 19 | + StartTime int64 `json:"start_time"` // 开始时间 | ||
| 20 | + EndTime int64 `json:"end_time"` // 结束时间 | ||
| 21 | + Round int `json:"round"` // 轮数 | ||
| 22 | + Awards string `json:"awards"` // 奖励配置 | ||
| 23 | + AlbumConfig string `json:"album_config"` // 卡组配置 | ||
| 24 | + CardConfig string `json:"card_config"` // 卡牌配置 | ||
| 25 | + CardHolderConfig string `json:"card_holder_config"` // 卡包开卡规则 | ||
| 26 | + NormalCardStarSequence string `json:"normal_card_star_sequence"` // 卡片星级配置 | ||
| 27 | + CardSequenceConfig string `json:"card_sequence_config"` // 卡片星级对应卡牌配置 | ||
| 28 | + Ver string `json:"ver"` // 版本号 | ||
| 29 | + UpdateTime int64 `json:"update_time"` // 修改时间戳 | ||
| 30 | +} | ||
| 31 | + | ||
| 3 | // CardConfig 卡牌表 | 32 | // CardConfig 卡牌表 |
| 4 | type CardConfig struct { | 33 | type CardConfig struct { |
| 5 | Id int `json:"id"` // ID | 34 | Id int `json:"id"` // ID |
service/ht-cardholder/configs.go
| 1 | package ht_cardholder | 1 | package ht_cardholder |
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | + "apigame/api-util/umysql" | ||
| 5 | + "apigame/service/constd" | ||
| 4 | "fmt" | 6 | "fmt" |
| 5 | ) | 7 | ) |
| 6 | 8 | ||
| 9 | +var configTable = constd.MYSQL_TABLE_ACTIVITY_S_CARD_ACTIVITY + "10128" | ||
| 10 | + | ||
| 7 | var ( | 11 | var ( |
| 8 | - ConfigVersion = "1" // 版本号 | 12 | + Registry CardActivityConfigs // 卡牌活动配置 |
| 13 | + | ||
| 9 | CardConfigs = make(map[int]CardConfig) // 卡牌表 | 14 | CardConfigs = make(map[int]CardConfig) // 卡牌表 |
| 10 | CardholderConfigs = make(map[int]CardholderConfig) // 卡包开卡规则表 | 15 | CardholderConfigs = make(map[int]CardholderConfig) // 卡包开卡规则表 |
| 11 | NormalCardStarSequences = make([]NormalCardStarSequence, 0) // 非保底卡星级ID | 16 | NormalCardStarSequences = make([]NormalCardStarSequence, 0) // 非保底卡星级ID |
| @@ -14,24 +19,79 @@ var ( | @@ -14,24 +19,79 @@ var ( | ||
| 14 | 19 | ||
| 15 | // Init 初始化 | 20 | // Init 初始化 |
| 16 | func Init() { | 21 | func Init() { |
| 22 | + | ||
| 23 | + Registry = CardActivityConfigs{ | ||
| 24 | + CardActivityConfigs: make(map[int64]CardActivityConfig), | ||
| 25 | + } | ||
| 26 | + | ||
| 27 | + // todo 装填虚拟数据 | ||
| 28 | + //UseSimulateConfigs() | ||
| 29 | + | ||
| 17 | TryUpdateConfigs() | 30 | TryUpdateConfigs() |
| 18 | 31 | ||
| 19 | - DumpConfigs() | 32 | + //DumpConfigs() |
| 20 | } | 33 | } |
| 21 | 34 | ||
| 22 | // TryUpdateConfigs 尝试更新配置表 | 35 | // TryUpdateConfigs 尝试更新配置表 |
| 23 | func TryUpdateConfigs() { | 36 | func TryUpdateConfigs() { |
| 24 | - // todo 装填虚拟数据 | ||
| 25 | - UseSimulateConfigs() | 37 | + LoadConfigs() |
| 38 | +} | ||
| 39 | + | ||
| 40 | +// LoadConfigs 读取mysql配置 | ||
| 41 | +func LoadConfigs() { | ||
| 42 | + // 读取最后修改时间 | ||
| 43 | + configsUpdate := make(map[int64]CardActivityUpdateConfig) | ||
| 44 | + { | ||
| 45 | + conf := make([]CardActivityUpdateConfig, 0) | ||
| 46 | + sql := fmt.Sprintf("select id,update_time from %s", configTable) | ||
| 47 | + err := umysql.FindSql(constd.MYSQL_MERGECONFIG, sql, &conf) | ||
| 48 | + if err != nil { | ||
| 49 | + // todo 记录错误日志 | ||
| 50 | + return | ||
| 51 | + } | ||
| 52 | + for _, config := range conf { | ||
| 53 | + configsUpdate[config.Id] = config | ||
| 54 | + } | ||
| 55 | + fmt.Println(configsUpdate) | ||
| 56 | + } | ||
| 57 | + // 如果条目不存在 从活动列表中删除 | ||
| 58 | + for k, _ := range Registry.CardActivityConfigs { | ||
| 59 | + _, ok := configsUpdate[k] | ||
| 60 | + if !ok { | ||
| 61 | + delete(Registry.CardActivityConfigs, k) | ||
| 62 | + } | ||
| 63 | + } | ||
| 64 | + for k, confUpdate := range configsUpdate { | ||
| 65 | + needUpdate := false | ||
| 66 | + confOld, ok := Registry.CardActivityConfigs[k] | ||
| 67 | + // 如果条目不存在 或者 修改时间不一致 需要更新 | ||
| 68 | + if !ok { | ||
| 69 | + needUpdate = true | ||
| 70 | + } else { | ||
| 71 | + if confOld.UpdateTime != confUpdate.UpdateTime { | ||
| 72 | + needUpdate = true | ||
| 73 | + } | ||
| 74 | + } | ||
| 75 | + // 更新数据 | ||
| 76 | + if needUpdate { | ||
| 77 | + fmt.Println("__________________尝试更新活动条目ID:", k) | ||
| 78 | + confNew := CardActivityConfig{} | ||
| 79 | + sql := fmt.Sprintf("select * from %s where id=%d limit 1", configTable, k) | ||
| 80 | + err := umysql.FindOneSql(constd.MYSQL_MERGECONFIG, sql, &confNew) | ||
| 81 | + if err != nil { | ||
| 82 | + // todo 记录错误日志 | ||
| 83 | + continue | ||
| 84 | + } | ||
| 85 | + fmt.Println("__________________更新活动条目ID:", confNew.Id) | ||
| 86 | + Registry.CardActivityConfigs[confNew.Id] = confNew | ||
| 87 | + } | ||
| 88 | + } | ||
| 26 | 89 | ||
| 27 | - // todo 读取mysql配置 | ||
| 28 | } | 90 | } |
| 29 | 91 | ||
| 30 | // UseSimulateConfigs 装填虚拟数据 | 92 | // UseSimulateConfigs 装填虚拟数据 |
| 31 | func UseSimulateConfigs() { | 93 | func UseSimulateConfigs() { |
| 32 | 94 | ||
| 33 | - ConfigVersion = "2" | ||
| 34 | - | ||
| 35 | // 卡牌表 i=卡组ID j=卡牌顺序 | 95 | // 卡牌表 i=卡组ID j=卡牌顺序 |
| 36 | for i := 1; i <= 9; i++ { | 96 | for i := 1; i <= 9; i++ { |
| 37 | for j := 1; j <= 9; j++ { | 97 | for j := 1; j <= 9; j++ { |
| @@ -94,7 +154,6 @@ func UseSimulateConfigs() { | @@ -94,7 +154,6 @@ func UseSimulateConfigs() { | ||
| 94 | 154 | ||
| 95 | func DumpConfigs() { | 155 | func DumpConfigs() { |
| 96 | 156 | ||
| 97 | - fmt.Println(ConfigVersion) | ||
| 98 | fmt.Println(CardConfigs) | 157 | fmt.Println(CardConfigs) |
| 99 | fmt.Println(CardholderConfigs) | 158 | fmt.Println(CardholderConfigs) |
| 100 | fmt.Println(NormalCardStarSequences) | 159 | fmt.Println(NormalCardStarSequences) |