licailing 3 лет назад
Родитель
Сommit
fd78211137

+ 4 - 1
src/main/java/com/izouma/nineth/dto/PointDTO.java

@@ -4,6 +4,7 @@ import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
+import java.math.BigDecimal;
 import java.time.LocalDateTime;
 
 @Data
@@ -12,5 +13,7 @@ import java.time.LocalDateTime;
 public class PointDTO {
     private Long          id;
     private LocalDateTime createdAt;
-    private int           sum;
+    private int           inviteSum;
+    private int           identitySum;
+    private BigDecimal    buy;
 }

+ 4 - 0
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 javax.transaction.Transactional;
+import java.math.BigDecimal;
 import java.time.LocalDateTime;
 import java.util.Collection;
 import java.util.List;
@@ -32,6 +33,9 @@ public interface TokenHistoryRepo extends JpaRepository<TokenHistory, Long>, Jpa
     @Query("select t from TokenHistory t where t.toUserId in ?1 and t.price is not null")
     List<TokenHistory> userBuy(Collection<Long> userId);
 
+    @Query("select sum(t.price) from TokenHistory t where t.toUserId = ?1 and t.price is not null")
+    BigDecimal userBuy(Long userId);
+
     @Transactional
     @Modifying
     int deleteByTokenId(String tokenId);

+ 31 - 19
src/main/java/com/izouma/nineth/service/CollectionService.java

@@ -7,6 +7,7 @@ import com.izouma.nineth.config.RedisKeys;
 import com.izouma.nineth.domain.Collection;
 import com.izouma.nineth.domain.*;
 import com.izouma.nineth.dto.*;
+import com.izouma.nineth.enums.AuthStatus;
 import com.izouma.nineth.enums.CollectionSource;
 import com.izouma.nineth.enums.CollectionType;
 import com.izouma.nineth.enums.OrderStatus;
@@ -64,6 +65,7 @@ public class CollectionService {
     private GeneralProperties             generalProperties;
     private Environment                   env;
     private OrderRepo                     orderRepo;
+    private TokenHistoryRepo              tokenHistoryRepo;
     private PointRecordRepo               pointRecordRepo;
 
     private final Map<Long, ScheduledFuture<?>> tasks = new HashMap<>();
@@ -475,14 +477,17 @@ public class CollectionService {
     }
 
 
-    public void savePoint(Long collectionId) {
+    public List<PointDTO> savePoint(Long collectionId) {
         Collection collection = collectionRepo.findById(collectionId).orElseThrow(new BusinessException("无藏品"));
+        //库存
         int stock = collection.getStock();
+        //是否开启白名单
         int assignment = collection.getAssignment();
         if (assignment <= 0) {
-            return;
+            return null;
         }
         List<User> users = userRepo.findAllByCollectionId(collectionId);
+        //邀请者
         Map<Long, List<User>> userMap = users.stream()
                 .filter(user -> ObjectUtils.isNotEmpty(user.getCollectionInvitor()))
                 .collect(Collectors.groupingBy(User::getCollectionInvitor));
@@ -490,15 +495,20 @@ public class CollectionService {
         AtomicInteger sum = new AtomicInteger();
         List<PointDTO> dtos = new ArrayList<>();
         userMap.forEach((key, value) -> {
+            //邀请达到数量
             if (value.size() >= collection.getAssignment()) {
                 value.sort(Comparator.comparing(User::getCreatedAt));
+                //满足条件的时间
                 User user = value.get(collection.getAssignment() - 1);
-                dtos.add(new PointDTO(key, user.getCreatedAt(), value.size()));
+                //实名数量
+                long identitySum = value.stream().filter(u -> AuthStatus.SUCCESS.equals(u.getAuthStatus())).count();
+                dtos.add(new PointDTO(key, user.getCreatedAt(), value.size(), (int) identitySum, tokenHistoryRepo.userBuy(key)));
                 sum.getAndIncrement();
             }
         });
         log.info("完成任务人数:{}", sum);
 
+        //只留库存数量
         List<PointDTO> result = dtos.stream()
                 .sorted(Comparator.comparing(PointDTO::getCreatedAt))
                 .limit(stock)
@@ -508,21 +518,23 @@ public class CollectionService {
                 .stream()
                 .collect(Collectors.toMap(User::getId, user -> user));
 
-        result.forEach(pointDTO -> {
-            User user = resultMap.get(pointDTO.getId());
-            if (user.getVipPoint() <= 0) {
-                user.setVipPoint(1);
-                userRepo.save(user);
-//                userRepo.updateVipPoint(pointDTO.getId(), 1);
-                pointRecordRepo.save(PointRecord.builder()
-                        .collectionId(collectionId)
-                        .userId(pointDTO.getId())
-                        .type("VIP_POINT")
-                        .point(1)
-                        .build());
-            }
-
-        });
-
+        //加积分,存记录
+//        result.forEach(pointDTO -> {
+//            User user = resultMap.get(pointDTO.getId());
+//            if (user.getVipPoint() <= 0) {
+//                user.setVipPoint(1);
+//                userRepo.save(user);
+////                userRepo.updateVipPoint(pointDTO.getId(), 1);
+//                pointRecordRepo.save(PointRecord.builder()
+//                        .collectionId(collectionId)
+//                        .userId(pointDTO.getId())
+//                        .type("VIP_POINT")
+//                        .point(1)
+//                        .build());
+//            }
+//
+//        });
+
+        return dtos;
     }
 }

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

@@ -140,7 +140,7 @@ class CollectionServiceTest extends ApplicationTests {
 
     @Test
     public void savePoint() {
-        collectionService.savePoint(8012L);
+        collectionService.savePoint(196332L).forEach(System.out::println);
     }
 
 }