从响应速度、价格竞争力、库存准确率、取消率等多个维度对供应商进行综合评分。评分每日计算,影响查价排序权重和供应商在平台的可见性。
数据模型
CREATE TABLE supplier_rating (
id SERIAL PRIMARY KEY,
supplier_id BIGINT NOT NULL REFERENCES suppliers(id),
period VARCHAR(7) NOT NULL, -- 评分周期,如 2024-01
score_overall DECIMAL(4, 2) NOT NULL, -- 综合评分 0-100
score_response_time DECIMAL(4, 2),
score_price DECIMAL(4, 2),
score_inventory_accuracy DECIMAL(4, 2),
score_cancel_rate DECIMAL(4, 2),
calc_details JSONB, -- 各指标原始值和计算过程
created_at TIMESTAMPTZ DEFAULT NOW()
);
CREATE UNIQUE INDEX idx_sr_supplier_period ON supplier_rating (supplier_id, period);
接口设计
GET /api/admin/suppliers/{id}/ratings # 供应商历史评分
GET /api/admin/suppliers/rankings # 供应商排名
POST /api/admin/suppliers/{id}/recalculate # 手动重算评分
业务逻辑
每日定时任务计算前一日的供应商各项指标:响应时间取 P95 延迟的倒数归一化、价格竞争力取报价低于市场均价的比例、库存准确率取订单确认失败率的反面、取消率取供应商主动取消订单占比。各项加权求和得到 score_overall,查价引擎排序时作为权重因子。
根据代理商月交易量自动分为不同等级(如青铜、白银、黄金、铂金),不同等级享受不同的价格折扣、库存优先级、结算周期和客服支持级别。
数据模型
CREATE TABLE agent_tier (
id SERIAL PRIMARY KEY,
tier_name VARCHAR(32) NOT NULL UNIQUE, -- bronze / silver / gold / platinum
min_monthly_volume INT NOT NULL, -- 最低月交易单数
price_discount_pct DECIMAL(4, 2) DEFAULT 0, -- 价格折扣百分比
inventory_priority SMALLINT DEFAULT 0, -- 库存优先级,越高越优先
settlement_days INT DEFAULT 30, -- 结算天数
support_level VARCHAR(16) DEFAULT 'standard',
benefits JSONB, -- 其他权益描述
created_at TIMESTAMPTZ DEFAULT NOW()
);
-- agents 表新增字段
ALTER TABLE agents ADD COLUMN tier_id BIGINT REFERENCES agent_tier(id);
ALTER TABLE agents ADD COLUMN tier_evaluated_at TIMESTAMPTZ;
接口设计
GET /api/admin/agents/{id}/tier # 查看代理商等级
PUT /api/admin/agents/{id}/tier # 手动调整等级
GET /api/admin/agent-tiers # 等级配置列表
PUT /api/admin/agent-tiers/{id} # 更新等级配置
业务逻辑
每月 1 日自动评估上月交易量,匹配对应 agent_tier 并更新代理商的 tier_id。查价时,根据代理商等级应用 price_discount_pct 折扣;库存查询时,高等级代理商享有 inventory_priority 加成(在高并发场景下优先分配)。
统一管理平台内的各类通知,包括订单状态变更、库存预警、价格变动、对账提醒等。支持邮件、Webhook 和站内信三种投递渠道。
数据模型
CREATE TABLE notification (
id SERIAL PRIMARY KEY,
party_type VARCHAR(16) NOT NULL, -- agent / supplier / admin
party_id BIGINT NOT NULL,
type VARCHAR(32) NOT NULL, -- order_status / inventory_alert / price_change / ...
title VARCHAR(256) NOT NULL,
content JSONB NOT NULL, -- 通知内容,结构因 type 而异
channel VARCHAR(16) NOT NULL, -- email / webhook / in_app
status VARCHAR(16) DEFAULT 'pending', -- pending / sent / failed
sent_at TIMESTAMPTZ,
created_at TIMESTAMPTZ DEFAULT NOW()
);
CREATE INDEX idx_notif_party ON notification (party_type, party_id, status, created_at DESC);
接口设计
GET /api/notifications # 当前用户通知列表(分页)
PUT /api/notifications/{id}/read # 标记已读
POST /api/notifications/subscribe # 订阅通知类型和渠道
GET /api/admin/notifications/templates # 通知模板管理
业务逻辑
采用事件驱动架构,各业务模块通过消息队列(如 RabbitMQ)发布事件,通知中心消费事件后根据 party_type 和订阅配置,生成对应渠道的通知记录。邮件和站内信由通知中心直接投递,Webhook 通过 HTTP 调用外部接口。
记录所有关键业务操作(创建、更新、删除)的完整审计信息,包括操作人、操作时间、请求来源等,满足合规和安全审计需求。
数据模型
CREATE TABLE audit_log (
id BIGSERIAL PRIMARY KEY,
operator_type VARCHAR(16) NOT NULL, -- admin / agent / supplier / system
operator_id BIGINT,
action VARCHAR(32) NOT NULL, -- create / update / delete / login / ...
entity_type VARCHAR(32) NOT NULL, -- hotel / order / supplier / ...
entity_id BIGINT,
detail JSONB, -- 变更详情,如 {"before": {...}, "after": {...}}
ip VARCHAR(45),
user_agent VARCHAR(256),
created_at TIMESTAMPTZ DEFAULT NOW()
);
CREATE INDEX idx_audit_entity ON audit_log (entity_type, entity_id, created_at DESC);
CREATE INDEX idx_audit_operator ON audit_log (operator_type, operator_id, created_at DESC);
接口设计
GET /api/admin/audit-logs # 审计日志查询(支持多维筛选 + 分页)
GET /api/admin/audit-logs/{id} # 审计日志详情
GET /api/admin/audit-logs/export # 导出审计日志(CSV)
业务逻辑
通过 AOP 切面或中间件拦截所有写操作(POST/PUT/DELETE),自动提取操作人信息、请求 IP、变更前后数据等,写入 audit_log 表。只读查询和敏感信息(如密码)不记录在 detail 中。日志保留周期默认 180 天。