x

Agent-04 供应商与客户分析

版本: v1.0
概述: 供应商绩效评估 + 客户分层管理与赊销分析

1. Agent职责

维度 说明
核心模块 供应商对账 / 客户对账 / 绩效评分 / 流失预警 / 员工提成
执行频率 对账日报、绩效月评、提成月度结算
推送渠道 企业微信 / 钉钉

2. 供应商对账单SQL

-- 供应商对账单汇总
SELECT 
    sp.supplier_id,
    si.supplier_name,
    SUM(sp.purchase_amount) AS total_purchase,
    SUM(sp.return_amount) AS total_return,
    SUM(sp.purchase_amount) - SUM(sp.return_amount) AS net_purchase,
    SUM(CASE WHEN sp.payment_status = 'unpaid' THEN sp.purchase_amount ELSE 0 END) AS accounts_payable,
    MAX(sp.due_date) AS latest_due_date,
    today() - MAX(sp.due_date) AS aging_days,
    CASE 
        WHEN aging_days <= 30 THEN '🟢 正常'
        WHEN aging_days <= 60 THEN '🟡 预警'
        WHEN aging_days <= 90 THEN '🟠 警告'
        ELSE '🔴 危险'
    END AS aging_level
FROM supplier_purchases sp
JOIN supplier_info si ON sp.supplier_id = si.supplier_id
WHERE sp.purchase_date BETWEEN '{start_date}' AND '{end_date}'
GROUP BY sp.supplier_id, si.supplier_name
ORDER BY net_purchase DESC;

3. 供应商绩效评分SQL

-- 供应商综合绩效评分
WITH delivery_score AS (
    SELECT 
        supplier_id,
        ROUND(SUM(is_on_time) * 100.0 / COUNT(*), 2) AS on_time_rate
    FROM supplier_delivery
    WHERE actual_delivery_date BETWEEN '{start_date}' AND '{end_date}'
    GROUP BY supplier_id
),
quality_score AS (
    SELECT 
        supplier_id,
        ROUND((1 - SUM(return_quantity) / SUM(quantity)) * 100, 2) AS quality_rate
    FROM supplier_quality
    WHERE return_date BETWEEN '{start_date}' AND '{end_date}'
    GROUP BY supplier_id
),
price_score AS (
    SELECT 
        supplier_id,
        ROUND((1 - avg_price / market_avg_price) * 100, 2) AS price_advantage
    FROM supplier_price
    WHERE last_update_date >= today() - 90
)
SELECT 
    si.supplier_name,
    ds.on_time_rate,
    qs.quality_rate,
    ps.price_advantage,
    ROUND((ds.on_time_rate * 0.3 + qs.quality_rate * 0.3 + ps.price_advantage * 0.2 + coop_score * 0.2), 2) AS total_score,
    CASE WHEN total_score >= 90 THEN 'A' WHEN total_score >= 75 THEN 'B' WHEN total_score >= 60 THEN 'C' ELSE 'D' END AS grade
FROM supplier_info si
LEFT JOIN delivery_score ds ON si.supplier_id = ds.supplier_id
LEFT JOIN quality_score qs ON si.supplier_id = qs.supplier_id
LEFT JOIN price_score ps ON si.supplier_id = ps.supplier_id
ORDER BY total_score DESC;

评分权重

维度 权重 A级标准
交货及时率 30% ≥95%
质量合格率 30% ≥98%
价格竞争力 20% ≥市场均价
配合度 20% 0投诉/2h响应

4. 客户对账单SQL

-- 客户对账综合查询
SELECT 
    cs.customer_id,
    ci.customer_name,
    ci.customer_type,
    SUM(cs.sale_amount) AS total_sales,
    SUM(cs.profit_amount) AS total_profit,
    ROUND(SUM(cs.profit_amount) / SUM(cs.sale_amount) * 100, 2) AS profit_margin,
    SUM(CASE WHEN cs.collection_status = 'collected' THEN cs.sale_amount ELSE 0 END) AS collected_amount,
    SUM(CASE WHEN cs.collection_status IN ('pending','overdue') THEN cs.sale_amount ELSE 0 END) AS credit_balance,
    ROUND(SUM(CASE WHEN cs.collection_status = 'collected' THEN cs.sale_amount ELSE 0 END) / SUM(cs.sale_amount) * 100, 2) AS collection_rate
