package com.baiyue.lastleg.appointmentplanning; import java.util.List; /** Implemented by the external-booking owner; planning must not query Fleet's persistence directly. */ public interface AppointmentExternalSourceGateway { record Candidate(String customerId, String customerName, String bookingNo, String tripNo, String destinationKey) { } record CandidateQuery(int page, int size, List originIds, List destinationCodes, String warehouseId, String destination, String keyword) { } com.baiyue.common.core.api.PageResult candidates(CandidateQuery query); record SourceRef(String customerId, String bookingNo) { } record OrderRef(String customerId, Long orderId) { } record Source(String customerId, String bookingNo, String tripNo, String bookingStatus, String warehouseId, String destinationKey, Long orderId, Integer packageCount, Long recordVersion) { } List resolve(List sources); /** Returns existing original bookings only, for canonicalizing post-receipt selections. Never creates a booking. */ List resolveOrders(List orders); /** Inside the caller transaction, lock original booking rows in stable order before validating an appointment write. */ void lockForAppointment(List sources); }