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) {