Files
gfast/app/task/functions.go
T
2020-11-19 23:20:52 +08:00

128 lines
2.5 KiB
Go

package task
import (
"gfast/app/model/admin/user_online"
"gfast/boot"
"github.com/goflyfox/gtoken/gtoken"
"github.com/gogf/gf/encoding/gjson"
"github.com/gogf/gf/frame/g"
"github.com/gogf/gf/os/gcache"
"github.com/gogf/gf/util/gconv"
)
func init() {
var task1 Entity
task1.FuncName = "test1"
task1.Param = nil
task1.Run = Test1
Add(task1)
var task2 Entity
task2.FuncName = "test2"
task2.Param = nil
task2.Run = Test2
Add(task2)
var checkUserOnline Entity
checkUserOnline.FuncName = "checkUserOnline"
checkUserOnline.Param = nil
checkUserOnline.Run = CheckUserOnline
Add(checkUserOnline)
}
//无参测试
func Test1() {
println("无参测试")
}
//传参测试
func Test2() {
//获取参数
task := GetByName("test2")
if task == nil {
return
}
for _, v := range task.Param {
println(v)
}
}
//检查在线用户
func CheckUserOnline() {
param := &user_online.ReqListSearch{
PageNum: 1,
PageSize: 50,
}
var total int
for {
var (
list []*user_online.Entity
err error
)
total, _, list, err = user_online.GetOnlineListPage(param, true)
if err != nil {
g.Log().Error(err)
break
}
if list == nil {
break
}
for _, entity := range list {
onlineInfo := GetOnlineInfo(entity.Token)
if onlineInfo == nil {
user_online.Model.Delete("id", entity.Id)
}
}
param.PageNum++
if param.PageNum*param.PageSize >= total {
break
}
}
}
//通过token获取登录用户数据
func GetOnlineInfo(token string) g.Map {
uuid, userKey := GetUuidUserKeyByToken(token)
cacheKey := boot.AdminGfToken.CacheKey + userKey
switch boot.AdminGfToken.CacheMode {
case gtoken.CacheModeCache:
userCacheValue, _ := gcache.Get(cacheKey)
if userCacheValue == nil {
return nil
}
return gconv.Map(userCacheValue)
case gtoken.CacheModeRedis:
var userCache g.Map
userCacheJson, err := g.Redis().Do("GET", cacheKey)
if err != nil {
g.Log().Error("[GToken]cache get error", err)
return nil
}
if userCacheJson == nil {
return nil
}
err = gjson.DecodeTo(userCacheJson, &userCache)
if err != nil {
g.Log().Error("[GToken]cache get json error", err)
return nil
}
if uuid != userCache["uuid"] {
return nil
}
return userCache
}
return nil
}
//通过token获取uuid和userKey
func GetUuidUserKeyByToken(token string) (uuid, userKey string) {
decryptToken := boot.AdminGfToken.DecryptToken(token)
if !decryptToken.Success() {
return
}
userKey = decryptToken.GetString("userKey")
uuid = decryptToken.GetString("uuid")
return
}