Files
medical-mall/doc_mall/consumer/sql/simulate_multi_shop.sql
2026-02-03 17:26:23 +08:00

63 lines
2.9 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.
-- =====================================================================================
-- 模拟多店铺环境:创建第二个商户和店铺,并将部分商品转移过去
-- =====================================================================================
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 $$;