SysUserOnlineController.java 3.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. package com.ruoyi.system.controller;
  2. import java.util.ArrayList;
  3. import java.util.Collection;
  4. import java.util.Collections;
  5. import java.util.List;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import org.springframework.web.bind.annotation.DeleteMapping;
  8. import org.springframework.web.bind.annotation.GetMapping;
  9. import org.springframework.web.bind.annotation.PathVariable;
  10. import org.springframework.web.bind.annotation.RequestMapping;
  11. import org.springframework.web.bind.annotation.RestController;
  12. import com.ruoyi.common.core.constant.CacheConstants;
  13. import com.ruoyi.common.core.utils.StringUtils;
  14. import com.ruoyi.common.core.web.controller.BaseController;
  15. import com.ruoyi.common.core.web.domain.AjaxResult;
  16. import com.ruoyi.common.core.web.page.TableDataInfo;
  17. import com.ruoyi.common.log.annotation.Log;
  18. import com.ruoyi.common.log.enums.BusinessType;
  19. import com.ruoyi.common.redis.service.RedisService;
  20. import com.ruoyi.common.security.annotation.RequiresPermissions;
  21. import com.ruoyi.system.api.model.LoginUser;
  22. import com.ruoyi.system.domain.SysUserOnline;
  23. import com.ruoyi.system.service.ISysUserOnlineService;
  24. /**
  25. * 在线用户监控
  26. *
  27. * @author ruoyi
  28. */
  29. @RestController
  30. @RequestMapping("/online")
  31. public class SysUserOnlineController extends BaseController
  32. {
  33. @Autowired
  34. private ISysUserOnlineService userOnlineService;
  35. @Autowired
  36. private RedisService redisService;
  37. @RequiresPermissions("monitor:online:list")
  38. @GetMapping("/list")
  39. public TableDataInfo list(String ipaddr, String userName)
  40. {
  41. Collection<String> keys = redisService.keys(CacheConstants.LOGIN_TOKEN_KEY + "*");
  42. List<SysUserOnline> userOnlineList = new ArrayList<SysUserOnline>();
  43. for (String key : keys)
  44. {
  45. LoginUser user = redisService.getCacheObject(key);
  46. if (StringUtils.isNotEmpty(ipaddr) && StringUtils.isNotEmpty(userName))
  47. {
  48. if (StringUtils.equals(ipaddr, user.getIpaddr()) && StringUtils.equals(userName, user.getUsername()))
  49. {
  50. userOnlineList.add(userOnlineService.selectOnlineByInfo(ipaddr, userName, user));
  51. }
  52. }
  53. else if (StringUtils.isNotEmpty(ipaddr))
  54. {
  55. if (StringUtils.equals(ipaddr, user.getIpaddr()))
  56. {
  57. userOnlineList.add(userOnlineService.selectOnlineByIpaddr(ipaddr, user));
  58. }
  59. }
  60. else if (StringUtils.isNotEmpty(userName))
  61. {
  62. if (StringUtils.equals(userName, user.getUsername()))
  63. {
  64. userOnlineList.add(userOnlineService.selectOnlineByUserName(userName, user));
  65. }
  66. }
  67. else
  68. {
  69. userOnlineList.add(userOnlineService.loginUserToUserOnline(user));
  70. }
  71. }
  72. Collections.reverse(userOnlineList);
  73. userOnlineList.removeAll(Collections.singleton(null));
  74. return getDataTable(userOnlineList);
  75. }
  76. /**
  77. * 强退用户
  78. */
  79. @RequiresPermissions("monitor:online:forceLogout")
  80. @Log(title = "在线用户", businessType = BusinessType.FORCE)
  81. @DeleteMapping("/{tokenId}")
  82. public AjaxResult forceLogout(@PathVariable String tokenId)
  83. {
  84. redisService.deleteObject(CacheConstants.LOGIN_TOKEN_KEY + tokenId);
  85. return AjaxResult.success();
  86. }
  87. }