63 lines
2.9 KiB
SQL
63 lines
2.9 KiB
SQL
-- =====================================================================================
|
||
-- 模拟多店铺环境:创建第二个商户和店铺,并将部分商品转移过去
|
||
-- =====================================================================================
|
||
DO $$
|
||
DECLARE
|
||
v_merchant_1 UUID;
|
||
v_merchant_2 UUID;
|
||
v_shop_2_id UUID;
|
||
v_user_email VARCHAR := 'test_merchant_2@example.com';
|
||
BEGIN
|
||
-- 1. 获取已存在的第一个商户 (脚本生成的商品属于这个商户)
|
||
SELECT id INTO v_merchant_1 FROM public.ak_users WHERE role = 'merchant' LIMIT 1;
|
||
IF v_merchant_1 IS NULL THEN
|
||
RAISE EXCEPTION '未找到任何商户用户,请先确保基础数据存在';
|
||
END IF;
|
||
|
||
-- 2. 查找或创建第二个商户
|
||
-- 尝试找一个不是 v_merchant_1 的用户
|
||
SELECT id INTO v_merchant_2 FROM public.ak_users WHERE id != v_merchant_1 LIMIT 1;
|
||
|
||
-- 如果只有一个用户,我们需要"借用"这个身份或者提示用户
|
||
-- 这里为了安全,如果只有一个用户,我们就不强行创建新用户了(因为涉及auth表),
|
||
-- 而是尝试将 ak_users 表里可能的普通用户角色临时改为 merchant 来演示
|
||
IF v_merchant_2 IS NULL THEN
|
||
-- 尝试找一个普通用户
|
||
SELECT id INTO v_merchant_2 FROM public.ak_users WHERE role != 'merchant' LIMIT 1;
|
||
|
||
IF v_merchant_2 IS NOT NULL THEN
|
||
-- 升级为商户以便演示
|
||
UPDATE public.ak_users SET role = 'merchant' WHERE id = v_merchant_2;
|
||
RAISE NOTICE '已将用户 % 临时升级为商户以便演示多店铺', v_merchant_2;
|
||
END IF;
|
||
END IF;
|
||
|
||
-- 如果实在找不到第二个用户,无法继续
|
||
IF v_merchant_2 IS NULL THEN
|
||
RAISE NOTICE '提示:系统中只有一个用户,无法模拟多店铺场景。请先注册第二个用户。';
|
||
RETURN;
|
||
END IF;
|
||
|
||
-- 3. 确保第二个商户有店铺
|
||
SELECT id INTO v_shop_2_id FROM public.ml_shops WHERE merchant_id = v_merchant_2 LIMIT 1;
|
||
|
||
IF v_shop_2_id IS NULL THEN
|
||
INSERT INTO public.ml_shops (merchant_id, shop_name, status, description)
|
||
VALUES (v_merchant_2, '极客数码专营店', 1, '专注于数码产品配件')
|
||
RETURNING id INTO v_shop_2_id;
|
||
RAISE NOTICE '为第二个商户创建了店铺:极客数码专营店';
|
||
ELSE
|
||
UPDATE public.ml_shops SET shop_name = '极客数码专营店' WHERE id = v_shop_2_id;
|
||
END IF;
|
||
|
||
-- 4. 将部分商品转移到第二个店铺
|
||
-- 转移 "数码配件(ACC)" 和 "图书(BOOK)" 类商品
|
||
UPDATE public.ml_products
|
||
SET merchant_id = v_merchant_2
|
||
WHERE product_code LIKE 'ACC%' OR product_code LIKE 'BOOK%';
|
||
|
||
RAISE NOTICE '已将 [数码配件] 和 [图书文娱] 类商品转移到第二个店铺。';
|
||
RAISE NOTICE '现在购物车中添加这些商品应该会显示在不同的分组下。';
|
||
|
||
END $$;
|