# iShare (AiShare) 数据库设计文档

> 模块: `as-app-server` — iShare 项目新增的核心业务模块（pigx-5.2 原版中不存在）
>
> 生成日期: 2026-02-16

---

## 一、数据库表清单

### 1. 核心业务表（as_* — iShare 新增）

| 表名 | 用途 |
|------|------|
| `as_platform` | 流媒体平台（Netflix、Spotify 等） |
| `as_platform_type` | 平台分类（视频、音乐等） |
| `as_sub_plan` | 订阅计划（如 Netflix 标准版、高级版） |
| `as_sub_payroll` | 付费方案（月付/季付/年付 + 价格） |
| `as_sub_account` | 订阅账号（实际的平台登录凭据） |
| `as_sub_product` | 订阅产品（面向用户的合租商品） |
| `as_sub_product_comment` | 产品评价 |
| `as_user_sub` | 用户订阅关系（用户参与的合租） |

### 2. App 基础表（app_* — 来自 pigx-app 模板，SQL 中有建表语句）

| 表名 | 用途 |
|------|------|
| `app_user` | App 用户 |
| `app_role` | App 角色 |
| `app_user_role` | 用户-角色关联 |
| `app_social_details` | 社交登录配置（微信小程序等） |
| `app_article` | 文章资讯 |
| `app_article_category` | 文章分类 |
| `app_article_collect` | 文章收藏 |
| `app_page` | 页面装修（首页/个人中心 JSON 配置） |
| `app_tabbar` | 底部导航栏 |

---

## 二、核心业务表详细结构

### 2.1 `as_platform` — 流媒体平台

| 字段 | 类型 | 说明 |
|------|------|------|
| `id` | bigint (PK, ASSIGN_ID) | 主键 |
| `platform_name` | varchar | 平台名称 |
| `platform_type` | int | 平台类型（关联 as_platform_type），0=全部 |
| `icon` | varchar | 应用图标 URL |
| `company` | varchar | 所属公司 |
| `website` | varchar | 平台官网 |
| `sort_order` | varchar | 排序 |
| `product_code` | varchar | 产品编码（格式: 类型_名称_id） |

### 2.2 `as_platform_type` — 平台类型

| 字段 | 类型 | 说明 |
|------|------|------|
| `id` | bigint (PK, ASSIGN_ID) | 主键 |
| `name` | varchar | 类型名称（如：视频、音乐、AI） |
| `platform_type` | int | 类型编号，0=全部 |
| `sort_order` | varchar | 排序 |

### 2.3 `as_sub_plan` — 订阅计划

| 字段 | 类型 | 说明 |
|------|------|------|
| `id` | bigint (PK, ASSIGN_ID) | 计划 ID |
| `name` | varchar | 计划名称（如：标准版、高级版） |
| `platform_id` | varchar | 所属平台 ID |
| `capacity` | varchar | 用户容量（可共享席位数） |
| `remark` | varchar | 备注 |
| `sort_order` | varchar | 排序 |

### 2.4 `as_sub_payroll` — 付费方案

| 字段 | 类型 | 说明 |
|------|------|------|
| `id` | bigint (PK, ASSIGN_ID) | 主键 |
| `sub_plans` | bigint | 关联的订阅计划 ID |
| `platform_id` | int | 平台 ID |
| `payroll` | int | 付费周期：1=月付, 2=季付, 3=年付 |
| `price` | decimal | 价格 |
| `currency` | varchar | 货币（CNY/USD 等） |
| `region` | varchar | 地区 |
| `product_code` | varchar | 产品编码 |

### 2.5 `as_sub_account` — 订阅账号

| 字段 | 类型 | 说明 |
|------|------|------|
| `id` | bigint (PK, ASSIGN_ID) | 主键 |
| `product_id` | bigint | 关联产品 ID |
| `sub_plan_id` | int | 订阅计划 ID |
| `user_id` | int | 账号持有者（主用户） |
| `sub_payroll_id` | int | 付费方案 ID |
| `region` | varchar | 地区 |
| `share_type` | int | 分享类型 |
| `account_type` | int | 账号类型 |
| `renew_date` | datetime | 续费日期 |
| `platform_id` | int | 平台 ID |
| `account_name` | varchar | 平台登录用户名 |
| `account_passwd` | varchar | 平台登录密码 |
| `passwd_salt` | int | 密码盐值 |

