sys_user_online.go 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. /*
  2. * @desc:在线用户管理
  3. * @company:云南省奇讯科技有限公司
  4. * @Author: yixiaohu
  5. * @Date: 2021/3/18 14:45
  6. */
  7. package service
  8. import (
  9. comModel "gfast/app/common/model"
  10. "gfast/app/system/dao"
  11. "gfast/app/system/model"
  12. "github.com/gogf/gf/errors/gerror"
  13. "github.com/gogf/gf/frame/g"
  14. "github.com/gogf/gf/os/grpool"
  15. )
  16. type online struct {
  17. Pool *grpool.Pool
  18. }
  19. var (
  20. Online = &online{
  21. Pool: grpool.New(100),
  22. }
  23. )
  24. func (s *online) Invoke(data *model.SysUserOnline) {
  25. s.Pool.Add(func() {
  26. //写入数据
  27. SysUser.SaveOnline(data)
  28. })
  29. }
  30. // DeleteOnlineByToken 删除用户在线状态操作
  31. func (s *online) DeleteOnlineByToken(token string) {
  32. _, err := dao.SysUserOnline.Delete(dao.SysUserOnline.Columns.Token, token)
  33. if err != nil {
  34. g.Log().Error(err)
  35. }
  36. }
  37. // GetOnlineListPage 搜素在线用户列表
  38. func (s *online) GetOnlineListPage(req *model.SysUserOnlineSearchReq, hasToken ...bool) (total, page int, list []*model.SysUserOnline, err error) {
  39. if req.PageNum == 0 {
  40. req.PageNum = 1
  41. }
  42. if req.PageSize == 0 {
  43. req.PageSize = comModel.PageSize
  44. }
  45. model := dao.SysUserOnline.M
  46. if req.Ip != "" {
  47. model = model.Where("ip like ?", "%"+req.Ip+"%")
  48. }
  49. if req.Username != "" {
  50. model = model.Where("user_name like ?", "%"+req.Username+"%")
  51. }
  52. total, err = model.Count()
  53. if err != nil {
  54. g.Log().Error(err)
  55. err = gerror.New("获取总行数失败")
  56. return
  57. }
  58. if len(hasToken) == 0 || !hasToken[0] {
  59. model = model.FieldsEx("token")
  60. }
  61. err = model.Page(req.PageNum, req.PageSize).Order("create_time DESC").Scan(&list)
  62. if err != nil {
  63. g.Log().Error(err)
  64. err = gerror.New("获取数据失败")
  65. }
  66. return
  67. }
  68. func (s *online) ForceLogout(ids []int) (tokens []string, err error) {
  69. var onlineList []*model.SysUserOnline
  70. onlineList, err = s.GetInfosByIds(ids)
  71. if err != nil {
  72. return
  73. }
  74. for _, v := range onlineList {
  75. tokens = append(tokens, v.Token)
  76. }
  77. _, err = dao.SysUserOnline.Where(dao.SysUserOnline.Columns.Id+" in(?)", ids).Delete()
  78. return
  79. }
  80. func (s *online) GetInfosByIds(ids []int) (onlineList []*model.SysUserOnline, err error) {
  81. err = dao.SysUserOnline.Where(dao.SysUserOnline.Columns.Id+" in(?)", ids).Scan(&onlineList)
  82. return
  83. }