FROM customer_sales cs
JOIN customer_info ci ON cs.customer_id = ci.customer_id
WHERE cs.sale_date BETWEEN '{start_date}' AND '{end_date}'
GROUP BY cs.customer_id, ci.customer_name, ci.customer_type
ORDER BY total_sales DESC;

5. 客户ABC分类SQL

-- 客户ABC分类(按年累计销售额占比)
WITH yearly_sales AS (
    SELECT 
        customer_id,
        SUM(sale_amount) AS annual_sales
    FROM customer_sales
    WHERE sale_date BETWEEN '{year}-01-01' AND '{year}-12-31'
    GROUP BY customer_id
),
sales_with_cumsum AS (
    SELECT 
        customer_id,
        annual_sales,
        SUM(annual_sales) OVER() AS total_sales,
        SUM(annual_sales) OVER(ORDER BY annual_sales DESC) AS cumsum_sales
    FROM yearly_sales
)
SELECT 
    ci.customer_name,
    s.annual_sales,
    ROUND(s.annual_sales / s.total_sales * 100, 2) AS sales_pct,
    ROUND(s.cumsum_sales / s.total_sales * 100, 2) AS cumsum_pct,
    CASE WHEN cumsum_pct <= 80 THEN 'A' WHEN cumsum_pct <= 95 THEN 'B' ELSE 'C' END AS abc_class
FROM sales_with_cumsum s
JOIN customer_info ci ON s.customer_id = ci.customer_id
ORDER BY s.annual_sales DESC;

分类标准

分类 累计占比 策略
A类 前80% 重点维护,每周拜访,优先供货
B类 80%-95% 定期维护,每月跟进
C类 后5% 常规维护,必要时淘汰

6. 流失预警SQL

-- 客户流失预警
SELECT 
    ci.customer_id,
    ci.customer_name,
    ci.customer_type,
    MAX(cs.sale_date) AS last_transaction_date,
    today() - MAX(cs.sale_date) AS days_since_transaction,
    CASE 
        WHEN days_since_transaction > 90 THEN '🔴 严重预警'
        WHEN days_since_transaction > 60 THEN '🟠 中度预警'
        WHEN days_since_transaction > 30 THEN '🟡 轻度预警'
        ELSE '🟢 正常'
    END AS warning_level
FROM customer_info ci
LEFT JOIN customer_sales cs ON ci.customer_id = cs.customer_id
GROUP BY ci.customer_id, ci.customer_name, ci.customer_type
HAVING days_since_transaction > 30 OR days_since_transaction IS NULL
ORDER BY days_since_transaction DESC NULLS FIRST;

7. 员工提成计算SQL

-- 员工综合提成计算
WITH sales_summary AS (
    SELECT 
        salesperson_id,
        SUM(sale_amount) AS total_sales,
        SUM(profit_amount) AS total_profit,
        SUM(CASE WHEN collection_status = 'collected' THEN sale_amount ELSE 0 END) AS collected_amount
    FROM customer_sales
    WHERE sale_date BETWEEN '{start_date}' AND '{end_date}'
    GROUP BY salesperson_id
)
SELECT 
    e.employee_name,
    s.total_sales,
    s.collected_amount,
    ROUND(s.collected_amount / s.total_sales * 100, 2) AS collection_rate,
    ROUND(s.total_profit / s.total_sales * 100, 2) AS profit_margin,
    -- 综合提成 = 销售额 × 回款率系数 × 毛利率系数 × 基础提成率
    ROUND(s.total_sales * (s.collected_amount/s.total_sales) * (s.total_profit/s.total_sales) * 0.15, 2) AS commission_amount,
    -- 综合考核分
    ROUND((collection_rate * 0.4 + profit_margin * 0.3 + sales_share * 0.3), 2) AS performance_score
FROM sales_summary s
JOIN employee_info e ON s.salesperson_id = e.employee_id
ORDER BY commission_amount DESC;

提成公式

综合提成 = 销售额 × 回款率系数 × 毛利率系数 × 15%
回款率系数 = 实际回款率 / 100
毛利率系数 = 实际毛利率 / 100
综合考核分 = 回款率×40% + 毛利率×30% + 销售额占比×30%

8. 调度周期

模块 执行频率
供应商对账单 每日
供应商绩效评分 每月
客户对账单 每日
客户ABC分类 每年1月
流失预警 每日
员工提成 每月
Left-click: follow link, Right-click: select node, Scroll: zoom
x