### 2.6 `as_sub_product` — 订阅产品（合租商品）

| 字段 | 类型 | 说明 |
|------|------|------|
| `id` | bigint (PK, ASSIGN_ID) | 主键 |
| `star` | int | 综合评分 |
| `title` | varchar | 产品标题 |
| `description` | varchar | 描述 |
| `tags` | varchar | 标签（逗号分隔） |
| `sub_plan_ids` | varchar | 关联的订阅计划 ID 列表 |
| `amount` | decimal | 总价 |
| `user_id` | bigint | 发布者用户 ID |
| `product_type` | bigint | 产品类型：1=自营, 2=个人 |
| `create_time` | datetime | 创建时间 |
| `update_time` | datetime | 更新时间 |
| `product_code` | varchar | 产品编码（类型_名称_id） |
| `sub_type` | bigint | 订阅类型：1=单品, 2=多品（组合） |

### 2.7 `as_sub_product_comment` — 产品评价

> 注: 实体类 `@TableName` 误标为 `as_sub_product`，实际应为 `as_sub_product_comment`

| 字段 | 类型 | 说明 |
|------|------|------|
| `id` | bigint (PK, ASSIGN_ID) | 主键 |
| `star` | int | 评分 |
| `comment` | varchar | 评价内容 |
| `user_id` | bigint | 评价用户 |
| `product_id` | bigint | 关联产品 ID |
| `create_time` | datetime | 创建时间 |
| `update_time` | datetime | 更新时间 |

### 2.8 `as_user_sub` — 用户订阅关系

| 字段 | 类型 | 说明 |
|------|------|------|
| `id` | bigint (PK, ASSIGN_ID) | 主键 |
| `platform_id` | int | 平台 ID |
| `capacity` | int | 总容量（席位数） |
| `capacity_loaded` | int | 已占用容量 |
| `plan_id` | int | 订阅计划 ID |
| `user_id` | int | 用户 ID |
| `main_account` | int | 主账号 ID（关联 as_sub_account） |
| `region` | varchar | 地区 |
| `target_ip` | varchar | 目标 IP（用于区域限制） |
| `remark` | int | 备注 |

---

## 三、App 基础表详细结构

### 3.1 `app_user` — App 用户

| 字段 | 类型 | 约束 | 说明 |
|------|------|------|------|
| `user_id` | bigint | PK | 用户 ID |
| `username` | varchar(255) | | 用户名 |
| `password` | varchar(255) | | 密码（BCrypt） |
| `salt` | varchar(255) | | 盐值 |
| `phone` | varchar(20) | | 手机号 |
| `avatar` | varchar(255) | | 头像 |
| `nickname` | varchar(64) | | 昵称 |
| `name` | varchar(64) | | 姓名 |
| `email` | varchar(128) | | 邮箱 |
| `wx_openid` | varchar(32) | | 微信 OpenID |
| `lock_flag` | char(1) | 默认 '0' | 锁定状态 |
| `del_flag` | char(1) | 默认 '0' | 删除标志 |
| `tenant_id` | bigint | NOT NULL | 租户 ID |
| `create_by/update_by` | varchar(64) | | 操作人 |
| `create_time/update_time` | datetime | | 时间戳 |
| `last_modified_time` | datetime | | 最后密码修改时间 |

### 3.2 `app_role` — 角色表

| 字段 | 类型 | 说明 |
|------|------|------|
| `role_id` | bigint (PK) | 角色 ID |
| `role_name` | varchar(64) | 角色名 |
| `role_code` | varchar(64) | 角色编码（如 APP_USER） |
| `role_desc` | varchar(255) | 描述 |
| `tenant_id` | bigint | 租户 ID |

