Pārlūkot izejas kodu

调整用户持仓价值估算

sunkean 3 gadi atpakaļ
vecāks
revīzija
9d0e58ae50

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

@@ -142,7 +142,7 @@ public class CacheConfig {
         cacheNamesConfigurationMap.put("blindBoxRare", RedisCacheConfiguration.defaultCacheConfig()
                 .entryTtl(Duration.ofSeconds(2))
                 .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(redisTemplate.getValueSerializer())));
-        cacheNamesConfigurationMap.put("userHoldList", RedisCacheConfiguration.defaultCacheConfig()
+        cacheNamesConfigurationMap.put("userHoldPrice", RedisCacheConfiguration.defaultCacheConfig()
                 .entryTtl(Duration.ofHours(1))
                 .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(redisTemplate.getValueSerializer())));
 

+ 31 - 27
src/main/java/com/izouma/nineth/service/UserHoldCountService.java

@@ -26,7 +26,7 @@ public class UserHoldCountService {
 
     private CollectionRepo collectionRepo;
 
-    @Cacheable(value = "userHoldList", key = "#pageQuery.hashCode()")
+//    @Cacheable(value = "userHoldList", key = "#pageQuery.hashCode()")
     public PageWrapper<UserHoldDTO> all(PageQuery pageQuery) {
         int page = pageQuery.getPage();
         int size = pageQuery.getSize();
@@ -37,36 +37,40 @@ public class UserHoldCountService {
         JSONArray jsonArray = new JSONArray();
         jsonArray.addAll(assets);
         List<UserHoldDTO> userHoldDTOS = jsonArray.toJavaList(UserHoldDTO.class);
-        userHoldDTOS.forEach(userHoldDTO -> {
-            List<Asset> userAssets = assetRepo.findAllByUserIdAndStatusIn(userHoldDTO.getUserId(), new ArrayList<>(Arrays.asList(AssetStatus.NORMAL, AssetStatus.TRADING, AssetStatus.GIFTING, AssetStatus.MINTING, AssetStatus.AUCTIONING)));
-            // 分类计算各资产寄售最低价
-            userAssets.forEach(asset -> {
-                if (StringUtils.isBlank(asset.getPrefixName())) {
-                    return;
-                }
-                if (asset.getName().contains(Constants.Rarity.SR_LIKE) && !asset.getName().contains(Constants.Rarity.SSR_LIKE)) {
-                    calculatePrice(userHoldDTO, asset, minPriceMap, Constants.Rarity.SR_LIKE, Constants.Rarity.SSR_LIKE);
-                    return;
-                }
-                if (asset.getName().contains(Constants.Rarity.U_LIKE)) {
-                    calculatePrice(userHoldDTO, asset, minPriceMap, Constants.Rarity.U_LIKE, Constants.Rarity.R_LIKE);
-                    return;
-                }
-                if (asset.getName().contains(Constants.Rarity.R_LIKE) && !asset.getName().contains(Constants.Rarity.SR_LIKE)) {
-                    calculatePrice(userHoldDTO, asset, minPriceMap, Constants.Rarity.R_LIKE, Constants.Rarity.SR_LIKE);
-                    return;
-                }
-                if (asset.getName().contains(Constants.Rarity.SSR_LIKE)) {
-                    calculatePrice(userHoldDTO, asset, minPriceMap, Constants.Rarity.SSR_LIKE, Constants.Rarity.U_LIKE);
-                    return;
-                }
-                calculatePrice(userHoldDTO, asset, minPriceMap, null, null);
-            });
-        });
+        userHoldDTOS.forEach(userHoldDTO -> userHoldDTO.setPrice(cacheableCalculate(userHoldDTO, minPriceMap)));
         return new PageWrapper<>(userHoldDTOS, page,
                 size, totalElements);
     }
 
+    @Cacheable(value = "userHoldPrice", key = "#userHoldDTO.getUserId()")
+    public BigDecimal cacheableCalculate(UserHoldDTO userHoldDTO, Map<String, BigDecimal> minPriceMap){
+        List<Asset> userAssets = assetRepo.findAllByUserIdAndStatusIn(userHoldDTO.getUserId(), new ArrayList<>(Arrays.asList(AssetStatus.NORMAL, AssetStatus.TRADING, AssetStatus.GIFTING, AssetStatus.MINTING, AssetStatus.AUCTIONING)));
+        // 分类计算各资产寄售最低价
+        userAssets.forEach(asset -> {
+            if (StringUtils.isBlank(asset.getPrefixName())) {
+                return;
+            }
+            if (asset.getName().contains(Constants.Rarity.SR_LIKE) && !asset.getName().contains(Constants.Rarity.SSR_LIKE)) {
+                calculatePrice(userHoldDTO, asset, minPriceMap, Constants.Rarity.SR_LIKE, Constants.Rarity.SSR_LIKE);
+                return;
+            }
+            if (asset.getName().contains(Constants.Rarity.U_LIKE)) {
+                calculatePrice(userHoldDTO, asset, minPriceMap, Constants.Rarity.U_LIKE, Constants.Rarity.R_LIKE);
+                return;
+            }
+            if (asset.getName().contains(Constants.Rarity.R_LIKE) && !asset.getName().contains(Constants.Rarity.SR_LIKE)) {
+                calculatePrice(userHoldDTO, asset, minPriceMap, Constants.Rarity.R_LIKE, Constants.Rarity.SR_LIKE);
+                return;
+            }
+            if (asset.getName().contains(Constants.Rarity.SSR_LIKE)) {
+                calculatePrice(userHoldDTO, asset, minPriceMap, Constants.Rarity.SSR_LIKE, Constants.Rarity.U_LIKE);
+                return;
+            }
+            calculatePrice(userHoldDTO, asset, minPriceMap, null, null);
+        });
+        return userHoldDTO.getPrice();
+    }
+
     private void calculatePrice(UserHoldDTO userHoldDTO, Asset asset, Map<String, BigDecimal> minPriceMap, String nameLike, String nameNotLike) {
         BigDecimal minPrice;
         String minPriceMapKey = StringUtils.isBlank(nameLike) ? asset.getPrefixName() : asset.getPrefixName().concat(nameLike);