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) |
❓ 문의
구현 중 궁금한 점 있으면 신지예에게 연락주세요!