Pārlūkot izejas kodu

交易量前十

sunkean 3 gadi atpakaļ
vecāks
revīzija
bb8d78fab4

+ 3 - 1
src/main/java/com/izouma/nineth/config/CacheConfig.java

@@ -142,7 +142,9 @@ public class CacheConfig {
         cacheNamesConfigurationMap.put("blindBoxRare", RedisCacheConfiguration.defaultCacheConfig()
                 .entryTtl(Duration.ofSeconds(2))
                 .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(redisTemplate.getValueSerializer())));
-
+        cacheNamesConfigurationMap.put("transactionTopTen", RedisCacheConfiguration.defaultCacheConfig()
+                .entryTtl(Duration.ofDays(1))
+                .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(redisTemplate.getValueSerializer())));
         RedisCacheManager redisCacheManager = RedisCacheManager.builder()
                 .cacheWriter(RedisCacheWriter.nonLockingRedisCacheWriter(redisTemplate.getConnectionFactory()))
                 .withInitialCacheConfigurations(cacheNamesConfigurationMap)

+ 38 - 0
src/main/java/com/izouma/nineth/dto/TransactionTopTenDTO.java

@@ -0,0 +1,38 @@
+package com.izouma.nineth.dto;
+
+import com.izouma.nineth.converter.FileObjectListConverter;
+import com.izouma.nineth.domain.FileObject;
+import com.izouma.nineth.enums.CollectionSource;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.persistence.Column;
+import javax.persistence.Convert;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import java.util.List;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class TransactionTopTenDTO {
+
+    private Long id;
+
+    private String name;
+
+    private String prefixName;
+
+    @ApiModelProperty("来源")
+    @Enumerated(EnumType.STRING)
+    private CollectionSource source;
+
+    @ApiModelProperty("图片")
+    @Convert(converter = FileObjectListConverter.class)
+    @Column(columnDefinition = "TEXT")
+    private List<FileObject> pic;
+
+    private int num;
+}

+ 8 - 0
src/main/java/com/izouma/nineth/repo/OrderRepo.java

@@ -16,6 +16,7 @@ import java.math.BigDecimal;
 import java.time.LocalDateTime;
 import java.util.Collection;
 import java.util.List;
+import java.util.Map;
 import java.util.Optional;
 
 public interface OrderRepo extends JpaRepository<Order, Long>, JpaSpecificationExecutor<Order> {
@@ -110,4 +111,11 @@ public interface OrderRepo extends JpaRepository<Order, Long>, JpaSpecificationE
     int countAllByUserIdAndCollectionIdAndStatusIn(Long userId, Long collectionId, Collection<OrderStatus> status);
 
     Order findFirstByCollectionIdOrderByCreatedAtDesc(Long collectionId);
+
+    @Query(value = "SELECT a.id id, a.name name ,a.prefixName prefixName, a.source source, SUM(a.num) num FROM " +
+            "(SELECT a.id id, o.name name,a.prefix_name prefixName, o.source source,COUNT(*) num FROM order_info o LEFT JOIN asset a ON o.asset_id = a.id WHERE o.`status` = 'FINISH' AND o.source = 'TRANSFER' AND o.pay_time > ?1 GROUP BY a.prefix_name " +
+            "UNION ALL" +
+            " SELECT a.id id, o.name name,a.prefix_name prefixName, o.source source,COUNT(*) num FROM order_info o LEFT JOIN collection_info a ON o.collection_id = a.id WHERE o.`status` = 'FINISH' and o.source = 'OFFICIAL' AND o.pay_time > ?1 GROUP BY a.prefix_name) a " +
+            "GROUP BY a.prefixName ORDER BY (SUM(a.num)) DESC LIMIT 10", nativeQuery = true)
+    List<Map<String, String>> transactionTopTen(LocalDateTime payTime);
 }

+ 1 - 0
src/main/java/com/izouma/nineth/security/WebSecurityConfig.java

@@ -162,6 +162,7 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
                 .antMatchers("/metaAdvertRecord/**").permitAll()
                 .antMatchers("/metaDestroyActivity/metaQuery").permitAll()
                 .antMatchers("/metaResourceVersion/**").permitAll()
+                .antMatchers("/asset/topTen").permitAll()
 
                 // all other requests need to be authenticated
                 .anyRequest().authenticated().and()

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

@@ -1,13 +1,18 @@
 package com.izouma.nineth.web;
 
+import cn.hutool.core.collection.CollectionUtil;
+import com.alibaba.fastjson.JSONArray;
 import com.fasterxml.jackson.annotation.JsonView;
 import com.izouma.nineth.TokenHistory;
 import com.izouma.nineth.domain.Asset;
+import com.izouma.nineth.domain.Collection;
 import com.izouma.nineth.domain.GiftOrder;
 import com.izouma.nineth.dto.*;
+import com.izouma.nineth.enums.CollectionSource;
 import com.izouma.nineth.enums.CollectionType;
 import com.izouma.nineth.exception.BusinessException;
 import com.izouma.nineth.repo.AssetRepo;
+import com.izouma.nineth.repo.CollectionRepo;
 import com.izouma.nineth.repo.OrderRepo;
 import com.izouma.nineth.service.AssetService;
 import com.izouma.nineth.service.CacheService;
@@ -21,6 +26,7 @@ import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.cache.annotation.Cacheable;
 
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
@@ -42,6 +48,7 @@ public class AssetController extends BaseController {
     private OrderRepo               orderRepo;
     private CacheService            cacheService;
     private UserAssetSummaryService userAssetSummaryService;
+    private CollectionRepo collectionRepo;
 
     //@PreAuthorize("hasRole('ADMIN')")
 //    @PostMapping("/save")
@@ -240,6 +247,41 @@ public class AssetController extends BaseController {
     public void recal(@RequestParam Long userId) {
         userAssetSummaryService.calculateNum(userId, 1L);
     }
+
+    @GetMapping("/topTen")
+    @Cacheable(value = "transactionTopTen")
+    public List<TransactionTopTenDTO> transactionTopTen() {
+        LocalDateTime localDateTime = LocalDateTime.now().plusDays(-7);
+        List<Map<String, String>> map = orderRepo.transactionTopTen(localDateTime);
+        JSONArray jsonArray = new JSONArray();
+        if (CollectionUtil.isEmpty(map)) {
+            return null;
+        }
+        jsonArray.addAll(map);
+        List<TransactionTopTenDTO> transactionTopTenDTOS = jsonArray.toJavaList(TransactionTopTenDTO.class);
+        if (CollectionUtil.isEmpty(transactionTopTenDTOS)) {
+            return null;
+        }
+        transactionTopTenDTOS.forEach(transactionTopTenDTO -> {
+            if (Objects.nonNull(transactionTopTenDTO.getId())) {
+                if (transactionTopTenDTO.getSource().equals(CollectionSource.OFFICIAL)) {
+                    Collection collection = collectionRepo.findById(transactionTopTenDTO.getId()).orElse(null);
+                    if (Objects.nonNull(collection)) {
+                        transactionTopTenDTO.setPic(collection.getPic());
+                    }
+                }
+                if (transactionTopTenDTO.getSource().equals(CollectionSource.TRANSFER)) {
+                    Asset asset = assetRepo.findById(transactionTopTenDTO.getId()).orElse(null);
+                    if (Objects.nonNull(asset)) {
+                        transactionTopTenDTO.setPic(asset.getPic());
+                    }
+                }
+            }
+            transactionTopTenDTO.setId(null);
+            transactionTopTenDTO.setSource(null);
+        });
+        return transactionTopTenDTOS;
+    }
 }