65 lines
4.0 KiB
Java
65 lines
4.0 KiB
Java
package com.baiyue.lastleg.mapper;
|
|
|
|
import com.baiyue.lastleg.dto.CustomerOrderProgress;
|
|
import org.apache.ibatis.annotations.*;
|
|
import java.util.List;
|
|
|
|
/** 按客户及不可变来源明细读取进度,不使用混托的代表订单。 */
|
|
@Mapper
|
|
public interface CustomerOrderProgressMapper {
|
|
/** 已排车只统计有效待出库单的来源数量,与平台出库单节点一致;在途仍要求实际发车。 */
|
|
@Select("""
|
|
<script>
|
|
WITH scheduled AS (
|
|
SELECT i.source_order_id AS order_id,SUM(i.package_count) AS packages
|
|
FROM ll_outbound_order b
|
|
JOIN ll_outbound_pallet_item i ON i.outbound_order_id=b.id AND i.customer_id=b.customer_id
|
|
<if test="orderIds != null">
|
|
JOIN ll_order outbound_source ON outbound_source.id=i.source_order_id AND outbound_source.customer_id=#{customerId}
|
|
AND outbound_source.source_order_id IN <foreach collection="orderIds" item="id" open="(" separator="," close=")">#{id}</foreach>
|
|
</if>
|
|
WHERE i.customer_id=#{customerId}
|
|
AND b.status NOT IN ('CANCELLED','CANCELED','OUTBOUNDED')
|
|
GROUP BY i.source_order_id
|
|
), departed AS (
|
|
SELECT a.order_id,SUM(a.packages) AS packages
|
|
FROM ll_dispatch_pda_pick_order a
|
|
JOIN ll_dispatch_pda_pick p ON p.id=a.pick_id AND p.customer_id=a.customer_id
|
|
JOIN ll_dispatch_pda_task t ON t.id=p.task_id
|
|
JOIN ll_dispatch_order ds ON ds.id=t.dispatch_order_id
|
|
JOIN ll_dispatch_item i ON i.id=p.dispatch_item_id AND i.dispatch_order_id=ds.id AND i.customer_id=a.customer_id
|
|
<if test="orderIds != null">
|
|
JOIN ll_order departed_source ON departed_source.id=a.order_id AND departed_source.customer_id=#{customerId}
|
|
AND departed_source.source_order_id IN <foreach collection="orderIds" item="id" open="(" separator="," close=")">#{id}</foreach>
|
|
</if>
|
|
WHERE a.customer_id=#{customerId} AND ds.status='ACTIVE' AND ds.stage='DELIVERING'
|
|
AND ds.departed_at IS NOT NULL
|
|
AND EXISTS (
|
|
SELECT 1 FROM ll_delivery_order d
|
|
JOIN ll_outbound_order outb ON outb.id=d.outbound_order_id AND outb.customer_id=d.customer_id
|
|
WHERE d.customer_id=a.customer_id AND d.dispatch_order_id=ds.id
|
|
AND outb.status='OUTBOUNDED' AND d.status IN ('WAIT_DELIVERY','DELIVERING')
|
|
AND d.delivery_group_key=CASE
|
|
WHEN i.destination_type='PRIVATE' AND NULLIF(TRIM(i.delivery_address),'') IS NOT NULL
|
|
THEN CONCAT('PRIVATE:',TRIM(i.delivery_address),':',TRIM(COALESCE(i.postal_code,'')))
|
|
WHEN COALESCE(NULLIF(TRIM(i.destination_warehouse_code),''),NULLIF(TRIM(i.fba_warehouse_code),'')) IS NOT NULL
|
|
THEN CONCAT('CODE:',UPPER(COALESCE(NULLIF(TRIM(i.destination_warehouse_code),''),NULLIF(TRIM(i.fba_warehouse_code),''))))
|
|
WHEN NULLIF(TRIM(i.destination_warehouse_id),'') IS NOT NULL THEN CONCAT('ID:',TRIM(i.destination_warehouse_id))
|
|
ELSE NULL END)
|
|
GROUP BY a.order_id
|
|
)
|
|
SELECT o.source_order_id AS order_id,COALESCE(o.package_count,0) AS packages,
|
|
COALESCE((SELECT SUM(s.packages) FROM scheduled s WHERE s.order_id=o.id),0) AS scheduled_packages,
|
|
COALESCE((SELECT SUM(d.packages) FROM departed d WHERE d.order_id=o.id),0) AS delivering_packages
|
|
FROM ll_order o WHERE o.customer_id=#{customerId} AND o.source_region='FIRSTLEG'
|
|
AND o.source_order_id IS NOT NULL AND o.source_inbound_id IS NOT NULL
|
|
AND o.order_type NOT IN ('RELABEL_APPLICATION','WAREHOUSE_TRANSFER')
|
|
<if test="orderIds != null">
|
|
AND o.source_order_id IN <foreach collection="orderIds" item="id" open="(" separator="," close=")">#{id}</foreach>
|
|
</if>
|
|
ORDER BY o.id
|
|
</script>
|
|
""")
|
|
List<CustomerOrderProgress.Source> sources(@Param("customerId") String customerId, @Param("orderIds") List<String> orderIds);
|
|
}
|