java8 lamda表达式实现查询redis在线客服问题

//1 查出来当前在线的人员
Set<String> keySet = redisCacheUtil.getCacheObjectAll(ImEnum.REDIS_ONLINE.getName() + "*");
ArrayList<ImLoginStatusBean> onlineUsers = new ArrayList();
keySet.stream().forEach(key -> {
    String onlineUser = redisCacheUtil.getCacheObject(key);
    //将查询的数据解析出来,放入list
    onlineUsers.add(JSONObject.parseObject(onlineUser, ImLoginStatusBean.class));
});
//获取在线的客服数据  过滤出在线的人员
List<ImLoginStatusBean> onlineList = onlineUsers.stream().filter(loginStatusBean -> loginStatusBean.getfState().equals(ImEnum.LOGIN_ONLINE.getCode())).collect(Collectors.toList());
//获取数据中的最小权重
OptionalInt minWeight = onlineList.stream().mapToInt(ImLoginStatusBean::getfWeight).min();
Integer min;
if(minWeight.isPresent() == false){
    min = 0;
}else{
    min = minWeight.getAsInt();
}
//最小权重的客服进行分配
List<ImLoginStatusBean> minWeightUsers = onlineList.stream().filter(loginStatusBean -> loginStatusBean.getfWeight().equals(min)).collect(Collectors.toList());

在实际的需求中,在客服登录时将在线信息放入redis中,再将在线客服信息取出,过滤出所需的在线客服,对客服进行分配。

在分配客服时,为避免出现分配不均,每一个在线人员都会加一个权重,分配一人,则权重加1,取最小权重人进行分配,如果是刚登陆客服,则取最小权重,放入队列之中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值