Search in sources :

Example 1 with SysUserOnlineVO

use of org.jeecg.modules.system.vo.SysUserOnlineVO in project jeecg-boot by jeecgboot.

the class SysUserOnlineController method list.

@RequestMapping(value = "/list", method = RequestMethod.GET)
public Result<Page<SysUserOnlineVO>> list(@RequestParam(name = "username", required = false) String username, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) {
    Collection<String> keys = redisTemplate.keys(CommonConstant.PREFIX_USER_TOKEN + "*");
    List<SysUserOnlineVO> onlineList = new ArrayList<SysUserOnlineVO>();
    for (String key : keys) {
        String token = (String) redisUtil.get(key);
        if (StringUtils.isNotEmpty(token)) {
            SysUserOnlineVO online = new SysUserOnlineVO();
            online.setToken(token);
            // TODO 改成一次性查询
            LoginUser loginUser = sysBaseAPI.getUserByName(JwtUtil.getUsername(token));
            if (loginUser != null) {
                // update-begin---author:wangshuai ---date:20220104  for:[JTC-382]在线用户查询无效------------
                // 验证用户名是否与传过来的用户名相同
                boolean isMatchUsername = true;
                // 判断用户名是否为空,并且当前循环的用户不包含传过来的用户名,那么就设成false
                if (oConvertUtils.isNotEmpty(username) && !loginUser.getUsername().contains(username)) {
                    isMatchUsername = false;
                }
                if (isMatchUsername) {
                    BeanUtils.copyProperties(loginUser, online);
                    onlineList.add(online);
                }
            // update-end---author:wangshuai ---date:20220104  for:[JTC-382]在线用户查询无效------------
            }
        }
    }
    Collections.reverse(onlineList);
    Page<SysUserOnlineVO> page = new Page<SysUserOnlineVO>(pageNo, pageSize);
    int count = onlineList.size();
    List<SysUserOnlineVO> pages = new ArrayList<>();
    // 计算当前页第一条数据的下标
    int currId = pageNo > 1 ? (pageNo - 1) * pageSize : 0;
    for (int i = 0; i < pageSize && i < count - currId; i++) {
        pages.add(onlineList.get(currId + i));
    }
    page.setSize(pageSize);
    page.setCurrent(pageNo);
    page.setTotal(count);
    // 计算分页总页数
    page.setPages(count % 10 == 0 ? count / 10 : count / 10 + 1);
    page.setRecords(pages);
    Result<Page<SysUserOnlineVO>> result = new Result<Page<SysUserOnlineVO>>();
    result.setSuccess(true);
    result.setResult(page);
    return result;
}
Also used : ArrayList(java.util.ArrayList) Page(com.baomidou.mybatisplus.extension.plugins.pagination.Page) SysUserOnlineVO(org.jeecg.modules.system.vo.SysUserOnlineVO) LoginUser(org.jeecg.common.system.vo.LoginUser) Result(org.jeecg.common.api.vo.Result)

Aggregations

Page (com.baomidou.mybatisplus.extension.plugins.pagination.Page)1 ArrayList (java.util.ArrayList)1 Result (org.jeecg.common.api.vo.Result)1 LoginUser (org.jeecg.common.system.vo.LoginUser)1 SysUserOnlineVO (org.jeecg.modules.system.vo.SysUserOnlineVO)1