升鲜宝 SaaS 租户订阅系统数据库设计与功能说明

升鲜宝 SaaS 租户订阅系统数据库设计与功能说明

版本:2026 企业级版本
架构模式:每租户独立数据库 + SaaS 平台主库
运行环境:阿里云 RDS + ECS + Nginx


一、系统目标

本系统用于:

  • 租户注册与生命周期管理

  • 套餐定义与价格管理

  • 订阅与续费管理

  • 自动计费与账单生成

  • 模块授权与配额控制

  • 到期冻结与欠费停用

  • 审计与可追溯


二、系统分域设计(DDD)

 
SaaS 平台域 ├── Tenant(租户域) ├── Catalog(套餐域) ├── Subscription(订阅域) ├── Billing(计费域) ├── Payment(支付域) └── Entitlement(授权域)

三、数据库表结构定义

所有表均位于:saas_master_db


1️⃣ Tenant 域(租户管理)


1.1 tenant(租户主表)

 
CREATE TABLE tenant ( id BIGINT PRIMARY KEY COMMENT '租户ID', tenant_code VARCHAR(64) NOT NULL COMMENT '租户编码', tenant_name VARCHAR(128) NOT NULL COMMENT '租户名称', status INT NOT NULL DEFAULT 1 COMMENT '1正常 2试用 3冻结 4欠费停用', trial_end_time BIGINT COMMENT '试用结束时间', current_plan_id BIGINT COMMENT '当前套餐ID', expire_time BIGINT COMMENT '到期时间', created_at BIGINT NOT NULL, updated_at BIGINT NOT NULL, UNIQUE KEY uk_tenant_code (tenant_code) ) ENGINE=InnoDB COMMENT='租户主表';

功能说明

  • 每个租户唯一

  • 控制整体状态

  • 到期时间作为拦截依据

  • 与 subscription 形成一对多


1.2 tenant_admin

 
CREATE TABLE tenant_admin ( id BIGINT PRIMARY KEY, tenant_id BIGINT NOT NULL, username VARCHAR(64) NOT NULL, password_hash VARCHAR(255) NOT NULL, phone VARCHAR(32), email VARCHAR(128), enabled TINYINT DEFAULT 1, created_at BIGINT NOT NULL, UNIQUE KEY uk_admin (tenant_id, username) );

2️⃣ Catalog 域(套餐与价格)


2.1 saas_plan

 
CREATE TABLE saas_plan ( id BIGINT PRIMARY KEY, plan_code VARCHAR(64) NOT NULL, plan_name VARCHAR(128) NOT NULL, billing_cycle INT NOT NULL COMMENT '1月付 2年付', base_price DECIMAL(18,2) NOT NULL, trial_days INT DEFAULT 0, enabled TINYINT DEFAULT 1, created_at BIGINT NOT NULL, UNIQUE KEY uk_plan_code(plan_code) );

2.2 saas_plan_module

 
CREATE TABLE saas_plan_module ( id BIGINT PRIMARY KEY, plan_id BIGINT NOT NULL, module_code VARCHAR(64) NOT NULL, enabled TINYINT DEFAULT 1, UNIQUE KEY uk_plan_module(plan_id, module_code) );

模块示例

 
PRODUCT SWMS WMS HWMS COST HCOST FINANCE POS TRACE

2.3 saas_price_component

 
CREATE TABLE saas_price_component ( id BIGINT PRIMARY KEY, plan_id BIGINT NOT NULL, component_code VARCHAR(64) NOT NULL, component_name VARCHAR(128) NOT NULL, charge_type INT NOT NULL COMMENT '1订阅 2用量 3一次性', pricing_model INT NOT NULL COMMENT '1固定价 2阶梯价 3单价', unit_name VARCHAR(32), created_at BIGINT NOT NULL, UNIQUE KEY uk_component(plan_id, component_code) );

2.4 saas_price_tier

 
CREATE TABLE saas_price_tier ( id BIGINT PRIMARY KEY, component_id BIGINT NOT NULL, tier_start INT NOT NULL, tier_end INT NOT NULL, unit_price DECIMAL(18,6) NOT NULL, fixed_price DECIMAL(18,2) DEFAULT 0 );

3️⃣ Subscription 域(订阅管理)


