Files
medical-mall/pages/mall/delivery/db/realistic_mock_data.sql
2026-02-03 17:30:00 +08:00

409 lines
30 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- 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_tasksstatus = 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;