修复订单显示bug
This commit is contained in:
143
mall_sql/scripts/create_delivery_staff_final.sql
Normal file
143
mall_sql/scripts/create_delivery_staff_final.sql
Normal file
@@ -0,0 +1,143 @@
|
||||
-- ===================================================================
|
||||
-- 用途:为已存在的 auth 用户创建 ak_users + ml_delivery_staff 档案
|
||||
-- 特点:自动探测 ak_users 表结构(有 auth_id 则插 auth_id,无则插 id)
|
||||
-- ===================================================================
|
||||
|
||||
DO $$
|
||||
DECLARE
|
||||
v_auth_id UUID;
|
||||
v_ak_user_id UUID;
|
||||
v_has_auth_id BOOLEAN := FALSE;
|
||||
v_has_phone BOOLEAN := FALSE;
|
||||
v_has_avatar_url BOOLEAN := FALSE;
|
||||
v_has_status BOOLEAN := FALSE;
|
||||
v_has_registration_source BOOLEAN := FALSE;
|
||||
v_has_v2 BOOLEAN := FALSE;
|
||||
v_email TEXT := 'homecare_worker@test.com';
|
||||
v_nickname TEXT := '居家服务员';
|
||||
v_phone TEXT := '13800138000';
|
||||
BEGIN
|
||||
-- 1. 获取 auth.users.id
|
||||
SELECT id INTO v_auth_id FROM auth.users WHERE email = v_email LIMIT 1;
|
||||
IF v_auth_id IS NULL THEN
|
||||
RAISE EXCEPTION 'auth.users 中不存在 %', v_email;
|
||||
END IF;
|
||||
|
||||
-- 2. 探测 ak_users 表结构
|
||||
SELECT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema = 'public' AND table_name = 'ak_users' AND column_name = 'auth_id')
|
||||
INTO v_has_auth_id;
|
||||
SELECT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema = 'public' AND table_name = 'ak_users' AND column_name = 'phone')
|
||||
INTO v_has_phone;
|
||||
SELECT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema = 'public' AND table_name = 'ak_users' AND column_name = 'avatar_url')
|
||||
INTO v_has_avatar_url;
|
||||
SELECT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema = 'public' AND table_name = 'ak_users' AND column_name = 'status')
|
||||
INTO v_has_status;
|
||||
SELECT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema = 'public' AND table_name = 'ak_users' AND column_name = 'registration_source')
|
||||
INTO v_has_registration_source;
|
||||
|
||||
RAISE NOTICE 'ak_users 结构探测: auth_id=%, phone=%, avatar_url=%, status=%, registration_source=%',
|
||||
v_has_auth_id, v_has_phone, v_has_avatar_url, v_has_status, v_has_registration_source;
|
||||
|
||||
-- 3. 插入 ak_users(动态字段)
|
||||
IF v_has_auth_id THEN
|
||||
-- 有 auth_id 字段:id 用 gen_random_uuid,auth_id 关联 auth.users.id
|
||||
INSERT INTO public.ak_users (
|
||||
id, auth_id, username, email, role,
|
||||
phone, avatar_url, status, registration_source,
|
||||
created_at, updated_at
|
||||
) VALUES (
|
||||
gen_random_uuid(), v_auth_id, v_nickname, v_email, 'delivery',
|
||||
v_phone, 'https://api.dicebear.com/7.x/avataaars/svg?seed=homecare', 'active', 'web',
|
||||
NOW(), NOW()
|
||||
)
|
||||
ON CONFLICT (auth_id) DO UPDATE SET
|
||||
username = EXCLUDED.username,
|
||||
email = EXCLUDED.email,
|
||||
role = EXCLUDED.role,
|
||||
phone = EXCLUDED.phone,
|
||||
avatar_url = EXCLUDED.avatar_url,
|
||||
status = EXCLUDED.status,
|
||||
updated_at = NOW()
|
||||
RETURNING id INTO v_ak_user_id;
|
||||
|
||||
RAISE NOTICE '✓ ak_users 已插入(含 auth_id),业务主键 id: %', v_ak_user_id;
|
||||
ELSE
|
||||
-- 无 auth_id 字段:id 直接等于 auth.users.id
|
||||
INSERT INTO public.ak_users (
|
||||
id, username, email, role,
|
||||
created_at, updated_at
|
||||
) VALUES (
|
||||
v_auth_id, v_nickname, v_email, 'delivery',
|
||||
NOW(), NOW()
|
||||
)
|
||||
ON CONFLICT (id) DO UPDATE SET
|
||||
username = EXCLUDED.username,
|
||||
email = EXCLUDED.email,
|
||||
role = EXCLUDED.role,
|
||||
updated_at = NOW()
|
||||
RETURNING id INTO v_ak_user_id;
|
||||
|
||||
RAISE NOTICE '✓ ak_users 已插入(id = auth_id),id: %', v_ak_user_id;
|
||||
END IF;
|
||||
|
||||
-- 4. 探测 ml_delivery_staff v2 字段
|
||||
SELECT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema = 'public' AND table_name = 'ml_delivery_staff' AND column_name = 'online_status')
|
||||
INTO v_has_v2;
|
||||
|
||||
-- 5. 插入 ml_delivery_staff(uid 必须等于 ak_users.id / ak_users 业务主键)
|
||||
IF v_has_v2 THEN
|
||||
INSERT INTO public.ml_delivery_staff (
|
||||
id, uid, nickname, avatar, phone,
|
||||
status, is_active,
|
||||
staff_no, online_status, certificate_status,
|
||||
certificate_expire_at, service_area, skills,
|
||||
created_at, updated_at
|
||||
) VALUES (
|
||||
gen_random_uuid(),
|
||||
v_ak_user_id, -- 关键:必须是 ak_users 的业务主键 id
|
||||
v_nickname,
|
||||
'https://api.dicebear.com/7.x/avataaars/svg?seed=homecare',
|
||||
v_phone,
|
||||
1, TRUE,
|
||||
'HC' || EXTRACT(YEAR FROM NOW()) || LPAD(FLOOR(RANDOM() * 10000)::TEXT, 4, '0'),
|
||||
'resting', 'valid',
|
||||
(NOW() + INTERVAL '1 year')::DATE,
|
||||
'北京市朝阳区',
|
||||
'["基础护理", "康复训练", "上门照护"]'::jsonb,
|
||||
NOW(), NOW()
|
||||
)
|
||||
ON CONFLICT (uid) WHERE deleted_at IS NULL DO UPDATE SET
|
||||
nickname = EXCLUDED.nickname,
|
||||
status = EXCLUDED.status,
|
||||
is_active = EXCLUDED.is_active,
|
||||
updated_at = NOW();
|
||||
RAISE NOTICE '✓ ml_delivery_staff (v2) 已插入/更新';
|
||||
ELSE
|
||||
INSERT INTO public.ml_delivery_staff (
|
||||
id, uid, nickname, avatar, phone,
|
||||
status, is_active, created_at, updated_at
|
||||
) VALUES (
|
||||
gen_random_uuid(),
|
||||
v_ak_user_id, -- 关键:必须是 ak_users 的业务主键 id
|
||||
v_nickname,
|
||||
'https://api.dicebear.com/7.x/avataaars/svg?seed=homecare',
|
||||
v_phone,
|
||||
1, TRUE,
|
||||
NOW(), NOW()
|
||||
)
|
||||
ON CONFLICT (uid) DO UPDATE SET
|
||||
nickname = EXCLUDED.nickname,
|
||||
status = EXCLUDED.status,
|
||||
is_active = EXCLUDED.is_active,
|
||||
updated_at = NOW();
|
||||
RAISE NOTICE '✓ ml_delivery_staff (v1) 已插入/更新';
|
||||
END IF;
|
||||
|
||||
RAISE NOTICE '============================================';
|
||||
RAISE NOTICE '建档完成!';
|
||||
RAISE NOTICE 'auth.users.id: %', v_auth_id;
|
||||
RAISE NOTICE 'ak_users.id: %', v_ak_user_id;
|
||||
RAISE NOTICE 'ml_delivery_staff.uid: %', v_ak_user_id;
|
||||
RAISE NOTICE '============================================';
|
||||
|
||||
END $$;
|
||||
Reference in New Issue
Block a user