feat: database design v2.0 - fix 15 defects, add 6 new tables
fixes: - as_platform_type/platform: add status/del_flag/timestamps, sort_order varchar->int - as_sub_plan: platform_id varchar->bigint, capacity varchar->int - as_sub_payroll: rename sub_plans->sub_plan_id, add duration_months/original_price/is_active - as_sub_product: fix Tags->tags naming bug, add platform_id/cover_image/status/total_capacity, type fields Long->tinyint - as_sub_account: 4 int->bigint fields, passwd_salt int->varchar(64), add encrypt_type/status - as_user_sub: remark int->varchar(bug fix), int->bigint fields, add product_id/status/expire_time, rename user_id->host_user_id/main_account->account_id - as_sub_product_comment: add order_id/is_anonymous/reply_id/del_flag new tables: - as_user_sub_member: individual subscription record (critical missing table) - as_order: full order table with state machine - as_wallet: user wallet with optimistic lock - as_wallet_log: balance transaction log - as_invite: invitation relationship - as_notification: system notifications
This commit is contained in:
427
DATABASE_DESIGN_V2.md
Normal file
427
DATABASE_DESIGN_V2.md
Normal file
@@ -0,0 +1,427 @@
|
||||
# iShare 数据库设计 v2.0(修订版)
|
||||
|
||||
> 基于原版 v1.0(2023-08 骨架)审查后全面修订
|
||||
> 修订时间: 2026-02-17
|
||||
> 建表脚本: `db/ishare_schema_v2.sql`
|
||||
|
||||
---
|
||||
|
||||
## 一、修订说明
|
||||
|
||||
### 1.1 原版问题总结
|
||||
|
||||
| 类型 | 数量 | 说明 |
|
||||
|------|------|------|
|
||||
| 🔴 严重缺陷 | 4 项 | 直接导致核心功能不可用 |
|
||||
| 🟠 重要问题 | 6 项 | 数据类型错误/查询困难 |
|
||||
| 🟡 设计缺失 | 5 项 | 运营/安全功能不完整 |
|
||||
|
||||
### 1.2 修订内容
|
||||
|
||||
| 表名 | 修订类型 | 主要变更 |
|
||||
|------|----------|----------|
|
||||
| `as_platform_type` | 补充 | 加 `status`、`del_flag`、时间戳;`sort_order` varchar→int |
|
||||
| `as_platform` | 补充 | 加 `description`、`status`、`del_flag`、时间戳;`sort_order` varchar→int |
|
||||
| `as_sub_plan` | 修复+补充 | `platform_id` varchar→**bigint**;`capacity` varchar→**int**;加状态/软删除/时间戳 |
|
||||
| `as_sub_payroll` | 重构 | `sub_plans`→**`sub_plan_id`**(语义明确);加 `duration_months`、`original_price`、`is_active`;软删除/时间戳 |
|
||||
| `as_sub_product` | 修复+补充 | **`Tags`→`tags`**(命名修复);加 `platform_id`、`cover_image`、`status`、`total_capacity`;`product_type`/`sub_type` Long→**tinyint** |
|
||||
| `as_sub_account` | 修复+补充 | 4个字段 int→**bigint**;`passwd_salt` int→**varchar(64)**;加 `encrypt_type`、`status`、软删除/时间戳 |
|
||||
| `as_user_sub` | 语义修订+修复 | 重定义为"合租槽(共享池)";`remark` int→**varchar**;字段 int→bigint;加 `product_id`、`status`、`expire_time`、软删除/时间戳;`user_id`→`host_user_id`(语义明确);`main_account`→`account_id` |
|
||||
| `as_sub_product_comment` | 补充 | 加 `order_id`(购买验证)、`is_anonymous`、`reply_id`(追评)、`del_flag` |
|
||||
| `as_user_sub_member` | **新增** | 个人订阅记录(原版最大缺失),含 `status`、`start_time`、`expire_time` |
|
||||
| `as_order` | **新增** | 完整订单表(含状态机、价格快照、支付信息) |
|
||||
| `as_wallet` | **新增** | 用户钱包(含乐观锁 `version` 防并发) |
|
||||
| `as_wallet_log` | **新增** | 钱包流水(含 `balance_after` 快照便于对账) |
|
||||
| `as_invite` | **新增** | 邀请关系与返现 |
|
||||
| `as_notification` | **新增** | 系统通知(续费提醒/订单/公告/奖励) |
|
||||
| `app_user` | 追加字段 | 加 `invite_code`(专属邀请码)、`inviter_id` |
|
||||
|
||||
---
|
||||
|
||||
## 二、表结构(v2.0)
|
||||
|
||||
### 2.1 `as_platform_type` — 平台类型
|
||||
|
||||
| 字段 | 类型 | 说明 |
|
||||
|------|------|------|
|
||||
| `id` | bigint PK | 主键 |
|
||||
| `name` | varchar(64) NOT NULL | 类型名称(视频/音乐/AI等) |
|
||||
| `platform_type` | int DEFAULT 0 | 类型编号(0=全部,用于筛选) |
|
||||
| `sort_order` | int DEFAULT 0 | 排序权重(升序,**原为 varchar**) |
|
||||
| `status` | tinyint DEFAULT 1 | **新增** 0=禁用, 1=启用 |
|
||||
| `del_flag` | char(1) DEFAULT '0' | **新增** 软删除 |
|
||||
| `create_time` | datetime | **新增** |
|
||||
| `update_time` | datetime | **新增** |
|
||||
|
||||
### 2.2 `as_platform` — 流媒体平台
|
||||
|
||||
| 字段 | 类型 | 说明 |
|
||||
|------|------|------|
|
||||
| `id` | bigint PK | 主键 |
|
||||
| `platform_name` | varchar(128) NOT NULL | 平台名称 |
|
||||
| `platform_type` | int DEFAULT 0 | 关联类型编号 |
|
||||
| `icon` | varchar(512) | 图标 URL |
|
||||
| `description` | varchar(512) | **新增** 平台简介 |
|
||||
| `company` | varchar(128) | 所属公司 |
|
||||
| `website` | varchar(256) | 官网 |
|
||||
| `sort_order` | int DEFAULT 0 | 排序(**原为 varchar**) |
|
||||
| `status` | tinyint DEFAULT 1 | **新增** 0=禁用, 1=启用 |
|
||||
| `del_flag` | char(1) DEFAULT '0' | **新增** 软删除 |
|
||||
| `create_time` | datetime | **新增** |
|
||||
| `update_time` | datetime | **新增** |
|
||||
|
||||
### 2.3 `as_sub_plan` — 订阅计划
|
||||
|
||||
| 字段 | 类型 | 说明 |
|
||||
|------|------|------|
|
||||
| `id` | bigint PK | 主键 |
|
||||
| `name` | varchar(128) NOT NULL | 计划名称 |
|
||||
| `platform_id` | bigint NOT NULL | 所属平台(**原为 varchar,已修复**) |
|
||||
| `capacity` | int NOT NULL DEFAULT 1 | 席位容量(**原为 varchar,已修复**) |
|
||||
| `remark` | varchar(256) | 备注 |
|
||||
| `sort_order` | int DEFAULT 0 | 排序 |
|
||||
| `status` | tinyint DEFAULT 1 | **新增** 0=禁用, 1=启用 |
|
||||
| `del_flag` | char(1) DEFAULT '0' | **新增** 软删除 |
|
||||
| `create_time` | datetime | **新增** |
|
||||
| `update_time` | datetime | **新增** |
|
||||
|
||||
### 2.4 `as_sub_payroll` — 付费方案
|
||||
|
||||
| 字段 | 类型 | 说明 |
|
||||
|------|------|------|
|
||||
| `id` | bigint PK | 主键 |
|
||||
| `sub_plan_id` | bigint NOT NULL | 所属订阅计划(**原 `sub_plans` 注释混乱,已重命名+澄清**) |
|
||||
| `platform_id` | bigint NOT NULL | 平台ID(冗余) |
|
||||
| `payroll` | tinyint NOT NULL | 周期: 1=月付, 2=季付, 3=年付 |
|
||||
| `duration_months` | int NOT NULL | **新增** 实际月数: 1/3/12 |
|
||||
| `price` | decimal(10,2) | 售价 |
|
||||
| `original_price` | decimal(10,2) | **新增** 划线价(显示折扣用) |
|
||||
| `currency` | varchar(8) DEFAULT 'CNY' | 货币单位 |
|
||||
| `region` | varchar(64) | 适用地区 |
|
||||
| `is_active` | tinyint DEFAULT 1 | **新增** 0=下架, 1=上架 |
|
||||
| `del_flag` | char(1) DEFAULT '0' | **新增** 软删除 |
|
||||
| `create_time` | datetime | **新增** |
|
||||
| `update_time` | datetime | **新增** |
|
||||
|
||||
### 2.5 `as_sub_product` — 订阅产品(合租商品)
|
||||
|
||||
| 字段 | 类型 | 说明 |
|
||||
|------|------|------|
|
||||
| `id` | bigint PK | 主键 |
|
||||
| `title` | varchar(256) NOT NULL | 产品标题 |
|
||||
| `description` | varchar(1024) | 描述 |
|
||||
| `cover_image` | varchar(512) | **新增** 封面图 URL |
|
||||
| `tags` | varchar(256) | 标签(逗号分隔,**原字段名 `Tags` 大写 Bug 已修复**) |
|
||||
| `platform_id` | bigint NOT NULL | **新增** 所属平台(加速查询) |
|
||||
| `sub_plan_ids` | varchar(256) | 关联计划ID列表(逗号分隔,保留现状) |
|
||||
| `product_type` | tinyint NOT NULL DEFAULT 1 | 1=自营, 2=个人(**原为 Long,已修复**) |
|
||||
| `sub_type` | tinyint NOT NULL DEFAULT 1 | 1=单品, 2=多品组合(**原为 Long,已修复**) |
|
||||
| `total_capacity` | int NOT NULL DEFAULT 1 | **新增** 总席位数 |
|
||||
| `amount` | decimal(10,2) | 基准月价 |
|
||||
| `star` | decimal(3,1) DEFAULT 0.0 | 综合评分(由评价聚合更新) |
|
||||
| `status` | tinyint NOT NULL DEFAULT 0 | **新增** 0=草稿, 1=上架, 2=下架, 3=售完 |
|
||||
| `user_id` | bigint | 发布者用户ID |
|
||||
| `del_flag` | char(1) DEFAULT '0' | **新增** 软删除 |
|
||||
| `create_by` / `update_by` | varchar(64) | **新增** |
|
||||
| `create_time` / `update_time` | datetime | |
|
||||
|
||||
### 2.6 `as_sub_account` — 平台账号凭据
|
||||
|
||||
| 字段 | 类型 | 说明 |
|
||||
|------|------|------|
|
||||
| `id` | bigint PK | 主键 |
|
||||
| `product_id` | bigint | 关联产品ID |
|
||||
| `sub_plan_id` | bigint | 订阅计划ID(**原 int,已修复**) |
|
||||
| `sub_payroll_id` | bigint | 付费方案ID(**原 int,已修复**) |
|
||||
| `platform_id` | bigint NOT NULL | 平台ID(**原 int,已修复**) |
|
||||
| `user_id` | bigint NOT NULL | 账号持有者(**原 int,已修复**) |
|
||||
| `account_name` | varchar(256) NOT NULL | 平台登录用户名/邮箱 |
|
||||
| `account_passwd` | varchar(512) NOT NULL | 加密后的密码 |
|
||||
| `passwd_salt` | varchar(64) NOT NULL | 加密盐值(**原 int 已修复为 varchar(64)**) |
|
||||
| `encrypt_type` | tinyint NOT NULL DEFAULT 1 | **新增** 加密算法: 1=AES-256-GCM |
|
||||
| `region` | varchar(64) | 账号地区 |
|
||||
| `share_type` | tinyint | 分享类型 |
|
||||
| `account_type` | tinyint | 账号类型 |
|
||||
| `renew_date` | datetime | 账号下次续费日 |
|
||||
| `status` | tinyint NOT NULL DEFAULT 0 | **新增** 0=正常, 1=已失效, 2=异常/被封 |
|
||||
| `del_flag` | char(1) DEFAULT '0' | **新增** 软删除 |
|
||||
| `create_time` / `update_time` | datetime | **新增** |
|
||||
|
||||
### 2.7 `as_user_sub` — 合租槽(共享池)
|
||||
|
||||
> 语义修订:代表"一个共享席位池",不代表个人订阅。个人订阅记录见 `as_user_sub_member`。
|
||||
|
||||
| 字段 | 类型 | 说明 |
|
||||
|------|------|------|
|
||||
| `id` | bigint PK | 主键 |
|
||||
| `product_id` | bigint NOT NULL | **新增** 关联产品 |
|
||||
| `plan_id` | bigint NOT NULL | 订阅计划(**原 int,已修复**) |
|
||||
| `platform_id` | bigint NOT NULL | 平台(冗余) |
|
||||
| `host_user_id` | bigint NOT NULL | **重命名自 `user_id`**,车主用户ID(语义明确) |
|
||||
| `account_id` | bigint | **重命名自 `main_account`**,关联凭据(语义明确) |
|
||||
| `capacity` | int NOT NULL | 总席位数 |
|
||||
| `capacity_loaded` | int NOT NULL DEFAULT 0 | 已占用席位数 |
|
||||
| `region` | varchar(64) | 地区 |
|
||||
| `status` | tinyint NOT NULL DEFAULT 0 | **新增** 0=可加入, 1=已满, 2=已到期, 3=已关闭 |
|
||||
| `expire_time` | datetime | **新增** 合租槽到期时间 |
|
||||
| `remark` | varchar(512) | 车主说明(**原 int,已修复为 varchar**) |
|
||||
| `del_flag` | char(1) DEFAULT '0' | **新增** 软删除 |
|
||||
| `create_time` / `update_time` | datetime | **新增** |
|
||||
|
||||
### 2.8 `as_sub_product_comment` — 产品评价
|
||||
|
||||
| 字段 | 类型 | 说明 |
|
||||
|------|------|------|
|
||||
| `id` | bigint PK | 主键 |
|
||||
| `product_id` | bigint NOT NULL | 关联产品 |
|
||||
| `user_id` | bigint NOT NULL | 评价用户 |
|
||||
| `order_id` | bigint | **新增** 关联订单(验证是否购买过) |
|
||||
| `star` | tinyint NOT NULL | 评分 1-5 |
|
||||
| `comment` | varchar(1024) | 评价内容 |
|
||||
| `is_anonymous` | tinyint DEFAULT 0 | **新增** 0=公开, 1=匿名 |
|
||||
| `reply_id` | bigint | **新增** 回复的评价ID(追评/商家回复) |
|
||||
| `del_flag` | char(1) DEFAULT '0' | **新增** 软删除 |
|
||||
| `create_time` / `update_time` | datetime | |
|
||||
|
||||
### 2.9 `as_user_sub_member` — 个人订阅记录 【新增,原版最大缺失】
|
||||
|
||||
> 原版无此表,导致"哪些用户加入了哪个合租位"完全无法追踪。
|
||||
|
||||
| 字段 | 类型 | 说明 |
|
||||
|------|------|------|
|
||||
| `id` | bigint PK | 主键 |
|
||||
| `sub_id` | bigint NOT NULL | 所在合租槽(→ `as_user_sub.id`) |
|
||||
| `user_id` | bigint NOT NULL | 订阅用户 |
|
||||
| `order_id` | bigint NOT NULL | 来源订单(→ `as_order.id`) |
|
||||
| `payroll_id` | bigint NOT NULL | 购买的付费方案 |
|
||||
| `status` | tinyint NOT NULL DEFAULT 0 | 0=待激活, 1=使用中, 2=已到期, 3=已退订 |
|
||||
| `start_time` | datetime NOT NULL | 订阅开始时间 |
|
||||
| `expire_time` | datetime NOT NULL | 订阅到期时间 |
|
||||
| `del_flag` | char(1) DEFAULT '0' | 软删除 |
|
||||
| `create_time` / `update_time` | datetime | |
|
||||
| UK: `(sub_id, user_id)` | — | 同一合租槽同一用户只能有一条有效记录 |
|
||||
|
||||
### 2.10 `as_order` — 订单表 【新增】
|
||||
|
||||
| 字段 | 类型 | 说明 |
|
||||
|------|------|------|
|
||||
| `id` | bigint PK | 主键 |
|
||||
| `order_no` | varchar(32) UNIQUE | 业务订单号(AS+时间戳+随机) |
|
||||
| `user_id` | bigint NOT NULL | 购买用户 |
|
||||
| `product_id` | bigint NOT NULL | 商品 |
|
||||
| `payroll_id` | bigint NOT NULL | 付费方案 |
|
||||
| `original_amount` | decimal(10,2) | 原价快照(防价格变动) |
|
||||
| `discount_amount` | decimal(10,2) DEFAULT 0 | 优惠金额 |
|
||||
| `amount` | decimal(10,2) | 实付金额 |
|
||||
| `pay_type` | tinyint | 1=余额, 2=支付宝, 3=微信 |
|
||||
| `pay_no` | varchar(64) | 第三方支付单号 |
|
||||
| `status` | tinyint NOT NULL DEFAULT 0 | 0=待支付, 1=已支付, 2=已完成, 3=已退款, 4=已取消 |
|
||||
| `member_id` | bigint | 关联个人订阅记录(支付后填充) |
|
||||
| `expire_time` | datetime NOT NULL | 订单过期时间(默认 +15min)|
|
||||
| `pay_time` | datetime | 实际支付时间 |
|
||||
| `del_flag` | char(1) DEFAULT '0' | 软删除 |
|
||||
| `create_time` / `update_time` | datetime | |
|
||||
|
||||
**订单状态机:**
|
||||
```
|
||||
[待支付] → 15分钟超时 → [已取消]
|
||||
[待支付] → 支付成功 → [已支付] → 激活订阅 → [已完成]
|
||||
[已支付/已完成] → 退款 → [已退款]
|
||||
```
|
||||
|
||||
### 2.11 `as_wallet` — 用户钱包 【新增】
|
||||
|
||||
| 字段 | 类型 | 说明 |
|
||||
|------|------|------|
|
||||
| `id` | bigint PK | 主键 |
|
||||
| `user_id` | bigint UNIQUE | 用户(一人一钱包) |
|
||||
| `balance` | decimal(10,2) | 可用余额 |
|
||||
| `frozen_amount` | decimal(10,2) | 冻结金额 |
|
||||
| `total_income` | decimal(10,2) | 累计收入 |
|
||||
| `total_expense` | decimal(10,2) | 累计支出 |
|
||||
| `version` | int DEFAULT 0 | 乐观锁版本号(防并发余额错误) |
|
||||
| `create_time` / `update_time` | datetime | |
|
||||
|
||||
### 2.12 `as_wallet_log` — 钱包流水 【新增】
|
||||
|
||||
| 字段 | 类型 | 说明 |
|
||||
|------|------|------|
|
||||
| `id` | bigint PK | 主键 |
|
||||
| `user_id` | bigint NOT NULL | 用户 |
|
||||
| `amount` | decimal(10,2) | 金额(正=收入, 负=支出) |
|
||||
| `type` | tinyint | 1=充值, 2=消费, 3=退款, 4=邀请返现, 5=提现 |
|
||||
| `order_id` | bigint | 关联订单(可空) |
|
||||
| `balance_after` | decimal(10,2) | 操作后余额快照(对账用) |
|
||||
| `remark` | varchar(256) | 说明 |
|
||||
| `create_time` | datetime | |
|
||||
|
||||
### 2.13 `as_invite` — 邀请关系 【新增】
|
||||
|
||||
| 字段 | 类型 | 说明 |
|
||||
|------|------|------|
|
||||
| `id` | bigint PK | 主键 |
|
||||
| `inviter_id` | bigint NOT NULL | 邀请人 |
|
||||
| `invitee_id` | bigint NOT NULL UNIQUE | 被邀请人(一个人只有一条邀请记录) |
|
||||
| `invite_code` | varchar(16) | 使用的邀请码 |
|
||||
| `reward_amount` | decimal(10,2) | 返现金额 |
|
||||
| `reward_status` | tinyint DEFAULT 0 | 0=待发放, 1=已发放, 2=已失效 |
|
||||
| `reward_time` | datetime | 返现时间 |
|
||||
| `create_time` | datetime | 注册时间 |
|
||||
|
||||
### 2.14 `as_notification` — 系统通知 【新增】
|
||||
|
||||
| 字段 | 类型 | 说明 |
|
||||
|------|------|------|
|
||||
| `id` | bigint PK | 主键 |
|
||||
| `user_id` | bigint NOT NULL | 目标用户(0=全体广播) |
|
||||
| `title` | varchar(128) | 通知标题 |
|
||||
| `content` | varchar(1024) | 通知内容 |
|
||||
| `type` | tinyint | 1=续费提醒, 2=订单通知, 3=系统公告, 4=邀请奖励 |
|
||||
| `ref_id` | bigint | 关联业务ID(按 type 解析) |
|
||||
| `is_read` | tinyint DEFAULT 0 | 0=未读, 1=已读 |
|
||||
| `create_time` | datetime | |
|
||||
|
||||
---
|
||||
|
||||
## 三、完整 ER 关系图(v2.0)
|
||||
|
||||
```
|
||||
as_platform_type (1) ──< (N) as_platform [platform_type]
|
||||
as_platform (1) ──< (N) as_sub_plan [platform_id]
|
||||
as_sub_plan (1) ──< (N) as_sub_payroll [sub_plan_id]
|
||||
as_sub_plan (N) >──< (N) as_sub_product [sub_plan_ids 逗号分隔]
|
||||
as_platform (1) ──< (N) as_sub_product [platform_id 冗余]
|
||||
|
||||
as_sub_product (1) ──< (N) as_sub_product_comment [product_id]
|
||||
as_sub_product (1) ──< (N) as_sub_account [product_id]
|
||||
as_sub_product (1) ──< (N) as_user_sub [product_id]
|
||||
as_sub_plan (1) ──< (N) as_sub_account [sub_plan_id]
|
||||
as_sub_payroll (1) ──< (N) as_sub_account [sub_payroll_id]
|
||||
|
||||
as_user_sub (1) ──< (N) as_user_sub_member [sub_id] ← 新增关键表
|
||||
as_order (1) ──< (1) as_user_sub_member [order_id]
|
||||
as_sub_payroll (1) ──< (N) as_user_sub_member [payroll_id]
|
||||
|
||||
as_sub_product (1) ──< (N) as_order [product_id]
|
||||
as_sub_payroll (1) ──< (N) as_order [payroll_id]
|
||||
as_order (1) ──< (N) as_wallet_log [order_id]
|
||||
|
||||
app_user (1) ──< (1) as_wallet [user_id]
|
||||
as_wallet (1) ──< (N) as_wallet_log [user_id]
|
||||
|
||||
app_user (1) ──< (N) as_order [user_id]
|
||||
app_user (1) ──< (N) as_user_sub [as host] [host_user_id]
|
||||
app_user (1) ──< (N) as_user_sub_member [user_id]
|
||||
app_user (1) ──< (N) as_sub_product [user_id 发布者]
|
||||
app_user (1) ──< (N) as_sub_account [user_id 持有者]
|
||||
app_user (1) ──< (N) as_sub_product_comment [user_id]
|
||||
app_user (1) ──< (N) as_notification [user_id]
|
||||
|
||||
app_user (1) ──< (N) as_invite [as inviter] [inviter_id]
|
||||
app_user (1) ──< (1) as_invite [as invitee] [invitee_id]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 四、`as_user_sub_member` 状态机
|
||||
|
||||
```
|
||||
购买成功(order paid)
|
||||
[待激活] ──────────────→ [使用中]
|
||||
│
|
||||
┌───────────┤
|
||||
│ │
|
||||
主动退订 到期
|
||||
│ │
|
||||
↓ ↓
|
||||
[已退订] [已到期]
|
||||
│
|
||||
续费
|
||||
│
|
||||
↓
|
||||
[使用中]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 五、重要设计说明
|
||||
|
||||
### 5.1 容量管理与并发控制
|
||||
|
||||
**席位超卖防护:**
|
||||
- `as_sub_product.total_capacity` — 总席位(固定值)
|
||||
- `as_user_sub.capacity_loaded` — 已占用(购买时 +1,退订/到期时 -1)
|
||||
- 购买时通过 **乐观锁** 控制:
|
||||
```sql
|
||||
UPDATE as_user_sub
|
||||
SET capacity_loaded = capacity_loaded + 1
|
||||
WHERE id = ? AND capacity_loaded < capacity
|
||||
```
|
||||
更新行数 = 0 则说明已满,拒绝购买
|
||||
|
||||
### 5.2 账号凭据加密
|
||||
|
||||
- 算法:AES-256-GCM(`encrypt_type = 1`)
|
||||
- `account_passwd`:密文(Base64 编码)
|
||||
- `passwd_salt`:随机 IV(16字节,Base64 编码,**原 int 类型错误已修复**)
|
||||
- 密钥:存于服务端配置/环境变量,不入库
|
||||
|
||||
### 5.3 钱包余额并发控制
|
||||
|
||||
- `as_wallet.version` 字段实现乐观锁:
|
||||
```sql
|
||||
UPDATE as_wallet
|
||||
SET balance = balance - ?, version = version + 1
|
||||
WHERE user_id = ? AND version = ? AND balance >= ?
|
||||
```
|
||||
更新行数 = 0 则说明并发冲突或余额不足
|
||||
|
||||
### 5.4 订阅到期任务
|
||||
|
||||
定时任务(建议每日 02:00):
|
||||
```
|
||||
1. 查询 expire_time < now() + 7d 且 status = 1 的 as_user_sub_member
|
||||
→ 生成 as_notification(type=1,续费提醒)
|
||||
|
||||
2. 查询 expire_time < now() 且 status = 1 的 as_user_sub_member
|
||||
→ UPDATE status = 2(已到期)
|
||||
→ UPDATE as_user_sub SET capacity_loaded = capacity_loaded - 1
|
||||
```
|
||||
|
||||
### 5.5 评价限制
|
||||
|
||||
- 写评价前校验:`as_order` 存在且 `status IN (2,3)` 且 `user_id` 匹配
|
||||
- `star` 范围 1-5,服务端强制校验
|
||||
- `as_sub_product.star` 由定时任务或触发器聚合更新(AVG)
|
||||
|
||||
---
|
||||
|
||||
## 六、数据库表总览(v2.0)
|
||||
|
||||
| # | 表名 | 类型 | 状态 |
|
||||
|---|------|------|------|
|
||||
| 1 | `app_user` | App基础 | 追加2字段 |
|
||||
| 2 | `app_role` | App基础 | 沿用 |
|
||||
| 3 | `app_user_role` | App基础 | 沿用 |
|
||||
| 4 | `app_social_details` | App基础 | 沿用 |
|
||||
| 5 | `app_article_category` | App基础 | 沿用 |
|
||||
| 6 | `app_article` | App基础 | 沿用 |
|
||||
| 7 | `app_article_collect` | App基础 | 沿用 |
|
||||
| 8 | `app_page` | App基础 | 沿用 |
|
||||
| 9 | `app_tabbar` | App基础 | 沿用 |
|
||||
| 10 | `as_platform_type` | 业务 | 修订 |
|
||||
| 11 | `as_platform` | 业务 | 修订 |
|
||||
| 12 | `as_sub_plan` | 业务 | 修订 |
|
||||
| 13 | `as_sub_payroll` | 业务 | 修订 |
|
||||
| 14 | `as_sub_product` | 业务 | 修订 |
|
||||
| 15 | `as_sub_account` | 业务 | 修订 |
|
||||
| 16 | `as_user_sub` | 业务 | 修订(语义重定义) |
|
||||
| 17 | `as_sub_product_comment` | 业务 | 修订 |
|
||||
| 18 | `as_user_sub_member` | 业务 | **新增** |
|
||||
| 19 | `as_order` | 业务 | **新增** |
|
||||
| 20 | `as_wallet` | 业务 | **新增** |
|
||||
| 21 | `as_wallet_log` | 业务 | **新增** |
|
||||
| 22 | `as_invite` | 业务 | **新增** |
|
||||
| 23 | `as_notification` | 业务 | **新增** |
|
||||
|
||||
合计:9 张 App 基础表 + 14 张业务表 = **23 张表**
|
||||
370
db/ishare_schema_v2.sql
Normal file
370
db/ishare_schema_v2.sql
Normal file
@@ -0,0 +1,370 @@
|
||||
-- ============================================================
|
||||
-- iShare 数据库设计 v2.0(修订版)
|
||||
-- 修订时间: 2026-02-17
|
||||
-- 修订说明: 修复原版缺陷,补充完整业务字段和新增表
|
||||
-- 数据库: pigxx_app
|
||||
-- ============================================================
|
||||
|
||||
USE pigxx_app;
|
||||
SET NAMES utf8mb4;
|
||||
SET FOREIGN_KEY_CHECKS = 0;
|
||||
|
||||
-- ============================================================
|
||||
-- 一、App 基础表(沿用原版,仅 app_user 追加字段)
|
||||
-- ============================================================
|
||||
|
||||
-- app_user 追加字段(ALTER,不重建表)
|
||||
ALTER TABLE `app_user`
|
||||
ADD COLUMN IF NOT EXISTS `invite_code` varchar(16) UNIQUE COMMENT '用户专属邀请码(注册时生成)' AFTER `email`,
|
||||
ADD COLUMN IF NOT EXISTS `inviter_id` bigint DEFAULT NULL COMMENT '邀请人用户ID' AFTER `invite_code`;
|
||||
|
||||
|
||||
-- ============================================================
|
||||
-- 二、iShare 核心业务表(修订版,8 张原表 + 新增 6 张)
|
||||
-- ============================================================
|
||||
|
||||
-- ------------------------------------------------------------
|
||||
-- 2.1 as_platform_type — 平台类型
|
||||
-- 修订: 加 status、del_flag、create_time/update_time
|
||||
-- ------------------------------------------------------------
|
||||
DROP TABLE IF EXISTS `as_platform_type`;
|
||||
CREATE TABLE `as_platform_type` (
|
||||
`id` bigint NOT NULL COMMENT '主键',
|
||||
`name` varchar(64) NOT NULL COMMENT '类型名称(视频/音乐/AI等)',
|
||||
`platform_type` int NOT NULL DEFAULT 0 COMMENT '类型编号(用于分类筛选),0=全部',
|
||||
`sort_order` int NOT NULL DEFAULT 0 COMMENT '排序权重(升序)',
|
||||
`status` tinyint NOT NULL DEFAULT 1 COMMENT '状态: 0=禁用, 1=启用',
|
||||
`del_flag` char(1) NOT NULL DEFAULT '0' COMMENT '删除标志: 0=正常, 1=已删除',
|
||||
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
`update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_platform_type` (`platform_type`),
|
||||
KEY `idx_sort` (`sort_order`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='平台类型表';
|
||||
|
||||
-- ------------------------------------------------------------
|
||||
-- 2.2 as_platform — 流媒体平台
|
||||
-- 修订: 加 description、status、del_flag、create_time/update_time
|
||||
-- sort_order 从 varchar 改为 int
|
||||
-- ------------------------------------------------------------
|
||||
DROP TABLE IF EXISTS `as_platform`;
|
||||
CREATE TABLE `as_platform` (
|
||||
`id` bigint NOT NULL COMMENT '主键',
|
||||
`platform_name` varchar(128) NOT NULL COMMENT '平台名称',
|
||||
`platform_type` int NOT NULL DEFAULT 0 COMMENT '平台类型(关联 as_platform_type.platform_type)',
|
||||
`icon` varchar(512) DEFAULT NULL COMMENT '应用图标 URL',
|
||||
`description` varchar(512) DEFAULT NULL COMMENT '平台简介',
|
||||
`company` varchar(128) DEFAULT NULL COMMENT '所属公司',
|
||||
`website` varchar(256) DEFAULT NULL COMMENT '平台官网',
|
||||
`sort_order` int NOT NULL DEFAULT 0 COMMENT '排序权重(升序)',
|
||||
`status` tinyint NOT NULL DEFAULT 1 COMMENT '状态: 0=禁用, 1=启用',
|
||||
`del_flag` char(1) NOT NULL DEFAULT '0' COMMENT '删除标志: 0=正常, 1=已删除',
|
||||
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
`update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_platform_type` (`platform_type`),
|
||||
KEY `idx_status` (`status`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='流媒体平台表';
|
||||
|
||||
-- ------------------------------------------------------------
|
||||
-- 2.3 as_sub_plan — 订阅计划
|
||||
-- 修订: platform_id varchar→bigint, capacity varchar→int
|
||||
-- 加 status、del_flag、create_time/update_time
|
||||
-- ------------------------------------------------------------
|
||||
DROP TABLE IF EXISTS `as_sub_plan`;
|
||||
CREATE TABLE `as_sub_plan` (
|
||||
`id` bigint NOT NULL COMMENT '计划ID',
|
||||
`name` varchar(128) NOT NULL COMMENT '计划名称(标准版/高级版等)',
|
||||
`platform_id` bigint NOT NULL COMMENT '所属平台ID(→ as_platform.id)',
|
||||
`capacity` int NOT NULL DEFAULT 1 COMMENT '席位容量(该计划最多可共享人数)',
|
||||
`remark` varchar(256) DEFAULT NULL COMMENT '备注',
|
||||
`sort_order` int NOT NULL DEFAULT 0 COMMENT '排序权重(升序)',
|
||||
`status` tinyint NOT NULL DEFAULT 1 COMMENT '状态: 0=禁用, 1=启用',
|
||||
`del_flag` char(1) NOT NULL DEFAULT '0' COMMENT '删除标志: 0=正常, 1=已删除',
|
||||
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
`update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_platform_id` (`platform_id`),
|
||||
KEY `idx_status` (`status`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='订阅计划表';
|
||||
|
||||
-- ------------------------------------------------------------
|
||||
-- 2.4 as_sub_payroll — 付费方案
|
||||
-- 修订: sub_plans(Long,注释混乱) → sub_plan_id(bigint,明确1:1)
|
||||
-- 加 duration_months、original_price、is_active
|
||||
-- del_flag、create_time/update_time
|
||||
-- ------------------------------------------------------------
|
||||
DROP TABLE IF EXISTS `as_sub_payroll`;
|
||||
CREATE TABLE `as_sub_payroll` (
|
||||
`id` bigint NOT NULL COMMENT '主键',
|
||||
`sub_plan_id` bigint NOT NULL COMMENT '所属订阅计划ID(→ as_sub_plan.id)',
|
||||
`platform_id` bigint NOT NULL COMMENT '平台ID(冗余,便于查询)',
|
||||
`payroll` tinyint NOT NULL COMMENT '付费周期: 1=月付, 2=季付, 3=年付',
|
||||
`duration_months` int NOT NULL COMMENT '实际月数: 1/3/12(与 payroll 对应)',
|
||||
`price` decimal(10,2) NOT NULL COMMENT '售价',
|
||||
`original_price` decimal(10,2) DEFAULT NULL COMMENT '划线价(原价,用于展示折扣)',
|
||||
`currency` varchar(8) NOT NULL DEFAULT 'CNY' COMMENT '货币单位(CNY/USD等)',
|
||||
`region` varchar(64) DEFAULT NULL COMMENT '适用地区',
|
||||
`is_active` tinyint NOT NULL DEFAULT 1 COMMENT '是否上架: 0=下架, 1=上架',
|
||||
`del_flag` char(1) NOT NULL DEFAULT '0' COMMENT '删除标志: 0=正常, 1=已删除',
|
||||
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
`update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_sub_plan_id` (`sub_plan_id`),
|
||||
KEY `idx_platform_id` (`platform_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='付费方案表';
|
||||
|
||||
-- ------------------------------------------------------------
|
||||
-- 2.5 as_sub_product — 订阅产品(合租商品)
|
||||
-- 修订: Tags→tags(命名修复), 加 platform_id、status、cover_image
|
||||
-- product_type/sub_type 从 Long 改为 tinyint
|
||||
-- 加 total_capacity、del_flag、create_by/update_by
|
||||
-- ------------------------------------------------------------
|
||||
DROP TABLE IF EXISTS `as_sub_product`;
|
||||
CREATE TABLE `as_sub_product` (
|
||||
`id` bigint NOT NULL COMMENT '主键',
|
||||
`title` varchar(256) NOT NULL COMMENT '产品标题',
|
||||
`description` varchar(1024) DEFAULT NULL COMMENT '产品描述',
|
||||
`cover_image` varchar(512) DEFAULT NULL COMMENT '封面图 URL',
|
||||
`tags` varchar(256) DEFAULT NULL COMMENT '标签(逗号分隔)',
|
||||
`platform_id` bigint NOT NULL COMMENT '所属平台ID(→ as_platform.id,冗余加速查询)',
|
||||
`sub_plan_ids` varchar(256) DEFAULT NULL COMMENT '关联订阅计划ID列表(逗号分隔)',
|
||||
`product_type` tinyint NOT NULL DEFAULT 1 COMMENT '产品类型: 1=自营, 2=个人',
|
||||
`sub_type` tinyint NOT NULL DEFAULT 1 COMMENT '订阅类型: 1=单品, 2=多品组合',
|
||||
`total_capacity` int NOT NULL DEFAULT 1 COMMENT '总席位数(该商品可供多少人购买)',
|
||||
`amount` decimal(10,2) DEFAULT NULL COMMENT '基准价格(月)',
|
||||
`star` decimal(3,1) DEFAULT 0.0 COMMENT '综合评分(0.0-5.0,由评价聚合更新)',
|
||||
`status` tinyint NOT NULL DEFAULT 0 COMMENT '状态: 0=草稿, 1=上架, 2=下架, 3=售完',
|
||||
`user_id` bigint DEFAULT NULL COMMENT '发布者用户ID(→ app_user.user_id)',
|
||||
`del_flag` char(1) NOT NULL DEFAULT '0' COMMENT '删除标志: 0=正常, 1=已删除',
|
||||
`create_by` varchar(64) DEFAULT NULL COMMENT '创建人',
|
||||
`update_by` varchar(64) DEFAULT NULL COMMENT '修改人',
|
||||
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
`update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_platform_id` (`platform_id`),
|
||||
KEY `idx_status` (`status`),
|
||||
KEY `idx_product_type` (`product_type`),
|
||||
KEY `idx_user_id` (`user_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='订阅产品表(合租商品)';
|
||||
|
||||
-- ------------------------------------------------------------
|
||||
-- 2.6 as_sub_account — 流媒体平台账号凭据
|
||||
-- 修订: user_id/sub_plan_id/sub_payroll_id/platform_id int→bigint
|
||||
-- passwd_salt int→varchar(64,存hex/base64)
|
||||
-- 加 encrypt_type、status、del_flag、create_time/update_time
|
||||
-- ------------------------------------------------------------
|
||||
DROP TABLE IF EXISTS `as_sub_account`;
|
||||
CREATE TABLE `as_sub_account` (
|
||||
`id` bigint NOT NULL COMMENT '主键',
|
||||
`product_id` bigint DEFAULT NULL COMMENT '关联产品ID(→ as_sub_product.id)',
|
||||
`sub_plan_id` bigint DEFAULT NULL COMMENT '订阅计划ID(→ as_sub_plan.id)',
|
||||
`sub_payroll_id` bigint DEFAULT NULL COMMENT '付费方案ID(→ as_sub_payroll.id)',
|
||||
`platform_id` bigint NOT NULL COMMENT '平台ID(→ as_platform.id)',
|
||||
`user_id` bigint NOT NULL COMMENT '账号持有者用户ID(主用户,→ app_user.user_id)',
|
||||
`account_name` varchar(256) NOT NULL COMMENT '平台登录用户名/邮箱',
|
||||
`account_passwd` varchar(512) NOT NULL COMMENT '平台登录密码(加密存储)',
|
||||
`passwd_salt` varchar(64) NOT NULL COMMENT '加密盐值(Base64/Hex,16字节随机)',
|
||||
`encrypt_type` tinyint NOT NULL DEFAULT 1 COMMENT '加密算法: 1=AES-256-GCM',
|
||||
`region` varchar(64) DEFAULT NULL COMMENT '账号所在地区',
|
||||
`share_type` tinyint DEFAULT NULL COMMENT '分享类型',
|
||||
`account_type` tinyint DEFAULT NULL COMMENT '账号类型(主账号/子账号等)',
|
||||
`renew_date` datetime DEFAULT NULL COMMENT '账号在平台的下次续费日',
|
||||
`status` tinyint NOT NULL DEFAULT 0 COMMENT '账号状态: 0=正常, 1=已失效, 2=异常/被封',
|
||||
`del_flag` char(1) NOT NULL DEFAULT '0' COMMENT '删除标志: 0=正常, 1=已删除',
|
||||
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
`update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_product_id` (`product_id`),
|
||||
KEY `idx_platform_id` (`platform_id`),
|
||||
KEY `idx_user_id` (`user_id`),
|
||||
KEY `idx_status` (`status`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='流媒体平台账号凭据表';
|
||||
|
||||
-- ------------------------------------------------------------
|
||||
-- 2.7 as_user_sub — 合租槽(共享池)
|
||||
-- 语义修订: 代表"一个合租位池",不代表个人订阅
|
||||
-- 修订: remark int→varchar, plan_id/user_id/main_account int→bigint
|
||||
-- 加 product_id、status、expire_time、del_flag、create_time/update_time
|
||||
-- ------------------------------------------------------------
|
||||
DROP TABLE IF EXISTS `as_user_sub`;
|
||||
CREATE TABLE `as_user_sub` (
|
||||
`id` bigint NOT NULL COMMENT '主键',
|
||||
`product_id` bigint NOT NULL COMMENT '关联产品ID(→ as_sub_product.id)',
|
||||
`plan_id` bigint NOT NULL COMMENT '订阅计划ID(→ as_sub_plan.id)',
|
||||
`platform_id` bigint NOT NULL COMMENT '平台ID(冗余,加速查询)',
|
||||
`host_user_id` bigint NOT NULL COMMENT '车主用户ID(提供账号的一方,→ app_user.user_id)',
|
||||
`account_id` bigint DEFAULT NULL COMMENT '关联平台账号ID(→ as_sub_account.id)',
|
||||
`capacity` int NOT NULL COMMENT '总席位数(来自 as_sub_plan.capacity)',
|
||||
`capacity_loaded` int NOT NULL DEFAULT 0 COMMENT '已占用席位数',
|
||||
`region` varchar(64) DEFAULT NULL COMMENT '地区',
|
||||
`status` tinyint NOT NULL DEFAULT 0 COMMENT '状态: 0=可加入, 1=已满, 2=已到期, 3=已关闭',
|
||||
`expire_time` datetime DEFAULT NULL COMMENT '该合租槽到期时间(来自最晚成员到期时间)',
|
||||
`remark` varchar(512) DEFAULT NULL COMMENT '备注(车主说明)',
|
||||
`del_flag` char(1) NOT NULL DEFAULT '0' COMMENT '删除标志: 0=正常, 1=已删除',
|
||||
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
`update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_product_id` (`product_id`),
|
||||
KEY `idx_plan_id` (`plan_id`),
|
||||
KEY `idx_host_user_id` (`host_user_id`),
|
||||
KEY `idx_status` (`status`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='合租槽表(共享席位池)';
|
||||
|
||||
-- ------------------------------------------------------------
|
||||
-- 2.8 as_sub_product_comment — 产品评价
|
||||
-- 修订: 加 del_flag、is_anonymous、reply_id(支持追评)
|
||||
-- star 字段加注释明确 1-5 范围
|
||||
-- ------------------------------------------------------------
|
||||
DROP TABLE IF EXISTS `as_sub_product_comment`;
|
||||
CREATE TABLE `as_sub_product_comment` (
|
||||
`id` bigint NOT NULL COMMENT '主键',
|
||||
`product_id` bigint NOT NULL COMMENT '关联产品ID(→ as_sub_product.id)',
|
||||
`user_id` bigint NOT NULL COMMENT '评价用户ID(→ app_user.user_id)',
|
||||
`order_id` bigint DEFAULT NULL COMMENT '关联订单ID(校验是否已购买)',
|
||||
`star` tinyint NOT NULL COMMENT '评分 1-5(服务端校验范围)',
|
||||
`comment` varchar(1024) DEFAULT NULL COMMENT '评价内容',
|
||||
`is_anonymous` tinyint NOT NULL DEFAULT 0 COMMENT '是否匿名: 0=公开, 1=匿名',
|
||||
`reply_id` bigint DEFAULT NULL COMMENT '回复的评价ID(追评/商家回复,NULL=原始评价)',
|
||||
`del_flag` char(1) NOT NULL DEFAULT '0' COMMENT '删除标志: 0=正常, 1=已删除',
|
||||
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
`update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_product_id` (`product_id`),
|
||||
KEY `idx_user_id` (`user_id`),
|
||||
KEY `idx_reply_id` (`reply_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='产品评价表';
|
||||
|
||||
|
||||
-- ============================================================
|
||||
-- 三、新增表(原版缺失的核心业务表)
|
||||
-- ============================================================
|
||||
|
||||
-- ------------------------------------------------------------
|
||||
-- 3.1 as_user_sub_member — 个人订阅记录(原版最大缺失)
|
||||
-- 语义: 某用户购买加入了某合租槽,追踪个人维度
|
||||
-- ------------------------------------------------------------
|
||||
CREATE TABLE IF NOT EXISTS `as_user_sub_member` (
|
||||
`id` bigint NOT NULL COMMENT '主键',
|
||||
`sub_id` bigint NOT NULL COMMENT '关联合租槽ID(→ as_user_sub.id)',
|
||||
`user_id` bigint NOT NULL COMMENT '订阅用户ID(→ app_user.user_id)',
|
||||
`order_id` bigint NOT NULL COMMENT '关联订单ID(→ as_order.id)',
|
||||
`payroll_id` bigint NOT NULL COMMENT '购买的付费方案ID(→ as_sub_payroll.id)',
|
||||
`status` tinyint NOT NULL DEFAULT 0 COMMENT '状态: 0=待激活, 1=使用中, 2=已到期, 3=已退订',
|
||||
`start_time` datetime NOT NULL COMMENT '订阅开始时间',
|
||||
`expire_time` datetime NOT NULL COMMENT '订阅到期时间',
|
||||
`del_flag` char(1) NOT NULL DEFAULT '0' COMMENT '删除标志: 0=正常, 1=已删除',
|
||||
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
`update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_sub_user` (`sub_id`, `user_id`),
|
||||
KEY `idx_user_id` (`user_id`),
|
||||
KEY `idx_order_id` (`order_id`),
|
||||
KEY `idx_status` (`status`),
|
||||
KEY `idx_expire` (`expire_time`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='个人订阅记录表';
|
||||
|
||||
-- ------------------------------------------------------------
|
||||
-- 3.2 as_order — 订单表
|
||||
-- ------------------------------------------------------------
|
||||
CREATE TABLE IF NOT EXISTS `as_order` (
|
||||
`id` bigint NOT NULL COMMENT '主键',
|
||||
`order_no` varchar(32) NOT NULL COMMENT '订单号(业务唯一,格式: AS+时间戳+随机)',
|
||||
`user_id` bigint NOT NULL COMMENT '购买用户ID(→ app_user.user_id)',
|
||||
`product_id` bigint NOT NULL COMMENT '商品ID(→ as_sub_product.id)',
|
||||
`payroll_id` bigint NOT NULL COMMENT '付费方案ID(→ as_sub_payroll.id)',
|
||||
`original_amount` decimal(10,2) NOT NULL COMMENT '原价(快照,防止价格变动)',
|
||||
`discount_amount` decimal(10,2) NOT NULL DEFAULT 0.00 COMMENT '优惠金额',
|
||||
`amount` decimal(10,2) NOT NULL COMMENT '实付金额',
|
||||
`pay_type` tinyint DEFAULT NULL COMMENT '支付方式: 1=余额, 2=支付宝, 3=微信支付',
|
||||
`pay_no` varchar(64) DEFAULT NULL COMMENT '第三方支付单号',
|
||||
`status` tinyint NOT NULL DEFAULT 0 COMMENT '状态: 0=待支付, 1=已支付, 2=已完成, 3=已退款, 4=已取消',
|
||||
`member_id` bigint DEFAULT NULL COMMENT '关联个人订阅记录ID(→ as_user_sub_member.id,支付成功后填充)',
|
||||
`remark` varchar(256) DEFAULT NULL COMMENT '备注',
|
||||
`expire_time` datetime NOT NULL COMMENT '订单过期时间(未支付自动取消,默认 +15min)',
|
||||
`pay_time` datetime DEFAULT NULL COMMENT '实际支付时间',
|
||||
`del_flag` char(1) NOT NULL DEFAULT '0' COMMENT '删除标志: 0=正常, 1=已删除',
|
||||
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
`update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_order_no` (`order_no`),
|
||||
KEY `idx_user_id` (`user_id`),
|
||||
KEY `idx_product_id` (`product_id`),
|
||||
KEY `idx_status` (`status`),
|
||||
KEY `idx_expire` (`expire_time`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='订单表';
|
||||
|
||||
-- ------------------------------------------------------------
|
||||
-- 3.3 as_wallet — 用户钱包
|
||||
-- ------------------------------------------------------------
|
||||
CREATE TABLE IF NOT EXISTS `as_wallet` (
|
||||
`id` bigint NOT NULL COMMENT '主键',
|
||||
`user_id` bigint NOT NULL COMMENT '用户ID(→ app_user.user_id,一人一钱包)',
|
||||
`balance` decimal(10,2) NOT NULL DEFAULT 0.00 COMMENT '可用余额',
|
||||
`frozen_amount` decimal(10,2) NOT NULL DEFAULT 0.00 COMMENT '冻结金额(退款/提现处理中)',
|
||||
`total_income` decimal(10,2) NOT NULL DEFAULT 0.00 COMMENT '累计收入',
|
||||
`total_expense` decimal(10,2) NOT NULL DEFAULT 0.00 COMMENT '累计支出',
|
||||
`version` int NOT NULL DEFAULT 0 COMMENT '乐观锁版本号(防并发余额错误)',
|
||||
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
`update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_user_id` (`user_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户钱包表';
|
||||
|
||||
-- ------------------------------------------------------------
|
||||
-- 3.4 as_wallet_log — 钱包流水
|
||||
-- ------------------------------------------------------------
|
||||
CREATE TABLE IF NOT EXISTS `as_wallet_log` (
|
||||
`id` bigint NOT NULL COMMENT '主键',
|
||||
`user_id` bigint NOT NULL COMMENT '用户ID(→ app_user.user_id)',
|
||||
`amount` decimal(10,2) NOT NULL COMMENT '变动金额(正=收入, 负=支出)',
|
||||
`type` tinyint NOT NULL COMMENT '类型: 1=充值, 2=消费, 3=退款, 4=邀请返现, 5=提现',
|
||||
`order_id` bigint DEFAULT NULL COMMENT '关联订单ID(→ as_order.id,可空)',
|
||||
`balance_after` decimal(10,2) NOT NULL COMMENT '操作后余额(快照,便于对账)',
|
||||
`remark` varchar(256) DEFAULT NULL COMMENT '说明(如:订阅 Netflix 高级版 3 个月)',
|
||||
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_user_id` (`user_id`),
|
||||
KEY `idx_order_id` (`order_id`),
|
||||
KEY `idx_type` (`type`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='钱包流水表';
|
||||
|
||||
-- ------------------------------------------------------------
|
||||
-- 3.5 as_invite — 邀请关系
|
||||
-- ------------------------------------------------------------
|
||||
CREATE TABLE IF NOT EXISTS `as_invite` (
|
||||
`id` bigint NOT NULL COMMENT '主键',
|
||||
`inviter_id` bigint NOT NULL COMMENT '邀请人用户ID(→ app_user.user_id)',
|
||||
`invitee_id` bigint NOT NULL COMMENT '被邀请人用户ID(→ app_user.user_id)',
|
||||
`invite_code` varchar(16) NOT NULL COMMENT '使用的邀请码',
|
||||
`reward_amount` decimal(10,2) DEFAULT NULL COMMENT '返现金额(首次购买后确定)',
|
||||
`reward_status` tinyint NOT NULL DEFAULT 0 COMMENT '返现状态: 0=待发放, 1=已发放, 2=已失效',
|
||||
`reward_time` datetime DEFAULT NULL COMMENT '返现发放时间',
|
||||
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间(注册时间)',
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_invitee` (`invitee_id`),
|
||||
KEY `idx_inviter_id` (`inviter_id`),
|
||||
KEY `idx_invite_code` (`invite_code`),
|
||||
KEY `idx_reward_status` (`reward_status`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='邀请关系表';
|
||||
|
||||
-- ------------------------------------------------------------
|
||||
-- 3.6 as_notification — 系统通知
|
||||
-- ------------------------------------------------------------
|
||||
CREATE TABLE IF NOT EXISTS `as_notification` (
|
||||
`id` bigint NOT NULL COMMENT '主键',
|
||||
`user_id` bigint NOT NULL COMMENT '目标用户ID(→ app_user.user_id,0=全体广播)',
|
||||
`title` varchar(128) NOT NULL COMMENT '通知标题',
|
||||
`content` varchar(1024) NOT NULL COMMENT '通知内容',
|
||||
`type` tinyint NOT NULL COMMENT '类型: 1=续费提醒, 2=订单通知, 3=系统公告, 4=邀请奖励',
|
||||
`ref_id` bigint DEFAULT NULL COMMENT '关联业务ID(订单ID/订阅ID等,按 type 解析)',
|
||||
`is_read` tinyint NOT NULL DEFAULT 0 COMMENT '是否已读: 0=未读, 1=已读',
|
||||
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_user_id` (`user_id`),
|
||||
KEY `idx_is_read` (`is_read`),
|
||||
KEY `idx_type` (`type`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='系统通知表';
|
||||
|
||||
|
||||
SET FOREIGN_KEY_CHECKS = 1;
|
||||
Reference in New Issue
Block a user