102 lines
2.9 KiB
SQL
102 lines
2.9 KiB
SQL
-- ============================================================================
|
|
-- 派单失败诊断脚本
|
|
-- 执行时间: 2026-06-10
|
|
-- 目的: 诊断为什么派单返回 ALL_ELIGIBLE_STAFF_BUSY
|
|
-- ============================================================================
|
|
|
|
-- 1. 查看问题订单的详细信息
|
|
SELECT
|
|
id,
|
|
order_no,
|
|
status,
|
|
payment_status,
|
|
dispatch_status,
|
|
dispatch_error_code,
|
|
dispatch_error_message,
|
|
service_lat,
|
|
service_lng,
|
|
dispatch_station_id,
|
|
required_qualification_code,
|
|
scheduled_start_at,
|
|
scheduled_end_at,
|
|
appointment_time,
|
|
address_snapshot_json->>'latitude' as address_lat,
|
|
address_snapshot_json->>'longitude' as address_lng,
|
|
created_at
|
|
FROM public.hss_service_orders
|
|
WHERE id = 'so-1781054320183-35441'
|
|
AND deleted_at IS NULL;
|
|
|
|
-- 2. 查看所有在线服务人员
|
|
SELECT
|
|
id,
|
|
status,
|
|
is_active,
|
|
online_status,
|
|
uid,
|
|
station_id,
|
|
current_lat,
|
|
current_lng,
|
|
dispatch_radius_km,
|
|
last_dispatched_at
|
|
FROM public.ml_delivery_staff
|
|
WHERE deleted_at IS NULL
|
|
AND status = 1
|
|
AND COALESCE(is_active, TRUE) = TRUE
|
|
ORDER BY id;
|
|
|
|
-- 3. 查看服务人员的活跃派单记录(关键:哪些人员在忙)
|
|
SELECT
|
|
sa.id as assignment_id,
|
|
sa.staff_id,
|
|
sa.order_id,
|
|
sa.status as assignment_status,
|
|
sa.assigned_at,
|
|
so.status as order_status,
|
|
so.appointment_time,
|
|
so.scheduled_start_at,
|
|
so.scheduled_end_at
|
|
FROM public.hss_service_assignments sa
|
|
JOIN public.hss_service_orders so ON so.id = sa.order_id
|
|
WHERE sa.deleted_at IS NULL
|
|
AND sa.status IN ('assigned', 'accepted', 'departed', 'arrived', 'serving', 'in_service')
|
|
ORDER BY sa.assigned_at DESC
|
|
LIMIT 20;
|
|
|
|
-- 4. 查看是否有服务人员在任何活跃任务中
|
|
SELECT
|
|
s.id as staff_id,
|
|
s.online_status,
|
|
COUNT(DISTINCT sa.id) as active_assignment_count
|
|
FROM public.ml_delivery_staff s
|
|
LEFT JOIN public.hss_service_assignments sa
|
|
ON sa.staff_id::TEXT = s.id::TEXT
|
|
AND sa.deleted_at IS NULL
|
|
AND sa.status IN ('assigned', 'accepted', 'departed', 'arrived', 'serving', 'in_service')
|
|
WHERE s.deleted_at IS NULL
|
|
AND s.status = 1
|
|
AND COALESCE(s.is_active, TRUE) = TRUE
|
|
AND s.online_status = 'online'
|
|
GROUP BY s.id, s.online_status
|
|
ORDER BY active_assignment_count DESC;
|
|
|
|
-- 5. 修复建议:如果订单有地址经纬度,更新到订单主表
|
|
UPDATE public.hss_service_orders
|
|
SET
|
|
service_lat = (address_snapshot_json->>'latitude')::FLOAT,
|
|
service_lng = (address_snapshot_json->>'longitude')::FLOAT,
|
|
updated_at = clock_timestamp()
|
|
WHERE id = 'so-1781054320183-35441'
|
|
AND (service_lat IS NULL OR service_lng IS NULL)
|
|
AND address_snapshot_json->>'latitude' != '';
|
|
|
|
-- 6. 更新后验证
|
|
SELECT
|
|
id,
|
|
service_lat,
|
|
service_lng,
|
|
address_snapshot_json->>'latitude' as address_lat,
|
|
address_snapshot_json->>'longitude' as address_lng
|
|
FROM public.hss_service_orders
|
|
WHERE id = 'so-1781054320183-35441';
|