测试delivery接单后数据获取链路,解决订单地址获取异常bug

This commit is contained in:
2026-05-28 18:08:39 +08:00
parent 83be5b3c66
commit c3324d459a
5 changed files with 3525 additions and 0 deletions

View File

@@ -0,0 +1,66 @@
-- ============================================
-- 诊断脚本:定位 delivery 端地址空白问题
-- 请复制全部内容执行,把结果截图发给我
-- ============================================
-- 诊断1确认 delivery_build_order_json 当前版本
SELECT
proname,
CASE
WHEN prosrc LIKE '%NULLIF(p_raw -> ''address_snapshot_json'', ''{}''::jsonb)%' THEN 'FIXED (含 NULLIF 排除空对象)'
WHEN prosrc LIKE '%p_raw -> ''address_snapshot''%' THEN 'HAS_FALLBACK 但缺少 NULLIF'
ELSE 'NO_FALLBACK (只有 address_snapshot_json)'
END AS address_fallback_status,
CASE
WHEN prosrc LIKE '%|| jsonb_build_object%' THEN 'SPLIT (小块拼接)'
ELSE 'SINGLE_BLOCK (单个大块)'
END AS function_structure
FROM pg_proc
WHERE proname = 'delivery_build_order_json';
-- 诊断2查看 ec_care_tasks 最近5条订单的地址数据状态
SELECT
id,
task_no,
elder_name,
assigned_to,
COALESCE(address_snapshot_json::TEXT, 'NULL') AS addr_json_raw,
COALESCE(address_snapshot::TEXT, 'NULL') AS addr_snap_raw,
CASE
WHEN address_snapshot_json IS NULL THEN 'json_null'
WHEN address_snapshot_json = '{}'::jsonb THEN 'json_empty'
WHEN address_snapshot_json = 'null'::jsonb THEN 'json_literal_null'
ELSE 'json_has_data'
END AS json_status,
CASE
WHEN address_snapshot IS NULL THEN 'snap_null'
WHEN address_snapshot = '{}'::jsonb THEN 'snap_empty'
WHEN address_snapshot = 'null'::jsonb THEN 'snap_literal_null'
ELSE 'snap_has_data'
END AS snap_status
FROM public.ec_care_tasks
ORDER BY created_at DESC
LIMIT 5;
-- 诊断3直接测试 delivery_build_order_json 对最近一条 care 订单的输出
-- 如果返回的 address 为空字符串,说明函数内部有问题
SELECT
t.id,
t.task_no,
delivery_build_order_json(
to_jsonb(t),
'[]'::jsonb, '[]'::jsonb, '[]'::jsonb, NULL, 'care'
) ->> 'address' AS test_address,
delivery_build_order_json(
to_jsonb(t),
'[]'::jsonb, '[]'::jsonb, '[]'::jsonb, NULL, 'care'
) ->> 'elderGender' AS test_gender,
delivery_build_order_json(
to_jsonb(t),
'[]'::jsonb, '[]'::jsonb, '[]'::jsonb, NULL, 'care'
) ->> 'elderAge' AS test_age
FROM public.ec_care_tasks t
ORDER BY t.created_at DESC
LIMIT 1;