licailing 4 жил өмнө
parent
commit
8755566b00

+ 2 - 1
src/main/java/com/izouma/nineth/repo/TokenHistoryRepo.java

@@ -9,6 +9,7 @@ import org.springframework.data.jpa.repository.Modifying;
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.jpa.repository.Query;
 
 
 import javax.transaction.Transactional;
 import javax.transaction.Transactional;
+import java.time.LocalDateTime;
 import java.util.List;
 import java.util.List;
 
 
 public interface TokenHistoryRepo extends JpaRepository<TokenHistory, Long>, JpaSpecificationExecutor<TokenHistory> {
 public interface TokenHistoryRepo extends JpaRepository<TokenHistory, Long>, JpaSpecificationExecutor<TokenHistory> {
@@ -20,7 +21,7 @@ public interface TokenHistoryRepo extends JpaRepository<TokenHistory, Long>, Jpa
     @Query("select t from TokenHistory t where t.projectId = ?2 and (t.toUserId = ?1 or t.fromUserId = ?1) order by t.createdAt desc")
     @Query("select t from TokenHistory t where t.projectId = ?2 and (t.toUserId = ?1 or t.fromUserId = ?1) order by t.createdAt desc")
     Page<TokenHistory> userHistoryAndProjectId(Long userId, int projectId, Pageable pageable);
     Page<TokenHistory> userHistoryAndProjectId(Long userId, int projectId, Pageable pageable);
 
 
-    List<TokenHistory> findAllByPriceIsNotNullAndOperationLike(String operation);
+    List<TokenHistory> findAllByPriceIsNotNullAndOperationLikeAndCreatedAtBetween(String operation, LocalDateTime start, LocalDateTime end);
 
 
     @Transactional
     @Transactional
     @Modifying
     @Modifying

+ 28 - 14
src/main/java/com/izouma/nineth/service/AssetService.java

@@ -28,6 +28,7 @@ import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
 import java.math.BigDecimal;
 import java.math.BigDecimal;
+import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalDateTime;
 import java.time.temporal.ChronoUnit;
 import java.time.temporal.ChronoUnit;
 import java.util.*;
 import java.util.*;
@@ -416,11 +417,15 @@ public class AssetService {
     }
     }
 
 
     /**
     /**
-     * 排行榜
-     * 被删除的用户??
+     * 排行榜
+     * 被删除的用户
      */
      */
-    public List<LeaderboardDTO> leaderboard(Long userId, int size) {
-        List<TokenHistory> all = tokenHistoryRepo.findAllByPriceIsNotNullAndOperationLike("出售");
+    public List<LeaderboardDTO> ranking(Long userId, int size) {
+        LocalDate now = LocalDate.now();
+        LocalDateTime start = LocalDateTime.of(2021, 11, 1, 0, 0, 0, 0);
+//        LocalDateTime start = LocalDateTime.of(now.getYear(), now.getMonth(), 1, 0, 0, 0, 0);
+        LocalDateTime end = start.plusMonths(1).minusSeconds(1);
+        List<TokenHistory> all = tokenHistoryRepo.findAllByPriceIsNotNullAndOperationLikeAndCreatedAtBetween("出售", start, end);
         Map<Long, Long> countMap = all.stream()
         Map<Long, Long> countMap = all.stream()
                 .collect(Collectors.groupingBy(TokenHistory::getToUserId, Collectors.counting()));
                 .collect(Collectors.groupingBy(TokenHistory::getToUserId, Collectors.counting()));
 
 
@@ -439,17 +444,19 @@ public class AssetService {
             Map<Long, User> userMap = userRepo.findByIdInAndDelFalse(userIds)
             Map<Long, User> userMap = userRepo.findByIdInAndDelFalse(userIds)
                     .stream()
                     .stream()
                     .collect(Collectors.toMap(User::getId, user -> user));
                     .collect(Collectors.toMap(User::getId, user -> user));
-            for (int i = 1; i < dtos.size() + 1; i++) {
+            for (int i = 0, j = 1; i < dtos.size(); i++) {
                 LeaderboardDTO dto = dtos.get(i);
                 LeaderboardDTO dto = dtos.get(i);
-                Long k = dto.getUserId();
-                User user = userMap.get(k);
+                Long id = dto.getUserId();
+                User user = userMap.get(id);
                 if (user == null) {
                 if (user == null) {
+                    dtos.remove(dto);
+                    i = i - 1;
                     continue;
                     continue;
                 }
                 }
                 dto.setAvatar(user.getAvatar());
                 dto.setAvatar(user.getAvatar());
                 dto.setNickname(user.getNickname());
                 dto.setNickname(user.getNickname());
-                dto.setRank(i);
-                i++;
+                dto.setRank(j);
+                j++;
             }
             }
             return dtos;
             return dtos;
         }
         }
@@ -457,14 +464,17 @@ public class AssetService {
         List<LeaderboardDTO> leaderboardDTOS = new ArrayList<>();
         List<LeaderboardDTO> leaderboardDTOS = new ArrayList<>();
         int i = 1;
         int i = 1;
 
 
+        boolean flag = false;
         for (LeaderboardDTO dto : dtos) {
         for (LeaderboardDTO dto : dtos) {
-            Long k = dto.getUserId();
-            if (!k.equals(userId) && i > size) {
+            Long id = dto.getUserId();
+            if (!id.equals(userId) && i > size) {
                 i++;
                 i++;
                 continue;
                 continue;
             }
             }
-
-            User user = userRepo.findByIdAndDelFalse(k).orElse(null);
+            if (flag && i > size) {
+                break;
+            }
+            User user = userRepo.findByIdAndDelFalse(id).orElse(null);
             if (user == null) {
             if (user == null) {
                 continue;
                 continue;
             }
             }
@@ -473,8 +483,12 @@ public class AssetService {
             dto.setRank(i);
             dto.setRank(i);
             leaderboardDTOS.add(dto);
             leaderboardDTOS.add(dto);
             i++;
             i++;
+
+            if (userId.equals(id)) {
+                flag = true;
+            }
         }
         }
 
 
         return leaderboardDTOS;
         return leaderboardDTOS;
     }
     }
-}
+}

