@Override
public List<Map<String, Object>> redisTop(String level) {
Set<ZSetOperations.TypedTuple<Object>> scores = redisTemplate.opsForZSet().rangeWithScores("top" + level, 0, 9);
if (CollectionUtils.isEmpty(scores)) {
QueryWrapper<ClockUser> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("level", level);
queryWrapper.orderByAsc("final_clock_time");
List<ClockUser> clockUsers = list(queryWrapper);
System.out.println("------>" + clockUsers.size());
if (!CollectionUtils.isEmpty(clockUsers)) {
clockUsers.forEach(clockUser -> {
String name = clockUser.getNickname();
String openid = clockUser.getOpenid();
LocalDateTime finalClockTime = clockUser.getFinalClockTime();
// 毫秒 秒数 最后的打卡时间转化为毫秒数
long second = finalClockTime.toInstant(ZoneOffset.of("+8")).toEpochMilli();
int count = clockUser.getGrowthValue();// 成长值
String dou = count + "." + second + "";
double newCount = Double.parseDouble(dou);
//存储数据库
redisTemplate.opsForZSet().add("top" + level, openid + ":" + name, newCount);
});
}
scores = redisTemplate.opsForZSet().rangeWithScores("top" + level, 0, 9);
}
List<Map<String, Object>> list = new ArrayList<>();
assert scores != null;
AtomicInteger i = new AtomicInteger(1);
scores.forEach(tuple -> {
Map<String, Object> map = new HashMap<>();
map.put("name", tuple.getValue().toString().split(":")[1]);
map.put("openid", tuple.getValue().toString().split(":")[0]);
map.put("integral", Objects.requireNonNull(tuple.getScore()).intValue());
list.add(map);
});
list.sort((o1, o2) -> {
Integer integral1 = (Integer) o1.get("integral");
Integer integral2 = (Integer) o2.get("integral");
return integral2.compareTo(integral1);
});
list.forEach(map -> map.put("rank", i.getAndIncrement()));
return list;
}