From e73175ea1c5e0b3ee98a87e6ee1134607fc2bf12 Mon Sep 17 00:00:00 2001 From: hoon7566 Date: Mon, 21 Mar 2022 20:59:01 +0900 Subject: [PATCH] =?UTF-8?q?feat(owner-vue):=20dashboard=20=ED=86=B5?= =?UTF-8?q?=EA=B3=84=20=EB=8D=B0=EC=9D=B4=ED=84=B0=20=EC=A1=B0=ED=9A=8C=20?= =?UTF-8?q?=EC=BF=BC=EB=A6=AC=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - dashboard 통계 데이터 조회 쿼리 추가 --- .../repository/OrderRepositoryCustom.java | 76 ++++++++++++++++++- .../domain/order/service/OrderService.java | 1 + .../order/service/OrderServiceImpl.java | 21 +++++ .../order/web/OrderOwnerApiController.java | 14 +++- 4 files changed, 107 insertions(+), 5 deletions(-) diff --git a/order-service/src/main/java/com/justpickup/orderservice/domain/order/repository/OrderRepositoryCustom.java b/order-service/src/main/java/com/justpickup/orderservice/domain/order/repository/OrderRepositoryCustom.java index c72df97..7811f9f 100644 --- a/order-service/src/main/java/com/justpickup/orderservice/domain/order/repository/OrderRepositoryCustom.java +++ b/order-service/src/main/java/com/justpickup/orderservice/domain/order/repository/OrderRepositoryCustom.java @@ -1,11 +1,14 @@ package com.justpickup.orderservice.domain.order.repository; +import com.justpickup.orderservice.domain.order.dto.DashBoardDto; import com.justpickup.orderservice.domain.order.dto.OrderMainResult; import com.justpickup.orderservice.domain.order.dto.OrderSearchCondition; import com.justpickup.orderservice.domain.order.dto.PrevOrderSearch; import com.justpickup.orderservice.domain.order.entity.Order; import com.justpickup.orderservice.domain.order.entity.OrderStatus; -import com.querydsl.core.types.dsl.BooleanExpression; +import com.querydsl.core.types.ConstantImpl; +import com.querydsl.core.types.Projections; +import com.querydsl.core.types.dsl.*; import com.querydsl.jpa.impl.JPAQueryFactory; import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Page; @@ -138,4 +141,75 @@ public class OrderRepositoryCustom { } + public List salesAmountBetweenADay(Long storeId){ + LocalDateTime today = LocalDateTime.now(); + LocalDateTime startTime = LocalDateTime.of(today.getYear(),today.getMonth(),today.getDayOfMonth(),0,0); + + return queryFactory + .select(Projections.fields(DashBoardDto.OrderPrice.class, + order.orderPrice + )) + .from(order) + .where( + order.storeId.eq(storeId) + .and( order.orderTime.between(startTime,today)) + ).fetch(); + } + + public DashBoardDto.BestSellItem bestItemBetweenAWeek(Long storeId){ + LocalDateTime today = LocalDateTime.now(); + LocalDateTime startTime = LocalDateTime.of(today.getYear(), + today.getMonth(), + today.getDayOfMonth(), + 0,0) + .minusDays(7); + + return queryFactory. + select( + Projections.fields(DashBoardDto.BestSellItem.class, + orderItem.itemId.as("itemId"), + orderItem.count.sum().as("sumCounts") + ) + ) + .from(orderItem) + .join(orderItem.order, order) + .where(orderItem.order.storeId.eq(storeId) + .and(orderItem.order.orderTime.between(startTime,today))) + .groupBy(orderItem.itemId) + .orderBy(orderItem.count.sum().desc()) + .limit(1L) + .fetchOne() + ; + } + + public List salesAmountBetweenAWeek(Long storeId){ + LocalDateTime today = LocalDateTime.now(); + LocalDateTime startTime = LocalDateTime.of(today.getYear(), + today.getMonth(), + today.getDayOfMonth(), + 0,0) + .minusDays(7); + + + DateTimeTemplate formattedDate = + Expressions.dateTimeTemplate(LocalDateTime.class, + "CAST({0} AS date) ", orderItem.order.orderTime ); + + return queryFactory. + select( + Projections.fields(DashBoardDto.SellAmountAWeek.class, + formattedDate.as("sellDate"), + orderItem.price.sum().multiply(orderItem.count.sum()).as("sellAmount") + ) + ) + .from(orderItem) + .join(orderItem.order, order) + .where(orderItem.order.storeId.eq(storeId) + .and(orderItem.order.orderTime.between(startTime,today))) + .groupBy(formattedDate) + .fetch(); + + } + + } diff --git a/order-service/src/main/java/com/justpickup/orderservice/domain/order/service/OrderService.java b/order-service/src/main/java/com/justpickup/orderservice/domain/order/service/OrderService.java index 846671e..b7a95e4 100644 --- a/order-service/src/main/java/com/justpickup/orderservice/domain/order/service/OrderService.java +++ b/order-service/src/main/java/com/justpickup/orderservice/domain/order/service/OrderService.java @@ -9,6 +9,7 @@ import org.springframework.data.domain.SliceImpl; public interface OrderService { OrderMainDto findOrderMain(OrderSearchCondition condition, Long userId); + DashBoardDto findDashboard(Long userId); Page findPrevOrderMain(PrevOrderSearch search, Pageable pageable, Long userId); SliceImpl findOrderHistory(Pageable pageable, Long userId); void addItemToBasket(OrderItemDto orderItemDto,Long storeId, Long userId); diff --git a/order-service/src/main/java/com/justpickup/orderservice/domain/order/service/OrderServiceImpl.java b/order-service/src/main/java/com/justpickup/orderservice/domain/order/service/OrderServiceImpl.java index bb9e53f..31110eb 100644 --- a/order-service/src/main/java/com/justpickup/orderservice/domain/order/service/OrderServiceImpl.java +++ b/order-service/src/main/java/com/justpickup/orderservice/domain/order/service/OrderServiceImpl.java @@ -14,6 +14,7 @@ import com.justpickup.orderservice.global.client.store.GetStoreResponse; import com.justpickup.orderservice.global.client.store.StoreByUserIdResponse; import com.justpickup.orderservice.global.client.store.StoreClient; import com.justpickup.orderservice.global.client.user.UserClient; +import com.justpickup.orderservice.global.dto.Result; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.data.domain.Page; @@ -234,4 +235,24 @@ public class OrderServiceImpl implements OrderService { order.setOrderStatus(orderStatus); } + @Override + public DashBoardDto findDashboard(Long userId) { + + Result storeByUserId = storeClient.getStoreByUserId(userId); + Long storeId = storeByUserId.getData().getId(); + + // 하루 판매금액 + List orderPrices = orderRepositoryCustom.salesAmountBetweenADay(storeId); + + // 일주일 판매 상위메뉴 + DashBoardDto.BestSellItem bestSellItem = orderRepositoryCustom.bestItemBetweenAWeek(storeId); + bestSellItem.setItemName(storeClient.getItem(bestSellItem.getItemId()).getData().getName()); + + // 일주일 판매금액( 일별 ) + List sellAmountAWeeks = orderRepositoryCustom.salesAmountBetweenAWeek(storeId); + + log.info("asdad"); + + return DashBoardDto.of(orderPrices , bestSellItem, sellAmountAWeeks); + } } diff --git a/order-service/src/main/java/com/justpickup/orderservice/domain/order/web/OrderOwnerApiController.java b/order-service/src/main/java/com/justpickup/orderservice/domain/order/web/OrderOwnerApiController.java index 04cccde..45688c8 100644 --- a/order-service/src/main/java/com/justpickup/orderservice/domain/order/web/OrderOwnerApiController.java +++ b/order-service/src/main/java/com/justpickup/orderservice/domain/order/web/OrderOwnerApiController.java @@ -1,9 +1,6 @@ package com.justpickup.orderservice.domain.order.web; -import com.justpickup.orderservice.domain.order.dto.OrderMainDto; -import com.justpickup.orderservice.domain.order.dto.OrderSearchCondition; -import com.justpickup.orderservice.domain.order.dto.PrevOrderDto; -import com.justpickup.orderservice.domain.order.dto.PrevOrderSearch; +import com.justpickup.orderservice.domain.order.dto.*; import com.justpickup.orderservice.domain.order.entity.OrderStatus; import com.justpickup.orderservice.domain.order.service.OrderService; import com.justpickup.orderservice.domain.order.validator.PrevOrderSearchValidator; @@ -40,6 +37,15 @@ public class OrderOwnerApiController { private final OrderService orderService; private final PrevOrderSearchValidator prevOrderSearchValidator; + @GetMapping("/dashboard") + public ResponseEntity dashboard( @RequestHeader(value="user-id") String userId) { + + DashBoardDto dashboardDto = orderService.findDashboard(Long.valueOf(userId)); + + return ResponseEntity.status(HttpStatus.OK) + .body(Result.createSuccessResult(dashboardDto)); + } + @GetMapping("/order-main") public ResponseEntity orderMain(@Valid OrderSearchCondition condition, @RequestHeader(value="user-id") String userHeader) {