按入住日期、提前天数、连住天数等条件自动调价,支持节假日加价(国庆+20%)、提前订折扣(提前30天-10%)、最后一刻加价(当天+15%)等策略。管理员可配置多条规则,按优先级依次匹配应用。
数据模型
CREATE TABLE dynamic_pricing_rule (
id SERIAL PRIMARY KEY,
supplier_id BIGINT,
hotel_id BIGINT,
room_type_id BIGINT,
channel_id BIGINT,
rule_type VARCHAR(32) NOT NULL, -- holiday/advance/last_minute/custom
trigger_condition JSONB NOT NULL, -- 触发条件,如 {"advance_days_gte": 30}
adjustment_type VARCHAR(16) NOT NULL, -- percentage / fixed
adjustment_value DECIMAL(10, 2) NOT NULL, -- 百分比值或固定金额
effective_from DATE NOT NULL,
effective_to DATE NOT NULL,
priority SMALLINT DEFAULT 0,
status VARCHAR(16) DEFAULT 'active',
created_at TIMESTAMPTZ DEFAULT NOW()
);
CREATE INDEX idx_dpr_hotel ON dynamic_pricing_rule (hotel_id, room_type_id, status, effective_from);
接口设计
GET /api/admin/pricing/dynamic-rules # 查询规则列表(支持 hotel_id 筛选)
POST /api/admin/pricing/dynamic-rules # 创建规则
PUT /api/admin/pricing/dynamic-rules/{id} # 更新规则
DELETE /api/admin/pricing/dynamic-rules/{id} # 删除规则
业务逻辑
查价引擎在聚合所有供应商报价后,根据入住日期、提前天数、连住天数等上下文,匹配当前有效的动态定价规则链,按 priority 从高到低依次应用价格调整。同一订单可叠加多条规则,最终价格 = 基础价格 × (1 + Σ百分比调整) + Σ固定金额调整。
监控同一酒店在同一日期、同一房型下,不同渠道的价格偏差。偏差超过阈值(如 ±5%)时自动生成告警,通知运营人员排查。支持每日定时全量扫描和订单确认后实时触发两种模式。
数据模型
CREATE TABLE rate_parity_alert (
id SERIAL PRIMARY KEY,
hotel_id BIGINT NOT NULL,
room_type_id BIGINT,
check_in_date DATE NOT NULL,
channel_a VARCHAR(64) NOT NULL,
channel_b VARCHAR(64) NOT NULL,
price_a DECIMAL(10, 2) NOT NULL,
price_b DECIMAL(10, 2) NOT NULL,
deviation_pct DECIMAL(5, 2) NOT NULL, -- 偏差百分比
alert_level VARCHAR(16) DEFAULT 'warning', -- warning / critical
status VARCHAR(16) DEFAULT 'open', -- open / acknowledged / resolved
created_at TIMESTAMPTZ DEFAULT NOW()
);
CREATE INDEX idx_rpa_hotel_date ON rate_parity_alert (hotel_id, check_in_date, status);
接口设计
GET /api/admin/parity/alerts # 告警列表(支持酒店、日期、等级筛选)
POST /api/admin/parity/check # 手动触发一致性检查
PUT /api/admin/parity/alerts/{id}/resolve # 标记告警已处理
业务逻辑
定时任务每日凌晨扫描热门酒店(按最近7天搜索量排序 Top N)在各渠道的价格,比对偏差;同时在订单确认流程中,异步触发实时检查。偏差小于 ±3% 记录日志,±3%-5% 生成 warning,超过 ±5% 生成 critical 并发送通知。
管理限时折扣、早鸟价、闪购、打包优惠等促销活动。促销与动态定价规则独立运作,查价时如果匹配到有效促销,在动态调价基础上再叠加折扣。
数据模型
CREATE TABLE promotion (
id SERIAL PRIMARY KEY,
name VARCHAR(128) NOT NULL,
type VARCHAR(32) NOT NULL, -- flash / early_bird / package / custom
supplier_id BIGINT,
hotel_ids INT[] DEFAULT '{}',
channel_ids INT[] DEFAULT '{}',
discount_type VARCHAR(16) NOT NULL, -- percentage / fixed / free_night
discount_value DECIMAL(10, 2) NOT NULL,
start_time TIMESTAMPTZ NOT NULL,
end_time TIMESTAMPTZ NOT NULL,
quota INT DEFAULT 0, -- 0=不限量
used_quota INT DEFAULT 0,
conditions JSONB, -- 如 {"min_stay": 3, "min_amount": 1000}
status VARCHAR(16) DEFAULT 'draft',
created_at TIMESTAMPTZ DEFAULT NOW()
);
CREATE INDEX idx_promotion_time ON promotion (start_time, end_time, status);
接口设计
GET /api/admin/promotions # 促销列表
POST /api/admin/promotions # 创建促销
PUT /api/admin/promotions/{id} # 更新促销
DELETE /api/admin/promotions/{id} # 删除促销
GET /api/promotions/active # 获取当前有效促销(查价引擎内部调用)
业务逻辑
查价时,在动态定价调整之后,检查当前时间是否有匹配的促销活动。匹配条件包括:酒店范围、渠道范围、入住日期、最低消费/最低连住天数等 conditions。多个促销不可叠加,按优先级取最优。
支持多币种报价,供应商以原币报价后,系统按代理商本币自动换算。汇率数据每小时从外部源(如 ECB、Open Exchange Rates)更新一次。
数据模型
CREATE TABLE exchange_rate (
id SERIAL PRIMARY KEY,
currency_from VARCHAR(3) NOT NULL, -- ISO 4217
currency_to VARCHAR(3) NOT NULL,
rate DECIMAL(18, 8) NOT NULL, -- 1 unit of currency_from = ? currency_to
effective_at TIMESTAMPTZ NOT NULL,
source VARCHAR(32) NOT NULL, -- ecb / open_exchange_rates / manual
created_at TIMESTAMPTZ DEFAULT NOW()
);
CREATE UNIQUE INDEX idx_er_pair_time ON exchange_rate (currency_from, currency_to, effective_at DESC);
接口设计
GET /api/rates?from=USD&to=CNY # 获取最新汇率
GET /api/admin/rates # 汇率管理列表(含历史)
POST /api/admin/rates/sync # 手动触发汇率同步
业务逻辑
定时任务每小时拉取最新汇率写入 exchange_rate 表。查价时,根据代理商的默认币种(或请求参数指定的币种),取 effective_at 最新的一条汇率记录进行换算。如果目标币种与原币种相同则跳过。