diff --git a/src/main/java/com/rootandfruit/server/api/controller/OrdersController.java b/src/main/java/com/rootandfruit/server/api/controller/OrdersController.java index 1c251a9..b5ee10f 100644 --- a/src/main/java/com/rootandfruit/server/api/controller/OrdersController.java +++ b/src/main/java/com/rootandfruit/server/api/controller/OrdersController.java @@ -95,7 +95,10 @@ public ResponseEntity searchFieldPositionByCursor( @RequestParam(required = false) final LocalDate deliveryDate, @RequestParam(required = false) final String productName, @RequestParam(required = false) final String deliveryStatus, - @RequestParam(required = false) Long cursorOrderId + @RequestParam(required = false) Long cursorOrderId, + @RequestParam(required = false) final String senderName, + @RequestParam(required = false) final String recipientName, + @RequestParam(required = false) final Integer orderNumber ) { return ResponseEntity.ok(ordersService.searchOrderByCursor( @@ -103,7 +106,10 @@ public ResponseEntity searchFieldPositionByCursor( deliveryDate, productName, deliveryStatus, - cursorOrderId + cursorOrderId, + senderName, + recipientName, + orderNumber )); } } diff --git a/src/main/java/com/rootandfruit/server/api/repository/OrdersCustomRepository.java b/src/main/java/com/rootandfruit/server/api/repository/OrdersCustomRepository.java index 83daf20..0a03d04 100644 --- a/src/main/java/com/rootandfruit/server/api/repository/OrdersCustomRepository.java +++ b/src/main/java/com/rootandfruit/server/api/repository/OrdersCustomRepository.java @@ -2,6 +2,7 @@ import com.rootandfruit.server.api.domain.DeliveryStatus; import com.rootandfruit.server.api.domain.Orders; +import jakarta.persistence.criteria.CriteriaBuilder.In; import java.time.LocalDate; import java.util.List; @@ -10,5 +11,6 @@ List searchOrders(LocalDate orderReceivedDate, LocalDate deliveryDate, S DeliveryStatus deliveryStatus); List searchOrdersWithCursor(LocalDate orderReceivedDate, LocalDate deliveryDate, String productName, - DeliveryStatus deliveryStatus, Long cursorOrderId); + DeliveryStatus deliveryStatus, Long cursorOrderId, String senderName, + String recipientName, Integer orderNumber); } diff --git a/src/main/java/com/rootandfruit/server/api/repository/OrdersRepositoryImpl.java b/src/main/java/com/rootandfruit/server/api/repository/OrdersRepositoryImpl.java index ec8e6f5..f4f551e 100644 --- a/src/main/java/com/rootandfruit/server/api/repository/OrdersRepositoryImpl.java +++ b/src/main/java/com/rootandfruit/server/api/repository/OrdersRepositoryImpl.java @@ -42,7 +42,8 @@ public List searchOrders(LocalDate orderReceivedDate, LocalDate delivery @Override public List searchOrdersWithCursor(LocalDate orderReceivedDate, LocalDate deliveryDate, String productName, - DeliveryStatus deliveryStatus, Long cursorOrderId) { + DeliveryStatus deliveryStatus, Long cursorOrderId, String senderName, + String recipientName, Integer orderNumber) { int limit = 50; JPAQuery query = queryFactory .selectFrom(orders) @@ -55,15 +56,28 @@ public List searchOrdersWithCursor(LocalDate orderReceivedDate, LocalDat ltDeliveryDate(deliveryDate), eqProductName(productName), eqDeliveryStatus(deliveryStatus), - cursorCondition(cursorOrderId) // 커서 조건 + cursorCondition(cursorOrderId), + eqSenderName(senderName), + eqRecipientName(recipientName), + eqOrderNumber(orderNumber) ) .orderBy(orders.id.desc()) .limit(limit); - System.out.println("========================"); - System.out.println(query.toString()); return query.fetch(); } + private BooleanExpression eqSenderName(String senderName) { + return senderName != null ? QDeliveryInfo.deliveryInfo.senderName.eq(senderName) : null; + } + + private BooleanExpression eqRecipientName(String recipientName) { + return recipientName != null ? QDeliveryInfo.deliveryInfo.recipientName.eq(recipientName) : null; + } + + private BooleanExpression eqOrderNumber(Integer orderNumber) { + return orderNumber != null ? orders.orderNumber.eq(orderNumber) : null; + } + private BooleanExpression cursorCondition(Long cursorOrderId) { return cursorOrderId != null ? orders.id.lt(cursorOrderId) : null; } diff --git a/src/main/java/com/rootandfruit/server/api/service/OrdersService.java b/src/main/java/com/rootandfruit/server/api/service/OrdersService.java index de107a9..5e5339f 100644 --- a/src/main/java/com/rootandfruit/server/api/service/OrdersService.java +++ b/src/main/java/com/rootandfruit/server/api/service/OrdersService.java @@ -210,15 +210,18 @@ public void patchNote(NoteRequestDto noteRequestDto) { } @Transactional(readOnly = true) - public OrderCursorResponseDto searchOrderByCursor(LocalDate orderReceivedDate, LocalDate deliveryDate, String productName, - String deliveryStatus, Long cursorOrderId) { + public OrderCursorResponseDto searchOrderByCursor(LocalDate orderReceivedDate, LocalDate deliveryDate, + String productName, + String deliveryStatus, Long cursorOrderId, String senderName, + String recipientName, Integer orderNumber) { DeliveryStatus status = null; if (deliveryStatus != null) { status = DeliveryStatus.fromString(deliveryStatus); } // 주문 목록 조회 - List orderList = ordersRepository.searchOrdersWithCursor(orderReceivedDate, deliveryDate, productName, status, cursorOrderId); + List orderList = ordersRepository.searchOrdersWithCursor(orderReceivedDate, deliveryDate, productName, + status, cursorOrderId, senderName, recipientName, orderNumber); // 배송 정보별로 주문을 그룹화 Map> ordersByDeliveryInfo = orderList.stream()