46 lines
3.4 KiB
Java
46 lines
3.4 KiB
Java
package com.baiyue.lastleg.appointmentplanning;
|
|
|
|
import org.apache.ibatis.annotations.Mapper;
|
|
import org.apache.ibatis.annotations.Param;
|
|
import org.apache.ibatis.annotations.Select;
|
|
import java.util.List;
|
|
|
|
@Mapper
|
|
public interface AppointmentCargoMapper {
|
|
String FILTER = """
|
|
FROM ll_order o JOIN ll_container_shipping_gate g ON g.container_booking_id=o.source_container_booking_id
|
|
WHERE o.order_type='FIRST_LEG' AND o.destination_type='FBA' AND g.node_sequence >=40
|
|
AND o.current_status NOT IN ('CANCELLED','COMPLETED')
|
|
AND o.overseas_warehouse_id IN
|
|
<foreach collection='origins' item='id' open='(' separator=',' close=')'>#{id}</foreach>
|
|
AND o.fba_warehouse_code IN
|
|
<foreach collection='destinations' item='code' open='(' separator=',' close=')'>#{code}</foreach>
|
|
<if test='warehouseId != null'>AND o.overseas_warehouse_id=#{warehouseId}</if>
|
|
<if test='destination != null'>AND o.fba_warehouse_code=#{destination}</if>
|
|
<if test='keyword != null'>AND (o.inbound_code LIKE CONCAT('%',#{keyword},'%') OR o.container_no LIKE CONCAT('%',#{keyword},'%') OR o.customer_name LIKE CONCAT('%',#{keyword},'%'))</if>
|
|
""";
|
|
|
|
@Select("<script>SELECT COUNT(*) " + FILTER + "</script>")
|
|
long count(@Param("origins") List<String> origins, @Param("destinations") List<String> destinations,
|
|
@Param("warehouseId") String warehouseId, @Param("destination") String destination, @Param("keyword") String keyword);
|
|
|
|
@Select("<script>" + """
|
|
SELECT CONCAT('ORDER:',o.id) AS source_key,o.id AS order_id,o.customer_id,o.customer_name,o.inbound_code,
|
|
o.source_container_booking_id AS container_booking_id,o.container_no,
|
|
o.overseas_warehouse_id AS origin_warehouse_id,o.overseas_warehouse_code AS origin_warehouse_code,
|
|
o.overseas_warehouse_name AS origin_warehouse_name,o.fba_warehouse_code AS destination_warehouse_code,
|
|
o.package_count AS packages,o.received_package_count AS received_packages,o.shipped_package_count AS shipped_packages,
|
|
o.pallet_count AS source_pallet_count,o.volume_cbm,o.estimated_arrival_at,o.estimated_warehouse_at,
|
|
o.version AS order_version,g.standard_node,g.aggregate_version AS shipping_version,
|
|
g.observed_at AS shipping_observed_at,g.provider_code AS shipping_provider,o.detained,
|
|
EXISTS(SELECT 1 FROM ll_inbound_plan p WHERE p.source_order_id=o.id AND p.customer_id=o.customer_id) AS has_inbound_plan,
|
|
EXISTS(SELECT 1 FROM ll_inbound_fba_appointment_item i JOIN ll_inbound_fba_appointment a ON a.id=i.appointment_id
|
|
WHERE i.order_id=o.id AND i.customer_id=o.customer_id AND a.appointment_status NOT IN ('CANCELLED','FAILED')) AS has_active_appointment,
|
|
EXISTS(SELECT 1 FROM ll_order_detail d WHERE d.order_id=o.id AND d.customer_id=o.customer_id
|
|
AND d.destination_warehouse_code IS NOT NULL AND d.destination_warehouse_code<>o.fba_warehouse_code) AS mixed_destinations
|
|
""" + FILTER + " ORDER BY o.created_at DESC,o.id DESC LIMIT #{size} OFFSET #{offset}</script>")
|
|
List<AppointmentCargo> page(@Param("origins") List<String> origins, @Param("destinations") List<String> destinations,
|
|
@Param("warehouseId") String warehouseId, @Param("destination") String destination,
|
|
@Param("keyword") String keyword, @Param("size") int size, @Param("offset") long offset);
|
|
}
|