跑通consumer下单之后派单给delivery2

This commit is contained in:
2026-05-27 19:09:17 +08:00
parent c26f2c5431
commit 1bf9d11c35
13 changed files with 2554 additions and 436 deletions

View File

@@ -0,0 +1,11 @@
-- =====================================================================================
-- RPC: rpc_delivery_* homecare actions
-- Version: v1
-- Purpose: 为 delivery 页面当前 api/delivery.uts 已固定的 rpc_delivery_* 契约补齐 SQL 端实现。
-- Notes:
-- 1. 优先兼容 ec/hc 新链,检测不到表或执行失败时回退 hss 旧链。
-- 2. 返回 JSON 结构直接对齐 delivery/types/delivery.uts。
-- 3. message_list 与 record_list 采用最小可用实现,避免前端继续落入 fallback。
-- =====================================================================================
-- 迁移正文见同批文件mall_sql/migrations/20260526_delivery_homecare_rpc_v1.sql

View File

@@ -0,0 +1,54 @@
-- =====================================================================================
-- RPC: rpc_homecare_dispatch_candidate
-- Version: v1
-- Purpose: 为居家上门服务返回单个可派单候选人,替代公开可派单人员 RLS。
-- Security: SECURITY DEFINER + 固定 search_path
-- Depends: public.ak_users, public.ml_delivery_staff
-- =====================================================================================
CREATE OR REPLACE FUNCTION public.rpc_homecare_dispatch_candidate(
p_service_code TEXT DEFAULT NULL,
p_station_id UUID DEFAULT NULL
)
RETURNS JSONB
LANGUAGE plpgsql
SECURITY DEFINER
SET search_path = public
AS $$
DECLARE
v_candidate JSONB;
BEGIN
IF auth.uid() IS NULL OR NOT EXISTS (
SELECT 1
FROM public.ak_users u
WHERE u.auth_id = auth.uid()
) THEN
RAISE EXCEPTION 'Permission denied';
END IF;
SELECT jsonb_build_object(
'id', s.id,
'uid', s.uid,
'station_id', s.station_id,
'status', s.status,
'online_status', s.online_status,
'updated_at', s.updated_at,
'created_at', s.created_at
)
INTO v_candidate
FROM public.ml_delivery_staff s
WHERE s.deleted_at IS NULL
AND s.status = 1
AND COALESCE(s.is_active, TRUE) = TRUE
AND s.online_status = 'online'
AND s.uid IS NOT NULL
AND (p_station_id IS NULL OR s.station_id = p_station_id)
ORDER BY COALESCE(s.updated_at, s.created_at) DESC, s.created_at DESC
LIMIT 1;
RETURN v_candidate;
END;
$$;
REVOKE ALL ON FUNCTION public.rpc_homecare_dispatch_candidate(TEXT, UUID) FROM PUBLIC;
GRANT EXECUTE ON FUNCTION public.rpc_homecare_dispatch_candidate(TEXT, UUID) TO authenticated;