feat(owner-vue): dashboard 통계 데이터 조회 쿼리 추가
- dashboard 통계 데이터 조회 쿼리 추가
This commit is contained in:
@@ -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();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user