123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- package model
- import (
- "time"
- "git.jiaxianghudong.com/go/logs"
- "git.jiaxianghudong.com/webs/pkg/dbx"
- "git.jiaxianghudong.com/webs/pkg/rds"
- "golang.org/x/sync/singleflight"
- )
- type ChangeLog struct {
- Id int `json:"id" sql:"id"`
- GameId int `json:"game_id" sql:"game_id"`
- Tab string `json:"tab" sql:"tab"`
- Name string `json:"name" sql:"name"`
- Version int `json:"version" sql:"version"`
- ChangeLogs []ChangeLogContent
- }
- type ChangeLogContent struct {
- Id int `json:"id" sql:"id"`
- LogId int `json:"log_id" sql:"log_id"`
- Content string `json:"content" sql:"content"`
- UpdateTime int64 `json:"update_time" sql:"update_time"`
- }
- var (
- changelogVersion = -1
- changelogSF singleflight.Group
- changelogs []ChangeLog
- )
- func getChangeLogs() []ChangeLog {
- v, err, _ := changelogSF.Do("changelog", func() (interface{}, error) {
- version, err := rds.Redis8.Get("game_rule:changelog:version").Int()
- if err != nil {
- logs.Errorf("Get game_rule:changelog:version failed,err:%v", err)
- }
- if version == changelogVersion {
- return changelogs, nil
- }
- var logs []ChangeLog
- if err = dbx.MySQLExt.Query2("SELECT id,game_id,tab,name,version FROM `ext`.`changelog`", &logs); err != nil {
- return nil, err
- }
- var logIdMap = map[int]*ChangeLog{}
- for i := range logs {
- logIdMap[logs[i].Id] = &logs[i]
- }
- var logContents []ChangeLogContent
- if err = dbx.MySQLExt.Query2("SELECT id,log_id,content,UNIX_TIMESTAMP(update_time)update_time FROM `ext`.`changelog_content` order BY update_time DESC,id desc ", &logContents); err != nil {
- return nil, err
- }
- for _, content := range logContents {
- logIdMap[content.LogId].ChangeLogs = append(logIdMap[content.LogId].ChangeLogs, content)
- }
- changelogs = logs
- changelogVersion = version
- return changelogs, nil
- })
- if err != nil {
- logs.Errorf("getChangeLogs failed,err:%v", err)
- }
- return v.([]ChangeLog)
- }
- func GetAllChangeLogVersionInfo() (infos []map[string]interface{}) {
- now := time.Now().Unix()
- for _, log := range getChangeLogs() {
- var updateTime int64
- for _, c := range log.ChangeLogs {
- if c.UpdateTime > now {
- continue
- }
- if updateTime < c.UpdateTime {
- updateTime = c.UpdateTime
- }
- }
- infos = append(infos, map[string]interface{}{
- "game_id": log.GameId,
- "tab": log.Tab,
- "version": log.Version,
- "update_time": updateTime,
- })
- }
- return
- }
- func GetChangeLog(gameId int, tab string) (contents []string) {
- now := time.Now().Unix()
- for _, log := range getChangeLogs() {
- if log.GameId != gameId || log.Tab != tab {
- continue
- }
- for _, content := range log.ChangeLogs {
- if content.UpdateTime > now {
- continue
- }
- contents = append(contents, content.Content)
- }
- }
- return
- }
|