3.1 tenant_subscription

 
CREATE TABLE tenant_subscription ( id BIGINT PRIMARY KEY, tenant_id BIGINT NOT NULL, plan_id BIGINT NOT NULL, start_time BIGINT NOT NULL, end_time BIGINT NOT NULL, billing_cycle INT NOT NULL, auto_renew TINYINT DEFAULT 0, status INT NOT NULL COMMENT '1有效 2过期 3取消', created_at BIGINT NOT NULL );

3.2 subscription_change

 
CREATE TABLE subscription_change ( id BIGINT PRIMARY KEY, tenant_id BIGINT NOT NULL, old_plan_id BIGINT, new_plan_id BIGINT, change_type INT COMMENT '1升级 2降级 3续费', proration_amount DECIMAL(18,2) DEFAULT 0, change_time BIGINT NOT NULL );

4️⃣ Billing 域(计费与账单)


4.1 tenant_invoice

 
CREATE TABLE tenant_invoice ( id BIGINT PRIMARY KEY, tenant_id BIGINT NOT NULL, invoice_no VARCHAR(64) NOT NULL, period_start BIGINT NOT NULL, period_end BIGINT NOT NULL, subtotal DECIMAL(18,2) NOT NULL, tax_amount DECIMAL(18,2) DEFAULT 0, total_amount DECIMAL(18,2) NOT NULL, status INT NOT NULL COMMENT '1待支付 2已支付 3逾期 4作废', due_time BIGINT NOT NULL, created_at BIGINT NOT NULL, UNIQUE KEY uk_invoice_no(invoice_no) );

4.2 tenant_invoice_item

 
CREATE TABLE tenant_invoice_item ( id BIGINT PRIMARY KEY, invoice_id BIGINT NOT NULL, component_code VARCHAR(64) NOT NULL, quantity DECIMAL(18,6), unit_price DECIMAL(18,6), amount DECIMAL(18,2), created_at BIGINT NOT NULL );

5️⃣ Payment 域(支付)


5.1 tenant_payment

 
CREATE TABLE tenant_payment ( id BIGINT PRIMARY KEY, tenant_id BIGINT NOT NULL, invoice_id BIGINT NOT NULL, pay_no VARCHAR(64) NOT NULL, pay_channel VARCHAR(32), pay_amount DECIMAL(18,2), status INT COMMENT '1成功 2失败', pay_time BIGINT, UNIQUE KEY uk_pay_no(pay_no) );

6️⃣ Entitlement 域(授权快照)


6.1 tenant_entitlement_snapshot

 
CREATE TABLE tenant_entitlement_snapshot ( id BIGINT PRIMARY KEY, tenant_id BIGINT NOT NULL, plan_id BIGINT NOT NULL, module_json JSON NOT NULL, quota_json JSON NOT NULL, expire_time BIGINT NOT NULL, status INT NOT NULL COMMENT '1有效 2冻结 3过期', updated_at BIGINT NOT NULL, UNIQUE KEY uk_tenant_entitlement(tenant_id) );

四、系统功能说明


1️⃣ 租户生命周期

  • 注册 → 试用 → 订阅 → 到期 → 冻结

  • 试用期自动计算 trial_end_time

  • 到期自动进入宽限期


2️⃣ 自动续费流程

 
每日任务: 1. 查询 7天内到期租户 2. 生成 invoice 3. 发送通知 4. 若 auto_renew=1 自动生成支付单

3️⃣ 升级 / 降级规则

  • 升级:按剩余天数计算补差价

  • 降级:下周期生效


4️⃣ 欠费停用机制

 
expire_time < now ↓ grace_time 结束 ↓ tenant.status = 欠费停用 ↓ entitlement.status = 冻结

5️⃣ 模块授权优先级

 
tenant_override > saas_plan_module

6️⃣ 配额控制示例

quota_json 示例:

 
{ "SHOP_LIMIT": 50, "USER_LIMIT": 100, "WAREHOUSE_LIMIT": 10, "SKU_LIMIT": 20000, "ORDER_LIMIT": 50000 }

五、企业级扩展方向

  • API 调用次数计费

  • 存储空间计费

  • 渠道分账

  • 企业信用额度

  • 财务凭证自动生成


六、成熟度等级

等级能力
L1 固定套餐
L2 模块授权
L3 自动续费
L4 用量计费
L5 商业化 SaaS 平台

当前设计达到 L4。


七、总结

该设计满足:

  • 每租户独立数据库

  • 分片扩展

  • 自动计费

  • 商业化运营

  • 企业级隔离

  • 成本域支持

posted @ 2026-02-13 13:19  升鲜宝供应链管理系统  阅读(1)  评论(0)    收藏  举报