2026-09-29 17:55:54 +08:00
|
|
|
package com.baiyue.lastleg.client;
|
|
|
|
|
|
|
|
|
|
import com.baiyue.common.core.api.ApiResponse;
|
|
|
|
|
import com.baiyue.common.event.DeliveryAck;
|
|
|
|
|
import com.baiyue.common.event.EventEnvelope;
|
|
|
|
|
import com.baiyue.common.event.EventTypes;
|
|
|
|
|
import lombok.RequiredArgsConstructor;
|
2026-09-29 18:06:18 +08:00
|
|
|
import com.baiyue.common.web.EventDeliveryFailure;
|
|
|
|
|
import java.util.Set;
|
2026-09-29 17:55:54 +08:00
|
|
|
import org.springframework.stereotype.Component;
|
|
|
|
|
|
|
|
|
|
/** Dispatches each supported business event directly to its owning service. */
|
|
|
|
|
@Component
|
|
|
|
|
@RequiredArgsConstructor
|
|
|
|
|
public class DirectEventClient {
|
2026-09-29 18:06:18 +08:00
|
|
|
private static final Set<String> FINANCE_PERMANENT_CODES = Set.of(
|
|
|
|
|
"FIN-EVT-001", "FIN-EVT-002", "FIN-EVT-004", "FIN-EVT-007", "FIN-EVT-008",
|
|
|
|
|
"FIN-EVT-012", "FIN-EVT-015", "FIN-EVT-016", "FIN-EVT-401");
|
2026-09-29 17:55:54 +08:00
|
|
|
private final FirstlegEventClient firstleg;
|
|
|
|
|
private final FinanceBusinessEventClient finance;
|
|
|
|
|
|
|
|
|
|
public ApiResponse<DeliveryAck> receive(String token, EventEnvelope event) {
|
|
|
|
|
event.requireValid();
|
|
|
|
|
return switch (event.eventType()) {
|
|
|
|
|
case EventTypes.OVERSEAS_CONTAINER_UNLOADED,
|
|
|
|
|
EventTypes.OVERSEAS_INBOUND_ORDER_DETAINED_CHANGED,
|
|
|
|
|
EventTypes.OVERSEAS_DELIVERY_COMPLETED -> firstleg.receive(token, event);
|
2026-09-29 18:06:18 +08:00
|
|
|
case EventTypes.WALLET_COMMAND_REQUESTED -> checkedFinance(finance.wallet(token, event));
|
|
|
|
|
case EventTypes.BUSINESS_FEE_SOURCE_CHANGED -> checkedFinance(finance.fee(token, event));
|
|
|
|
|
default -> throw new EventDeliveryFailure(true, "Unsupported outbound event type: " + event.eventType());
|
2026-09-29 17:55:54 +08:00
|
|
|
};
|
|
|
|
|
}
|
2026-09-29 18:06:18 +08:00
|
|
|
private ApiResponse<DeliveryAck> checkedFinance(ApiResponse<DeliveryAck> response) {
|
|
|
|
|
EventDeliveryFailure.requireSuccessful(response, FINANCE_PERMANENT_CODES);
|
|
|
|
|
return response;
|
|
|
|
|
}
|
2026-09-29 17:55:54 +08:00
|
|
|
}
|