feat: 态势感知健康度评分明细弹窗(雷达图+8维度得分)
This commit is contained in:
@@ -43,12 +43,21 @@ router.get('/health-score', async (req: AuthRequest, res) => {
|
||||
scored AS (
|
||||
SELECT
|
||||
b.store_code, b.store_name, b.received, b.bill_count, b.avg_bill_value,
|
||||
b.risk_level,
|
||||
b.risk_level, b.avg_daily_received,
|
||||
COALESCE(b.theoretical_margin_pct, 0) AS avg_margin,
|
||||
COALESCE(c.avg_cost_variance_pct, 20) AS avg_cost_variance_pct,
|
||||
COALESCE(m.repeat_rate_pct, 0) AS repeat_rate_pct,
|
||||
COALESCE(b.member_bill_share_pct, 0) AS member_share_pct,
|
||||
COALESCE(t.completion_rate, 0) AS task_completion_rate,
|
||||
-- 各维度得分
|
||||
(20 * LEAST(1.0, b.avg_daily_received / 30000))::numeric(5,1) AS score_revenue,
|
||||
(20 * GREATEST(0, 1 - LEAST(COALESCE(c.avg_cost_variance_pct, 20), 50) / 50))::numeric(5,1) AS score_cost,
|
||||
(15 * LEAST(1.0, GREATEST(0, COALESCE(b.theoretical_margin_pct, 0) - 60) / 15))::numeric(5,1) AS score_margin,
|
||||
(CASE b.risk_level WHEN '绿色' THEN 10 WHEN '黄色' THEN 6 WHEN '红色' THEN 2 ELSE 4 END)::numeric(5,1) AS score_risk,
|
||||
(10 * LEAST(1.0, COALESCE(m.repeat_rate_pct, 0) / 40))::numeric(5,1) AS score_repeat,
|
||||
(10 * LEAST(1.0, COALESCE(b.member_bill_share_pct, 0) / 20))::numeric(5,1) AS score_member,
|
||||
(10 * COALESCE(t.completion_rate, 0) / 100)::numeric(5,1) AS score_task,
|
||||
(5 * LEAST(1.0, COALESCE(b.avg_bill_value, 0) / 40))::numeric(5,1) AS score_bill,
|
||||
LEAST(100, GREATEST(0,
|
||||
-- 1. 营收规模 20分:30000=满分,中位18642≈12分
|
||||
20 * LEAST(1.0, b.avg_daily_received / 30000)
|
||||
@@ -75,6 +84,9 @@ router.get('/health-score', async (req: AuthRequest, res) => {
|
||||
SELECT store_code, store_name, received, bill_count, avg_bill_value,
|
||||
risk_level, avg_margin, avg_cost_variance_pct, repeat_rate_pct,
|
||||
member_share_pct, task_completion_rate, health_score,
|
||||
score_revenue, score_cost, score_margin, score_risk,
|
||||
score_repeat, score_member, score_task, score_bill,
|
||||
avg_daily_received,
|
||||
CASE WHEN health_score >= 75 THEN '健康'
|
||||
WHEN health_score >= 55 THEN '亚健康'
|
||||
ELSE '需干预'
|
||||
|
||||
Reference in New Issue
Block a user