Commit d90ad8167b1f08a30f24f3101ca8272bb583fec3

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

feat:从mysql读取配置原始数据

api-util/umysql/index.go 0 → 100644
... ... @@ -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 2  
3 3 import (
4 4 "apigame/dto"
  5 + ht_cardholder "apigame/service/ht-cardholder"
5 6 )
6 7  
7 8 // HtCardHolderController 绑定控制器
... ... @@ -16,6 +17,9 @@ func (c *HtCardHolderController) Info() {
16 17 return
17 18 }
18 19  
  20 + // 尝试更新配置
  21 + ht_cardholder.TryUpdateConfigs()
  22 +
19 23 rsp := dto.RspHtCardHolderInfo{
20 24 HtCardHolderInfo: dto.HtCardHolderInfo{
21 25 BagList: make(map[int]int),
... ...
main.go
1 1 package main
2 2  
3 3 import (
  4 + "apigame/models"
4 5 _ "apigame/routers"
5 6 ht_draw "apigame/service/ht-cardholder"
6 7 "fmt"
... ... @@ -10,6 +11,7 @@ import (
10 11  
11 12 func main() {
12 13 fmt.Println("apigame")
  14 + //fmt.Println("😊🐸😺")
13 15  
14 16 //解决跨域问题
15 17 beego.InsertFilter("*", beego.BeforeRouter, cors.Allow(&cors.Options{
... ... @@ -26,6 +28,8 @@ func main() {
26 28 beego.BConfig.WebConfig.StaticDir["/swagger"] = "swagger"
27 29 }
28 30  
  31 + _ = models.Inits()
  32 +
29 33 // 初始化配置
30 34 ht_draw.Init()
31 35  
... ...
models/inits.go 0 → 100644
... ... @@ -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 +}
... ...
service/constd/mysql.go 0 → 100644
... ... @@ -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 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 32 // CardConfig 卡牌表
4 33 type CardConfig struct {
5 34 Id int `json:"id"` // ID
... ...
service/ht-cardholder/configs.go
1 1 package ht_cardholder
2 2  
3 3 import (
  4 + "apigame/api-util/umysql"
  5 + "apigame/service/constd"
4 6 "fmt"
5 7 )
6 8  
  9 +var configTable = constd.MYSQL_TABLE_ACTIVITY_S_CARD_ACTIVITY + "10128"
  10 +
7 11 var (
8   - ConfigVersion = "1" // 版本号
  12 + Registry CardActivityConfigs // 卡牌活动配置
  13 +
9 14 CardConfigs = make(map[int]CardConfig) // 卡牌表
10 15 CardholderConfigs = make(map[int]CardholderConfig) // 卡包开卡规则表
11 16 NormalCardStarSequences = make([]NormalCardStarSequence, 0) // 非保底卡星级ID
... ... @@ -14,24 +19,79 @@ var (
14 19  
15 20 // Init 初始化
16 21 func Init() {
  22 +
  23 + Registry = CardActivityConfigs{
  24 + CardActivityConfigs: make(map[int64]CardActivityConfig),
  25 + }
  26 +
  27 + // todo 装填虚拟数据
  28 + //UseSimulateConfigs()
  29 +
17 30 TryUpdateConfigs()
18 31  
19   - DumpConfigs()
  32 + //DumpConfigs()
20 33 }
21 34  
22 35 // TryUpdateConfigs 尝试更新配置表
23 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 92 // UseSimulateConfigs 装填虚拟数据
31 93 func UseSimulateConfigs() {
32 94  
33   - ConfigVersion = "2"
34   -
35 95 // 卡牌表 i=卡组ID j=卡牌顺序
36 96 for i := 1; i <= 9; i++ {
37 97 for j := 1; j <= 9; j++ {
... ... @@ -94,7 +154,6 @@ func UseSimulateConfigs() {
94 154  
95 155 func DumpConfigs() {
96 156  
97   - fmt.Println(ConfigVersion)
98 157 fmt.Println(CardConfigs)
99 158 fmt.Println(CardholderConfigs)
100 159 fmt.Println(NormalCardStarSequences)
... ...