licailing 4 년 전
부모
커밋
2cb3313d24

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

@@ -47,8 +47,12 @@ public interface OrderRepo extends JpaRepository<Order, Long>, JpaSpecificationE
 
     List<Order> findAllByStatus(OrderStatus status);
 
+    List<Order> findAllByStatusAndMinterId(OrderStatus status, Long minterId);
+
     List<Order> findAllByPayTimeIsAfter(LocalDateTime payTime);
 
+    List<Order> findAllByPayTimeIsAfterAndMinterId(LocalDateTime payTime, Long minterId);
+
     @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")

+ 59 - 17
src/main/java/com/izouma/nineth/service/StatisticService.java

@@ -6,6 +6,7 @@ import com.izouma.nineth.domain.Order;
 import com.izouma.nineth.domain.User;
 import com.izouma.nineth.enums.CollectionSource;
 import com.izouma.nineth.enums.OrderStatus;
+import com.izouma.nineth.exception.BusinessException;
 import com.izouma.nineth.repo.OrderRepo;
 import com.izouma.nineth.repo.TokenHistoryRepo;
 import com.izouma.nineth.repo.UserRepo;
@@ -17,6 +18,7 @@ import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalTime;
 import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -30,16 +32,30 @@ public class StatisticService {
     private OrderRepo        orderRepo;
     private TokenHistoryRepo tokenHistoryRepo;
 
-    public Map<String, Object> total() {
+    public Map<String, Object> total(Long userId) {
+        User user1 = userRepo.findByIdAndDelFalse(userId).orElseThrow(new BusinessException("无用户"));
         Map<String, Object> total = new HashMap<>();
+        List<Order> orders;
+
+        if (user1.isAdmin()) {
+            long user = userRepo.countAllByDelFalse();
+            total.put("userNum", user);
+            orders = orderRepo.findAllByStatus(OrderStatus.FINISH);
+        } else {
+            orders = orderRepo.findAllByStatusAndMinterId(OrderStatus.FINISH, userId);
+        }
 
-        long user = userRepo.countAllByDelFalse();
-        total.put("userNum", user);
-
-        List<Order> orders = orderRepo.findAllByStatus(OrderStatus.FINISH);
         Map<CollectionSource, List<Order>> orderMap = orders.stream().collect(Collectors.groupingBy(Order::getSource));
         List<Order> officialOrders = orderMap.get(CollectionSource.OFFICIAL);
         List<Order> transferOrders = orderMap.get(CollectionSource.TRANSFER);
+        if (officialOrders == null) {
+            total.put("officialNum", 0);
+            total.put("transferNum", 0);
+            total.put("officialPrice", 0);
+            total.put("transferPrice", 0);
+            return total;
+        }
+
         total.put("officialNum", officialOrders.size());
         total.put("transferNum", transferOrders.size());
 
@@ -66,13 +82,28 @@ public class StatisticService {
                 item -> DateTimeFormatter.ofPattern("yyyy-MM-dd").format(item.getCreatedAt()), Collectors.counting()));
     }
 
-    public Map<String, Map<String, Long>> orderNumTrend(int day) {
+    public Map<String, Map<String, Long>> orderNumTrend(int day, Long userId) {
         LocalDateTime date = LocalDateTime.of(LocalDate.now(), LocalTime.MIN);
         LocalDateTime start = date.minusDays(day);
-        List<Order> orders = orderRepo.findAllByPayTimeIsAfter(start);
+
+        User user = userRepo.findByIdAndDelFalse(userId).orElseThrow(new BusinessException("无用户"));
+        List<Order> orders;
+        if (user.isAdmin()) {
+            orders = orderRepo.findAllByPayTimeIsAfter(start);
+        } else {
+            orders = orderRepo.findAllByPayTimeIsAfterAndMinterId(start, userId);
+        }
+
+
         Map<CollectionSource, List<Order>> orderMap = orders.stream().collect(Collectors.groupingBy(Order::getSource));
-        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> official = null;
+        if (CollUtil.isNotEmpty(orderMap.get(CollectionSource.OFFICIAL))) {
+            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(
@@ -86,17 +117,28 @@ public class StatisticService {
         return trend;
     }
 
-    public Map<String, Map<String, BigDecimal>> orderPriceTrend(int day) {
+    public Map<String, Map<String, BigDecimal>> orderPriceTrend(int day, Long userId) {
         LocalDateTime date = LocalDateTime.of(LocalDate.now(), LocalTime.MIN);
         LocalDateTime start = date.minusDays(day);
-        List<Order> orders = orderRepo.findAllByPayTimeIsAfter(start);
+
+        User user = userRepo.findByIdAndDelFalse(userId).orElseThrow(new BusinessException("无用户"));
+        List<Order> orders;
+        if (user.isAdmin()) {
+            orders = orderRepo.findAllByPayTimeIsAfter(start);
+        } else {
+            orders = orderRepo.findAllByPayTimeIsAfterAndMinterId(start, userId);
+        }
+
         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> official = null;
+        if (CollUtil.isNotEmpty(orderMap.get(CollectionSource.OFFICIAL))) {
+            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))) {

+ 7 - 6
src/main/java/com/izouma/nineth/web/StatisticController.java

@@ -2,6 +2,7 @@ package com.izouma.nineth.web;
 
 import com.izouma.nineth.service.CacheService;
 import com.izouma.nineth.service.StatisticService;
+import com.izouma.nineth.utils.SecurityUtils;
 import lombok.AllArgsConstructor;
 import org.springframework.cache.annotation.CachePut;
 import org.springframework.cache.annotation.Cacheable;
@@ -26,9 +27,9 @@ public class StatisticController {
 
     @GetMapping("/total")
     @Cacheable("total")
-    @PreAuthorize("hasRole('ADMIN')")
+    @PreAuthorize("hasAnyRole('ADMIN','COMPANY')")
     public Map<String, Object> total() {
-        return statisticService.total();
+        return statisticService.total(SecurityUtils.getAuthenticatedUser().getId());
     }
 
     @GetMapping("/userTrend")
@@ -40,16 +41,16 @@ public class StatisticController {
 
     @GetMapping("/orderNumTrend")
     @Cacheable("orderNumTrend")
-    @PreAuthorize("hasRole('ADMIN')")
+    @PreAuthorize("hasAnyRole('ADMIN','COMPANY')")
     public Map<String, Map<String, Long>> orderNumTrend(int day) {
-        return statisticService.orderNumTrend(day);
+        return statisticService.orderNumTrend(day, SecurityUtils.getAuthenticatedUser().getId());
     }
 
     @GetMapping("/orderPriceTrend")
     @Cacheable("orderPriceTrend")
-    @PreAuthorize("hasRole('ADMIN')")
+    @PreAuthorize("hasAnyRole('ADMIN','COMPANY')")
     public Map<String, Map<String, BigDecimal>> orderPriceTrend(int day) {
-        return statisticService.orderPriceTrend(day);
+        return statisticService.orderPriceTrend(day, SecurityUtils.getAuthenticatedUser().getId());
     }
 
     @GetMapping("/top")

+ 1 - 1
src/main/vue/src/views/CompanyList.vue

@@ -70,7 +70,7 @@ export default {
         return {
             multipleMode: false,
             search: '',
-            url: '/user/all',
+            url: '/user/adminAll',
             downloading: false
         };
     },

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

@@ -22,7 +22,7 @@ public class StatisticServiceTest {
 
     @Test
     public void total() {
-        System.out.println(statisticService.total());
+        System.out.println(statisticService.total(1L));
     }
 
     @Test
@@ -32,12 +32,12 @@ public class StatisticServiceTest {
 
     @Test
     public void orderNumTrend() {
-        System.out.println(statisticService.orderNumTrend(7));
+        System.out.println(statisticService.orderNumTrend(7, 1L));
     }
 
     @Test
     public void orderPriceTrend() {
-        System.out.println(statisticService.orderPriceTrend(7));
+        System.out.println(statisticService.orderPriceTrend(7, 1L));
     }
 
     @Test