diff --git a/api-util/umysql/index.go b/api-util/umysql/index.go new file mode 100644 index 0000000..82b022c --- /dev/null +++ b/api-util/umysql/index.go @@ -0,0 +1,36 @@ +package umysql + +import ( + "github.com/astaxie/beego/orm" + "strings" +) + +// FindSql 查询数据 根据sql +func FindSql(dbName string, sql string, result any) (err error) { + orm := orm.NewOrm() + orm.Using(dbName) + + if _, err = orm.Raw(sql).QueryRows(result); err != nil { + if strings.Contains(err.Error(), "doesn't exist") { + err = nil + return + } + return + } + return +} + +// FindOneSql 查询一条数据 根据sql +func FindOneSql(dbName string, sql string, result any) (err error) { + orm := orm.NewOrm() + orm.Using(dbName) + + if err = orm.Raw(sql).QueryRow(result); err != nil { + if strings.Contains(err.Error(), "doesn't exist") { + err = nil + return + } + return + } + return +} diff --git a/controllers/ht-cardholder.go b/controllers/ht-cardholder.go index e9a1ded..ebd77f9 100644 --- a/controllers/ht-cardholder.go +++ b/controllers/ht-cardholder.go @@ -2,6 +2,7 @@ package controllers import ( "apigame/dto" + ht_cardholder "apigame/service/ht-cardholder" ) // HtCardHolderController 绑定控制器 @@ -16,6 +17,9 @@ func (c *HtCardHolderController) Info() { return } + // 尝试更新配置 + ht_cardholder.TryUpdateConfigs() + rsp := dto.RspHtCardHolderInfo{ HtCardHolderInfo: dto.HtCardHolderInfo{ BagList: make(map[int]int), diff --git a/main.go b/main.go index 79bcb1f..4efabab 100644 --- a/main.go +++ b/main.go @@ -1,6 +1,7 @@ package main import ( + "apigame/models" _ "apigame/routers" ht_draw "apigame/service/ht-cardholder" "fmt" @@ -10,6 +11,7 @@ import ( func main() { fmt.Println("apigame") + //fmt.Println("😊🐸😺") //解决跨域问题 beego.InsertFilter("*", beego.BeforeRouter, cors.Allow(&cors.Options{ @@ -26,6 +28,8 @@ func main() { beego.BConfig.WebConfig.StaticDir["/swagger"] = "swagger" } + _ = models.Inits() + // 初始化配置 ht_draw.Init() diff --git a/models/inits.go b/models/inits.go new file mode 100644 index 0000000..2ffa7fb --- /dev/null +++ b/models/inits.go @@ -0,0 +1,107 @@ +package models + +import ( + "apigame/lx-util/lxalilog" + "apigame/lx-util/lxbeego" + "apigame/lx-util/lxmysql" + "apigame/service/constd" + "fmt" + "github.com/astaxie/beego" + lalilog "github.com/lixu-any/go-tools/ali/log" +) + +func Inits() (err error) { + + appname := beego.AppConfig.String("appname") + + // 初始化日志文件 + logconfig, _ := beego.AppConfig.GetSection("log") + logconfig["filename"] = logconfig["path"] + "api.log" + + if err = lxbeego.Inits(logconfig); err != nil { + fmt.Println("lxbeelog.Inits Error::" + err.Error()) + } + + fmt.Println(appname + " beelog init success") + + ////初始化Redis + //redisconfig, _ := beego.AppConfig.GetSection("redis") + //var mredisconfig lxredis.MapRedisConfig + //err = mapstructure.Decode(redisconfig, &mredisconfig) + //if err != nil { + // fmt.Println(" mapstructure.Decode Error::" + err.Error()) + //} else { + // err = lxredis.InitRedis(mredisconfig) + // if err != nil { + // fmt.Println(" lxredis.InitRedis Error::" + err.Error()) + // return err + // } + //} + // + //fmt.Println(appname + " redis init success") + + //初始化MYSQL + var conns []lxmysql.MapMysqlConn + + //默认数据库 + conns = append(conns, lxmysql.MapMysqlConn{ + Name: constd.MYSQL_DEFAULT, + SqlCon: beego.AppConfig.String("mysql::mergecommon"), + }) + + conns = append(conns, lxmysql.MapMysqlConn{ + Name: constd.MYSQL_MERGECONFIG, + SqlCon: beego.AppConfig.String("mysql::" + constd.MYSQL_MERGECONFIG), + }) + + err = lxmysql.InitMysqls(conns, beego.AppConfig.String("redis::cachedb")) + if err != nil { + fmt.Println(" InitMysqls Error::" + err.Error()) + } + + for _, conn := range conns { + fmt.Println(appname + " dbs::" + conn.Name + " init success") + } + + //initAlilog(appname) + + //// 初始化数数打点 + //_ = thinkingdata.InitThinkData() + // + //_ = config.InitLxLimit() + + return + +} + +func initAlilog(appname string) { + + //初始化阿里云日志 + logm, _ := beego.AppConfig.GetSection("alilog") + lxalilog.InitAliLog(lxalilog.MapAlilogConfig{ + Endpoint: logm["endpoint"], + AccessKeyId: logm["accesskeyid"], + AccessKeySecret: logm["accesskeysecret"], + Project: logm["project"], + AppNaame: appname, + On: logm["on"], + Debug: logm["debug"], + TableError: "api_code_merge", + TableDebug: logm["tabledebug"], + Env: beego.AppConfig.String("env"), + }) + + lalilog.InitAliLog(lalilog.MapAlilogConfig{ + Endpoint: logm["endpoint"], + AccessKeyId: logm["accesskeyid"], + AccessKeySecret: logm["accesskeysecret"], + Project: logm["project"], + On: logm["on"], + Debug: logm["debug"], + TableError: logm["tableerror"], + TableDebug: logm["tabledebug"], + Env: beego.AppConfig.String("env"), + }) + + fmt.Println(appname + " alilog init success") +} diff --git a/service/constd/mysql.go b/service/constd/mysql.go new file mode 100644 index 0000000..451dc85 --- /dev/null +++ b/service/constd/mysql.go @@ -0,0 +1,39 @@ +package constd + +// mysql +// 创建时间:2023/4/3 15:28 +// 创建人:lixu + +const ( + MYSQL_DEFAULT = "default" + MYSQL_MERGECOMMON = "merge_common" + MYSQL_MERGECONFIG = "merge_config" + MYSQL_DBMODS = "mods" + MYSQL_DBAPI = "api" + MYSQL_DBGAME = "game" + MYSQL_DBMEMBER = "member" + MYSQL_DBYUEDAO = "yuedao" + MYSQL_DBMERGERANK = "merge_rank" + MYSQL_DEFAULT_QUERY_MAXCOUNT = 100 + + MYSQL_TABLE_EGIFT_GOOD = "s_egift_goods" //无限轮换礼包 商品购买记录 + MYSQL_TABLE_EGIFT_RECORD = "s_egift_record" //无限轮换礼包 领取记录 + MYSQL_TABLE_MEMBERSHIP = "s_membership" //会员信息 + MYSQL_TABLE_MEMBERSHIP_RECORD = "s_membership_record" //会员记录 + MYSQL_TABLE_MEMBERSHIP_DRAW_RECORD = "s_membership_draw_record" //会员领取记录 + + MYSQL_TABLE_NOVICEGIFT = "s_novicegift" //新用户礼包 + MYSQL_TABLE_NOVICEGIFT_RECORD = "s_novicegift_record" //新用户礼包记录 + MYSQL_TABLE_ACTIVITY_PASS_CONFIG = "s_activity_pass_" //通行证配置 + MYSQL_TABLE_ACTIVITY_PASS_RECORD = "s_activity_pass_record_" //通行证 记录 + MYSQL_TABLE_RECHARGE_RECORD = "s_recharge_record_" //累计充值记录 + MYSQL_TABLE_RECHARGE_CONFIG = "s_recharge_config_" //累计充值配置 + + MYSQL_TABLE_ACTIVITY_S_CARD_ACTIVITY = "s_card_activity_" // 开卡包活动配置 + + MYSQL_TABLE_DAYRANK_GROUP_CONFIG = "s_dayrank_group_config_" //每日排行榜分组配置 + MYSQL_TABLE_DAYRANK_GROUP_MEMBER = "s_dayrank_group_member_" //每日排行榜人员 + MYSQL_TABLE_DAYRANK_GROUP_DATA = "s_dayrank_group_data_" //每日排行榜数据 + MYSQL_TABLE_DAYRANK_GROUP_AWARDS_CONFIG = "s_dayrank_group_awards_config" //每日排行榜奖励配置 + MYSQL_TABLE_DAYRANK_GROUP_AWARDS_DATA = "s_dayrank_group_awards_data_" //每日排行榜奖励数据 +) diff --git a/service/ht-cardholder/config.go b/service/ht-cardholder/config.go index eadf05d..fab4c8e 100644 --- a/service/ht-cardholder/config.go +++ b/service/ht-cardholder/config.go @@ -1,5 +1,34 @@ package ht_cardholder +// CardActivityConfigs 卡牌活动配置 +type CardActivityConfigs struct { + CardActivityConfigs map[int64]CardActivityConfig // 活动配置列表 +} + +// CardActivityUpdateConfig 卡牌活动更新配置 +type CardActivityUpdateConfig struct { + Id int64 `json:"id"` // ID + UpdateTime int64 `json:"update_time"` // 修改时间戳 +} + +// CardActivityConfig 卡牌活动配置 +type CardActivityConfig struct { + Id int64 `json:"id"` // ID + OpenLevel int `json:"open_level"` // 开启等级 + PreviewTime int64 `json:"preview_time"` // 预告时间 + StartTime int64 `json:"start_time"` // 开始时间 + EndTime int64 `json:"end_time"` // 结束时间 + Round int `json:"round"` // 轮数 + Awards string `json:"awards"` // 奖励配置 + AlbumConfig string `json:"album_config"` // 卡组配置 + CardConfig string `json:"card_config"` // 卡牌配置 + CardHolderConfig string `json:"card_holder_config"` // 卡包开卡规则 + NormalCardStarSequence string `json:"normal_card_star_sequence"` // 卡片星级配置 + CardSequenceConfig string `json:"card_sequence_config"` // 卡片星级对应卡牌配置 + Ver string `json:"ver"` // 版本号 + UpdateTime int64 `json:"update_time"` // 修改时间戳 +} + // CardConfig 卡牌表 type CardConfig struct { Id int `json:"id"` // ID diff --git a/service/ht-cardholder/configs.go b/service/ht-cardholder/configs.go index 8d98793..519db96 100644 --- a/service/ht-cardholder/configs.go +++ b/service/ht-cardholder/configs.go @@ -1,11 +1,16 @@ package ht_cardholder import ( + "apigame/api-util/umysql" + "apigame/service/constd" "fmt" ) +var configTable = constd.MYSQL_TABLE_ACTIVITY_S_CARD_ACTIVITY + "10128" + var ( - ConfigVersion = "1" // 版本号 + Registry CardActivityConfigs // 卡牌活动配置 + CardConfigs = make(map[int]CardConfig) // 卡牌表 CardholderConfigs = make(map[int]CardholderConfig) // 卡包开卡规则表 NormalCardStarSequences = make([]NormalCardStarSequence, 0) // 非保底卡星级ID @@ -14,24 +19,79 @@ var ( // Init 初始化 func Init() { + + Registry = CardActivityConfigs{ + CardActivityConfigs: make(map[int64]CardActivityConfig), + } + + // todo 装填虚拟数据 + //UseSimulateConfigs() + TryUpdateConfigs() - DumpConfigs() + //DumpConfigs() } // TryUpdateConfigs 尝试更新配置表 func TryUpdateConfigs() { - // todo 装填虚拟数据 - UseSimulateConfigs() + LoadConfigs() +} + +// LoadConfigs 读取mysql配置 +func LoadConfigs() { + // 读取最后修改时间 + configsUpdate := make(map[int64]CardActivityUpdateConfig) + { + conf := make([]CardActivityUpdateConfig, 0) + sql := fmt.Sprintf("select id,update_time from %s", configTable) + err := umysql.FindSql(constd.MYSQL_MERGECONFIG, sql, &conf) + if err != nil { + // todo 记录错误日志 + return + } + for _, config := range conf { + configsUpdate[config.Id] = config + } + fmt.Println(configsUpdate) + } + // 如果条目不存在 从活动列表中删除 + for k, _ := range Registry.CardActivityConfigs { + _, ok := configsUpdate[k] + if !ok { + delete(Registry.CardActivityConfigs, k) + } + } + for k, confUpdate := range configsUpdate { + needUpdate := false + confOld, ok := Registry.CardActivityConfigs[k] + // 如果条目不存在 或者 修改时间不一致 需要更新 + if !ok { + needUpdate = true + } else { + if confOld.UpdateTime != confUpdate.UpdateTime { + needUpdate = true + } + } + // 更新数据 + if needUpdate { + fmt.Println("__________________尝试更新活动条目ID:", k) + confNew := CardActivityConfig{} + sql := fmt.Sprintf("select * from %s where id=%d limit 1", configTable, k) + err := umysql.FindOneSql(constd.MYSQL_MERGECONFIG, sql, &confNew) + if err != nil { + // todo 记录错误日志 + continue + } + fmt.Println("__________________更新活动条目ID:", confNew.Id) + Registry.CardActivityConfigs[confNew.Id] = confNew + } + } - // todo 读取mysql配置 } // UseSimulateConfigs 装填虚拟数据 func UseSimulateConfigs() { - ConfigVersion = "2" - // 卡牌表 i=卡组ID j=卡牌顺序 for i := 1; i <= 9; i++ { for j := 1; j <= 9; j++ { @@ -94,7 +154,6 @@ func UseSimulateConfigs() { func DumpConfigs() { - fmt.Println(ConfigVersion) fmt.Println(CardConfigs) fmt.Println(CardholderConfigs) fmt.Println(NormalCardStarSequences) -- libgit2 0.21.0