Skip to the content.

InternalTicketUsageService 사용 가이드

내부 정기권 동/호수별 사용량 조회 서비스

내부 정기권 동/호수별 사용량 조회 서비스


📦 위치

CommonModule/src/main/java/com/akc/b2c/common/service/InternalTicketUsageService.java

🔧 주입 방법

import com.akc.b2c.common.service.InternalTicketUsageService;
import com.akc.b2c.common.dto.InternalTicketUsageDto;

@Service
public class YourService {
    
    @Autowired
    private InternalTicketUsageService internalTicketUsageService;
}

📋 제공 메서드

1. 정기권별 동/호수 사용량 전체 조회

List<InternalTicketUsageDto> getUsageByTicket(String plotId, String gdsId)
파라미터 설명
plotId 주차장 ID
gdsId 정기권 ID

반환값: 동/호수별 활성 차량 수 목록


2. 특정 동/호수 사용량 조회

Long getUsageByUnit(String plotId, String gdsId, String buildingDong, String unitNumber)
파라미터 설명
plotId 주차장 ID
gdsId 정기권 ID
buildingDong 건물 동 (예: “1001”)
unitNumber 호수 (예: “101”)

반환값: 해당 동/호수의 활성 차량 수


📝 DTO 구조

public class InternalTicketUsageDto {
    private String buildingDong;   // 동
    private String unitNumber;     // 호수
    private Long usedCount;        // 사용중인 차량 수
}

💡 사용 예시

예시 1: 정기권의 전체 동/호수별 사용량 조회

// 내부 정기권 상품의 동/호수별 사용 현황 조회
List<InternalTicketUsageDto> usageList = 
    internalTicketUsageService.getUsageByTicket("02343", "RC00010347");

// Map으로 변환하여 빠른 조회
Map<String, Long> usageMap = usageList.stream()
    .collect(Collectors.toMap(
        u -> u.getBuildingDong() + "-" + u.getUnitNumber(),
        InternalTicketUsageDto::getUsedCount
    ));

// 특정 동/호수의 사용량 조회
String key = "101-101";
long usedCount = usageMap.getOrDefault(key, 0L);  // 없으면 0

예시 2: 구매 가능 수량 계산

// 해당 동/호수의 사용량 조회
Long usedCount = internalTicketUsageService.getUsageByUnit(
    "02343",        // plotId
    "RC00010347",   // gdsId
    "101",        // buildingDong
    "101"         // unitNumber
);

// 구매 가능 수량 계산
int parkingCapacity = 3;  // regular_ticket_units에서 조회한 값
int availableCount = parkingCapacity - usedCount.intValue();

if (availableCount <= 0) {
    throw new IllegalStateException("구매 가능 수량을 초과했습니다.");
}

⚠️ 유효한 주문 조건

서비스 내부에서 아래 조건을 만족하는 주문만 집계합니다:

조건 설명
payment_status = 'PAID' 결제 완료된 주문
refund_status != 'COMPLETED' 전액 환불되지 않은 주문
end_date >= 오늘 사용 기간이 남은 주문
order_cars.status IN (...) 활성 차량만 (REGISTERED, REFUND_REQUESTED, REFUND_REJECTED)

❓ 문의

구현 중 궁금한 점 있으면 신지예에게 연락주세요!