50 lines
2.8 KiB
Java
50 lines
2.8 KiB
Java
package com.baiyue.lastleg.calendar;
|
|
|
|
import org.apache.ibatis.annotations.Mapper;
|
|
import org.apache.ibatis.annotations.Param;
|
|
import org.apache.ibatis.annotations.Select;
|
|
import java.time.LocalDateTime;
|
|
import java.util.List;
|
|
|
|
@Mapper
|
|
public interface WarehouseCalendarMapper {
|
|
/** 同柜全部客户合并为一条;人工时间和已建入库计划的时间不能被到港推算覆盖。 */
|
|
@Select("""
|
|
<script>
|
|
SELECT * FROM (
|
|
SELECT o.source_container_booking_id sourceContainerBookingId,
|
|
MAX(NULLIF(JSON_UNQUOTE(JSON_EXTRACT(e.payload_json,'$.cabinetNo')),'null')) cabinetNo,
|
|
MAX(o.container_no) containerNo,
|
|
CASE WHEN COUNT(DISTINCT o.overseas_warehouse_id)=1 THEN MAX(o.overseas_warehouse_name) END warehouseName,
|
|
CASE WHEN COUNT(DISTINCT o.overseas_warehouse_id)=1 THEN MAX(o.overseas_warehouse_code) END warehouseCode,
|
|
CASE WHEN COUNT(o.estimated_warehouse_at)=COUNT(*) AND COUNT(DISTINCT o.estimated_warehouse_at)=1
|
|
AND MAX(o.arrival_time_version)>0
|
|
THEN MAX(o.estimated_warehouse_at) END plannedAt,
|
|
(SELECT MIN(s.receiving_at) FROM ll_receiving_container_session s
|
|
WHERE s.source_container_booking_id=o.source_container_booking_id) actualAt,
|
|
CASE WHEN COUNT(DISTINCT o.arrival_time_version)=1 THEN MAX(o.arrival_time_version) ELSE -1 END version,
|
|
(SELECT COUNT(*) FROM ll_inbound_plan p JOIN ll_order po ON po.id=p.source_order_id AND po.customer_id=p.customer_id
|
|
WHERE po.source_container_booking_id=o.source_container_booking_id) planCount,
|
|
FALSE canEdit,
|
|
(SELECT CASE WHEN COUNT(p.planned_arrival_date)=COUNT(*) AND COUNT(DISTINCT p.planned_arrival_date)=1
|
|
THEN MAX(p.planned_arrival_date) END FROM ll_inbound_plan p
|
|
JOIN ll_order po ON po.id=p.source_order_id AND po.customer_id=p.customer_id
|
|
WHERE po.source_container_booking_id=o.source_container_booking_id) plannedDate,
|
|
FALSE isDefault
|
|
FROM ll_order o LEFT JOIN ll_loading_event_inbox e ON e.event_id=o.source_event_id
|
|
WHERE o.source_container_booking_id IS NOT NULL
|
|
GROUP BY o.source_container_booking_id
|
|
) c WHERE
|
|
(c.plannedAt >= #{from} AND c.plannedAt < #{to})
|
|
OR (c.plannedDate >= DATE(#{from}) AND c.plannedDate < DATE(#{to}))
|
|
<if test="ids != null and !ids.isEmpty()">
|
|
OR c.sourceContainerBookingId IN
|
|
<foreach collection="ids" item="id" open="(" separator="," close=")">#{id}</foreach>
|
|
</if>
|
|
ORDER BY c.sourceContainerBookingId LIMIT 2001
|
|
</script>
|
|
""")
|
|
List<WarehouseCalendarModels.Entry> calendar(@Param("from") LocalDateTime from,
|
|
@Param("to") LocalDateTime to, @Param("ids") List<String> ids);
|
|
}
|