/**
* 在线人员查看
*
* @param userBean
* @param pageNum
* @param pageSize
* @return
*/
public PageInfo<OnlineUserManageBean> querySystemOnlineUser(Integer pageNum, Integer pageSize, String loginId) throws IOException {
PageHelper.startPage(pageNum, pageSize);
//查询所有用户排除帐号禁用用户
List<ItsmSystemUserBean> itsmSystemUserBeans = this.userClient.queryLoginOutByUserAll();
//缓存中在线的用户
List<OnlineUserManageBean> beans = new ArrayList<OnlineUserManageBean>();
for (ItsmSystemUserBean userBean : itsmSystemUserBeans) {
String loginName = userBean.getLoginName();
//根据用户登录id查询缓存
String s = this.redisService.get(loginName);
if (StringUtils.isNotBlank(s)) {
beans.add(ReturnJsonObject.MAPPER.readValue(s, OnlineUserManageBean.class));
}
}
//定义返回分页数据的list
List<OnlineUserManageBean> subList = new ArrayList<OnlineUserManageBean>();
//new分页对象
PageInfo<OnlineUserManageBean> info = new PageInfo<OnlineUserManageBean>();
//查询全部数据
if (StringUtils.isBlank(loginId)) {
//设置list分页,这里通用mapper返回分页有问题,
return getOnlineUserManageBeanPageInfo(pageNum, pageSize, beans, info);
} else { //根据登录id查询
//定义查询list
List<OnlineUserManageBean> listByLoginName = new ArrayList<OnlineUserManageBean>();
for (int i = 0; i < beans.size(); i++) {
//遍历数据的登录id对比索引,没有匹配移除返回的list
if (((beans.get(i))).getLoginName().indexOf(loginId) > -1)
//beans.remove(i);这里和=循环操作的是同一个集合遍历时size一直减少,遍历一半时结束
listByLoginName.add((beans.get(i)));
}
if (listByLoginName.size() > 0) {
//设置list分页,这里通用mapper返回分页有问题,
return getOnlineUserManageBeanPageInfo(pageNum, pageSize, listByLoginName, info);
} else {
return getOnlineUserManageBeanPageInfo(pageNum, pageSize, subList, info);
}
}
}
private PageInfo<OnlineUserManageBean> getOnlineUserManageBeanPageInfo(Integer pageNum, Integer pageSize, List<OnlineUserManageBean> beans, PageInfo<OnlineUserManageBean> info) {
List<OnlineUserManageBean> subList;
int totalCount = beans.size();
int pageCount = 0;
int m = totalCount % pageSize;
if (m > 0) {
pageCount = totalCount / pageSize + 1;
} else {
pageCount = totalCount / pageSize;
}
//获取返回分页数据的list
subList = getOnlineUserManageBeans(pageNum, pageSize, beans, totalCount, pageCount, m);
//设置分页必需的参数
info.setPageNum(pageNum);
info.setPageSize(pageSize);
info.setTotal(totalCount);
info.setList(subList);
info.setSize(pageCount);
return info;
}
/**
* 获取在线分页list
*
* @param pageNum 当前页
* @param pageSize 每页数量
* @param beans 需要截取分页的list
* @param totalCount 总条数
* @param pageCount 总页数
* @param m 分页页面数量
* @return
*/
private List<OnlineUserManageBean> getOnlineUserManageBeans(Integer pageNum, Integer pageSize, List<OnlineUserManageBean> beans, int totalCount, int pageCount, int m) {
//java.util 类 Collections
//static <T> void sort(List<T> list, Comparator<? super T> c)
//根据指定比较器产生的顺序对指定列表进行排序。
SortClass sortClass = new SortClass();
Collections.sort(beans, sortClass);
List<OnlineUserManageBean> totalList = new ArrayList<OnlineUserManageBean>(); int currIdx = (pageNum > 1 ? (pageNum -1) * pageSize : 0); for (int i = 0; i < pageSize && i < beans.size() - currIdx; i++) { OnlineUserManageBean memberArticleBean = beans.get(currIdx + i); totalList.add(memberArticleBean); } return totalList;}
import java.util.Comparator;
//接口 Comparator<T>
//强行对某个对象 collection 进行整体排序 的比较函数。
//可以将 Comparator 传递给 sort 方法(如 Collections.sort 或 Arrays.sort),
//从而允许在排序顺序上实现精确控制
public class SortClass implements Comparator {
@Override
public int compare(Object o1, Object o2) {
OnlineUserManageBean onlinBean = (OnlineUserManageBean) o1;
OnlineUserManageBean bean = (OnlineUserManageBean) o2;
// public int compareTo(String anotherString)
// 按字典顺序比较两个字符串。该比较基于字符串中各个字符的 Unicode 值。
// 按字典顺序将此 String 对象表示的字符序列与参数字符串所表示的字符序列进行比较。
// 如果按字典顺序此 String 对象位于参数字符串之前,则比较结果为一个负整数。
// 如果按字典顺序此 String 对象位于参数字符串之后,则比较结果为一个正整数。
// 如果这两个字符串相等,则结果为 0;compareTo 只在方法 equals(Object) 返回 true 时才返回 0。
int flag = bean.getLastLoginTime().compareTo(onlinBean.getLastLoginTime());
return flag;
}
}
/**
* 对list进行排序, 这里主要根据是否是组长进行排序
*
* @param list
* @return
*/
public List<GroupUserBean> listSort(List<GroupUserBean> list) {
Collections.sort(list, new Comparator<GroupUserBean>() {
/*
* int compare(Student o1, Student o2) 返回一个基本类型的整型,
* 返回负数表示:o1 小于o2,
* 返回0 表示:o1和o2相等,
* 返回正数表示:o1大于o2。
*/
public int compare(GroupUserBean o1, GroupUserBean o2) {
//按照组长进行升序排列
if (o1.getIsLeader() < o2.getIsLeader()) {
return 1;
}
if (o1.getIsLeader() == o2.getIsLeader()) {
return 0;
}
return -1;
}
});
return list;
}