feat(order): 점주 서비스 지난 주문 Feign 클라이언트 로직 추가
- 아이템 id와 유저 id들을 Set으로 묶어 한번에 통신하게 변경 - Map을 사용하여 id를 key로 map을 name으로 가지게 생성
This commit is contained in:
@@ -0,0 +1,69 @@
|
|||||||
|
package com.justpickup.orderservice.domain.order.dto;
|
||||||
|
|
||||||
|
import com.justpickup.orderservice.domain.order.entity.Order;
|
||||||
|
import com.justpickup.orderservice.domain.order.entity.OrderStatus;
|
||||||
|
import com.justpickup.orderservice.domain.orderItem.entity.OrderItem;
|
||||||
|
import lombok.AccessLevel;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
import static java.util.stream.Collectors.toList;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@NoArgsConstructor(access = AccessLevel.PROTECTED)
|
||||||
|
public class PrevOrderDto {
|
||||||
|
private Long id;
|
||||||
|
private OrderStatus orderStatus;
|
||||||
|
private LocalDateTime orderTime;
|
||||||
|
private long orderPrice;
|
||||||
|
private Long userId;
|
||||||
|
private String userName;
|
||||||
|
|
||||||
|
private List<_PrevOrderItem> orderItems = new ArrayList<>();
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
public static class _PrevOrderItem {
|
||||||
|
private Long id;
|
||||||
|
private Long itemId;
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
// 생성 메소드
|
||||||
|
static _PrevOrderItem of(OrderItem orderItem) {
|
||||||
|
_PrevOrderItem prevOrderItem = new _PrevOrderItem();
|
||||||
|
prevOrderItem.id = orderItem.getId();
|
||||||
|
prevOrderItem.itemId = orderItem.getItemId();
|
||||||
|
return prevOrderItem;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void changeName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 생성 메소드
|
||||||
|
public static PrevOrderDto of(Order order) {
|
||||||
|
PrevOrderDto prevOrder = new PrevOrderDto();
|
||||||
|
prevOrder.id = order.getId();
|
||||||
|
prevOrder.orderStatus = order.getOrderStatus();
|
||||||
|
prevOrder.orderTime = order.getOrderTime();
|
||||||
|
prevOrder.orderPrice = order.getOrderPrice();
|
||||||
|
prevOrder.userId = order.getUserId();
|
||||||
|
|
||||||
|
prevOrder.orderItems = order.getOrderItems()
|
||||||
|
.stream()
|
||||||
|
.map(_PrevOrderItem::of)
|
||||||
|
.collect(toList());
|
||||||
|
|
||||||
|
return prevOrder;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void changeUserName(String userName) {
|
||||||
|
this.userName = userName;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -44,7 +44,7 @@ public class OrderRepositoryCustom {
|
|||||||
|
|
||||||
List<Order> orders = queryFactory
|
List<Order> orders = queryFactory
|
||||||
.selectFrom(order)
|
.selectFrom(order)
|
||||||
.leftJoin(order.transaction).fetchJoin()
|
.leftJoin(order.transaction)
|
||||||
.where(
|
.where(
|
||||||
orderIdLt(condition.getLastOrderId()),
|
orderIdLt(condition.getLastOrderId()),
|
||||||
order.orderTime.between(start, end),
|
order.orderTime.between(start, end),
|
||||||
@@ -75,7 +75,7 @@ public class OrderRepositoryCustom {
|
|||||||
Long count = queryFactory
|
Long count = queryFactory
|
||||||
.select(order.countDistinct())
|
.select(order.countDistinct())
|
||||||
.from(order)
|
.from(order)
|
||||||
.innerJoin(order.transaction)
|
.leftJoin(order.transaction)
|
||||||
.where(
|
.where(
|
||||||
order.orderTime.between(search.getStartDateTime(), search.getEndDateTime()),
|
order.orderTime.between(search.getStartDateTime(), search.getEndDateTime()),
|
||||||
order.storeId.eq(storeId)
|
order.storeId.eq(storeId)
|
||||||
@@ -85,7 +85,7 @@ public class OrderRepositoryCustom {
|
|||||||
// 데이터 가져오기
|
// 데이터 가져오기
|
||||||
List<Order> orders = queryFactory
|
List<Order> orders = queryFactory
|
||||||
.selectFrom(order)
|
.selectFrom(order)
|
||||||
.join(order.transaction).fetchJoin()
|
.leftJoin(order.transaction).fetchJoin()
|
||||||
.where(
|
.where(
|
||||||
order.orderTime.between(search.getStartDateTime(), search.getEndDateTime()),
|
order.orderTime.between(search.getStartDateTime(), search.getEndDateTime()),
|
||||||
order.storeId.eq(storeId)
|
order.storeId.eq(storeId)
|
||||||
|
|||||||
@@ -1,10 +1,6 @@
|
|||||||
package com.justpickup.orderservice.domain.order.service;
|
package com.justpickup.orderservice.domain.order.service;
|
||||||
|
|
||||||
import com.justpickup.orderservice.domain.order.dto.FetchOrderDto;
|
import com.justpickup.orderservice.domain.order.dto.*;
|
||||||
import com.justpickup.orderservice.domain.order.dto.OrderDto;
|
|
||||||
import com.justpickup.orderservice.domain.order.dto.OrderMainDto;
|
|
||||||
import com.justpickup.orderservice.domain.order.dto.OrderSearchCondition;
|
|
||||||
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.orderItem.dto.OrderItemDto;
|
import com.justpickup.orderservice.domain.orderItem.dto.OrderItemDto;
|
||||||
import org.springframework.data.domain.Page;
|
import org.springframework.data.domain.Page;
|
||||||
@@ -13,7 +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);
|
||||||
Page<OrderDto> findPrevOrderMain(PrevOrderSearch search, Pageable pageable, Long storeId);
|
Page<PrevOrderDto> findPrevOrderMain(PrevOrderSearch search, Pageable pageable, Long userId);
|
||||||
SliceImpl<OrderDto> findOrderHistory(Pageable pageable, Long userId);
|
SliceImpl<OrderDto> findOrderHistory(Pageable pageable, Long userId);
|
||||||
void addItemToBasket(OrderItemDto orderItemDto,Long storeId, Long userId);
|
void addItemToBasket(OrderItemDto orderItemDto,Long storeId, Long userId);
|
||||||
FetchOrderDto fetchOrder(Long userId);
|
FetchOrderDto fetchOrder(Long userId);
|
||||||
|
|||||||
@@ -22,7 +22,6 @@ import org.springframework.data.domain.SliceImpl;
|
|||||||
import org.springframework.data.support.PageableExecutionUtils;
|
import org.springframework.data.support.PageableExecutionUtils;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
import org.springframework.util.StopWatch;
|
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
@@ -49,9 +48,6 @@ public class OrderServiceImpl implements OrderService {
|
|||||||
// 주문 가져오기
|
// 주문 가져오기
|
||||||
OrderMainResult orderMainResult = orderRepositoryCustom.findOrderMain(condition, storeResponse.getId());
|
OrderMainResult orderMainResult = orderRepositoryCustom.findOrderMain(condition, storeResponse.getId());
|
||||||
|
|
||||||
StopWatch stopWatch = new StopWatch();
|
|
||||||
stopWatch.start();
|
|
||||||
int count = 0;
|
|
||||||
// 사용자 고유번호 및 아이템 고유번호 필터링
|
// 사용자 고유번호 및 아이템 고유번호 필터링
|
||||||
Set<Long> userIds = new HashSet<>();
|
Set<Long> userIds = new HashSet<>();
|
||||||
Set<Long> itemIds = new HashSet<>();
|
Set<Long> itemIds = new HashSet<>();
|
||||||
@@ -68,20 +64,10 @@ public class OrderServiceImpl implements OrderService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// item name 가져오기
|
// item name 가져오기
|
||||||
count += 1;
|
Map<Long, String> itemNameMap = getItemNameMap(itemIds);
|
||||||
List<GetItemsResponse> itemResponses = storeClient.getItems(itemIds).getData();
|
|
||||||
Map<Long, String> itemNameMap = itemResponses.stream()
|
|
||||||
.collect(
|
|
||||||
toMap(GetItemsResponse::getId, GetItemsResponse::getName)
|
|
||||||
);
|
|
||||||
|
|
||||||
// user name 가져오기
|
// user name 가져오기
|
||||||
count += 1;
|
Map<Long, String> userNameMap = getUserNameMap(userIds);
|
||||||
List<GetCustomerResponse> userResponses = userClient.getCustomers(userIds).getData();
|
|
||||||
Map<Long, String> userNameMap = userResponses.stream()
|
|
||||||
.collect(
|
|
||||||
toMap(GetCustomerResponse::getUserId, GetCustomerResponse::getUserName)
|
|
||||||
);
|
|
||||||
|
|
||||||
// 해당 ID에 맞게 이름 설정해주기
|
// 해당 ID에 맞게 이름 설정해주기
|
||||||
for (OrderMainDto._Order order : orders) {
|
for (OrderMainDto._Order order : orders) {
|
||||||
@@ -92,26 +78,64 @@ public class OrderServiceImpl implements OrderService {
|
|||||||
orderItem.changeItemName(itemName);
|
orderItem.changeItemName(itemName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
stopWatch.stop();
|
|
||||||
log.info("order count = {}, Feign count = {}, [StopWatch] {}",
|
|
||||||
returnDto.getOrders().size(), count, stopWatch.prettyPrint());
|
|
||||||
|
|
||||||
return returnDto;
|
return returnDto;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
private Map<Long, String> getUserNameMap(Iterable<Long> userIds) {
|
||||||
public Page<OrderDto> findPrevOrderMain(PrevOrderSearch search, Pageable pageable, Long storeId) {
|
List<GetCustomerResponse> userResponses = userClient.getCustomers(userIds).getData();
|
||||||
Page<Order> orderPage = orderRepositoryCustom.findPrevOrderMain(search, pageable, storeId);
|
return userResponses.stream()
|
||||||
|
.collect(
|
||||||
|
toMap(GetCustomerResponse::getUserId, GetCustomerResponse::getUserName)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
List<OrderDto> orderDtoList = orderPage.getContent()
|
private Map<Long, String> getItemNameMap(Iterable<Long> itemIds) {
|
||||||
|
List<GetItemsResponse> itemResponses = storeClient.getItems(itemIds).getData();
|
||||||
|
return itemResponses.stream()
|
||||||
|
.collect(
|
||||||
|
toMap(GetItemsResponse::getId, GetItemsResponse::getName)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Page<PrevOrderDto> findPrevOrderMain(PrevOrderSearch search, Pageable pageable, Long userId) {
|
||||||
|
StoreByUserIdResponse store = storeClient.getStoreByUserId(userId).getData();
|
||||||
|
|
||||||
|
Page<Order> orderPage = orderRepositoryCustom.findPrevOrderMain(search, pageable, store.getId());
|
||||||
|
|
||||||
|
List<PrevOrderDto> prevOrderDtoList = orderPage.getContent()
|
||||||
.stream()
|
.stream()
|
||||||
.map(OrderDto::createFullField)
|
.map(PrevOrderDto::of)
|
||||||
.collect(toList());
|
.collect(toList());
|
||||||
|
|
||||||
// 사용자명 및 아이템 이름 가져오기
|
// 사용자명 및 아이템 이름 가져오기
|
||||||
// getUserNameAndItemName(orderDtoList);
|
Set<Long> userIds = new HashSet<>();
|
||||||
|
Set<Long> itemIds = new HashSet<>();
|
||||||
|
|
||||||
return PageableExecutionUtils.getPage(orderDtoList, pageable, orderPage::getTotalElements);
|
for (PrevOrderDto prevOrderDto : prevOrderDtoList) {
|
||||||
|
userIds.add(prevOrderDto.getUserId());
|
||||||
|
for (PrevOrderDto._PrevOrderItem orderItem : prevOrderDto.getOrderItems()) {
|
||||||
|
itemIds.add(orderItem.getItemId());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// item name 가져오기
|
||||||
|
Map<Long, String> itemNameMap = getItemNameMap(itemIds);
|
||||||
|
|
||||||
|
// user name 가져오기
|
||||||
|
Map<Long, String> userNameMap = getUserNameMap(userIds);
|
||||||
|
|
||||||
|
for (PrevOrderDto prevOrderDto : prevOrderDtoList) {
|
||||||
|
String userName = userNameMap.get(prevOrderDto.getUserId());
|
||||||
|
prevOrderDto.changeUserName(userName);
|
||||||
|
for (PrevOrderDto._PrevOrderItem orderItem : prevOrderDto.getOrderItems()) {
|
||||||
|
String itemName = itemNameMap.get(orderItem.getItemId());
|
||||||
|
orderItem.changeName(itemName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return PageableExecutionUtils.getPage(prevOrderDtoList, pageable, orderPage::getTotalElements);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -1,13 +1,12 @@
|
|||||||
package com.justpickup.orderservice.domain.order.web;
|
package com.justpickup.orderservice.domain.order.web;
|
||||||
|
|
||||||
import com.justpickup.orderservice.domain.order.dto.OrderDto;
|
|
||||||
import com.justpickup.orderservice.domain.order.dto.OrderMainDto;
|
import com.justpickup.orderservice.domain.order.dto.OrderMainDto;
|
||||||
import com.justpickup.orderservice.domain.order.dto.OrderSearchCondition;
|
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.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;
|
||||||
import com.justpickup.orderservice.domain.orderItem.dto.OrderItemDto;
|
|
||||||
import com.justpickup.orderservice.global.dto.Result;
|
import com.justpickup.orderservice.global.dto.Result;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
@@ -101,6 +100,7 @@ public class OrderOwnerApiController {
|
|||||||
@GetMapping("/prev-order")
|
@GetMapping("/prev-order")
|
||||||
public ResponseEntity<Result> findPrevOrder(@Valid PrevOrderSearch prevOrderSearch,
|
public ResponseEntity<Result> findPrevOrder(@Valid PrevOrderSearch prevOrderSearch,
|
||||||
@PageableDefault(page = 0, size = 10) Pageable pageable,
|
@PageableDefault(page = 0, size = 10) Pageable pageable,
|
||||||
|
@RequestHeader(value="user-id") String userHeader,
|
||||||
BindingResult bindingResult) throws BindException {
|
BindingResult bindingResult) throws BindException {
|
||||||
// validation
|
// validation
|
||||||
if (bindingResult.hasErrors()) throw new BindException(bindingResult);
|
if (bindingResult.hasErrors()) throw new BindException(bindingResult);
|
||||||
@@ -108,7 +108,8 @@ public class OrderOwnerApiController {
|
|||||||
if (bindingResult.hasErrors()) throw new BindException(bindingResult);
|
if (bindingResult.hasErrors()) throw new BindException(bindingResult);
|
||||||
|
|
||||||
// get data
|
// get data
|
||||||
Page<OrderDto> prevOrderMain = orderService.findPrevOrderMain(prevOrderSearch, pageable, 1L);
|
Long userId = Long.valueOf(userHeader);
|
||||||
|
Page<PrevOrderDto> prevOrderMain = orderService.findPrevOrderMain(prevOrderSearch, pageable, userId);
|
||||||
|
|
||||||
// format data
|
// format data
|
||||||
ResponsePrevOrder responsePrevOrder =
|
ResponsePrevOrder responsePrevOrder =
|
||||||
@@ -118,42 +119,42 @@ public class OrderOwnerApiController {
|
|||||||
|
|
||||||
@Data @AllArgsConstructor @NoArgsConstructor
|
@Data @AllArgsConstructor @NoArgsConstructor
|
||||||
static class ResponsePrevOrder {
|
static class ResponsePrevOrder {
|
||||||
private List<OrderVo> orders;
|
private List<_Order> orders;
|
||||||
private Page page;
|
private Page page;
|
||||||
|
|
||||||
public ResponsePrevOrder(List<OrderDto> orderDtoList, int startPage, int totalPage) {
|
public ResponsePrevOrder(List<PrevOrderDto> orderDtoList, int startPage, int totalPage) {
|
||||||
orders = orderDtoList.stream().map(OrderVo::new).collect(toList());
|
orders = orderDtoList.stream().map(_Order::new).collect(toList());
|
||||||
page = new Page(startPage, totalPage);
|
page = new Page(startPage, totalPage);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
static class OrderVo {
|
static class _Order {
|
||||||
private Long orderId;
|
private Long orderId;
|
||||||
private OrderStatus orderStatus;
|
private OrderStatus orderStatus;
|
||||||
private String orderTime;
|
private String orderTime;
|
||||||
private Long orderPrice;
|
private Long orderPrice;
|
||||||
private String userName;
|
private String userName;
|
||||||
private List<OrderItemVo> orderItems;
|
private List<_OrderItem> orderItems;
|
||||||
|
|
||||||
public OrderVo(OrderDto orderDto) {
|
public _Order(PrevOrderDto prevOrderDto) {
|
||||||
this.orderId = orderDto.getId();
|
this.orderId = prevOrderDto.getId();
|
||||||
this.orderStatus = orderDto.getOrderStatus();
|
this.orderStatus = prevOrderDto.getOrderStatus();
|
||||||
this.orderTime = orderDto.getOrderTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
|
this.orderTime = prevOrderDto.getOrderTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
|
||||||
this.orderPrice = orderDto.getOrderPrice();
|
this.orderPrice = prevOrderDto.getOrderPrice();
|
||||||
this.userName = orderDto.getUserName();
|
this.userName = prevOrderDto.getUserName();
|
||||||
this.orderItems = orderDto.getOrderItemDtoList()
|
this.orderItems = prevOrderDto.getOrderItems()
|
||||||
.stream().map(OrderItemVo::new).collect(toList());
|
.stream().map(_OrderItem::new).collect(toList());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
static class OrderItemVo {
|
static class _OrderItem {
|
||||||
private Long orderItemId;
|
private Long orderItemId;
|
||||||
private String orderItemName;
|
private String orderItemName;
|
||||||
|
|
||||||
public OrderItemVo(OrderItemDto orderItemDto) {
|
public _OrderItem(PrevOrderDto._PrevOrderItem orderItemDto) {
|
||||||
this.orderItemId = orderItemDto.getId();
|
this.orderItemId = orderItemDto.getId();
|
||||||
this.orderItemName = orderItemDto.getItemName();
|
this.orderItemName = orderItemDto.getName();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -19,5 +19,4 @@ public interface StoreClient {
|
|||||||
|
|
||||||
@GetMapping("/api/owner/store/")
|
@GetMapping("/api/owner/store/")
|
||||||
Result<StoreByUserIdResponse> getStoreByUserId(@RequestHeader(value="user-id") Long userId);
|
Result<StoreByUserIdResponse> getStoreByUserId(@RequestHeader(value="user-id") Long userId);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user