+ 8 - 1
src/main/java/com/izouma/nineth/web/AssetController.java

@@ -4,6 +4,7 @@ import com.izouma.nineth.TokenHistory;
 import com.izouma.nineth.domain.Asset;
 import com.izouma.nineth.domain.Asset;
 import com.izouma.nineth.domain.GiftOrder;
 import com.izouma.nineth.domain.GiftOrder;
 import com.izouma.nineth.domain.User;
 import com.izouma.nineth.domain.User;
+import com.izouma.nineth.dto.LeaderboardDTO;
 import com.izouma.nineth.dto.PageQuery;
 import com.izouma.nineth.dto.PageQuery;
 import com.izouma.nineth.dto.UserHistory;
 import com.izouma.nineth.dto.UserHistory;
 import com.izouma.nineth.exception.BusinessException;
 import com.izouma.nineth.exception.BusinessException;
@@ -133,12 +134,18 @@ public class AssetController extends BaseController {
     }
     }
 
 
     @GetMapping("/mint")
     @GetMapping("/mint")
-    public String mint( ) {
+    public String mint() {
         for (Asset asset : assetRepo.findByTxHashIsNullAndTokenIdNotNullAndCreatedAtBefore(LocalDateTime.now())) {
         for (Asset asset : assetRepo.findByTxHashIsNullAndTokenIdNotNullAndCreatedAtBefore(LocalDateTime.now())) {
             assetMintService.mint(asset);
             assetMintService.mint(asset);
         }
         }
         return "ok";
         return "ok";
     }
     }
+
+    @ApiOperation("排行榜")
+    @PostMapping("/ranking")
+    public List<LeaderboardDTO> ranking() {
+        return assetService.ranking(SecurityUtils.getAuthenticatedUser().getId(), 100);
+    }
 }
 }
 
 
 
 

+ 1 - 1
src/test/java/com/izouma/nineth/service/AssetServiceTest.java

@@ -96,6 +96,6 @@ class AssetServiceTest extends ApplicationTests {
 
 
     @Test
     @Test
     public void test() {
     public void test() {
-        assetService.leaderboard(439L, 15).forEach(System.out::println);
+        assetService.ranking(439L, 20).forEach(System.out::println);
     }
     }
 }
 }