Przeglądaj źródła

【修改】在线用户列表改为逻辑分页

就是那个锅 4 lat temu
rodzic
commit
8f8bc5beb7

+ 37 - 0
guns-base-support/guns-core/src/main/java/cn/stylefeng/guns/core/util/PageUtil.java

@ -0,0 +1,37 @@
package cn.stylefeng.guns.core.util;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.convert.Convert;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import java.util.List;
/**
 * 分页工具类针对hutool分页的扩展
 *
 * @author xuyuxiang
 * @date 2020/9/19 10:30
 **/
public class PageUtil<T> extends cn.hutool.core.util.PageUtil{
    /**
     * 逻辑分页
     *
     * @author xuyuxiang
     * @date 2020/9/19 10:36
     **/
    public static <T> List<T> page(Page<T> page, List<T> list) {
        setFirstPageNo(1);
        int start = getStart(Convert.toInt(page.getCurrent()), Convert.toInt(page.getSize()));
        int end = getEnd(Convert.toInt(page.getCurrent()), Convert.toInt(page.getSize()));
        if(start > list.size()) {
            return CollectionUtil.newArrayList();
        }else if(start > end) {
            return CollectionUtil.newArrayList();
        } else if(end > list.size()) {
            return list.subList(start, list.size());
        } else {
            return list.subList(start, end);
        }
    }
}

+ 2 - 3
guns-base-support/guns-system/src/main/java/cn/stylefeng/guns/sys/modular/monitor/service/SysOnlineUserService.java

@ -24,11 +24,10 @@ Guns采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意
 */
package cn.stylefeng.guns.sys.modular.monitor.service;
import cn.stylefeng.guns.core.pojo.page.PageResult;
import cn.stylefeng.guns.sys.modular.monitor.param.SysOnlineUserParam;
import cn.stylefeng.guns.sys.modular.monitor.result.SysOnlineUserResult;
import java.util.List;
/**
 * 系统在线用户service接口
 *
@ -45,7 +44,7 @@ public interface SysOnlineUserService {
     * @author xuyuxiang
     * @date 2020/4/7 17:09
     */
    List<SysOnlineUserResult> list(SysOnlineUserParam sysOnlineUserParam);
    PageResult<SysOnlineUserResult> list(SysOnlineUserParam sysOnlineUserParam);
    /**
     * 系统在线用户强退

+ 12 - 4
guns-base-support/guns-system/src/main/java/cn/stylefeng/guns/sys/modular/monitor/service/impl/SysOnlineUserServiceImpl.java

@ -30,12 +30,16 @@ import cn.hutool.core.util.ObjectUtil;
import cn.stylefeng.guns.core.context.constant.ConstantContextHolder;
import cn.stylefeng.guns.core.context.login.LoginContextHolder;
import cn.stylefeng.guns.core.exception.DemoException;
import cn.stylefeng.guns.core.factory.PageFactory;
import cn.stylefeng.guns.core.pojo.login.SysLoginUser;
import cn.stylefeng.guns.core.pojo.page.PageResult;
import cn.stylefeng.guns.core.util.PageUtil;
import cn.stylefeng.guns.sys.core.cache.UserCache;
import cn.stylefeng.guns.sys.core.log.LogManager;
import cn.stylefeng.guns.sys.modular.monitor.param.SysOnlineUserParam;
import cn.stylefeng.guns.sys.modular.monitor.result.SysOnlineUserResult;
import cn.stylefeng.guns.sys.modular.monitor.service.SysOnlineUserService;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@ -57,19 +61,23 @@ public class SysOnlineUserServiceImpl implements SysOnlineUserService {
    private UserCache userCache;
    @Override
    public List<SysOnlineUserResult> list(SysOnlineUserParam sysOnlineUserParam) {
        List<SysOnlineUserResult> resultList = CollectionUtil.newArrayList();
    public PageResult<SysOnlineUserResult> list(SysOnlineUserParam sysOnlineUserParam) {
        List<SysOnlineUserResult> tempList = CollectionUtil.newArrayList();
        // 获取缓存中的所有用户
        Map<String, SysLoginUser> allKeyValues = userCache.getAllKeyValues();
        for (Map.Entry<String, SysLoginUser> sysLoginUserEntry : allKeyValues.entrySet()) {
            SysOnlineUserResult sysOnlineUserResult = new SysOnlineUserResult();
            sysOnlineUserResult.setSessionId(sysLoginUserEntry.getKey());
            BeanUtil.copyProperties(sysLoginUserEntry.getValue(), sysOnlineUserResult);
            resultList.add(sysOnlineUserResult);
            tempList.add(sysOnlineUserResult);
        }
        return resultList.stream()
        List<SysOnlineUserResult> listAll = tempList.stream()
                .sorted(Comparator.comparing(SysOnlineUserResult::getLastLoginTime, Comparator.reverseOrder()))
                .collect(Collectors.toList());
        Page<SysOnlineUserResult> page = PageFactory.defaultPage();
        page.setTotal(tempList.size());
        List<SysOnlineUserResult> resultList = PageUtil.page(page, listAll);
        return new PageResult<>(page, resultList);
    }
    @Override