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