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

105 lines
6.7 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.
-- 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);