Ver código fonte

统计接口

licailing 3 anos atrás
pai
commit
4dd3f232e8

+ 42 - 5
src/main/java/com/izouma/nineth/service/StatisticService.java

@@ -1,5 +1,6 @@
 package com.izouma.nineth.service;
 
+import cn.hutool.core.collection.CollUtil;
 import com.izouma.nineth.domain.Order;
 import com.izouma.nineth.domain.User;
 import com.izouma.nineth.enums.AuthorityName;
@@ -71,10 +72,46 @@ public class StatisticService {
         LocalDateTime start = date.minusDays(day);
         List<Order> orders = orderRepo.findAllByPayTimeIsAfter(start);
         Map<CollectionSource, List<Order>> orderMap = orders.stream().collect(Collectors.groupingBy(Order::getSource));
-        orderMap.get(CollectionSource.OFFICIAL).stream().collect(Collectors.groupingBy(
-                item -> new SimpleDateFormat("yyyy-MM-dd").format(item.getPayTime()), Collectors.counting()));
-        orderMap.get(CollectionSource.TRANSFER).stream().collect(Collectors.groupingBy(
-                item -> new SimpleDateFormat("yyyy-MM-dd").format(item.getPayTime()), Collectors.counting()));
-        return null;
+        Map<String, Long> official = orderMap.get(CollectionSource.OFFICIAL).stream().collect(Collectors.groupingBy(
+                item -> DateTimeFormatter.ofPattern("yyyy-MM-dd").format(item.getPayTime()), Collectors.counting()));
+        Map<String, Long> transfer = null;
+        if (CollUtil.isNotEmpty(orderMap.get(CollectionSource.TRANSFER))) {
+            transfer = orderMap.get(CollectionSource.TRANSFER).stream().collect(Collectors.groupingBy(
+                    item -> DateTimeFormatter.ofPattern("yyyy-MM-dd")
+                            .format(item.getPayTime()), Collectors.counting()));
+        }
+
+        Map<String, Map<String, Long>> trend = new HashMap<>();
+        trend.put("official", official);
+        trend.put("transfer", transfer);
+        return trend;
+    }
+
+    public Map<String, Map<String, BigDecimal>> orderPriceTrend(int day) {
+        LocalDateTime date = LocalDateTime.of(LocalDate.now(), LocalTime.MIN);
+        LocalDateTime start = date.minusDays(day);
+        List<Order> orders = orderRepo.findAllByPayTimeIsAfter(start);
+        Map<CollectionSource, List<Order>> orderMap = orders.stream().collect(Collectors.groupingBy(Order::getSource));
+        Map<String, BigDecimal> official = orderMap.get(CollectionSource.OFFICIAL)
+                .stream()
+                .collect(Collectors.groupingBy(
+                        item -> DateTimeFormatter.ofPattern("yyyy-MM-dd")
+                                .format(item.getPayTime()), Collectors.mapping(Order::getTotalPrice,
+                                Collectors.reducing(BigDecimal.ZERO, BigDecimal::add))));
+
+        Map<String, BigDecimal> transfer = null;
+        if (CollUtil.isNotEmpty(orderMap.get(CollectionSource.TRANSFER))) {
+            transfer = orderMap.get(CollectionSource.TRANSFER)
+                    .stream()
+                    .collect(Collectors.groupingBy(
+                            item -> DateTimeFormatter.ofPattern("yyyy-MM-dd")
+                                    .format(item.getPayTime()), Collectors.mapping(Order::getTotalPrice,
+                                    Collectors.reducing(BigDecimal.ZERO, BigDecimal::add))));
+        }
+
+        Map<String, Map<String, BigDecimal>> trend = new HashMap<>();
+        trend.put("official", official);
+        trend.put("transfer", transfer);
+        return trend;
     }
 }

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

@@ -0,0 +1,37 @@
+package com.izouma.nineth.web;
+
+import com.izouma.nineth.service.StatisticService;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.math.BigDecimal;
+import java.util.Map;
+
+@RestController
+@RequestMapping("/statistic")
+@AllArgsConstructor
+public class StatisticController {
+    private StatisticService statisticService;
+
+    @GetMapping("/total")
+    public Map<String, Object> total() {
+        return statisticService.total();
+    }
+
+    @GetMapping("/userTrend")
+    public Map<String, Long> userTrend(int day) {
+        return statisticService.userTrend(day);
+    }
+
+    @GetMapping("/orderNumTrend")
+    public Map<String, Map<String, Long>> orderNumTrend(int day) {
+        return statisticService.orderNumTrend(day);
+    }
+
+    @GetMapping("/orderPriceTrend")
+    public Map<String, Map<String, BigDecimal>> orderPriceTrend(int day) {
+        return statisticService.orderPriceTrend(day);
+    }
+}

+ 11 - 1
src/test/java/com/izouma/nineth/service/StatisticServiceTest.java

@@ -9,7 +9,7 @@ import org.springframework.test.context.junit4.SpringRunner;
 
 @SpringBootTest
 @RunWith(SpringRunner.class)
-public class StatisticServiceTest{
+public class StatisticServiceTest {
 
     @Autowired
     private StatisticService statisticService;
@@ -23,4 +23,14 @@ public class StatisticServiceTest{
     public void userTrend() {
         System.out.println(statisticService.userTrend(7));
     }
+
+    @Test
+    public void orderNumTrend() {
+        System.out.println(statisticService.orderNumTrend(7));
+    }
+
+    @Test
+    public void orderPriceTrend() {
+        System.out.println(statisticService.orderPriceTrend(7));
+    }
 }