feat(owner-vue): dashboard 통계 데이터 조회 쿼리 추가

- dashboard 통계 데이터 조회 쿼리 추가
This commit is contained in:
hoon7566
2022-03-21 20:59:01 +09:00
parent 21ea5ff10f
commit e73175ea1c
4 changed files with 107 additions and 5 deletions

View File

@@ -1,11 +1,14 @@
package com.justpickup.orderservice.domain.order.repository; 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.OrderMainResult;
import com.justpickup.orderservice.domain.order.dto.OrderSearchCondition; import com.justpickup.orderservice.domain.order.dto.OrderSearchCondition;
import com.justpickup.orderservice.domain.order.dto.PrevOrderSearch; import com.justpickup.orderservice.domain.order.dto.PrevOrderSearch;
import com.justpickup.orderservice.domain.order.entity.Order; import com.justpickup.orderservice.domain.order.entity.Order;
import com.justpickup.orderservice.domain.order.entity.OrderStatus; 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 com.querydsl.jpa.impl.JPAQueryFactory;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
@@ -138,4 +141,75 @@ public class OrderRepositoryCustom {
} }
public List<DashBoardDto.OrderPrice> 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<DashBoardDto.SellAmountAWeek> 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();
}
} }

View File

@@ -9,6 +9,7 @@ import org.springframework.data.domain.SliceImpl;
public interface OrderService { public interface OrderService {
OrderMainDto findOrderMain(OrderSearchCondition condition, Long userId); OrderMainDto findOrderMain(OrderSearchCondition condition, Long userId);
DashBoardDto findDashboard(Long userId);
Page<PrevOrderDto> findPrevOrderMain(PrevOrderSearch search, Pageable pageable, Long userId); Page<PrevOrderDto> findPrevOrderMain(PrevOrderSearch search, Pageable pageable, Long userId);
SliceImpl<OrderHistoryDto> findOrderHistory(Pageable pageable, Long userId); SliceImpl<OrderHistoryDto> findOrderHistory(Pageable pageable, Long userId);
void addItemToBasket(OrderItemDto orderItemDto,Long storeId, Long userId); void addItemToBasket(OrderItemDto orderItemDto,Long storeId, Long userId);

View File

@@ -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.StoreByUserIdResponse;
import com.justpickup.orderservice.global.client.store.StoreClient; import com.justpickup.orderservice.global.client.store.StoreClient;
import com.justpickup.orderservice.global.client.user.UserClient; import com.justpickup.orderservice.global.client.user.UserClient;
import com.justpickup.orderservice.global.dto.Result;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
@@ -234,4 +235,24 @@ public class OrderServiceImpl implements OrderService {
order.setOrderStatus(orderStatus); order.setOrderStatus(orderStatus);
} }
@Override
public DashBoardDto findDashboard(Long userId) {
Result<StoreByUserIdResponse> storeByUserId = storeClient.getStoreByUserId(userId);
Long storeId = storeByUserId.getData().getId();
// 하루 판매금액
List<DashBoardDto.OrderPrice> orderPrices = orderRepositoryCustom.salesAmountBetweenADay(storeId);
// 일주일 판매 상위메뉴
DashBoardDto.BestSellItem bestSellItem = orderRepositoryCustom.bestItemBetweenAWeek(storeId);
bestSellItem.setItemName(storeClient.getItem(bestSellItem.getItemId()).getData().getName());
// 일주일 판매금액( 일별 )
List<DashBoardDto.SellAmountAWeek> sellAmountAWeeks = orderRepositoryCustom.salesAmountBetweenAWeek(storeId);
log.info("asdad");
return DashBoardDto.of(orderPrices , bestSellItem, sellAmountAWeeks);
}
} }

View File

@@ -1,9 +1,6 @@
package com.justpickup.orderservice.domain.order.web; package com.justpickup.orderservice.domain.order.web;
import com.justpickup.orderservice.domain.order.dto.OrderMainDto; import com.justpickup.orderservice.domain.order.dto.*;
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.entity.OrderStatus; import com.justpickup.orderservice.domain.order.entity.OrderStatus;
import com.justpickup.orderservice.domain.order.service.OrderService; import com.justpickup.orderservice.domain.order.service.OrderService;
import com.justpickup.orderservice.domain.order.validator.PrevOrderSearchValidator; import com.justpickup.orderservice.domain.order.validator.PrevOrderSearchValidator;
@@ -40,6 +37,15 @@ public class OrderOwnerApiController {
private final OrderService orderService; private final OrderService orderService;
private final PrevOrderSearchValidator prevOrderSearchValidator; private final PrevOrderSearchValidator prevOrderSearchValidator;
@GetMapping("/dashboard")
public ResponseEntity<Result> 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") @GetMapping("/order-main")
public ResponseEntity<Result> orderMain(@Valid OrderSearchCondition condition, public ResponseEntity<Result> orderMain(@Valid OrderSearchCondition condition,
@RequestHeader(value="user-id") String userHeader) { @RequestHeader(value="user-id") String userHeader) {