sunkean 2 лет назад
Родитель
Сommit
753c8f3510

+ 3 - 0
src/main/java/com/izouma/nineth/config/MetaConstants.java

@@ -23,4 +23,7 @@ public interface MetaConstants {
     String REDIS_STOCK_PREFIX = "stock:";
 
     Long META_GOLD_RECEIVED_RANK_ID = 1L;
+
+    int META_GOLD_RECEIVED_RANK_LIMIT_NUM = 50;
+
 }

+ 4 - 0
src/main/java/com/izouma/nineth/repo/MetaUserGoldRecordRepo.java

@@ -18,4 +18,8 @@ public interface MetaUserGoldRecordRepo extends JpaRepository<MetaUserGoldRecord
 
     @Query(value = "select user_id userId, sum(operation_num) remark, nickname nickName, avatar head from meta_user_gold_record inner join user u on meta_user_gold_record.user_id = u.id where meta_user_gold_record.created_at between ?1 and ?2 and operation_num > 0 group by user_id  order by sum(operation_num) desc", nativeQuery = true)
     List<Map<String, String>> rank(String beginTime, String endTime);
+
+    @Query(value = "select user_id userId, sum(operation_num) remark, nickname nickName, avatar head from meta_user_gold_record inner join user u on meta_user_gold_record.user_id = u.id where meta_user_gold_record.created_at between ?1 and ?2 and operation_num > 0 group by user_id  order by sum(operation_num) desc limit ?3", nativeQuery = true)
+    List<Map<String, String>> rankLimit(String beginTime, String endTime, int num);
+
 }

+ 1 - 9
src/main/java/com/izouma/nineth/service/MetaRankService.java

@@ -5,7 +5,6 @@ import com.alibaba.fastjson.JSONArray;
 import com.izouma.nineth.config.MetaConstants;
 import com.izouma.nineth.domain.MetaRank;
 import com.izouma.nineth.dto.MetaRankDTO;
-import com.izouma.nineth.dto.MetaRestResult;
 import com.izouma.nineth.dto.PageQuery;
 import com.izouma.nineth.dto.PageWrapper;
 import com.izouma.nineth.exception.BusinessException;
@@ -39,19 +38,12 @@ public class MetaRankService {
         }
         Long id = Convert.toLong(query.get("id"));
         if (id.equals(MetaConstants.META_GOLD_RECEIVED_RANK_ID)) {
-            return buildPage(pageQuery, metaUserGoldRecordService.rank());
+            return buildPage(pageQuery, metaUserGoldRecordService.rank(false));
         }
         // ...
         throw new BusinessException("非法排行榜id");
     }
 
-    public MetaRestResult<List<MetaRankDTO>> metaQuery() {
-        List<Map<String, String>> rank = metaUserGoldRecordService.rank();
-        if (CollectionUtils.isEmpty(rank)) {
-            return MetaRestResult.returnSuccess(new ArrayList<>());
-        }
-        return MetaRestResult.returnSuccess(convertMapToJavaList(rank));
-    }
 
     private Page<MetaRankDTO> buildPage(PageQuery pageQuery, List<Map<String, String>> rank) {
         if (CollectionUtils.isEmpty(rank)) {

+ 25 - 1
src/main/java/com/izouma/nineth/service/MetaUserGoldRecordService.java

@@ -1,14 +1,19 @@
 package com.izouma.nineth.service;
 
+import com.alibaba.fastjson.JSONArray;
 import com.izouma.nineth.config.MetaConstants;
 import com.izouma.nineth.domain.MetaUserGoldRecord;
+import com.izouma.nineth.dto.MetaRankDTO;
+import com.izouma.nineth.dto.MetaRestResult;
 import com.izouma.nineth.dto.PageQuery;
 import com.izouma.nineth.repo.MetaUserGoldRecordRepo;
 import com.izouma.nineth.utils.JpaUtils;
 import lombok.AllArgsConstructor;
+import org.apache.commons.collections.CollectionUtils;
 import org.springframework.data.domain.Page;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
@@ -24,9 +29,28 @@ public class MetaUserGoldRecordService {
         return metaUserGoldRecordRepo.findAll(JpaUtils.toSpecification(pageQuery, MetaUserGoldRecord.class), JpaUtils.toPageRequest(pageQuery));
     }
 
-    public List<Map<String, String>> rank() {
+    public MetaRestResult<List<MetaRankDTO>> top() {
+        List<Map<String, String>> rank = rank(true);
+        if (CollectionUtils.isEmpty(rank)) {
+            return MetaRestResult.returnSuccess(new ArrayList<>());
+        }
+        JSONArray jsonArray = new JSONArray();
+        jsonArray.addAll(rank);
+        return MetaRestResult.returnSuccess(jsonArray.toJavaList(MetaRankDTO.class));
+    }
+
+    /**
+     * 统计规定时间内用户获取金币的榜单
+     *
+     * @param limit 是否查询全部
+     * @return 榜单数据
+     */
+    public List<Map<String, String>> rank(boolean limit) {
         String beginTime = metaParamsConfigService.getString(MetaConstants.META_GOLD_TOP_BEGIN_TIME);
         String endTime = metaParamsConfigService.getString(MetaConstants.META_GOLD_TOP_END_TIME);
+        if (limit) {
+            return metaUserGoldRecordRepo.rankLimit(beginTime, endTime, MetaConstants.META_GOLD_RECEIVED_RANK_LIMIT_NUM);
+        }
         return metaUserGoldRecordRepo.rank(beginTime, endTime);
     }
 }

+ 0 - 6
src/main/java/com/izouma/nineth/web/MetaRankController.java

@@ -2,7 +2,6 @@ package com.izouma.nineth.web;
 
 import com.izouma.nineth.domain.MetaRank;
 import com.izouma.nineth.dto.MetaRankDTO;
-import com.izouma.nineth.dto.MetaRestResult;
 import com.izouma.nineth.dto.PageQuery;
 import com.izouma.nineth.exception.BusinessException;
 import com.izouma.nineth.repo.MetaRankRepo;
@@ -44,11 +43,6 @@ public class MetaRankController extends BaseController {
         return metaRankService.rank(pageQuery);
     }
 
-    @GetMapping("/metaQuery")
-    public MetaRestResult<List<MetaRankDTO>> metaQuery() {
-        return metaRankService.metaQuery();
-    }
-
     @GetMapping("/excel/rank")
     @ResponseBody
     public void excelTop(HttpServletResponse response, PageQuery pageQuery) throws IOException {

+ 7 - 0
src/main/java/com/izouma/nineth/web/MetaUserGoldRecordController.java

@@ -1,6 +1,8 @@
 package com.izouma.nineth.web;
 
 import com.izouma.nineth.domain.MetaUserGoldRecord;
+import com.izouma.nineth.dto.MetaRankDTO;
+import com.izouma.nineth.dto.MetaRestResult;
 import com.izouma.nineth.dto.PageQuery;
 import com.izouma.nineth.exception.BusinessException;
 import com.izouma.nineth.repo.MetaUserGoldRecordRepo;
@@ -56,5 +58,10 @@ public class MetaUserGoldRecordController extends BaseController {
         List<MetaUserGoldRecord> data = all(pageQuery).getContent();
         ExcelUtils.export(response, data);
     }
+
+    @GetMapping("/top")
+    public MetaRestResult<List<MetaRankDTO>> top() {
+        return metaUserGoldRecordService.top();
+    }
 }