跑通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 @@
-- =====================================================================================
-- Schema: homecare foundation
-- Version: v1
-- Purpose: 为 ec_service_requests / ec_care_tasks / ec_care_records / hc_* 新链补齐最小结构、索引与基础 RLS。
-- Coverage:
-- 1. consumer 下单与自动派单字段
-- 2. consumer 验收 / 退回整改 / 评价字段
-- 3. delivery 执行记录、异常、证据、事件字段
-- =====================================================================================
-- 执行稿见mall_sql/migrations/20260526_homecare_foundation_v1.sql

View File

@@ -11,7 +11,6 @@ ALTER TABLE public.ml_delivery_stations ENABLE ROW LEVEL SECURITY;
-- 清理旧策略
DROP POLICY IF EXISTS delivery_staff_self_select ON public.ml_delivery_staff;
DROP POLICY IF EXISTS delivery_staff_assignable_select ON public.ml_delivery_staff;
DROP POLICY IF EXISTS delivery_staff_self_update ON public.ml_delivery_staff;
DROP POLICY IF EXISTS delivery_stations_select_active ON public.ml_delivery_stations;
@@ -30,20 +29,7 @@ CREATE POLICY delivery_staff_self_select
)
);
-- 2. 已登录用户仅可读取可派单的在线服务人员,用于自动派单
CREATE POLICY delivery_staff_assignable_select
ON public.ml_delivery_staff
FOR SELECT
TO authenticated
USING (
deleted_at IS NULL
AND status = 1
AND COALESCE(is_active, true) = true
AND online_status = 'online'
AND uid IS NOT NULL
);
-- 3. 执行人员本人可更新自己的在线状态等自有档案字段
-- 2. 执行人员本人可更新自己的在线状态等自有档案字段
CREATE POLICY delivery_staff_self_update
ON public.ml_delivery_staff
FOR UPDATE
@@ -67,11 +53,12 @@ CREATE POLICY delivery_staff_self_update
)
);
-- 4. 提货点/机构对前台保持只读,仅返回启用且未删除数据
-- 3. 提货点/机构对前台保持只读,仅返回启用且未删除数据
CREATE POLICY delivery_stations_select_active
ON public.ml_delivery_stations
FOR SELECT
TO anon, authenticated
USING (status = 1 AND deleted_at IS NULL);
-- 4. 派单候选人读取统一走 SECURITY DEFINER RPC不再开放公开可派单列表 RLS
-- 5. 其余直连写操作默认不开放,管理端统一走 SECURITY DEFINER RPC

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;