← 返回文档中心

风控体系

风控体系

优先级: P1(安全模块)
开发周期: 1.5 周

目标

保护平台免受价格异常、恶意流量、信用透支等风险,确保平台运营安全。

核心功能

功能 描述
价格异常检测 检测异常低价/高价,防止价格错误导致平台亏损
异常流量检测 检测异常高频请求、疑似爬虫、DDoS
信用额度管理 实时追踪代理商信用额度使用,超额时拦截下单
请求频率限制 按 IP/代理商/API Key 多维度限流
黑名单/白名单 IP 黑名单、代理商黑名单、白名单
风险告警 实时告警通知(Slack/Email/钉钉)
风险评分 对代理商/请求计算风险评分,高风险请求增加验证

风控规则

价格异常:
  - 售价低于采购价: 硬拦截
  - 售价低于历史平均价 50%: 告警 + 人工确认
  - 售价高于市场平均价 200%: 告警
  - 同一酒店同一日期价格波动 > 30%: 告警

流量异常:
  - 单 IP 每分钟查价 > 100 次: 限流
  - 单代理商每分钟查价 > 500 次: 限流
  - 单 IP 下单失败 > 10 次/小时: 拦截
  - 新注册代理商首日下单 > 50 笔: 人工审核

信用额度:
  - 未结算订单金额 + 待付款 > 信用额度: 拦截下单
  - 逾期未付款: 降低信用额度 + 限制下单
  - 信用额度使用率 > 90%: 告警

数据模型

-- 风控规则表
CREATE TABLE risk_rules (
    id              SERIAL PRIMARY KEY,
    rule_name       VARCHAR(128) NOT NULL,
    rule_type       VARCHAR(32) NOT NULL,     -- price_anomaly/traffic/credit/blacklist
    condition       JSONB NOT NULL,           # 规则条件配置
    action          VARCHAR(32) NOT NULL,     -- block/alert/log/verify
    severity        VARCHAR(16) DEFAULT 'medium', -- low/medium/high/critical
    enabled         BOOLEAN DEFAULT true,
    created_at      TIMESTAMPTZ DEFAULT NOW(),
    updated_at      TIMESTAMPTZ DEFAULT NOW()
);

-- 风控事件日志表
CREATE TABLE risk_events (
    id              BIGSERIAL PRIMARY KEY,
    event_type      VARCHAR(32) NOT NULL,
    rule_id         INT REFERENCES risk_rules(id),

    agent_code      VARCHAR(32),
    ip_address      VARCHAR(45),
    request_path    VARCHAR(256),

    detail          JSONB,                   # 详细信息
    action_taken    VARCHAR(32),              # block/alert/passed

    created_at      TIMESTAMPTZ DEFAULT NOW()
);

CREATE INDEX idx_risk_events_type ON risk_events (event_type, created_at DESC);
CREATE INDEX idx_risk_events_agent ON risk_events (agent_code);

-- IP 黑名单表
CREATE TABLE ip_blacklist (
    id              SERIAL PRIMARY KEY,
    ip_address      VARCHAR(45) NOT NULL UNIQUE,
    reason          VARCHAR(255),
    blocked_by      VARCHAR(64),
    expires_at      TIMESTAMPTZ,              # 空=永久
    created_at      TIMESTAMPTZ DEFAULT NOW()
);

-- 风险告警记录表
CREATE TABLE risk_alerts (
    id              BIGSERIAL PRIMARY KEY,
    alert_type      VARCHAR(64) NOT NULL,
    severity        VARCHAR(16) NOT NULL,
    title           VARCHAR(255) NOT NULL,
    detail          JSONB,
    status          VARCHAR(20) DEFAULT 'open', -- open/acknowledged/resolved
    acknowledged_by VARCHAR(64),
    resolved_at     TIMESTAMPTZ,
    created_at      TIMESTAMPTZ DEFAULT NOW()
);

CREATE INDEX idx_risk_alerts_status ON risk_alerts (status, created_at DESC);

-- 信用额度变更记录
-- NOTE: 此表已统一到 sales-management.md 的 credit_ledger 表,风控模块通过调用 CreditService 接口访问
-- 保留此处仅为 API 兼容性参考
CREATE TABLE credit_log (
    id              BIGSERIAL PRIMARY KEY,
    agent_code      VARCHAR(32) NOT NULL,
    change_type     VARCHAR(32) NOT NULL,     -- order_hold/order_release/settlement/adjust
    amount          DECIMAL(12, 2) NOT NULL,  # 正=增加使用,负=释放
    balance_before  DECIMAL(12, 2),
    balance_after   DECIMAL(12, 2),
    reference_no    VARCHAR(64),              # 关联订单号或结算单号
    created_at      TIMESTAMPTZ DEFAULT NOW()
);

CREATE INDEX idx_credit_log_agent ON credit_log (agent_code, created_at DESC);

接口设计

# 风控内部 API (被其他模块调用)
POST   /api/v1/risk/check-price              # 价格风控检查
# 请求: { "net_price": 100, "gross_price": 80, "hotel_id": 123 }
# 响应: { "passed": false, "reason": "售价低于采购价", "severity": "high" }

POST   /api/v1/risk/check-credit             # 信用额度检查
# 请求: { "agent_code": "AGT-001", "amount": 5000 }
# 响应: { "passed": true, "remaining_credit": 15000, "usage_rate": 0.25 }

POST   /api/v1/risk/check-traffic            # 流量风控检查
# 请求: { "ip": "1.2.3.4", "agent_code": "AGT-001", "endpoint": "/prices/search" }
# 响应: { "passed": true, "remaining_quota": 450 }

POST   /api/v1/risk/hold-credit              # 冻结信用额度
POST   /api/v1/risk/release-credit           # 释放信用额度

# 风控管理 API (管理后台)
GET    /api/v1/risk/rules                    # 风控规则列表
POST   /api/v1/risk/rules                    # 创建规则
PUT    /api/v1/risk/rules/:id                # 更新规则
GET    /api/v1/risk/events                   # 风控事件列表
GET    /api/v1/risk/alerts                   # 告警列表
PUT    /api/v1/risk/alerts/:id/acknowledge   # 确认告警
GET    /api/v1/risk/blacklist                # 黑名单管理
POST   /api/v1/risk/blacklist                # 添加黑名单

与其他模块的关系

关联模块 关系
API 网关 流量限流、IP 黑名单检查
查价引擎 价格风控检查
订单管理 下单前信用额度检查
结算管理 结算完成后释放信用额度
管理后台 风控规则配置、事件查看、告警管理

技术选型建议