Skip to content

Commit bd49682

Browse files
Merge pull request #606 from Podo-Store/develop
[FIX] 환불 수량 오류
2 parents 037c8ef + 19c6f8c commit bd49682

2 files changed

Lines changed: 26 additions & 20 deletions

File tree

src/main/java/PodoeMarket/podoemarket/common/repository/RefundRepository.java

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,6 @@
99
import java.util.UUID;
1010

1111
public interface RefundRepository extends JpaRepository<RefundEntity, Long> {
12-
int countByOrderId(Long orderId);
13-
14-
@Query("""
15-
SELECT r.order.id, COUNT(r)
16-
FROM RefundEntity r
17-
WHERE r.order.id IN :orderIds
18-
GROUP BY r.order.id
19-
""")
20-
List<Object[]> countByOrderIds(@Param("orderIds") List<Long> orderIds);
21-
2212
@Query("""
2313
SELECT COALESCE(SUM(r.quantity), 0)
2414
FROM RefundEntity r
@@ -38,4 +28,20 @@ SELECT COALESCE(SUM(r.price), 0)
3828
WHERE r.order.id = :orderId
3929
""")
4030
long sumRefundPriceByOrder(@Param("orderId") Long orderId);
31+
32+
@Query("""
33+
SELECT COALESCE(SUM(r.quantity), 0)
34+
FROM RefundEntity r
35+
WHERE r.order.id = :orderId
36+
""")
37+
int sumRefundQuantityByOrderId(@Param("orderId") Long orderId);
38+
39+
@Query("""
40+
SELECT r.order.id, COALESCE(SUM(r.quantity), 0)
41+
FROM RefundEntity r
42+
WHERE r.order.id IN :orderIds
43+
GROUP BY r.order.id
44+
""")
45+
List<Object[]> sumRefundQuantityByOrderIds(@Param("orderIds") List<Long> orderIds);
46+
4147
}

src/main/java/PodoeMarket/podoemarket/profile/service/MypageService.java

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -286,15 +286,15 @@ public OrderPerformanceResponseDTO getUserOrderPerformances(UserEntity userInfo)
286286

287287
final Map<UUID, Integer> performanceDateCountMap = getPerformanceDateCountMap(allOrderItems);
288288

289-
final Map<Long, Integer> refundCountMap = getRefundCountMap(allOrderItems);
289+
final Map<Long, Integer> refundQuantityMap = getRefundQuantityMap(allOrderItems);
290290

291291
// 날짜별로 주문 항목을 그룹화하기 위한 맵 선언
292292
final Map<LocalDate, List<OrderPerformanceResponseDTO.DatePerformanceOrderDTO.OrderPerformanceDTO>> OrderItems = new HashMap<>();
293293

294294
for (OrderItemEntity orderItem : allOrderItems) {
295295
int dateCount = performanceDateCountMap.getOrDefault(orderItem.getId(), 0);
296296

297-
int refundCount = refundCountMap.getOrDefault(orderItem.getOrder().getId(), 0);
297+
int refundCount = refundQuantityMap.getOrDefault(orderItem.getOrder().getId(), 0);
298298

299299
// 각 주문 항목에 대한 제품 정보 가져옴
300300
final OrderPerformanceResponseDTO.DatePerformanceOrderDTO.OrderPerformanceDTO orderItemDTO = new OrderPerformanceResponseDTO.DatePerformanceOrderDTO.OrderPerformanceDTO();
@@ -386,7 +386,7 @@ public ApplyResponseDTO getApplyInfo(final UUID orderItemId) {
386386
applyResponseDTO.setImagePath(orderItem.getProduct().getImagePath() != null ? bucketURL + URLEncoder.encode(orderItem.getProduct().getImagePath(), StandardCharsets.UTF_8): "");
387387
applyResponseDTO.setTitle(orderItem.getProduct().getTitle());
388388
applyResponseDTO.setWriter(orderItem.getProduct().getWriter());
389-
applyResponseDTO.setPerformanceAmount(orderItem.getPerformanceAmount() - refundRepo.countByOrderId(orderItem.getOrder().getId()));
389+
applyResponseDTO.setPerformanceAmount(orderItem.getPerformanceAmount() - refundRepo.sumRefundQuantityByOrderId(orderItem.getOrder().getId()));
390390

391391
ApplyResponseDTO.ApplicantDTO applicantDTO = ApplyResponseDTO.ApplicantDTO.builder()
392392
.name(applicant.getName())
@@ -415,7 +415,7 @@ public void processPerformanceApplication(final ApplyRequestDTO dto) {
415415
final OrderItemEntity orderItem = getOrderItem(dto.getOrderItemId());
416416
expire(orderItem.getCreatedAt());
417417

418-
int availableAmount = orderItem.getPerformanceAmount() - performanceDateRepo.countByOrderItemId(dto.getOrderItemId()) - refundRepo.countByOrderId(orderItem.getOrder().getId());
418+
int availableAmount = orderItem.getPerformanceAmount() - performanceDateRepo.countByOrderItemId(dto.getOrderItemId()) - refundRepo.sumRefundQuantityByOrderId(orderItem.getOrder().getId());
419419
if(dto.getPerformanceDate().size() > availableAmount)
420420
throw new RuntimeException("공연권 구매량 초과");
421421

@@ -490,7 +490,8 @@ public RefundResponseDTO getRefundInfo(final UUID orderItemId) {
490490
try {
491491
final OrderItemEntity orderItem = getOrderItem(orderItemId);
492492

493-
final int possibleAmount = orderItem.getPerformanceAmount() - performanceDateRepo.countByOrderItemId(orderItemId) - refundRepo.countByOrderId(orderItem.getOrder().getId());
493+
final int refundAmount = refundRepo.sumRefundQuantityByOrderId(orderItem.getOrder().getId());
494+
final int possibleAmount = orderItem.getPerformanceAmount() - performanceDateRepo.countByOrderItemId(orderItemId) - refundAmount;
494495
final long possiblePrice = orderItem.getProduct().getPerformancePrice() * possibleAmount;
495496
String encodedScriptImage = orderItem.getProduct().getImagePath() != null
496497
? bucketURL + URLEncoder.encode(orderItem.getProduct().getImagePath(), StandardCharsets.UTF_8)
@@ -898,7 +899,7 @@ private Map<UUID, Integer> getPerformanceDateCountMap(List<OrderItemEntity> orde
898899
));
899900
}
900901

901-
private Map<Long, Integer> getRefundCountMap(List<OrderItemEntity> orderItems) {
902+
private Map<Long, Integer> getRefundQuantityMap(List<OrderItemEntity> orderItems) {
902903
List<Long> orderIds = orderItems.stream()
903904
.map(oi -> oi.getOrder().getId())
904905
.distinct()
@@ -907,12 +908,11 @@ private Map<Long, Integer> getRefundCountMap(List<OrderItemEntity> orderItems) {
907908
if (orderIds.isEmpty())
908909
return Map.of();
909910

910-
return refundRepo.countByOrderIds(orderIds)
911+
return refundRepo.sumRefundQuantityByOrderIds(orderIds)
911912
.stream()
912913
.collect(Collectors.toMap(
913-
row -> (Long) row[0],
914-
row -> ((Long) row[1]).intValue()
914+
row -> (Long) row[0], // orderId
915+
row -> ((Long) row[1]).intValue() // sum(quantity)
915916
));
916917
}
917-
918918
}

0 commit comments

Comments
 (0)