Răsfoiți Sursa

空投撤回

licailing 4 ani în urmă
părinte
comite
6611a8f63e

+ 2 - 0
src/main/java/com/izouma/nineth/repo/AssetRepo.java

@@ -75,4 +75,6 @@ public interface AssetRepo extends JpaRepository<Asset, Long>, JpaSpecificationE
                   String ownerAvatar, String detail);
 
     Page<Asset> findByUserIdAndStatusAndNameLike(Long userId, AssetStatus status, String name, Pageable pageable);
+
+    List<Asset> findAllByUserIdAndCollectionIdAndStatus(Long userId, Long collectionId, AssetStatus status);
 }

+ 3 - 0
src/main/java/com/izouma/nineth/repo/TokenHistoryRepo.java

@@ -14,6 +14,7 @@ import java.time.LocalDateTime;
 import java.util.Collection;
 import java.util.List;
 import java.util.Map;
+import java.util.Optional;
 
 public interface TokenHistoryRepo extends JpaRepository<TokenHistory, Long>, JpaSpecificationExecutor<TokenHistory> {
     List<TokenHistory> findByTokenIdOrderByCreatedAtDesc(String tokenId);
@@ -48,4 +49,6 @@ public interface TokenHistoryRepo extends JpaRepository<TokenHistory, Long>, Jpa
     @Query(nativeQuery = true, value = "select to_user_id , to_user, to_avatar, sum(price) total from token_history " +
             "where created_at between ?1 and ?2 group by to_user_id order by sum(price) desc limit ?3")
     List<Map<String, Object>> sumPrice(LocalDateTime start, LocalDateTime end, int size);
+
+    Optional<TokenHistory> findByToUserIdAndTokenId(Long toUserId, String tokenId);
 }

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

@@ -2,18 +2,37 @@ package com.izouma.nineth.service;
 
 import com.alibaba.excel.EasyExcel;
 import com.izouma.nineth.ApplicationTests;
+import com.izouma.nineth.TokenHistory;
+import com.izouma.nineth.domain.AirDrop;
+import com.izouma.nineth.domain.Asset;
+import com.izouma.nineth.domain.DropTarget;
 import com.izouma.nineth.dto.AirDropExcelDTO;
+import com.izouma.nineth.enums.AssetStatus;
+import com.izouma.nineth.exception.BusinessException;
+import com.izouma.nineth.repo.AirDropRepo;
+import com.izouma.nineth.repo.AssetRepo;
+import com.izouma.nineth.repo.TokenHistoryRepo;
 import com.izouma.nineth.utils.excel.UploadDataListener;
 import org.junit.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 
 import java.io.File;
 import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.Comparator;
 import java.util.List;
 
 public class AirDropServiceTest extends ApplicationTests {
     @Autowired
-    AirDropService airDropService;
+    AirDropService    airDropService;
+    @Autowired
+    AirDropRepo       airDropRepo;
+    @Autowired
+    AssetRepo         assetRepo;
+    @Autowired
+    TokenHistoryRepo  tokenHistoryRepo;
+    @Autowired
+    CollectionService collectionService;
 
     @Test
     public void drop() {
@@ -34,4 +53,37 @@ public class AirDropServiceTest extends ApplicationTests {
 
         });
     }
+
+    @Test
+    public void cancel() {
+        AirDrop airDrop = airDropRepo.findById(7607018L).orElseThrow(new BusinessException(""));
+        List<Asset> resultA = new ArrayList<>();
+        List<TokenHistory> resultT = new ArrayList<>();
+        int total = 0;
+        for (DropTarget target : airDrop.getTargets()) {
+            List<Asset> assets = assetRepo.findAllByUserIdAndCollectionIdAndStatus(target.getUserId(), airDrop.getCollectionId(), AssetStatus.NORMAL);
+            assets.sort((a, b) -> b.getId().compareTo(a.getId()));
+            if (target.getNum() > assets.size()) {
+                throw new BusinessException(target.getUserId() + ":" + target.getNum() + ":" + assets.size());
+            }
+            for (int i = 0; i < target.getNum(); i++) {
+                Asset asset = assets.get(i);
+                resultA.add(asset);
+                TokenHistory tokens = tokenHistoryRepo.findByToUserIdAndTokenId(target.getUserId(), asset.getTokenId())
+                        .orElseThrow(new BusinessException(""));
+                resultT.add(tokens);
+                total++;
+            }
+
+        }
+
+//        System.out.println(total);
+//        System.out.println(airDrop.getTargets().stream().mapToInt(DropTarget::getNum).sum());
+//
+//        assetRepo.deleteAll(resultA);
+//        tokenHistoryRepo.deleteAll(resultT);
+//
+//        collectionService.increaseStock(airDrop.getCollectionId(), total);
+//        collectionService.decreaseSale(airDrop.getCollectionId(), total);
+    }
 }