70 lines
2.7 KiB
Java
70 lines
2.7 KiB
Java
package com.muyu.system.controller;
|
|
|
|
import com.muyu.common.core.constant.CacheConstants;
|
|
import com.muyu.common.core.utils.StringUtils;
|
|
import com.muyu.common.core.web.controller.BaseController;
|
|
import com.muyu.common.core.domain.Result;
|
|
import com.muyu.common.core.web.page.TableDataInfo;
|
|
import com.muyu.common.log.annotation.Log;
|
|
import com.muyu.common.log.enums.BusinessType;
|
|
import com.muyu.common.redis.service.RedisService;
|
|
import com.muyu.common.security.annotation.RequiresPermissions;
|
|
import com.muyu.common.system.domain.LoginUser;
|
|
import com.muyu.system.domain.SysUserOnline;
|
|
import com.muyu.system.service.SysUserOnlineService;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.web.bind.annotation.*;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.Collection;
|
|
import java.util.Collections;
|
|
import java.util.List;
|
|
|
|
/**
|
|
* 在线用户监控
|
|
*
|
|
* @author muyu
|
|
*/
|
|
@RestController
|
|
@RequestMapping("/online")
|
|
public class SysUserOnlineController extends BaseController {
|
|
@Autowired
|
|
private SysUserOnlineService userOnlineService;
|
|
|
|
@Autowired
|
|
private RedisService redisService;
|
|
|
|
@RequiresPermissions("monitor:online:list")
|
|
@GetMapping("/list")
|
|
public Result<TableDataInfo<SysUserOnline>> list (String ipaddr, String userName) {
|
|
Collection<String> keys = redisService.keys(CacheConstants.LOGIN_TOKEN_KEY + "*");
|
|
List<SysUserOnline> userOnlineList = new ArrayList<SysUserOnline>();
|
|
for (String key : keys) {
|
|
LoginUser user = redisService.getCacheObject(key);
|
|
if (StringUtils.isNotEmpty(ipaddr) && StringUtils.isNotEmpty(userName)) {
|
|
userOnlineList.add(userOnlineService.selectOnlineByInfo(ipaddr, userName, user));
|
|
} else if (StringUtils.isNotEmpty(ipaddr)) {
|
|
userOnlineList.add(userOnlineService.selectOnlineByIpaddr(ipaddr, user));
|
|
} else if (StringUtils.isNotEmpty(userName)) {
|
|
userOnlineList.add(userOnlineService.selectOnlineByUserName(userName, user));
|
|
} else {
|
|
userOnlineList.add(userOnlineService.loginUserToUserOnline(user));
|
|
}
|
|
}
|
|
Collections.reverse(userOnlineList);
|
|
userOnlineList.removeAll(Collections.singleton(null));
|
|
return getDataTable(userOnlineList);
|
|
}
|
|
|
|
/**
|
|
* 强退用户
|
|
*/
|
|
@RequiresPermissions("monitor:online:forceLogout")
|
|
@Log(title = "在线用户", businessType = BusinessType.FORCE)
|
|
@DeleteMapping("/{tokenId}")
|
|
public Result forceLogout (@PathVariable("tokenId") String tokenId) {
|
|
redisService.deleteObject(CacheConstants.LOGIN_TOKEN_KEY + tokenId);
|
|
return success();
|
|
}
|
|
}
|