### 3.3 `app_user_role` — 用户角色关联

| 字段 | 类型 | 说明 |
|------|------|------|
| `user_id` | bigint (PK) | 用户 ID |
| `role_id` | bigint (PK) | 角色 ID |

### 3.4 其他 App 表

- **`app_social_details`**: 社交登录配置（type/app_id/app_secret/redirect_url）
- **`app_article`**: 文章（title/intro/content/author/visit/sort/cid→分类）
- **`app_article_category`**: 文章分类（name/sort/is_show）
- **`app_article_collect`**: 文章收藏（user_id/article_id）
- **`app_page`**: 页面装修（page_type/page_name/page_data JSON）
- **`app_tabbar`**: 底部导航（name/selected/unselected 图标/link JSON）

所有 app_* 表均包含 `del_flag`, `create_by`, `update_by`, `create_time`, `update_time`, `tenant_id` 公共字段。

---

## 四、ER 关系

```
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_plans]
as_sub_plan (N) >──< (N) as_sub_product          [sub_plan_ids, 逗号分隔]
as_sub_product (1) ──< (N) as_sub_product_comment [product_id]
as_sub_product (1) ──< (N) as_sub_account         [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_sub_plan (1) ──< (N) as_user_sub               [plan_id]
as_sub_account (1) ──< (N) as_user_sub            [main_account]

app_user (1) ──< (N) as_sub_product    [user_id — 产品发布者]
app_user (1) ──< (N) as_sub_account    [user_id — 账号持有者]
app_user (1) ──< (N) as_user_sub       [user_id — 订阅参与者]
app_user (1) ──< (N) as_sub_product_comment [user_id]

app_user (N) >──< (N) app_role          [通过 app_user_role]
app_article_category (1) ──< (N) app_article [cid]
app_user (1) ──< (N) app_article_collect [user_id]
app_article (1) ──< (N) app_article_collect [article_id]
```

---

## 五、核心业务模型总结

iShare 是一个 **流媒体账号合租平台**，核心业务流程：

```
平台类型 (as_platform_type)
  └── 平台 (as_platform): Netflix, Spotify, ChatGPT...
       └── 订阅计划 (as_sub_plan): 标准版、高级版（含容量/席位数）
            └── 付费方案 (as_sub_payroll): 月/季/年付 + 价格
                 └── 订阅账号 (as_sub_account): 实际登录凭据

订阅产品 (as_sub_product): 面向用户的合租商品
  ├── 关联多个订阅计划 (sub_plan_ids)
  ├── 产品类型: 自营(1) / 个人(2)
  ├── 订阅类型: 单品(1) / 多品组合(2)
  └── 产品评价 (as_sub_product_comment)

用户订阅 (as_user_sub): 用户参与合租
  ├── 关联平台、计划、主账号
  └── 容量管理 (capacity / capacity_loaded)
```

### 关键业务概念

1. **平台 (Platform)**: 流媒体服务商，按类型分类
2. **订阅计划 (SubPlan)**: 平台的会员等级，定义席位容量
3. **付费方案 (SubPayroll)**: 计划的定价策略（支持多地区多货币）
4. **订阅账号 (SubAccount)**: 实际的平台账号密码，由主用户持有
5. **订阅产品 (SubProduct)**: 合租商品，可组合多个计划，支持自营/个人发布
6. **用户订阅 (UserSub)**: 用户加入合租的记录，跟踪席位占用
7. **产品评价 (SubProductComment)**: 用户对合租产品的评分和评论

### 代码注意事项

⚠️ `AsSubProductComment` 实体类的 `@TableName("as_sub_product")` 可能是 bug，应为 `as_sub_product_comment`。

---

## 六、SQL 建表语句

核心业务表（as_*）**没有在 SQL 脚本中找到建表语句**，仅在 Java 实体类中定义。这些表可能通过以下方式创建：
- MyBatis-Plus 自动建表
- 手动在数据库中创建
- 尚未提交的 migration 脚本

App 基础表的完整建表语句见: `db/999pigxx_app.sql`
