|
|
@@ -3,6 +3,7 @@ package com.izouma.nineth.service;
|
|
|
import com.izouma.nineth.TokenHistory;
|
|
|
import com.izouma.nineth.domain.Collection;
|
|
|
import com.izouma.nineth.domain.*;
|
|
|
+import com.izouma.nineth.dto.LeaderboardDTO;
|
|
|
import com.izouma.nineth.dto.PageQuery;
|
|
|
import com.izouma.nineth.dto.UserHistory;
|
|
|
import com.izouma.nineth.enums.AssetStatus;
|
|
|
@@ -416,16 +417,64 @@ public class AssetService {
|
|
|
|
|
|
/**
|
|
|
* 排行榜
|
|
|
+ * 被删除的用户??
|
|
|
*/
|
|
|
- public void leaderboard(Long userId, int size) {
|
|
|
+ public List<LeaderboardDTO> leaderboard(Long userId, int size) {
|
|
|
List<TokenHistory> all = tokenHistoryRepo.findAllByPriceIsNotNullAndOperationLike("出售");
|
|
|
Map<Long, Long> countMap = all.stream()
|
|
|
.collect(Collectors.groupingBy(TokenHistory::getToUserId, Collectors.counting()));
|
|
|
- Map<Long, Long> result = new HashMap<>();
|
|
|
- countMap.entrySet()
|
|
|
- .stream()
|
|
|
- .sorted(Map.Entry.comparingByValue())
|
|
|
- .forEachOrdered(b -> result.put(b.getKey(), b.getValue()));
|
|
|
- if (result.entrySet().size() > size){}
|
|
|
+
|
|
|
+ List<LeaderboardDTO> dtos = new ArrayList<>();
|
|
|
+
|
|
|
+ countMap.forEach((k, v) ->
|
|
|
+ dtos.add(LeaderboardDTO.builder()
|
|
|
+ .userId(k)
|
|
|
+ .num(v)
|
|
|
+ .build())
|
|
|
+ );
|
|
|
+ dtos.sort((a, b) -> b.getNum().compareTo(a.getNum()));
|
|
|
+
|
|
|
+ Set<Long> userIds = countMap.keySet();
|
|
|
+ if (userIds.size() <= size) {
|
|
|
+ Map<Long, User> userMap = userRepo.findByIdInAndDelFalse(userIds)
|
|
|
+ .stream()
|
|
|
+ .collect(Collectors.toMap(User::getId, user -> user));
|
|
|
+ for (int i = 1; i < dtos.size() + 1; i++) {
|
|
|
+ LeaderboardDTO dto = dtos.get(i);
|
|
|
+ Long k = dto.getUserId();
|
|
|
+ User user = userMap.get(k);
|
|
|
+ if (user == null) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ dto.setAvatar(user.getAvatar());
|
|
|
+ dto.setNickname(user.getNickname());
|
|
|
+ dto.setRank(i);
|
|
|
+ i++;
|
|
|
+ }
|
|
|
+ return dtos;
|
|
|
+ }
|
|
|
+
|
|
|
+ List<LeaderboardDTO> leaderboardDTOS = new ArrayList<>();
|
|
|
+ int i = 1;
|
|
|
+
|
|
|
+ for (LeaderboardDTO dto : dtos) {
|
|
|
+ Long k = dto.getUserId();
|
|
|
+ if (!k.equals(userId) && i > size) {
|
|
|
+ i++;
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ User user = userRepo.findByIdAndDelFalse(k).orElse(null);
|
|
|
+ if (user == null) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ dto.setAvatar(user.getAvatar());
|
|
|
+ dto.setNickname(user.getNickname());
|
|
|
+ dto.setRank(i);
|
|
|
+ leaderboardDTOS.add(dto);
|
|
|
+ i++;
|
|
|
+ }
|
|
|
+
|
|
|
+ return leaderboardDTOS;
|
|
|
}
|
|
|
}
|