跑通consumer下单之后派单给delivery2
This commit is contained in:
@@ -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
|
||||
@@ -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;
|
||||
Reference in New Issue
Block a user