平台支持多租户(多运营主体)共用一套系统,租户之间在数据、API 和配置层面完全隔离。每个租户有独立的数据视图、API 额度和自定义配置。
数据模型
CREATE TABLE tenants (
id SERIAL PRIMARY KEY,
name VARCHAR(128) NOT NULL,
domain VARCHAR(128) UNIQUE, -- 租户域名,如 hotel.example.com
config JSONB DEFAULT '{}', -- 租户自定义配置
status VARCHAR(16) DEFAULT 'active',
created_at TIMESTAMPTZ DEFAULT NOW()
);
-- 所有业务表新增租户字段(示例)
ALTER TABLE hotels ADD COLUMN tenant_id BIGINT REFERENCES tenants(id);
ALTER TABLE agents ADD COLUMN tenant_id BIGINT REFERENCES tenants(id);
ALTER TABLE suppliers ADD COLUMN tenant_id BIGINT REFERENCES tenants(id);
接口设计
GET /api/admin/tenants # 租户列表
POST /api/admin/tenants # 创建租户
PUT /api/admin/tenants/{id} # 更新租户配置
DELETE /api/admin/tenants/{id} # 停用租户
业务逻辑
所有 API 请求通过中间件从请求头 X-Tenant-Id 或子域名解析出租户 ID,在数据库查询层面自动注入 WHERE tenant_id = ? 条件(基于 GORM/MyBatis 拦截器实现)。租户的 API 额度、功能开关等存储在 config JSONB 字段中,启动时加载到内存缓存。