105 lines
6.7 KiB
SQL
105 lines
6.7 KiB
SQL
-- create_pending_orders.sql
|
||
-- 在 dev 环境幂等创建若干 "待接取" 订单及对应配送任务
|
||
-- 使用说明:在 Supabase SQL Editor 中选择 Role = postgres,整体执行此文件。
|
||
|
||
-- 订单 PENDING-20260202-001
|
||
WITH o AS (
|
||
INSERT INTO public.ml_orders (order_no, user_id, merchant_id, product_amount, shipping_fee, total_amount, shipping_address, order_status, created_at, updated_at)
|
||
SELECT 'PENDING-20260202-001',
|
||
COALESCE((SELECT id FROM public.ak_users WHERE email='zhang.san@example.com' 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","detail":"测试地址 A"}')::jsonb,
|
||
1, NOW(), NOW()
|
||
WHERE NOT EXISTS (SELECT 1 FROM public.ml_orders WHERE order_no='PENDING-20260202-001')
|
||
RETURNING id
|
||
), it AS (
|
||
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 o),
|
||
COALESCE((SELECT id FROM public.ml_products WHERE product_code='REAL-P-A-20260202' LIMIT 1),(SELECT id FROM public.ml_products LIMIT 1)),
|
||
COALESCE((SELECT name FROM public.ml_products WHERE product_code='REAL-P-A-20260202' LIMIT 1),'商品A'),
|
||
COALESCE((SELECT base_price FROM public.ml_products WHERE product_code='REAL-P-A-20260202' LIMIT 1),12.50),1,
|
||
COALESCE((SELECT base_price FROM public.ml_products WHERE product_code='REAL-P-A-20260202' LIMIT 1),12.50), NOW()
|
||
WHERE EXISTS (SELECT 1 FROM o)
|
||
RETURNING id
|
||
), t AS (
|
||
INSERT INTO public.ml_delivery_tasks (order_id, pickup_address, delivery_address, delivery_fee, status, created_at, updated_at)
|
||
SELECT (SELECT id FROM o),
|
||
('{"contact":"门店A","phone":"13900000001","detail":"门店A"}')::jsonb,
|
||
('{"contact":"张三","phone":"13811112222","detail":"测试地址 A"}')::jsonb,
|
||
3.00, 1, NOW(), NOW()
|
||
WHERE EXISTS (SELECT 1 FROM o)
|
||
RETURNING id
|
||
)
|
||
SELECT 'PENDING-20260202-001' AS order_no, (SELECT id FROM o) AS order_id, (SELECT id FROM t) AS task_id;
|
||
|
||
-- 订单 PENDING-20260202-002
|
||
WITH o AS (
|
||
INSERT INTO public.ml_orders (order_no, user_id, merchant_id, product_amount, shipping_fee, total_amount, shipping_address, order_status, created_at, updated_at)
|
||
SELECT 'PENDING-20260202-002',
|
||
COALESCE((SELECT id FROM public.ak_users WHERE email='li.si@example.com' 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","detail":"测试地址 B"}')::jsonb,
|
||
1, NOW(), NOW()
|
||
WHERE NOT EXISTS (SELECT 1 FROM public.ml_orders WHERE order_no='PENDING-20260202-002')
|
||
RETURNING id
|
||
), it AS (
|
||
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 o),
|
||
COALESCE((SELECT id FROM public.ml_products WHERE product_code='REAL-P-B-20260202' LIMIT 1),(SELECT id FROM public.ml_products LIMIT 1)),
|
||
COALESCE((SELECT name FROM public.ml_products WHERE product_code='REAL-P-B-20260202' LIMIT 1),'商品B'),
|
||
COALESCE((SELECT base_price FROM public.ml_products WHERE product_code='REAL-P-B-20260202' LIMIT 1),35.00),1,
|
||
COALESCE((SELECT base_price FROM public.ml_products WHERE product_code='REAL-P-B-20260202' LIMIT 1),35.00), NOW()
|
||
WHERE EXISTS (SELECT 1 FROM o)
|
||
RETURNING id
|
||
), t AS (
|
||
INSERT INTO public.ml_delivery_tasks (order_id, pickup_address, delivery_address, delivery_fee, status, created_at, updated_at)
|
||
SELECT (SELECT id FROM o),
|
||
('{"contact":"门店B","phone":"13900000002","detail":"门店B"}')::jsonb,
|
||
('{"contact":"李四","phone":"13822223333","detail":"测试地址 B"}')::jsonb,
|
||
4.00, 1, NOW(), NOW()
|
||
WHERE EXISTS (SELECT 1 FROM o)
|
||
RETURNING id
|
||
)
|
||
SELECT 'PENDING-20260202-002' AS order_no, (SELECT id FROM o) AS order_id, (SELECT id FROM t) AS task_id;
|
||
|
||
-- 订单 PENDING-20260202-003
|
||
WITH o AS (
|
||
INSERT INTO public.ml_orders (order_no, user_id, merchant_id, product_amount, shipping_fee, total_amount, shipping_address, order_status, created_at, updated_at)
|
||
SELECT 'PENDING-20260202-003',
|
||
COALESCE((SELECT id FROM public.ak_users WHERE email='wang.wu@example.com' 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","detail":"测试地址 C"}')::jsonb,
|
||
1, NOW(), NOW()
|
||
WHERE NOT EXISTS (SELECT 1 FROM public.ml_orders WHERE order_no='PENDING-20260202-003')
|
||
RETURNING id
|
||
), it AS (
|
||
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 o),
|
||
COALESCE((SELECT id FROM public.ml_products WHERE product_code='REAL-P-C-20260202' LIMIT 1),(SELECT id FROM public.ml_products LIMIT 1)),
|
||
COALESCE((SELECT name FROM public.ml_products WHERE product_code='REAL-P-C-20260202' LIMIT 1),'商品C'),
|
||
COALESCE((SELECT base_price FROM public.ml_products WHERE product_code='REAL-P-C-20260202' LIMIT 1),22.00),1,
|
||
COALESCE((SELECT base_price FROM public.ml_products WHERE product_code='REAL-P-C-20260202' LIMIT 1),22.00), NOW()
|
||
WHERE EXISTS (SELECT 1 FROM o)
|
||
RETURNING id
|
||
), t AS (
|
||
INSERT INTO public.ml_delivery_tasks (order_id, pickup_address, delivery_address, delivery_fee, status, created_at, updated_at)
|
||
SELECT (SELECT id FROM o),
|
||
('{"contact":"门店C","phone":"13900000003","detail":"门店C"}')::jsonb,
|
||
('{"contact":"王五","phone":"13833334444","detail":"测试地址 C"}')::jsonb,
|
||
3.50, 1, NOW(), NOW()
|
||
WHERE EXISTS (SELECT 1 FROM o)
|
||
RETURNING id
|
||
)
|
||
SELECT 'PENDING-20260202-003' AS order_no, (SELECT id FROM o) AS order_id, (SELECT id FROM t) AS task_id;
|
||
|
||
-- 最终:列出新建或已存在的 pending 订单
|
||
SELECT order_no, order_id, task_id FROM (
|
||
VALUES
|
||
('PENDING-20260202-001',(SELECT id FROM public.ml_orders WHERE order_no='PENDING-20260202-001' LIMIT 1),(SELECT id FROM public.ml_delivery_tasks dt JOIN public.ml_orders o ON dt.order_id=o.id WHERE o.order_no='PENDING-20260202-001' LIMIT 1)),
|
||
('PENDING-20260202-002',(SELECT id FROM public.ml_orders WHERE order_no='PENDING-20260202-002' LIMIT 1),(SELECT id FROM public.ml_delivery_tasks dt JOIN public.ml_orders o ON dt.order_id=o.id WHERE o.order_no='PENDING-20260202-002' LIMIT 1)),
|
||
('PENDING-20260202-003',(SELECT id FROM public.ml_orders WHERE order_no='PENDING-20260202-003' LIMIT 1),(SELECT id FROM public.ml_delivery_tasks dt JOIN public.ml_orders o ON dt.order_id=o.id WHERE o.order_no='PENDING-20260202-003' LIMIT 1))
|
||
) AS t(order_no, order_id, task_id);
|