@@ -1667,11 +1667,25 @@ private ArtistSettlementResponse.Table createSettlementTableFromOrders(
16671667 ArtistSettlementSearchRequest request ,
16681668 Long artistId ) {
16691669
1670- // 1. 배송 완료된 주문 조회 (정렬 없이 전체 조회)
1671- List <com .back .domain .order .order .entity .Order > allOrders =
1672- orderRepository .findDeliveredOrdersByArtistInPeriod (artist , startDate , endDate );
1670+ // 1. 정렬 필드 확인
1671+ String sortField = request .sort () != null ? request .sort () : "date" ;
1672+ String sortOrder = request .order () != null ? request .order () : "DESC" ;
1673+ boolean isProductNameSort = "productName" .equals (sortField );
1674+
1675+ // 2. 배송 완료된 주문 조회
1676+ List <com .back .domain .order .order .entity .Order > allOrders ;
1677+
1678+ if (isProductNameSort ) {
1679+ // 상품명 정렬: DB에서 정렬된 상태로 조회
1680+ allOrders = orderRepository .findDeliveredOrdersByArtistInPeriodSortedByProductName (
1681+ artist , startDate , endDate , sortOrder );
1682+ } else {
1683+ // 일반 조회 (정렬은 메모리에서 처리)
1684+ allOrders = orderRepository .findDeliveredOrdersByArtistInPeriod (
1685+ artist , startDate , endDate );
1686+ }
16731687
1674- // 2 . 주문을 OrderItem 단위로 변환 (작가의 상품만)
1688+ // 3 . 주문을 OrderItem 단위로 변환 (작가의 상품만)
16751689 List <SettlementOrderItem > settlementItems = allOrders .stream ()
16761690 .flatMap (order -> order .getOrderItems ().stream ()
16771691 .filter (item -> item .getProduct ().getUser ().getId ().equals (artistId ))
@@ -1684,17 +1698,19 @@ private ArtistSettlementResponse.Table createSettlementTableFromOrders(
16841698 )))
16851699 .toList ();
16861700
1687- // 3. 정렬 적용
1688- settlementItems = sortSettlementItems (settlementItems , request .sort (), request .order ());
1701+ // 4. 정렬 적용 (상품명 정렬이 아닌 경우만 메모리 정렬)
1702+ if (!isProductNameSort ) {
1703+ settlementItems = sortSettlementItems (settlementItems , sortField , sortOrder );
1704+ }
16891705
1690- // 4 . 페이징 처리
1706+ // 5 . 페이징 처리
16911707 int start = request .page () * request .size ();
16921708 int end = Math .min (start + request .size (), settlementItems .size ());
16931709 List <SettlementOrderItem > pagedItems = start < settlementItems .size ()
16941710 ? settlementItems .subList (start , end )
16951711 : List .of ();
16961712
1697- // 5 . DTO 변환
1713+ // 6 . DTO 변환
16981714 List <ArtistSettlementResponse .Settlement > content = pagedItems .stream ()
16991715 .map (this ::convertToSettlementDtoFromOrder )
17001716 .toList ();
@@ -1716,7 +1732,8 @@ private ArtistSettlementResponse.Table createSettlementTableFromOrders(
17161732 }
17171733
17181734 /**
1719- * 정산 아이템 정렬
1735+ * 정산 아이템 정렬 (메모리 정렬)
1736+ * productName 정렬은 DB에서 처리하므로 여기서는 제외
17201737 */
17211738 private List <SettlementOrderItem > sortSettlementItems (
17221739 List <SettlementOrderItem > items , String sortField , String sortOrder ) {
@@ -1726,6 +1743,7 @@ private List<SettlementOrderItem> sortSettlementItems(
17261743 return items .stream ()
17271744 .sorted ((a , b ) -> {
17281745 int cmp = switch (sortField ) {
1746+ case "productName" -> a .productName .compareTo (b .productName );
17291747 case "grossAmount" -> Integer .compare (a .grossAmount , b .grossAmount );
17301748 case "commission" -> Integer .compare (a .grossAmount / 10 , b .grossAmount / 10 );
17311749 case "netAmount" -> Integer .compare (a .grossAmount * 9 / 10 , b .grossAmount * 9 / 10 );
0 commit comments