← 返回文档中心

进阶定价

动态定价规则

按入住日期、提前天数、连住天数等条件自动调价,支持节假日加价(国庆+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 + Σ百分比调整) + Σ固定金额调整。


价格一致性监控(Rate Parity)

监控同一酒店在同一日期、同一房型下,不同渠道的价格偏差。偏差超过阈值(如 ±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 最新的一条汇率记录进行换算。如果目标币种与原币种相同则跳过。