← 返回文档中心

内容管理

多语言内容管理

酒店名称、描述、地址、房型描述等内容支持多语言。代理商请求时根据 Accept-Language 头返回对应语言内容,无匹配则降级到英文或默认语言。

数据模型

CREATE TABLE hotel_content_i18n (
    hotel_id   BIGINT NOT NULL REFERENCES hotels(id),
    language   VARCHAR(5) NOT NULL,           -- zh-CN / en / ja
    name       VARCHAR(256),
    description TEXT,
    address    VARCHAR(512),
    amenities  JSONB,
    PRIMARY KEY (hotel_id, language)
);

CREATE TABLE room_type_content_i18n (
    room_type_id BIGINT NOT NULL REFERENCES room_types(id),
    language     VARCHAR(5) NOT NULL,
    name         VARCHAR(256),
    description  TEXT,
    bed_type     VARCHAR(64),
    PRIMARY KEY (room_type_id, language)
);

接口设计

GET  /api/hotels/{id}/content?lang=en         # 获取酒店多语言内容
PUT  /api/admin/hotels/{id}/content           # 更新酒店多语言内容
GET  /api/room-types/{id}/content?lang=en     # 获取房型多语言内容
PUT  /api/admin/room-types/{id}/content       # 更新房型多语言内容

业务逻辑

API 网关解析请求头 Accept-Language,查价和详情接口查询 i18n 表时优先取匹配语言,无则降级到 en,再无则取酒店主表默认值。管理后台提供多语言编辑界面,支持批量导入翻译。


图片管理

支持酒店和房型图片的上传、裁剪、CDN 分发和排序。上传后自动生成缩略图,通过 CDN 加速分发。

数据模型

CREATE TABLE media (
    id           SERIAL PRIMARY KEY,
    entity_type  VARCHAR(16) NOT NULL,         -- hotel / room_type / facility
    entity_id    BIGINT NOT NULL,
    url          VARCHAR(512) NOT NULL,         -- 原图 CDN 地址
    thumbnail_url VARCHAR(512),                 -- 缩略图 CDN 地址
    category     VARCHAR(32),                   -- exterior / room / amenity / facility
    sort_order   SMALLINT DEFAULT 0,
    uploaded_at  TIMESTAMPTZ DEFAULT NOW()
);

CREATE INDEX idx_media_entity ON media (entity_type, entity_id, sort_order);

接口设计

POST /api/admin/media/upload                   # 上传图片(支持批量)
PUT  /api/admin/media/sort                     # 更新排序
DELETE /api/admin/media/{id}                   # 删除图片
GET  /api/hotels/{id}/media                    # 获取酒店图片列表

业务逻辑

图片上传到对象存储(如 S3/OSS),系统自动调用图片处理服务生成 200×150 缩略图。urlthumbnail_url 存储的是 CDN 分发地址。前端展示时按 sort_order 排序,category 用于筛选不同类型图片。


政策管理

管理酒店层面的各类政策信息,包括入住政策、儿童政策、宠物政策、付款政策等。政策信息在查价/详情时一并返回。

数据模型

CREATE TABLE hotel_policy (
    id              SERIAL PRIMARY KEY,
    hotel_id        BIGINT NOT NULL REFERENCES hotels(id),
    policy_type     VARCHAR(32) NOT NULL,       -- check_in / children / pet / payment / general
    content         JSONB NOT NULL,             -- 政策内容,如 {"check_in_from": "14:00", "check_out_by": "12:00"}
    language        VARCHAR(5) DEFAULT 'zh-CN',
    effective_from  DATE NOT NULL,
    created_at      TIMESTAMPTZ DEFAULT NOW()
);

CREATE INDEX idx_hp_hotel_type ON hotel_policy (hotel_id, policy_type, language);

接口设计

GET  /api/hotels/{id}/policies                # 获取酒店所有政策
POST /api/admin/hotels/{id}/policies          # 创建/更新政策
PUT  /api/admin/hotels/{id}/policies/{pid}    # 更新指定政策
DELETE /api/admin/hotels/{id}/policies/{pid}  # 删除政策

业务逻辑

政策内容使用 JSONB 存储以适配不同类型的灵活结构。查价和详情接口查询时,按 policy_type 分类返回。同一类型同一语言只保留最新生效的政策版本。


评价系统

收集订单完成后的住客评价,支持评分和文字反馈。评价数据影响酒店综合评分,展示在搜索结果和详情页。

数据模型

    id          SERIAL PRIMARY KEY,
    hotel_id    BIGINT NOT NULL REFERENCES hotels(id),
    order_id    BIGINT NOT NULL REFERENCES orders(id),
    rating      DECIMAL(2, 1) NOT NULL CHECK (rating >= 1 AND rating <= 5),
    content     TEXT,
    created_by  BIGINT NOT NULL,               -- 评价人(代理商用户 ID)
    status      VARCHAR(16) DEFAULT 'published', -- pending / published / hidden
    created_at  TIMESTAMPTZ DEFAULT NOW()
);


**接口设计**

```yaml
POST /api/reviews                              # 提交评价
GET  /api/hotels/{id}/reviews                  # 获取酒店评价列表(分页)
PUT  /api/admin/reviews/{id}                   # 管理端审核/隐藏评价
GET  /api/admin/reviews                        # 管理端评价总览

业务逻辑

订单状态变为 completed 后 N 天(可配置,默认 3 天),系统自动发送评价邀请通知。评价提交后默认状态为 published,管理员可设为 hidden。酒店综合评分 = 所有 published 评价的 rating 加权平均值,缓存在酒店主表中。


对账差异自动处理

系统对账(自动或手动)发现差异后自动标记,差异金额小于阈值自动处理,大于阈值转入人工审核工作流。支持差异记录、审核、解决的全流程管理。

数据模型

CREATE TABLE reconciliation (
    id             SERIAL PRIMARY KEY,
    period         VARCHAR(7) NOT NULL,        -- 对账周期,如 2024-01
    agent_id       BIGINT NOT NULL,
    supplier_id    BIGINT NOT NULL,
    our_amount     DECIMAL(12, 2) NOT NULL,    -- 我方金额
    their_amount   DECIMAL(12, 2) NOT NULL,    -- 对方金额
    diff_amount    DECIMAL(12, 2) NOT NULL,    -- 差异金额
    status         VARCHAR(16) DEFAULT 'pending', -- pending / auto_resolved / resolved / disputed
    resolution     JSONB,                       -- 解决方案,如 {"type": "adjustment", "note": "..."}
    resolved_by    VARCHAR(64),
    resolved_at    TIMESTAMPTZ,
    created_at     TIMESTAMPTZ DEFAULT NOW()
);

CREATE INDEX idx_recon_period ON reconciliation (period, status);

接口设计

GET  /api/reconciliation/differences          # 差异列表
POST /api/reconciliation/{id}/resolve         # 提交解决方案
GET  /api/admin/reconciliation/summary        # 对账汇总
POST /api/admin/reconciliation/run            # 手动触发对账

业务逻辑

对账引擎按周期汇总代理商与供应商之间的订单金额,生成对账报告。差异金额绝对值 ≤ 阈值(如 ¥50)且差异比例 ≤ 1% 时,自动标记 auto_resolved;超出阈值标记为 pending 并通知财务人员审核。