酒店名称、描述、地址、房型描述等内容支持多语言。代理商请求时根据 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 缩略图。url 和 thumbnail_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 并通知财务人员审核。