functions.go 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. package task
  2. import (
  3. "gfast/app/model/admin/user_online"
  4. "gfast/boot"
  5. "github.com/goflyfox/gtoken/gtoken"
  6. "github.com/gogf/gf/encoding/gjson"
  7. "github.com/gogf/gf/frame/g"
  8. "github.com/gogf/gf/os/gcache"
  9. "github.com/gogf/gf/util/gconv"
  10. )
  11. func init() {
  12. var task1 Entity
  13. task1.FuncName = "test1"
  14. task1.Param = nil
  15. task1.Run = Test1
  16. Add(task1)
  17. var task2 Entity
  18. task2.FuncName = "test2"
  19. task2.Param = nil
  20. task2.Run = Test2
  21. Add(task2)
  22. var checkUserOnline Entity
  23. checkUserOnline.FuncName = "checkUserOnline"
  24. checkUserOnline.Param = nil
  25. checkUserOnline.Run = CheckUserOnline
  26. Add(checkUserOnline)
  27. }
  28. //无参测试
  29. func Test1() {
  30. println("无参测试")
  31. }
  32. //传参测试
  33. func Test2() {
  34. //获取参数
  35. task := GetByName("test2")
  36. if task == nil {
  37. return
  38. }
  39. for _, v := range task.Param {
  40. println(v)
  41. }
  42. }
  43. //检查在线用户
  44. func CheckUserOnline() {
  45. param := &user_online.ReqListSearch{
  46. PageNum: 1,
  47. PageSize: 50,
  48. }
  49. var total int
  50. for {
  51. var (
  52. list []*user_online.Entity
  53. err error
  54. )
  55. total, _, list, err = user_online.GetOnlineListPage(param, true)
  56. if err != nil {
  57. g.Log().Error(err)
  58. break
  59. }
  60. if list == nil {
  61. break
  62. }
  63. for _, entity := range list {
  64. onlineInfo := GetOnlineInfo(entity.Token)
  65. if onlineInfo == nil {
  66. user_online.Model.Delete("id", entity.Id)
  67. }
  68. }
  69. param.PageNum++
  70. if param.PageNum*param.PageSize >= total {
  71. break
  72. }
  73. }
  74. }
  75. //通过token获取登录用户数据
  76. func GetOnlineInfo(token string) g.Map {
  77. uuid, userKey := GetUuidUserKeyByToken(token)
  78. cacheKey := boot.AdminGfToken.CacheKey + userKey
  79. switch boot.AdminGfToken.CacheMode {
  80. case gtoken.CacheModeCache:
  81. userCacheValue, _ := gcache.Get(cacheKey)
  82. if userCacheValue == nil {
  83. return nil
  84. }
  85. return gconv.Map(userCacheValue)
  86. case gtoken.CacheModeRedis:
  87. var userCache g.Map
  88. userCacheJson, err := g.Redis().Do("GET", cacheKey)
  89. if err != nil {
  90. g.Log().Error("[GToken]cache get error", err)
  91. return nil
  92. }
  93. if userCacheJson == nil {
  94. return nil
  95. }
  96. err = gjson.DecodeTo(userCacheJson, &userCache)
  97. if err != nil {
  98. g.Log().Error("[GToken]cache get json error", err)
  99. return nil
  100. }
  101. if uuid != userCache["uuid"] {
  102. return nil
  103. }
  104. return userCache
  105. }
  106. return nil
  107. }
  108. //通过token获取uuid和userKey
  109. func GetUuidUserKeyByToken(token string) (uuid, userKey string) {
  110. decryptToken := boot.AdminGfToken.DecryptToken(token)
  111. if !decryptToken.Success() {
  112. return
  113. }
  114. userKey = decryptToken.GetString("userKey")
  115. uuid = decryptToken.GetString("uuid")
  116. return
  117. }