70 lines
1.6 KiB
Go
70 lines
1.6 KiB
Go
package rank
|
||
|
||
import (
|
||
"math"
|
||
"time"
|
||
|
||
"mongo.games.com/goserver/core/logger"
|
||
"mongo.games.com/goserver/core/module"
|
||
|
||
"mongo.games.com/game/model"
|
||
"mongo.games.com/game/ranksrv/com"
|
||
)
|
||
|
||
var WinCoinMgrInstance = com.NewListMgr[*model.WinCoinInfo](
|
||
func() int64 {
|
||
return math.MaxInt32
|
||
},
|
||
func(platform string, index int32) ([]*model.WinCoinInfo, error) {
|
||
// 每天21点刷新,获取前一天的排行
|
||
startTs, endTs := StartEndTs()
|
||
logger.Logger.Tracef("load wincoin platform:%s startTs:%v endTs:%v", platform, startTs, endTs)
|
||
ret, err := model.FindWinCoinListTienlen(&model.FindWinCoinListArgs{
|
||
Platform: platform,
|
||
StartTs: startTs,
|
||
EndTs: endTs,
|
||
})
|
||
return ret.List, err
|
||
})
|
||
|
||
func StartEndTs() (startTs int64, endTs int64) {
|
||
now := time.Now()
|
||
year, month, day := now.Date()
|
||
lastTs := time.Date(year, month, day, model.GameParamData.WinCoinUpdateTime, 0, 0, 0, now.Location())
|
||
if now.Before(lastTs) {
|
||
lastTs = lastTs.AddDate(0, 0, -1)
|
||
}
|
||
endTs = lastTs.Unix()
|
||
return endTs - 24*int64(time.Hour.Seconds()), endTs
|
||
}
|
||
|
||
type WinCoinMgr struct {
|
||
}
|
||
|
||
func (w *WinCoinMgr) ModuleName() string {
|
||
return "WinCoinMgr"
|
||
}
|
||
|
||
func (w *WinCoinMgr) Init() {
|
||
for k := range com.PlatformConfigSingleton.Platforms {
|
||
WinCoinMgrInstance.UpdateCache(k, 0)
|
||
}
|
||
}
|
||
|
||
func (w *WinCoinMgr) Update() {
|
||
h := time.Now().Hour()
|
||
if h == model.GameParamData.WinCoinUpdateTime {
|
||
for k := range com.PlatformConfigSingleton.Platforms {
|
||
WinCoinMgrInstance.UpdateCache(k, 0)
|
||
}
|
||
}
|
||
}
|
||
|
||
func (w *WinCoinMgr) Shutdown() {
|
||
module.UnregisteModule(w)
|
||
}
|
||
|
||
func init() {
|
||
module.RegisteModule(new(WinCoinMgr), time.Hour, 0)
|
||
}
|