Files
medical-mall/mall_sql/scripts/create_delivery_staff_safe.sql
2026-06-10 20:20:47 +08:00

91 lines
3.5 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.
-- ===================================================================
-- 用途:为已存在的 auth 用户创建 ml_delivery_staff 服务人员档案(兼容 v1/v2
-- 前提auth.users 中已有 homecare_worker@test.com
-- ===================================================================
DO $$
DECLARE
v_uid UUID;
v_has_v2 BOOLEAN := FALSE;
BEGIN
-- 1. 通过邮箱找到用户 ID
SELECT id INTO v_uid FROM auth.users WHERE email = 'homecare_worker@test.com' LIMIT 1;
IF v_uid IS NULL THEN
RAISE EXCEPTION 'auth.users 中不存在 homecare_worker@test.com请先创建该用户';
END IF;
-- 2. 确保 ak_users 中有对应记录role 必须是 delivery
INSERT INTO public.ak_users (id, username, email, role, created_at, updated_at)
VALUES (v_uid, '居家服务员', 'homecare_worker@test.com', 'delivery', NOW(), NOW())
ON CONFLICT (id) DO UPDATE SET
username = EXCLUDED.username,
role = EXCLUDED.role,
updated_at = NOW();
RAISE NOTICE '✓ ak_users 已就绪uid: %', v_uid;
-- 3. 探测 ml_delivery_staff 是否为 v2 结构(是否有 online_status 字段)
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;
-- 4. 根据表结构版本执行对应插入
IF v_has_v2 THEN
-- v2 结构(含 online_status, certificate_status, staff_no 等)
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_uid, '居家服务员',
'https://api.dicebear.com/7.x/avataaars/svg?seed=homecare',
'13800138000',
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
-- v1 结构(仅基础字段)
INSERT INTO public.ml_delivery_staff (
id, uid, nickname, avatar, phone,
status, is_active,
created_at, updated_at
) VALUES (
gen_random_uuid(), v_uid, '居家服务员',
'https://api.dicebear.com/7.x/avataaars/svg?seed=homecare',
'13800138000',
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 '============================================';
END $$;