licailing пре 3 година
родитељ
комит
203f5cfa45

+ 5 - 2
src/main/java/com/izouma/nineth/repo/OrderRepo.java

@@ -46,7 +46,10 @@ public interface OrderRepo extends JpaRepository<Order, Long>, JpaSpecificationE
 
     List<Order> findAllByStatus(OrderStatus status);
 
-    List<Order> findAllByPayTimeBetween(LocalDateTime start, LocalDateTime end);
-
     List<Order> findAllByPayTimeIsAfter(LocalDateTime payTime);
+
+    @Query(nativeQuery = true, value = "select user_id, sum(price) total from raex.order_info " +
+            "where (status = 'FINISH' or status = 'PROCESSING') " +
+            "group by user_id order by sum(price) desc limit 50")
+    List<Object[]> sumPrice();
 }

+ 6 - 0
src/main/java/com/izouma/nineth/repo/TokenHistoryRepo.java

@@ -9,8 +9,10 @@ import org.springframework.data.jpa.repository.Modifying;
 import org.springframework.data.jpa.repository.Query;
 
 import javax.transaction.Transactional;
+import java.time.LocalDateTime;
 import java.util.Collection;
 import java.util.List;
+import java.util.Map;
 
 public interface TokenHistoryRepo extends JpaRepository<TokenHistory, Long>, JpaSpecificationExecutor<TokenHistory> {
     List<TokenHistory> findByTokenIdOrderByCreatedAtDesc(String tokenId);
@@ -38,4 +40,8 @@ public interface TokenHistoryRepo extends JpaRepository<TokenHistory, Long>, Jpa
     List<TokenHistory> findError();
 
     List<TokenHistory> findByOperationAndPriceNull(String oper);
+
+    @Query(nativeQuery = true, value = "select to_user_id , to_user, sum(price) total from raex.token_history " +
+            "where created_at between ?1 and ?2 group by to_user_id order by sum(price) desc limit ?3")
+    List<Map<String, Object>> sumPrice(LocalDateTime start, LocalDateTime end, int size);
 }

+ 12 - 4
src/main/java/com/izouma/nineth/service/StatisticService.java

@@ -1,24 +1,24 @@
 package com.izouma.nineth.service;
 
 import cn.hutool.core.collection.CollUtil;
+import com.alibaba.fastjson.JSONObject;
 import com.izouma.nineth.domain.Order;
 import com.izouma.nineth.domain.User;
 import com.izouma.nineth.enums.AuthorityName;
 import com.izouma.nineth.enums.CollectionSource;
 import com.izouma.nineth.enums.OrderStatus;
 import com.izouma.nineth.repo.OrderRepo;
+import com.izouma.nineth.repo.TokenHistoryRepo;
 import com.izouma.nineth.repo.UserRepo;
 import com.izouma.nineth.security.Authority;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
-import java.text.SimpleDateFormat;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalTime;
 import java.time.format.DateTimeFormatter;
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -28,8 +28,9 @@ import java.util.stream.Collectors;
 @AllArgsConstructor
 public class StatisticService {
 
-    private UserRepo  userRepo;
-    private OrderRepo orderRepo;
+    private UserRepo         userRepo;
+    private OrderRepo        orderRepo;
+    private TokenHistoryRepo tokenHistoryRepo;
 
     public Map<String, Object> total() {
         Map<String, Object> total = new HashMap<>();
@@ -114,4 +115,11 @@ public class StatisticService {
         trend.put("transfer", transfer);
         return trend;
     }
+
+    public String top(int year, int month, int size) {
+        LocalDateTime start = LocalDateTime.of(year, month, 1, 0, 0, 0);
+        LocalDateTime end = start.plusMonths(1).minusSeconds(1);
+        List<Map<String, Object>> maps = tokenHistoryRepo.sumPrice(start, end, size);
+        return JSONObject.toJSONString(maps);
+    }
 }

+ 5 - 0
src/main/java/com/izouma/nineth/web/StatisticController.java

@@ -34,4 +34,9 @@ public class StatisticController {
     public Map<String, Map<String, BigDecimal>> orderPriceTrend(int day) {
         return statisticService.orderPriceTrend(day);
     }
+
+    @GetMapping("/top")
+    public String top(int year, int month) {
+        return statisticService.top(year, month, 50);
+    }
 }

+ 35 - 0
src/test/java/com/izouma/nineth/repo/OrderRepoTest.java

@@ -0,0 +1,35 @@
+package com.izouma.nineth.repo;
+
+import com.alibaba.fastjson.JSONObject;
+import com.izouma.nineth.ApplicationTests;
+import org.junit.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.util.List;
+import java.util.Map;
+
+
+public class OrderRepoTest extends ApplicationTests {
+
+    @Autowired
+    private OrderRepo        orderRepo;
+    @Autowired
+    private TokenHistoryRepo tokenHistoryRepo;
+
+    @Test
+    public void sumPrice() {
+//        System.out.println(orderRepo.sumPrice());
+        List<Object[]> objects = orderRepo.sumPrice();
+        System.out.println(JSONObject.toJSON(objects));
+    }
+
+    @Test
+    public void sumPrice1() {
+        List<Map<String, Object>> objects = tokenHistoryRepo.sumPrice(LocalDateTime.of(LocalDate.of(2022, 3, 1), LocalTime.MIN),
+                LocalDateTime.now(), 3);
+        System.out.println(JSONObject.toJSONString(objects));
+    }
+}