Browse Source

稀有度查询调整

sunkean 3 years ago
parent
commit
170c9c7a2f

+ 8 - 0
src/main/java/com/izouma/nineth/config/Constants.java

@@ -42,4 +42,12 @@ public interface Constants {
 
         String AUCTION = "auctionOrder";
     }
+
+    interface Rarity {
+        String SSR    = "SSR";
+        String SR     = "SR";
+        String U     = "U";
+
+        String ACTIVITY_RANK_ID = "activity_rank_id";
+    }
 }

+ 4 - 2
src/main/java/com/izouma/nineth/repo/BlindBoxItemRepo.java

@@ -7,7 +7,9 @@ import org.springframework.data.jpa.repository.Modifying;
 import org.springframework.data.jpa.repository.Query;
 
 import javax.transaction.Transactional;
+import java.math.BigDecimal;
 import java.util.List;
+import java.util.Map;
 
 public interface BlindBoxItemRepo extends JpaRepository<BlindBoxItem, Long>, JpaSpecificationExecutor<BlindBoxItem> {
     @Query("update BlindBoxItem t set t.del = true where t.id = ?1")
@@ -47,6 +49,6 @@ public interface BlindBoxItemRepo extends JpaRepository<BlindBoxItem, Long>, Jpa
     @Transactional
     void increaseStockAndDecreaseSale(Long id, int num);
 
-    @Query(nativeQuery = true, value = "select CONCAT(sum(stock),'/',sum(total))from blind_box_item where blind_box_id = ?1 and name like ?2 AND NAME NOT LIKE ?3")
-    String getBlindBoxRare(Long blindBoxId, String rare, String not);
+    @Query(nativeQuery = true, value = "select sum(stock) stock ,sum(total) total from blind_box_item where blind_box_id = ?1 and name like ?2 AND NAME NOT LIKE ?3")
+    Map<String, BigDecimal> getBlindBoxRare(Long blindBoxId, String rare, String not);
 }

+ 23 - 10
src/main/java/com/izouma/nineth/service/BlindBoxItemService.java

@@ -1,5 +1,6 @@
 package com.izouma.nineth.service;
 
+import com.izouma.nineth.config.Constants;
 import com.izouma.nineth.domain.BlindBoxItem;
 import com.izouma.nineth.dto.PageQuery;
 import com.izouma.nineth.dto.PageWrapper;
@@ -10,7 +11,10 @@ import lombok.AllArgsConstructor;
 import org.springframework.cache.annotation.Cacheable;
 import org.springframework.stereotype.Service;
 
+import java.math.BigDecimal;
 import java.util.HashMap;
+import java.util.Map;
+import java.util.Objects;
 
 @Service
 @AllArgsConstructor
@@ -18,10 +22,6 @@ public class BlindBoxItemService {
 
     private BlindBoxItemRepo blindBoxItemRepo;
 
-    private final String SSR = "SSR";
-    private final String SR = "SR";
-    private final String U = "U";
-
     @Cacheable(value = "blindBoxList", key = "#pageQuery.hashCode()")
     public PageWrapper<BlindBoxItem> all(PageQuery pageQuery) {
         return PageWrapper.of(blindBoxItemRepo.findAll(JpaUtils.toSpecification(pageQuery, BlindBoxItem.class), JpaUtils.toPageRequest(pageQuery)));
@@ -29,18 +29,31 @@ public class BlindBoxItemService {
 
     public HashMap<String, String> getBlindBoxRare(Long blindBoxId) {
         HashMap<String, String> rare = new HashMap<>();
-        String ssr = blindBoxItemRepo.getBlindBoxRare(blindBoxId, "%" + SSR + " #%", "%" + U + " #%");
+        Map<String, BigDecimal> ssrMap = blindBoxItemRepo.getBlindBoxRare(blindBoxId, "%" + Constants.Rarity.SSR + " #%", "%" + Constants.Rarity.U + " #%");
+        String ssr = convertToStr(ssrMap);
         if (StringUtil.isNotBlank(ssr)) {
-            rare.put(SSR, ssr);
+            rare.put(Constants.Rarity.SSR, ssr);
         }
-        String sr = blindBoxItemRepo.getBlindBoxRare(blindBoxId, "%" + SR + " #%", "%" + SSR + " #%");
+        Map<String, BigDecimal> srMap = blindBoxItemRepo.getBlindBoxRare(blindBoxId, "%" + Constants.Rarity.SR + " #%", "%" + Constants.Rarity.SSR + " #%");
+        String sr = convertToStr(srMap);
         if (StringUtil.isNotBlank(sr)) {
-            rare.put(SR, sr);
+            rare.put(Constants.Rarity.SR, sr);
         }
-        String u = blindBoxItemRepo.getBlindBoxRare(blindBoxId, "%" + U + " #%", "%" + SR + " #%");
+        Map<String, BigDecimal> uMap = blindBoxItemRepo.getBlindBoxRare(blindBoxId, "%" + Constants.Rarity.U + " #%", "%" + Constants.Rarity.SR + " #%");
+        String u = convertToStr(uMap);
         if (StringUtil.isNotBlank(u)) {
-            rare.put(U, u);
+            rare.put(Constants.Rarity.U, u);
         }
         return rare;
     }
+
+    private String convertToStr(Map<String, BigDecimal> map) {
+        if (map.containsKey("total") && Objects.nonNull(map.get("total"))) {
+            if (map.containsKey("stock") && Objects.nonNull(map.get("stock"))) {
+                return map.get("stock").toString().concat("/").concat(map.get("total").toString());
+            }
+            return "0/" + map.get("total").toString();
+        }
+        return null;
+    }
 }