-- realistic_mock_data.sql -- 幂等脚本:在 dev 环境创建更真实的测试数据 -- 使用说明:在 Supabase SQL Editor 中选择 Role = postgres,整体执行此文件。 -- 运行前确保至少存在一个 auth 用户,否则后续插入会违背 FK DO $$ BEGIN IF NOT EXISTS (SELECT 1 FROM auth.users) THEN RAISE EXCEPTION 'No auth.users found. Create at least one auth user in Supabase auth or sign up once, then re-run this script.'; END IF; END$$; -- 1) 确保存在一个测试分类 INSERT INTO public.ml_categories (id, cid, name, created_at) SELECT uuid_generate_v4(), nextval('public.ml_categories_cid_seq'::regclass), '测试分类-配送端', NOW() WHERE NOT EXISTS (SELECT 1 FROM public.ml_categories WHERE name = '测试分类-配送端'); -- 2) 创建或复用商家(优先按 email 匹配,否则按任意 auth.user) INSERT INTO public.ak_users (id, auth_id, email, username, created_at) SELECT uuid_generate_v4(), COALESCE((SELECT id FROM auth.users WHERE email='merchant.real@example.com' LIMIT 1),(SELECT id FROM auth.users LIMIT 1)), 'merchant.real@example.com','real_merchant', NOW() WHERE NOT EXISTS ( SELECT 1 FROM public.ak_users WHERE email='merchant.real@example.com' OR auth_id = COALESCE((SELECT id FROM auth.users WHERE email='merchant.real@example.com' LIMIT 1),(SELECT id FROM auth.users LIMIT 1)) ); -- 3) 三个真实感顾客(按 email 或存在的 auth.users id 复用) INSERT INTO public.ak_users (id, auth_id, email, username, created_at) SELECT uuid_generate_v4(), COALESCE((SELECT id FROM auth.users WHERE email='zhang.san@example.com' LIMIT 1),(SELECT id FROM auth.users LIMIT 1)), 'zhang.san@example.com','张三', NOW() WHERE NOT EXISTS (SELECT 1 FROM public.ak_users WHERE email='zhang.san@example.com' OR auth_id = COALESCE((SELECT id FROM auth.users WHERE email='zhang.san@example.com' LIMIT 1),(SELECT id FROM auth.users LIMIT 1))); INSERT INTO public.ak_users (id, auth_id, email, username, created_at) SELECT uuid_generate_v4(), COALESCE((SELECT id FROM auth.users WHERE email='li.si@example.com' LIMIT 1),(SELECT id FROM auth.users LIMIT 1)), 'li.si@example.com','李四', NOW() WHERE NOT EXISTS (SELECT 1 FROM public.ak_users WHERE email='li.si@example.com' OR auth_id = COALESCE((SELECT id FROM auth.users WHERE email='li.si@example.com' LIMIT 1),(SELECT id FROM auth.users LIMIT 1))); INSERT INTO public.ak_users (id, auth_id, email, username, created_at) SELECT uuid_generate_v4(), COALESCE((SELECT id FROM auth.users WHERE email='wang.wu@example.com' LIMIT 1),(SELECT id FROM auth.users LIMIT 1)), 'wang.wu@example.com','王五', NOW() WHERE NOT EXISTS (SELECT 1 FROM public.ak_users WHERE email='wang.wu@example.com' OR auth_id = COALESCE((SELECT id FROM auth.users WHERE email='wang.wu@example.com' LIMIT 1),(SELECT id FROM auth.users LIMIT 1))); -- 4) 五个商品(使用上面分类与商家) INSERT INTO public.ml_products (id, cid, merchant_id, category_id, product_code, name, base_price, total_stock, main_image_url, created_at) SELECT uuid_generate_v4(), nextval('public.ml_products_cid_seq'::regclass), (SELECT id FROM public.ak_users WHERE email='merchant.real@example.com' LIMIT 1), (SELECT id FROM public.ml_categories WHERE name='测试分类-配送端' LIMIT 1), 'REAL-P-A-20260202','鲜榨橙汁 500ml',12.50,200,'https://cdn.example.com/orange.jpg', NOW() WHERE NOT EXISTS (SELECT 1 FROM public.ml_products WHERE product_code='REAL-P-A-20260202'); INSERT INTO public.ml_products (id, cid, merchant_id, category_id, product_code, name, base_price, total_stock, main_image_url, created_at) SELECT uuid_generate_v4(), nextval('public.ml_products_cid_seq'::regclass), (SELECT id FROM public.ak_users WHERE email='merchant.real@example.com' LIMIT 1), (SELECT id FROM public.ml_categories WHERE name='测试分类-配送端' LIMIT 1), 'REAL-P-B-20260202','经典牛肉饼 200g',35.00,120,'https://cdn.example.com/beef.jpg', NOW() WHERE NOT EXISTS (SELECT 1 FROM public.ml_products WHERE product_code='REAL-P-B-20260202'); INSERT INTO public.ml_products (id, cid, merchant_id, category_id, product_code, name, base_price, total_stock, main_image_url, created_at) SELECT uuid_generate_v4(), nextval('public.ml_products_cid_seq'::regclass), (SELECT id FROM public.ak_users WHERE email='merchant.real@example.com' LIMIT 1), (SELECT id FROM public.ml_categories WHERE name='测试分类-配送端' LIMIT 1), 'REAL-P-C-20260202','手工三明治',22.00,80,'https://cdn.example.com/sandwich.jpg', NOW() WHERE NOT EXISTS (SELECT 1 FROM public.ml_products WHERE product_code='REAL-P-C-20260202'); INSERT INTO public.ml_products (id, cid, merchant_id, category_id, product_code, name, base_price, total_stock, main_image_url, created_at) SELECT uuid_generate_v4(), nextval('public.ml_products_cid_seq'::regclass), (SELECT id FROM public.ak_users WHERE email='merchant.real@example.com' LIMIT 1), (SELECT id FROM public.ml_categories WHERE name='测试分类-配送端' LIMIT 1), 'REAL-P-D-20260202','每日现磨咖啡',18.00,150,'https://cdn.example.com/coffee.jpg', NOW() WHERE NOT EXISTS (SELECT 1 FROM public.ml_products WHERE product_code='REAL-P-D-20260202'); -- 5) 创建若干订单与配送任务(status = 1, driver_id = NULL) -- 订单 1(示例已更新:order_no / phone / address) INSERT INTO public.ml_orders (order_no, user_id, merchant_id, product_amount, shipping_fee, total_amount, shipping_address, created_at, updated_at) SELECT 'TEST-DELIV-20260202-001', COALESCE( (SELECT id FROM public.ak_users WHERE email='zhang.san@example.com' LIMIT 1), (SELECT id FROM public.ak_users WHERE auth_id=(SELECT id FROM auth.users WHERE email='zhang.san@example.com' LIMIT 1) LIMIT 1), (SELECT id FROM public.ak_users LIMIT 1) ), (SELECT id FROM public.ak_users WHERE email='merchant.real@example.com' LIMIT 1), 12.50,3.00,15.50, ('{"contact":"张三","phone":"13890001111","province":"北京市","city":"北京市","district":"朝阳区","street":"望京街道","detail":"望京SOHO 1号楼"}')::jsonb, NOW(), NOW() WHERE NOT EXISTS (SELECT 1 FROM public.ml_orders WHERE order_no='TEST-DELIV-20260202-001'); INSERT INTO public.ml_order_items (id, order_id, product_id, product_name, price, quantity, total_amount, created_at) SELECT uuid_generate_v4(), (SELECT id FROM public.ml_orders WHERE order_no='TEST-DELIV-20260202-001' LIMIT 1), (SELECT id FROM public.ml_products WHERE product_code='REAL-P-A-20260202' LIMIT 1), '鲜榨橙汁 500ml',12.50,1,12.50,NOW() WHERE NOT EXISTS (SELECT 1 FROM public.ml_order_items oi JOIN public.ml_orders o ON oi.order_id=o.id WHERE o.order_no='TEST-DELIV-20260202-001'); INSERT INTO public.ml_delivery_tasks (order_id, pickup_address, delivery_address, delivery_fee, status, created_at, updated_at) SELECT (SELECT id FROM public.ml_orders WHERE order_no='TEST-DELIV-20260202-001' LIMIT 1), ('{"contact":"门店A","phone":"13990001111","detail":"门店A 地址"}')::jsonb, ('{"contact":"张三","phone":"13890001111","detail":"望京SOHO 1号楼"}')::jsonb, 3.00,1,NOW(),NOW() WHERE NOT EXISTS (SELECT 1 FROM public.ml_delivery_tasks dt JOIN public.ml_orders o ON dt.order_id=o.id WHERE o.order_no='TEST-DELIV-20260202-001'); -- 订单 2(示例已更新) INSERT INTO public.ml_orders (order_no, user_id, merchant_id, product_amount, shipping_fee, total_amount, shipping_address, created_at, updated_at) SELECT 'TEST-DELIV-20260202-002', COALESCE( (SELECT id FROM public.ak_users WHERE email='li.si@example.com' LIMIT 1), (SELECT id FROM public.ak_users WHERE auth_id=(SELECT id FROM auth.users WHERE email='li.si@example.com' LIMIT 1) LIMIT 1), (SELECT id FROM public.ak_users LIMIT 1) ), (SELECT id FROM public.ak_users WHERE email='merchant.real@example.com' LIMIT 1), 35.00,4.00,39.00, ('{"contact":"李四","phone":"13890002222","province":"上海市","city":"上海市","district":"静安区","street":"南京西路","detail":"静安寺附近"}')::jsonb, NOW(), NOW() WHERE NOT EXISTS (SELECT 1 FROM public.ml_orders WHERE order_no='TEST-DELIV-20260202-002'); INSERT INTO public.ml_order_items (id, order_id, product_id, product_name, price, quantity, total_amount, created_at) SELECT uuid_generate_v4(), (SELECT id FROM public.ml_orders WHERE order_no='TEST-DELIV-20260202-002' LIMIT 1), (SELECT id FROM public.ml_products WHERE product_code='REAL-P-B-20260202' LIMIT 1), '经典牛肉饼 200g',35.00,1,35.00,NOW() WHERE NOT EXISTS (SELECT 1 FROM public.ml_order_items oi JOIN public.ml_orders o ON oi.order_id=o.id WHERE o.order_no='TEST-DELIV-20260202-002'); INSERT INTO public.ml_delivery_tasks (order_id, pickup_address, delivery_address, delivery_fee, status, created_at, updated_at) SELECT (SELECT id FROM public.ml_orders WHERE order_no='TEST-DELIV-20260202-002' LIMIT 1), ('{"contact":"门店B","phone":"13990002222","detail":"门店B 地址"}')::jsonb, ('{"contact":"李四","phone":"13890002222","detail":"静安寺附近"}')::jsonb, 4.00,1,NOW(),NOW() WHERE NOT EXISTS (SELECT 1 FROM public.ml_delivery_tasks dt JOIN public.ml_orders o ON dt.order_id=o.id WHERE o.order_no='TEST-DELIV-20260202-002'); -- 订单 3(示例已更新) INSERT INTO public.ml_orders (order_no, user_id, merchant_id, product_amount, shipping_fee, total_amount, shipping_address, created_at, updated_at) SELECT 'TEST-DELIV-20260202-003', COALESCE( (SELECT id FROM public.ak_users WHERE email='wang.wu@example.com' LIMIT 1), (SELECT id FROM public.ak_users WHERE auth_id=(SELECT id FROM auth.users WHERE email='wang.wu@example.com' LIMIT 1) LIMIT 1), (SELECT id FROM public.ak_users LIMIT 1) ), (SELECT id FROM public.ak_users WHERE email='merchant.real@example.com' LIMIT 1), 22.00,3.50,25.50, ('{"contact":"王五","phone":"13890003333","province":"广东省","city":"广州市","district":"天河区","street":"体育西路","detail":"天河城附近"}')::jsonb, NOW(), NOW() WHERE NOT EXISTS (SELECT 1 FROM public.ml_orders WHERE order_no='TEST-DELIV-20260202-003'); INSERT INTO public.ml_order_items (id, order_id, product_id, product_name, price, quantity, total_amount, created_at) SELECT uuid_generate_v4(), (SELECT id FROM public.ml_orders WHERE order_no='TEST-DELIV-20260202-003' LIMIT 1), (SELECT id FROM public.ml_products WHERE product_code='REAL-P-C-20260202' LIMIT 1), '手工三明治',22.00,1,22.00,NOW() WHERE NOT EXISTS (SELECT 1 FROM public.ml_order_items oi JOIN public.ml_orders o ON oi.order_id=o.id WHERE o.order_no='TEST-DELIV-20260202-003'); INSERT INTO public.ml_delivery_tasks (order_id, pickup_address, delivery_address, delivery_fee, status, created_at, updated_at) SELECT (SELECT id FROM public.ml_orders WHERE order_no='TEST-DELIV-20260202-003' LIMIT 1), ('{"contact":"门店C","phone":"13990003333","detail":"门店C 地址"}')::jsonb, ('{"contact":"王五","phone":"13890003333","detail":"天河城附近"}')::jsonb, 3.50,1,NOW(),NOW() WHERE NOT EXISTS (SELECT 1 FROM public.ml_delivery_tasks dt JOIN public.ml_orders o ON dt.order_id=o.id WHERE o.order_no='TEST-DELIV-20260202-003'); -- 订单 4(示例已更新) INSERT INTO public.ml_orders (order_no, user_id, merchant_id, product_amount, shipping_fee, total_amount, shipping_address, created_at, updated_at) SELECT 'TEST-DELIV-20260202-004', COALESCE( (SELECT id FROM public.ak_users WHERE email='zhang.san@example.com' LIMIT 1), (SELECT id FROM public.ak_users WHERE auth_id=(SELECT id FROM auth.users WHERE email='zhang.san@example.com' LIMIT 1) LIMIT 1), (SELECT id FROM public.ak_users LIMIT 1) ), (SELECT id FROM public.ak_users WHERE email='merchant.real@example.com' LIMIT 1), 18.00,3.00,21.00, ('{"contact":"张三","phone":"13890001111","province":"上海市","city":"上海市","district":"浦东新区","street":"世纪大道","detail":"世纪汇 10 号"}')::jsonb, NOW(), NOW() WHERE NOT EXISTS (SELECT 1 FROM public.ml_orders WHERE order_no='TEST-DELIV-20260202-004'); INSERT INTO public.ml_order_items (id, order_id, product_id, product_name, price, quantity, total_amount, created_at) SELECT uuid_generate_v4(), (SELECT id FROM public.ml_orders WHERE order_no='TEST-DELIV-20260202-004' LIMIT 1), (SELECT id FROM public.ml_products WHERE product_code='REAL-P-D-20260202' LIMIT 1), '每日现磨咖啡',18.00,1,18.00,NOW() WHERE NOT EXISTS (SELECT 1 FROM public.ml_order_items oi JOIN public.ml_orders o ON oi.order_id=o.id WHERE o.order_no='TEST-DELIV-20260202-004'); INSERT INTO public.ml_delivery_tasks (order_id, pickup_address, delivery_address, delivery_fee, status, created_at, updated_at) SELECT (SELECT id FROM public.ml_orders WHERE order_no='TEST-DELIV-20260202-004' LIMIT 1), ('{"contact":"门店D","phone":"13990004444","detail":"门店D 地址"}')::jsonb, ('{"contact":"张三","phone":"13890001111","detail":"世纪汇 10 号"}')::jsonb, 3.00,1,NOW(),NOW() WHERE NOT EXISTS (SELECT 1 FROM public.ml_delivery_tasks dt JOIN public.ml_orders o ON dt.order_id=o.id WHERE o.order_no='TEST-DELIV-20260202-004'); -- 最终返回已创建或已存在的关键 id,便于验证 SELECT (SELECT id FROM public.ak_users WHERE email='merchant.real@example.com' LIMIT 1) AS merchant_id, (SELECT id FROM public.ak_users WHERE email='zhang.san@example.com' LIMIT 1) AS custA_id, (SELECT id FROM public.ak_users WHERE email='li.si@example.com' LIMIT 1) AS custB_id, (SELECT id FROM public.ak_users WHERE email='wang.wu@example.com' LIMIT 1) AS custC_id, (SELECT id FROM public.ml_products WHERE product_code='REAL-P-A-20260202' LIMIT 1) AS productA_id, (SELECT id FROM public.ml_products WHERE product_code='REAL-P-B-20260202' LIMIT 1) AS productB_id, (SELECT id FROM public.ml_products WHERE product_code='REAL-P-C-20260202' LIMIT 1) AS productC_id, (SELECT id FROM public.ml_products WHERE product_code='REAL-P-D-20260202' LIMIT 1) AS productD_id, (SELECT id FROM public.ml_orders WHERE order_no='TEST-DELIV-20260202-001' LIMIT 1) AS order1_id, (SELECT id FROM public.ml_orders WHERE order_no='TEST-DELIV-20260202-002' LIMIT 1) AS order2_id, (SELECT id FROM public.ml_orders WHERE order_no='TEST-DELIV-20260202-003' LIMIT 1) AS order3_id, (SELECT id FROM public.ml_orders WHERE order_no='TEST-DELIV-20260202-004' LIMIT 1) AS order4_id; -- 6) 批量生成 20 个“待接取”订单(幂等) -- 订单号格式:PENDING-20260202-001 .. PENDING-20260202-020 INSERT INTO public.ml_orders (order_no, user_id, merchant_id, product_amount, shipping_fee, total_amount, shipping_address, created_at, updated_at) SELECT t.order_no, t.user_id, t.merchant_id, t.product_amount, t.shipping_fee, t.total_amount, t.shipping_address, NOW(), NOW() FROM ( SELECT format('PENDING-20260202-%s', lpad(i::text,3,'0')) AS order_no, COALESCE( CASE (i % 3) WHEN 1 THEN (SELECT id FROM public.ak_users WHERE email='zhang.san@example.com' LIMIT 1) WHEN 2 THEN (SELECT id FROM public.ak_users WHERE email='li.si@example.com' LIMIT 1) ELSE (SELECT id FROM public.ak_users WHERE email='wang.wu@example.com' LIMIT 1) END, (SELECT id FROM public.ak_users LIMIT 1) ) AS user_id, (SELECT id FROM public.ak_users WHERE email='merchant.real@example.com' LIMIT 1) AS merchant_id, (SELECT base_price FROM public.ml_products WHERE product_code='REAL-P-A-20260202' LIMIT 1) AS product_amount, 3.00 AS shipping_fee, (SELECT base_price FROM public.ml_products WHERE product_code='REAL-P-A-20260202' LIMIT 1) + 3.00 AS total_amount, jsonb_build_object('contact', CASE WHEN (i % 3)=1 THEN '张三' WHEN (i % 3)=2 THEN '李四' ELSE '王五' END, 'phone', '138900' || lpad(i::text,5,'0'), 'detail', '自动生成地址 ' || i) AS shipping_address FROM generate_series(1,20) AS s(i) ) AS t WHERE NOT EXISTS (SELECT 1 FROM public.ml_orders o WHERE o.order_no = t.order_no); -- 生成对应的 order_items(若不存在) INSERT INTO public.ml_order_items (id, order_id, product_id, product_name, price, quantity, total_amount, created_at) SELECT uuid_generate_v4(), o.id, p.id, p.name, p.base_price, 1, p.base_price, NOW() FROM public.ml_orders o JOIN public.ml_products p ON p.product_code = 'REAL-P-A-20260202' WHERE o.order_no LIKE 'PENDING-20260202-%' AND NOT EXISTS (SELECT 1 FROM public.ml_order_items oi WHERE oi.order_id = o.id); -- 生成对应的 delivery_tasks(status = 1) WITH no AS ( SELECT id, order_no, shipping_address, ROW_NUMBER() OVER (ORDER BY id) AS rn FROM public.ml_orders WHERE order_no LIKE 'PENDING-20260202-%' ) INSERT INTO public.ml_delivery_tasks (order_id, pickup_address, delivery_address, delivery_fee, status, created_at, updated_at) SELECT no.id, jsonb_build_object('contact','自动门店','phone', '13900' || lpad(no.rn::text,4,'0'),'detail','自动门店地址')::jsonb, no.shipping_address, 3.00,1,NOW(),NOW() FROM no WHERE NOT EXISTS (SELECT 1 FROM public.ml_delivery_tasks dt WHERE dt.order_id = no.id); -- realistic_mock_data.sql -- 幂等脚本:在 dev 环境创建更真实的测试数据 -- 使用说明:在 Supabase SQL Editor 中选择 Role = postgres,整体执行此文件。 -- 运行前确保至少存在一个 auth 用户,否则后续插入会违背 FK DO $$ BEGIN IF NOT EXISTS (SELECT 1 FROM auth.users) THEN RAISE EXCEPTION 'No auth.users found. Create at least one auth user in Supabase auth or sign up once, then re-run this script.'; END IF; END$$; -- 1) 确保存在一个测试分类 INSERT INTO public.ml_categories (id, cid, name, created_at) SELECT uuid_generate_v4(), nextval('public.ml_categories_cid_seq'::regclass), '测试分类-配送端', NOW() WHERE NOT EXISTS (SELECT 1 FROM public.ml_categories WHERE name = '测试分类-配送端'); -- 2) 创建或复用商家(优先按 email 匹配,否则按任意 auth.user) INSERT INTO public.ak_users (id, auth_id, email, username, created_at) SELECT uuid_generate_v4(), COALESCE((SELECT id FROM auth.users WHERE email='merchant.real@example.com' LIMIT 1),(SELECT id FROM auth.users LIMIT 1)), 'merchant.real@example.com','real_merchant', NOW() WHERE NOT EXISTS ( SELECT 1 FROM public.ak_users WHERE email='merchant.real@example.com' OR auth_id = COALESCE((SELECT id FROM auth.users WHERE email='merchant.real@example.com' LIMIT 1),(SELECT id FROM auth.users LIMIT 1)) ); -- 3) 三个真实感顾客(按 email 或存在的 auth.users id 复用) INSERT INTO public.ak_users (id, auth_id, email, username, created_at) SELECT uuid_generate_v4(), COALESCE((SELECT id FROM auth.users WHERE email='zhang.san@example.com' LIMIT 1),(SELECT id FROM auth.users LIMIT 1)), 'zhang.san@example.com','张三', NOW() WHERE NOT EXISTS (SELECT 1 FROM public.ak_users WHERE email='zhang.san@example.com' OR auth_id = COALESCE((SELECT id FROM auth.users WHERE email='zhang.san@example.com' LIMIT 1),(SELECT id FROM auth.users LIMIT 1))); INSERT INTO public.ak_users (id, auth_id, email, username, created_at) SELECT uuid_generate_v4(), COALESCE((SELECT id FROM auth.users WHERE email='li.si@example.com' LIMIT 1),(SELECT id FROM auth.users LIMIT 1)), 'li.si@example.com','李四', NOW() WHERE NOT EXISTS (SELECT 1 FROM public.ak_users WHERE email='li.si@example.com' OR auth_id = COALESCE((SELECT id FROM auth.users WHERE email='li.si@example.com' LIMIT 1),(SELECT id FROM auth.users LIMIT 1))); INSERT INTO public.ak_users (id, auth_id, email, username, created_at) SELECT uuid_generate_v4(), COALESCE((SELECT id FROM auth.users WHERE email='wang.wu@example.com' LIMIT 1),(SELECT id FROM auth.users LIMIT 1)), 'wang.wu@example.com','王五', NOW() WHERE NOT EXISTS (SELECT 1 FROM public.ak_users WHERE email='wang.wu@example.com' OR auth_id = COALESCE((SELECT id FROM auth.users WHERE email='wang.wu@example.com' LIMIT 1),(SELECT id FROM auth.users LIMIT 1))); -- 4) 五个商品(使用上面分类与商家) INSERT INTO public.ml_products (id, cid, merchant_id, category_id, product_code, name, base_price, total_stock, main_image_url, created_at) SELECT uuid_generate_v4(), nextval('public.ml_products_cid_seq'::regclass), (SELECT id FROM public.ak_users WHERE email='merchant.real@example.com' LIMIT 1), (SELECT id FROM public.ml_categories WHERE name='测试分类-配送端' LIMIT 1), 'REAL-P-A-20260202','鲜榨橙汁 500ml',12.50,200,'https://cdn.example.com/orange.jpg', NOW() WHERE NOT EXISTS (SELECT 1 FROM public.ml_products WHERE product_code='REAL-P-A-20260202'); INSERT INTO public.ml_products (id, cid, merchant_id, category_id, product_code, name, base_price, total_stock, main_image_url, created_at) SELECT uuid_generate_v4(), nextval('public.ml_products_cid_seq'::regclass), (SELECT id FROM public.ak_users WHERE email='merchant.real@example.com' LIMIT 1), (SELECT id FROM public.ml_categories WHERE name='测试分类-配送端' LIMIT 1), 'REAL-P-B-20260202','经典牛肉饼 200g',35.00,120,'https://cdn.example.com/beef.jpg', NOW() WHERE NOT EXISTS (SELECT 1 FROM public.ml_products WHERE product_code='REAL-P-B-20260202'); INSERT INTO public.ml_products (id, cid, merchant_id, category_id, product_code, name, base_price, total_stock, main_image_url, created_at) SELECT uuid_generate_v4(), nextval('public.ml_products_cid_seq'::regclass), (SELECT id FROM public.ak_users WHERE email='merchant.real@example.com' LIMIT 1), (SELECT id FROM public.ml_categories WHERE name='测试分类-配送端' LIMIT 1), 'REAL-P-C-20260202','手工三明治',22.00,80,'https://cdn.example.com/sandwich.jpg', NOW() WHERE NOT EXISTS (SELECT 1 FROM public.ml_products WHERE product_code='REAL-P-C-20260202'); INSERT INTO public.ml_products (id, cid, merchant_id, category_id, product_code, name, base_price, total_stock, main_image_url, created_at) SELECT uuid_generate_v4(), nextval('public.ml_products_cid_seq'::regclass), (SELECT id FROM public.ak_users WHERE email='merchant.real@example.com' LIMIT 1), (SELECT id FROM public.ml_categories WHERE name='测试分类-配送端' LIMIT 1), 'REAL-P-D-20260202','每日现磨咖啡',18.00,150,'https://cdn.example.com/coffee.jpg', NOW() WHERE NOT EXISTS (SELECT 1 FROM public.ml_products WHERE product_code='REAL-P-D-20260202'); -- 5) 创建若干订单与配送任务(status = 1, driver_id = NULL) -- 订单 1 INSERT INTO public.ml_orders (order_no, user_id, merchant_id, product_amount, shipping_fee, total_amount, shipping_address, created_at, updated_at) SELECT 'REAL-ORD-20260202-001', COALESCE( (SELECT id FROM public.ak_users WHERE email='zhang.san@example.com' LIMIT 1), (SELECT id FROM public.ak_users WHERE auth_id=(SELECT id FROM auth.users WHERE email='zhang.san@example.com' LIMIT 1) LIMIT 1), (SELECT id FROM public.ak_users LIMIT 1) ), (SELECT id FROM public.ak_users WHERE email='merchant.real@example.com' LIMIT 1), 12.50,3.00,15.50, ('{"contact":"张三","phone":"13811112222","province":"北京市","city":"北京市","district":"朝阳区","street":"望京街道","detail":"望京SOHO 1号楼"}')::jsonb, NOW(), NOW() WHERE NOT EXISTS (SELECT 1 FROM public.ml_orders WHERE order_no='REAL-ORD-20260202-001'); INSERT INTO public.ml_order_items (id, order_id, product_id, product_name, price, quantity, total_amount, created_at) SELECT uuid_generate_v4(), (SELECT id FROM public.ml_orders WHERE order_no='REAL-ORD-20260202-001' LIMIT 1), (SELECT id FROM public.ml_products WHERE product_code='REAL-P-A-20260202' LIMIT 1), '鲜榨橙汁 500ml',12.50,1,12.50,NOW() WHERE NOT EXISTS (SELECT 1 FROM public.ml_order_items oi JOIN public.ml_orders o ON oi.order_id=o.id WHERE o.order_no='REAL-ORD-20260202-001'); INSERT INTO public.ml_delivery_tasks (order_id, pickup_address, delivery_address, delivery_fee, status, created_at, updated_at) SELECT (SELECT id FROM public.ml_orders WHERE order_no='REAL-ORD-20260202-001' LIMIT 1), ('{"contact":"门店A","phone":"13920001111","detail":"门店A 地址"}')::jsonb, ('{"contact":"张三","phone":"13811112222","detail":"望京SOHO 1号楼"}')::jsonb, 3.00,1,NOW(),NOW() WHERE NOT EXISTS (SELECT 1 FROM public.ml_delivery_tasks dt JOIN public.ml_orders o ON dt.order_id=o.id WHERE o.order_no='REAL-ORD-20260202-001'); -- 订单 2 INSERT INTO public.ml_orders (order_no, user_id, merchant_id, product_amount, shipping_fee, total_amount, shipping_address, created_at, updated_at) SELECT 'REAL-ORD-20260202-002', COALESCE( (SELECT id FROM public.ak_users WHERE email='li.si@example.com' LIMIT 1), (SELECT id FROM public.ak_users WHERE auth_id=(SELECT id FROM auth.users WHERE email='li.si@example.com' LIMIT 1) LIMIT 1), (SELECT id FROM public.ak_users LIMIT 1) ), (SELECT id FROM public.ak_users WHERE email='merchant.real@example.com' LIMIT 1), 35.00,4.00,39.00, ('{"contact":"李四","phone":"13822223333","province":"上海市","city":"上海市","district":"静安区","street":"南京西路","detail":"静安寺附近"}')::jsonb, NOW(), NOW() WHERE NOT EXISTS (SELECT 1 FROM public.ml_orders WHERE order_no='REAL-ORD-20260202-002'); INSERT INTO public.ml_order_items (id, order_id, product_id, product_name, price, quantity, total_amount, created_at) SELECT uuid_generate_v4(), (SELECT id FROM public.ml_orders WHERE order_no='REAL-ORD-20260202-002' LIMIT 1), (SELECT id FROM public.ml_products WHERE product_code='REAL-P-B-20260202' LIMIT 1), '经典牛肉饼 200g',35.00,1,35.00,NOW() WHERE NOT EXISTS (SELECT 1 FROM public.ml_order_items oi JOIN public.ml_orders o ON oi.order_id=o.id WHERE o.order_no='REAL-ORD-20260202-002'); INSERT INTO public.ml_delivery_tasks (order_id, pickup_address, delivery_address, delivery_fee, status, created_at, updated_at) SELECT (SELECT id FROM public.ml_orders WHERE order_no='REAL-ORD-20260202-002' LIMIT 1), ('{"contact":"门店B","phone":"13920002222","detail":"门店B 地址"}')::jsonb, ('{"contact":"李四","phone":"13822223333","detail":"静安寺附近"}')::jsonb, 4.00,1,NOW(),NOW() WHERE NOT EXISTS (SELECT 1 FROM public.ml_delivery_tasks dt JOIN public.ml_orders o ON dt.order_id=o.id WHERE o.order_no='REAL-ORD-20260202-002'); -- 订单 3 INSERT INTO public.ml_orders (order_no, user_id, merchant_id, product_amount, shipping_fee, total_amount, shipping_address, created_at, updated_at) SELECT 'REAL-ORD-20260202-003', COALESCE( (SELECT id FROM public.ak_users WHERE email='wang.wu@example.com' LIMIT 1), (SELECT id FROM public.ak_users WHERE auth_id=(SELECT id FROM auth.users WHERE email='wang.wu@example.com' LIMIT 1) LIMIT 1), (SELECT id FROM public.ak_users LIMIT 1) ), (SELECT id FROM public.ak_users WHERE email='merchant.real@example.com' LIMIT 1), 22.00,3.50,25.50, ('{"contact":"王五","phone":"13833334444","province":"广东省","city":"广州市","district":"天河区","street":"体育西路","detail":"天河城附近"}')::jsonb, NOW(), NOW() WHERE NOT EXISTS (SELECT 1 FROM public.ml_orders WHERE order_no='REAL-ORD-20260202-003'); INSERT INTO public.ml_order_items (id, order_id, product_id, product_name, price, quantity, total_amount, created_at) SELECT uuid_generate_v4(), (SELECT id FROM public.ml_orders WHERE order_no='REAL-ORD-20260202-003' LIMIT 1), (SELECT id FROM public.ml_products WHERE product_code='REAL-P-C-20260202' LIMIT 1), '手工三明治',22.00,1,22.00,NOW() WHERE NOT EXISTS (SELECT 1 FROM public.ml_order_items oi JOIN public.ml_orders o ON oi.order_id=o.id WHERE o.order_no='REAL-ORD-20260202-003'); INSERT INTO public.ml_delivery_tasks (order_id, pickup_address, delivery_address, delivery_fee, status, created_at, updated_at) SELECT (SELECT id FROM public.ml_orders WHERE order_no='REAL-ORD-20260202-003' LIMIT 1), ('{"contact":"门店C","phone":"13920003333","detail":"门店C 地址"}')::jsonb, ('{"contact":"王五","phone":"13833334444","detail":"天河城附近"}')::jsonb, 3.50,1,NOW(),NOW() WHERE NOT EXISTS (SELECT 1 FROM public.ml_delivery_tasks dt JOIN public.ml_orders o ON dt.order_id=o.id WHERE o.order_no='REAL-ORD-20260202-003'); -- 订单 4 INSERT INTO public.ml_orders (order_no, user_id, merchant_id, product_amount, shipping_fee, total_amount, shipping_address, created_at, updated_at) SELECT 'REAL-ORD-20260202-004', COALESCE( (SELECT id FROM public.ak_users WHERE email='zhang.san@example.com' LIMIT 1), (SELECT id FROM public.ak_users WHERE auth_id=(SELECT id FROM auth.users WHERE email='zhang.san@example.com' LIMIT 1) LIMIT 1), (SELECT id FROM public.ak_users LIMIT 1) ), (SELECT id FROM public.ak_users WHERE email='merchant.real@example.com' LIMIT 1), 18.00,3.00,21.00, ('{"contact":"张三","phone":"13811112222","province":"上海市","city":"上海市","district":"浦东新区","street":"世纪大道","detail":"世纪汇 10 号"}')::jsonb, NOW(), NOW() WHERE NOT EXISTS (SELECT 1 FROM public.ml_orders WHERE order_no='REAL-ORD-20260202-004'); INSERT INTO public.ml_order_items (id, order_id, product_id, product_name, price, quantity, total_amount, created_at) SELECT uuid_generate_v4(), (SELECT id FROM public.ml_orders WHERE order_no='REAL-ORD-20260202-004' LIMIT 1), (SELECT id FROM public.ml_products WHERE product_code='REAL-P-D-20260202' LIMIT 1), '每日现磨咖啡',18.00,1,18.00,NOW() WHERE NOT EXISTS (SELECT 1 FROM public.ml_order_items oi JOIN public.ml_orders o ON oi.order_id=o.id WHERE o.order_no='REAL-ORD-20260202-004'); INSERT INTO public.ml_delivery_tasks (order_id, pickup_address, delivery_address, delivery_fee, status, created_at, updated_at) SELECT (SELECT id FROM public.ml_orders WHERE order_no='REAL-ORD-20260202-004' LIMIT 1), ('{"contact":"门店D","phone":"13920004444","detail":"门店D 地址"}')::jsonb, ('{"contact":"张三","phone":"13811112222","detail":"世纪汇 10 号"}')::jsonb, 3.00,1,NOW(),NOW() WHERE NOT EXISTS (SELECT 1 FROM public.ml_delivery_tasks dt JOIN public.ml_orders o ON dt.order_id=o.id WHERE o.order_no='REAL-ORD-20260202-004'); -- 最终返回已创建或已存在的关键 id,便于验证 SELECT (SELECT id FROM public.ak_users WHERE email='merchant.real@example.com' LIMIT 1) AS merchant_id, (SELECT id FROM public.ak_users WHERE email='zhang.san@example.com' LIMIT 1) AS custA_id, (SELECT id FROM public.ak_users WHERE email='li.si@example.com' LIMIT 1) AS custB_id, (SELECT id FROM public.ak_users WHERE email='wang.wu@example.com' LIMIT 1) AS custC_id, (SELECT id FROM public.ml_products WHERE product_code='REAL-P-A-20260202' LIMIT 1) AS productA_id, (SELECT id FROM public.ml_products WHERE product_code='REAL-P-B-20260202' LIMIT 1) AS productB_id, (SELECT id FROM public.ml_products WHERE product_code='REAL-P-C-20260202' LIMIT 1) AS productC_id, (SELECT id FROM public.ml_products WHERE product_code='REAL-P-D-20260202' LIMIT 1) AS productD_id, (SELECT id FROM public.ml_orders WHERE order_no='REAL-ORD-20260202-001' LIMIT 1) AS order1_id, (SELECT id FROM public.ml_orders WHERE order_no='REAL-ORD-20260202-002' LIMIT 1) AS order2_id, (SELECT id FROM public.ml_orders WHERE order_no='REAL-ORD-20260202-003' LIMIT 1) AS order3_id, (SELECT id FROM public.ml_orders WHERE order_no='REAL-ORD-20260202-004' LIMIT 1) AS order4_id;