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

+ 6 - 0
src/main/java/com/izouma/nineth/domain/AssetPost.java

@@ -1,5 +1,6 @@
 package com.izouma.nineth.domain;
 
+import com.izouma.nineth.enums.PostStatus;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
@@ -7,6 +8,8 @@ import lombok.Data;
 import lombok.NoArgsConstructor;
 
 import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
 
 @Data
 @Entity
@@ -31,4 +34,7 @@ public class AssetPost extends BaseEntity {
     @ApiModelProperty("快递单号")
     private String courierId;
 
+    @Enumerated(EnumType.STRING)
+    private PostStatus status;
+
 }

+ 15 - 0
src/main/java/com/izouma/nineth/enums/PostStatus.java

@@ -0,0 +1,15 @@
+package com.izouma.nineth.enums;
+
+public enum PostStatus {
+    /*
+    待发货
+     */
+
+    /*
+    待收货
+     */
+
+    /*
+    已完成
+     */
+}

+ 25 - 0
src/main/java/com/izouma/nineth/service/AssetPostService.java

@@ -1,8 +1,12 @@
 package com.izouma.nineth.service;
 
+import com.izouma.nineth.domain.Asset;
 import com.izouma.nineth.domain.AssetPost;
 import com.izouma.nineth.dto.PageQuery;
+import com.izouma.nineth.enums.AssetStatus;
+import com.izouma.nineth.exception.BusinessException;
 import com.izouma.nineth.repo.AssetPostRepo;
+import com.izouma.nineth.repo.AssetRepo;
 import com.izouma.nineth.utils.JpaUtils;
 import lombok.AllArgsConstructor;
 import org.springframework.data.domain.Page;
@@ -13,8 +17,29 @@ import org.springframework.stereotype.Service;
 public class AssetPostService {
 
     private AssetPostRepo assetPostRepo;
+    private AssetRepo     assetRepo;
 
     public Page<AssetPost> all(PageQuery pageQuery) {
         return assetPostRepo.findAll(JpaUtils.toSpecification(pageQuery, AssetPost.class), JpaUtils.toPageRequest(pageQuery));
     }
+
+    /*
+    衍生品上链
+    衍生品有盲盒类型
+    衍生品邮寄不支付快递费
+    衍生品暂不可以取消邮寄
+    */
+    public void post(Long assetId) {
+        Asset asset = assetRepo.findById(assetId).orElseThrow(new BusinessException("无此衍生品"));
+        if (asset.isPublicShow()) {
+            if (asset.isConsignment()) {
+                throw new BusinessException("请先取消寄售");
+            }
+            throw new BusinessException("请先取消公开展示");
+        }
+
+        if (!AssetStatus.NORMAL.equals(asset.getStatus())) {
+            throw new BusinessException("当前状态不可邮寄");
+        }
+    }
 }

+ 41 - 0
src/main/java/com/izouma/nineth/service/AssetService.java

@@ -491,4 +491,45 @@ public class AssetService {
 
         return leaderboardDTOS;
     }
+
+    public List<LeaderboardDTO> ranking(int size) {
+        LocalDate now = LocalDate.now();
+        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()
+                .collect(Collectors.groupingBy(TokenHistory::getToUserId, Collectors.counting()));
+
+        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()));
+
+        List<LeaderboardDTO> leaderboardDTOS = new ArrayList<>();
+        int i = 1;
+
+        for (LeaderboardDTO dto : dtos) {
+            Long id = dto.getUserId();
+
+            if (i > size) {
+                break;
+            }
+            User user = userRepo.findByIdAndDelFalse(id).orElse(null);
+            if (user == null) {
+                continue;
+            }
+            dto.setAvatar(user.getAvatar());
+            dto.setNickname(user.getNickname());
+            dto.setRank(i);
+            leaderboardDTOS.add(dto);
+            i++;
+        }
+
+        return leaderboardDTOS;
+    }
 }

+ 3 - 0
src/main/java/com/izouma/nineth/web/AssetController.java

@@ -144,6 +144,9 @@ public class AssetController extends BaseController {
     @ApiOperation("排行榜")
     @PostMapping("/ranking")
     public List<LeaderboardDTO> ranking() {
+        if (SecurityUtils.getAuthenticatedUser() == null) {
+            return assetService.ranking(100);
+        }
         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
     public void test() {
-        assetService.ranking(439L, 20).forEach(System.out::println);
+        assetService.ranking(3).forEach(System.out::println);
     }
 }