mall数据库文件

This commit is contained in:
comlibmb
2026-01-30 16:17:13 +08:00
parent cfec4a16c0
commit 8f181b2b6a
42 changed files with 12758 additions and 2 deletions

View File

@@ -0,0 +1,73 @@
-- ============================================
-- 配送效率分析(按 assigned_at 统计周期,接单 -> 送达)
-- 依赖表ml_delivery_tasks, ml_delivery_drivers
-- ============================================
-- 1) 每日趋势:平均时效/平均配送费/总配送费/完成单量
CREATE OR REPLACE FUNCTION public.rpc_delivery_efficiency_daily(
p_start TIMESTAMPTZ,
p_end TIMESTAMPTZ
)
RETURNS TABLE (
day DATE,
completed_orders INTEGER,
avg_delivery_minutes NUMERIC,
total_fee NUMERIC,
avg_fee NUMERIC
)
LANGUAGE sql
SECURITY DEFINER
SET search_path = public
AS $$
SELECT
DATE(t.assigned_at) AS day,
COUNT(*)::INTEGER AS completed_orders,
AVG(EXTRACT(EPOCH FROM (t.delivered_at - t.assigned_at)) / 60.0) AS avg_delivery_minutes,
COALESCE(SUM(t.delivery_fee), 0) AS total_fee,
AVG(t.delivery_fee) AS avg_fee
FROM public.ml_delivery_tasks t
WHERE t.status = 5
AND t.assigned_at >= p_start
AND t.assigned_at < p_end
AND t.delivered_at IS NOT NULL
GROUP BY DATE(t.assigned_at)
ORDER BY day;
$$;
-- 2) Top N 配送员:按完成单量排序
CREATE OR REPLACE FUNCTION public.rpc_delivery_efficiency_top_drivers(
p_start TIMESTAMPTZ,
p_end TIMESTAMPTZ,
p_limit INTEGER DEFAULT 10
)
RETURNS TABLE (
driver_id UUID,
driver_name TEXT,
orders INTEGER,
rating_avg NUMERIC
)
LANGUAGE sql
SECURITY DEFINER
SET search_path = public
AS $$
SELECT
d.id AS driver_id,
CAST(d.real_name AS TEXT) AS driver_name,
COUNT(*)::INTEGER AS orders,
COALESCE(d.rating_avg, 0) AS rating_avg
FROM public.ml_delivery_tasks t
JOIN public.ml_delivery_drivers d ON d.id = t.driver_id
WHERE t.status = 5
AND t.assigned_at >= p_start
AND t.assigned_at < p_end
AND t.delivered_at IS NOT NULL
GROUP BY d.id, d.real_name, d.rating_avg
ORDER BY orders DESC
LIMIT p_limit;
$$;
-- 建议:只允许 authenticated 调用(按你现有 analytics 的做法)
REVOKE ALL ON FUNCTION public.rpc_delivery_efficiency_daily(TIMESTAMPTZ, TIMESTAMPTZ) FROM PUBLIC;
REVOKE ALL ON FUNCTION public.rpc_delivery_efficiency_top_drivers(TIMESTAMPTZ, TIMESTAMPTZ, INTEGER) FROM PUBLIC;
GRANT EXECUTE ON FUNCTION public.rpc_delivery_efficiency_daily(TIMESTAMPTZ, TIMESTAMPTZ) TO authenticated;
GRANT EXECUTE ON FUNCTION public.rpc_delivery_efficiency_top_drivers(TIMESTAMPTZ, TIMESTAMPTZ, INTEGER) TO authenticated;