diff --git a/firstleg/src/main/java/com/baiyue/firstleg/portschedule/mapper/PortScheduleMapper.java b/firstleg/src/main/java/com/baiyue/firstleg/portschedule/mapper/PortScheduleMapper.java index ba59385d7..7b2b4c5b6 100644 --- a/firstleg/src/main/java/com/baiyue/firstleg/portschedule/mapper/PortScheduleMapper.java +++ b/firstleg/src/main/java/com/baiyue/firstleg/portschedule/mapper/PortScheduleMapper.java @@ -34,9 +34,10 @@ public interface PortScheduleMapper extends BaseMapper { @Select(""" SELECT * FROM fl_port_schedule - WHERE customer_id=#{customerId} AND ocean_booking_id=#{oceanBookingId} + WHERE (customer_id=#{customerId} OR customer_id=0) AND ocean_booking_id=#{oceanBookingId} AND container_booking_id=#{containerBookingId} - ORDER BY observed_at DESC,updated_at DESC,id DESC LIMIT 1 + ORDER BY CASE WHEN customer_id=#{customerId} THEN 0 ELSE 1 END, + observed_at DESC,updated_at DESC,id DESC LIMIT 1 """) PortScheduleEntity latestForDispatch(@Param("customerId") long customerId, @Param("oceanBookingId") long oceanBookingId, diff --git a/firstleg/src/main/java/com/baiyue/firstleg/portschedule/service/PortScheduleDispatchGateContributor.java b/firstleg/src/main/java/com/baiyue/firstleg/portschedule/service/PortScheduleDispatchGateContributor.java index 09b3fdcd5..307746f14 100644 --- a/firstleg/src/main/java/com/baiyue/firstleg/portschedule/service/PortScheduleDispatchGateContributor.java +++ b/firstleg/src/main/java/com/baiyue/firstleg/portschedule/service/PortScheduleDispatchGateContributor.java @@ -31,7 +31,7 @@ public class PortScheduleDispatchGateContributor implements OutboundDispatchGate PortScheduleEntity schedule = repository.latestForDispatch(context.tenantId(), context.oceanBookingId(), context.containerBookingId()); if (schedule == null) return gate(false, "MISSING"); - if (!java.util.Objects.equals(schedule.getCustomerId(), context.tenantId()) + if (!(java.util.Objects.equals(schedule.getCustomerId(), context.tenantId()) || schedule.getCustomerId() == 0L) || !java.util.Objects.equals(schedule.getOceanBookingId(), context.oceanBookingId()) || !java.util.Objects.equals(schedule.getContainerBookingId(), context.containerBookingId())) { return gate(false, "ASSOCIATION_MISMATCH"); diff --git a/firstleg/src/main/resources/openapi/port-schedules-v1.yaml b/firstleg/src/main/resources/openapi/port-schedules-v1.yaml index d96d74796..d80cf6ae2 100644 --- a/firstleg/src/main/resources/openapi/port-schedules-v1.yaml +++ b/firstleg/src/main/resources/openapi/port-schedules-v1.yaml @@ -9,7 +9,7 @@ paths: summary: Query schedules by customer, ocean booking, allocated container or expiry x-permission: platform:firstleg:port-schedule:list parameters: - - {name: customerId, in: query, schema: {type: string, pattern: '^[1-9][0-9]*$'}} + - {name: customerId, in: query, schema: {type: string, pattern: '^(0|[1-9][0-9]*)$'}} - {name: oceanBookingId, in: query, schema: {type: string, pattern: '^[1-9][0-9]*$'}} - {name: containerBookingId, in: query, schema: {type: string, pattern: '^[1-9][0-9]*$'}} - {name: expired, in: query, schema: {type: boolean}} @@ -83,7 +83,7 @@ components: - observedAt - expiresAt properties: - customerId: {type: string, pattern: '^[1-9][0-9]*$'} + customerId: {type: string, pattern: '^(0|[1-9][0-9]*)$'} oceanBookingId: {type: string, pattern: '^[1-9][0-9]*$'} containerBookingId: {type: string, nullable: true, pattern: '^[1-9][0-9]*$'} sourceType: {type: string, enum: [MANUAL, CARRIER, TERMINAL, API]}