**修订记录**

| 修订日期   | 版本号 | 修订内容                    | 修订人             | 备注 |
| ---------- | ------ | --------------------------- | ------------------ | ---- |
| 2024/11/13 | V1.0   | 初稿                        | 张树忠/李昌/蔡育超 |      |
| 2024/11/13 | V1.1   | 完善架构设计和描述          | 张树忠             |      |
| 2024/11/30 | V1.2   | 增加计费和套餐设计          | 张树忠             |      |
| 2025/02/17 | V1.3   | 架构修改，去掉多余微服务    | 张树忠             |      |
| 2025/02/24 | V1.4   | 增加数据库表设计,业务流程图 | 张树忠             |      |

---

# **WANFi软件系统设计文档**

# 1. 需求分析

WANFi控制平台用于提供给运营商用于AP设备的管理监控，并对终端用户进行管理和计费管理。具体的业务需求概括如下：

## 1.1. 使用对象定义

> a)  "客户"指购买AP设备的B端公司或组织，包含有多个管理和运维人员
>
> b)  "用户"指使用改B端提供的的WiFi服务的C端用户，一个用户只有一个账号，一个账号可以使用多个终端设备

## 1.2. 平台需求定义

> a)  客户平台：为B端客户提供的控制和费用管理界面，用于AP的远程管理，配置，运行检测（根据API 文档逐一实现 Omada平台上的功能），管理用户数据、设备信息和计费信息

> b)  用户平台：为C端客户提供的个人信息管理：用于C端用户缴费以及个人信息管理，终端设备管理

> c)  客户平台包含用户平台的信息，但用户平台无法获取客户平台信息

## 1.3. 商业模式定义

> a.  客户服务用户（比如运营商）：包含完整的客户平台和用户平台功能

> b.  客户服务设备（比如农场采购，直接用于农场智能设备，没有用户参与）：只需要开发客户平台，以及客户平台中的设备信息管理，无需用户信息管理以及缴费系统

> c.  二者在开发系统上和数据库结构上尽可能兼容，保证一套系统可以为二者服务

> d.  费用以设备为维度进行管理，即通过数据库管理每一个设备的流量，使用时长等该需求是指一个用户/账号下的多个设备可以单独计费??）

> e.  费用以用户为维度进行收费，每个用户会收到一个账单，包含账户下设备数量，使用流量，使用时长等

![客户平台和用户平台数据库关系图](image/admin-user-portal.png)

# 2. 系统架构设计

![](image/WANFi-Architecture.png)

## 2.1. 架构说明

> a)  微服务架构

> b)  B/S模式

> c)  支持本地和云部署

## 2.2. 开发运行环境和技术栈

> a)  操作系统：

    Ubuntu 22.04

> b)  数据库：

    MySQL 5.7
      Redis 7.4.2
      MongoDB 7.0.15 （用于Omada SDN Controller）
      ElasticsSearch 7.1 用于大数据文本的查询 （暂未使用）

> c)  后端开发语言：

    Java 1.8
      SprintgBoot 2.7
      SpringCloud 2021.0.8
      SpringCloudAlibaba 2021.0.5.0

> d)  前端开发语言:

    HTML+CSS,
      Vue.js 3.4.27
      AntD 4.2.2

# 3. 业务流程

## 3.1. 用户登录注册

* 用户注册，需填写个人信息，邮箱，手机号，实名认证等
* 用户连接WANFi时，通过网页进行登录
* 登陆后，后端API获取当前连接设备的MAC地址，如果该设备未被绑定到数据库中，则由后端API将当前设备绑定到数据库中

![](image/user-login-register-1.png)

## 3.2. 终端设备访问控制

* 终端设备连接AP热点，门户拦截
* 用户登录，判断是否充值有效套餐或者余额是否为0
* 如果存在套餐流量不为0或者余额部位0，则授权终端设备Internet连接准入
* 用户平台定时监测终端设备上网流量并实时计算套餐流量或余额
* 如果套餐流量为0且余额为0，则去授权终端设备Internet接入权限

![](image/client-auth-p1.png)

# 4. 数据库设计

## 4.1. 客户数据库表设计

  系统采用 MySQL 数据库，字符集为 utf8mb4，主要涉及系统配置、部门、设备、数据字典、定时任务、日志、菜单、角色以及用户管理等模块。

### 4.1.1. 数据库架构

- **数据库名称**：`wfc_system_db`
- **字符集**：utf8mb4
- **校对规则**：utf8mb4_general_ci

### 4.1.2. 客户平台表总览

| 表名           | 主键             | 备注说明           | 说明                     |
| -------------- | ---------------- | ------------------ | ------------------------ |
| sys_config     | config_id        | 参数配置表         | 存储系统参数配置信息     |
| sys_dept       | dept_id          | 部门表             | 存储部门信息             |
| sys_device     | id               | 客户平台-设备表    | 存储设备信息             |
| sys_dict_data  | dict_code        | 字典数据表         | 存储字典数据             |
| sys_dict_type  | dict_id          | 字典类型表         | 存储字典类型             |
| sys_job        | job_id           | 定时任务调度表     | 存储定时任务调度信息     |
| sys_job_log    | job_log_id       | 定时任务调度日志表 | 存储定时任务调度日志信息 |
| sys_logininfor | info_id          | 系统访问记录       | 存储系统访问记录         |
| sys_menu       | menu_id          | 菜单权限表         | 存储菜单权限信息         |
| sys_oper_log   | oper_id          | 操作日志记录       | 存储操作日志记录         |
| sys_post       | post_id          | 岗位信息表         | 存储岗位信息             |
| sys_role       | role_id          | 角色信息表         | 存储角色信息             |
| sys_role_dept  | role_id, dept_id | 角色和部门关联表   | 存储角色和部门的关联信息 |
| sys_role_menu  | role_id, menu_id | 角色和菜单关联表   | 存储角色和菜单的关联信息 |
| sys_user       | user_id          | 用户信息表         | 存储用户信息             |
| sys_user_post  | user_id, post_id | 用户与岗位关联表   | 存储用户与岗位的关联信息 |
| sys_user_role  | user_id, role_id | 用户和角色关联表   | 存储用户和角色的关联信息 |

---

### 4.1.3 表结构设计

#### 参数配置表 - sys_config

用于存储全局系统配置参数。

| 列名         | 数据类型     | 约束                        | 说明                                   |
| ------------ | ------------ | --------------------------- | -------------------------------------- |
| config_id    | int(11)      | PRIMARY KEY``AUTO_INCREMENT | 参数主键                               |
| config_name  | varchar(100) | DEFAULT ''                  | 参数名称                               |
| config_key   | varchar(100) | DEFAULT ''                  | 参数键名                               |
| config_value | varchar(500) | DEFAULT ''                  | 参数键值                               |
| config_type  | char(1)      | DEFAULT 'N'                 | 系统内置标识（Y表示内置, N表示非内置） |
| create_by    | varchar(64)  | DEFAULT ''                  | 创建者                                 |
| create_time  | datetime     | NULLABLE                    | 创建时间                               |
| update_by    | varchar(64)  | DEFAULT ''                  | 更新者                                 |
| update_time  | datetime     | NULLABLE                    | 更新时间                               |
| remark       | varchar(500) | NULLABLE                    | 备注                                   |

---

#### 部门表 - sys_dept

存储各部门信息，支持层级结构。

| 列名        | 数据类型     | 约束                        | 说明                     |
| ----------- | ------------ | --------------------------- | ------------------------ |
| dept_id     | bigint(20)   | PRIMARY KEY``AUTO_INCREMENT | 部门 ID                  |
| parent_id   | bigint(20)   | DEFAULT 0                   | 父部门 ID                |
| ancestors   | varchar(50)  | DEFAULT ''                  | 祖级列表                 |
| dept_name   | varchar(30)  | DEFAULT ''                  | 部门名称                 |
| order_num   | int(11)      | DEFAULT 0                   | 显示顺序                 |
| leader      | varchar(20)  | NULLABLE                    | 负责人                   |
| phone       | varchar(11)  | NULLABLE                    | 联系电话                 |
| email       | varchar(50)  | NULLABLE                    | 邮箱                     |
| status      | char(1)      | DEFAULT '0'                 | 部门状态（0正常、1停用） |
| del_flag    | char(1)      | DEFAULT '0'                 | 删除标志（0存在，2删除） |
| create_by   | varchar(64)  | DEFAULT ''                  | 创建者                   |
| create_time | datetime     | NULLABLE                    | 创建时间                 |
| update_by   | varchar(64)  | DEFAULT ''                  | 更新者                   |
| update_time | datetime     | NULLABLE                    | 更新时间                 |
| remark      | varchar(500) | NULLABLE                    | 备注                     |

---

#### 系统设备表 - sys_device

存储客户平台中设备的各项信息。

| 列名               | 数据类型     | 约束 & 默认值               | 说明                    |
| ------------------ | ------------ | --------------------------- | ----------------------- |
| id                 | bigint(20)   | PRIMARY KEY``AUTO_INCREMENT | 主键                    |
| site_id            | varchar(64)  | NULLABLE                    | 站点 ID                 |
| mac                | varchar(64)  | NULLABLE                    | MAC 地址                |
| name               | varchar(64)  | NULLABLE                    | 设备名称                |
| type               | varchar(32)  | NULLABLE                    | 类型                    |
| subtype            | varchar(32)  | NULLABLE                    | 子类型                  |
| device_series_type | varchar(32)  | NULLABLE                    | 产品系列类型            |
| model              | varchar(64)  | NULLABLE                    | 设备型号                |
| ip                 | varchar(64)  | NULLABLE                    | IP 地址                 |
| ipv6s              | varchar(255) | NULLABLE                    | IPv6 地址（可能多个）   |
| uptime             | varchar(64)  | NULLABLE                    | 在线时长                |
| status             | int(11)      | NULLABLE                    | 状态                    |
| last_seen          | bigint(20)   | NULLABLE                    | 最后在线时间            |
| cpu_util           | int(11)      | NULLABLE                    | CPU 利用率              |
| mem_util           | int(11)      | NULLABLE                    | 内存利用率              |
| sn                 | varchar(64)  | NULLABLE                    | 序列号                  |
| license_status     | int(11)      | NULLABLE                    | 授权状态                |
| tag_name           | varchar(64)  | NULLABLE                    | Tag Name                |
| uplink_device_mac  | varchar(64)  | NULLABLE                    | Uplink Device Mac       |
| uplink_device_name | varchar(64)  | NULLABLE                    | Uplink Device Name      |
| uplink_device_port | varchar(64)  | NULLABLE                    | Uplink Device Port      |
| link_speed         | int(11)      | NULLABLE                    | Link Speed              |
| duplex             | int(11)      | NULLABLE                    | Duplex                  |
| switch_consistent  | tinyint(1)   | NULLABLE                    | Switch Consistent       |
| public_ip          | varchar(64)  | NULLABLE                    | Public IP               |
| firmware_version   | varchar(64)  | NULLABLE                    | Firmware Version        |
| del_flag           | tinyint(1)   | NULLABLE                    | 删除标志（0存在 1删除） |
| create_by          | bigint(20)   | NULLABLE                    | 创建人                  |
| create_time        | datetime     | NULLABLE                    | 创建时间                |
| update_by          | bigint(20)   | NULLABLE                    | 更新人                  |
| update_time        | datetime     | NULLABLE                    | 更新时间                |

#### 字典相关

##### 字典数据表 - sys_dict_data

存储系统使用的字典数据，包含常用的选项列表。

| 列名        | 数据类型     | 约束                        | 说明                |
| ----------- | ------------ | --------------------------- | ------------------- |
| dict_code   | bigint(20)   | PRIMARY KEY``AUTO_INCREMENT | 字典编码            |
| dict_sort   | int(11)      | DEFAULT 0                   | 字典排序            |
| dict_label  | varchar(100) | DEFAULT ''                  | 字典标签            |
| dict_value  | varchar(100) | DEFAULT ''                  | 字典键值            |
| dict_type   | varchar(100) | DEFAULT ''                  | 字典类型            |
| css_class   | varchar(100) | NULLABLE                    | 样式属性（扩展）    |
| list_class  | varchar(100) | NULLABLE                    | 列表显示样式        |
| is_default  | char(1)      | DEFAULT 'Y'                 | 是否默认（Y/N）     |
| status      | char(1)      | DEFAULT '0'                 | 状态（0正常 1停用） |
| create_by   | varchar(64)  | DEFAULT ''                  | 创建者              |
| create_time | datetime     | NULLABLE                    | 创建时间            |
| update_by   | varchar(64)  | DEFAULT ''                  | 更新者              |
| update_time | datetime     | NULLABLE                    | 更新时间            |
| remark      | varchar(500) | NULLABLE                    | 备注                |

---

##### 字典类型表 - sys_dict_type

存放字典分组及类型定义。

| 列名        | 数据类型     | 约束                        | 说明                |
| ----------- | ------------ | --------------------------- | ------------------- |
| dict_id     | bigint(20)   | PRIMARY KEY``AUTO_INCREMENT | 字典主键            |
| dict_name   | varchar(100) | DEFAULT ''                  | 字典名称            |
| dict_type   | varchar(100) | DEFAULT ''``UNIQUE          | 字典类型标识        |
| status      | char(1)      | DEFAULT '0'                 | 状态（0正常 1停用） |
| create_by   | varchar(64)  | DEFAULT ''                  | 创建者              |
| create_time | datetime     | NULLABLE                    | 创建时间            |
| update_by   | varchar(64)  | DEFAULT ''                  | 更新者              |
| update_time | datetime     | NULLABLE                    | 更新时间            |
| remark      | varchar(500) | NULLABLE                    | 备注                |

---

#### 定时任务相关

##### 定时任务表 - sys_job

存储各定时任务的配置信息。

| 列名            | 数据类型     | 约束                        | 说明                                          |
| --------------- | ------------ | --------------------------- | --------------------------------------------- |
| job_id          | bigint(20)   | PRIMARY KEY``AUTO_INCREMENT | 任务ID                                        |
| job_name        | varchar(64)  | NOT NULL, DEFAULT ''        | 任务名称                                      |
| job_group       | varchar(64)  | NOT NULL, DEFAULT 'DEFAULT' | 任务组名称                                    |
| invoke_target   | varchar(500) | NOT NULL                    | 调用目标字符串                                |
| cron_expression | varchar(255) | DEFAULT ''                  | CRON 表达式                                   |
| misfire_policy  | varchar(20)  | DEFAULT '3'                 | 错误处理策略（1立即执行 2执行一次 3放弃执行） |
| concurrent      | char(1)      | DEFAULT '1'                 | 是否并发执行（0允许、1禁止）                  |
| status          | char(1)      | DEFAULT '0'                 | 任务状态（0正常 1暂停）                       |
| create_by       | varchar(64)  | NULLABLE                    | 创建者                                        |
| create_time     | datetime     | NULLABLE                    | 创建时间                                      |
| update_by       | varchar(64)  | NULLABLE                    | 更新者                                        |
| update_time     | datetime     | NULLABLE                    | 更新时间                                      |
| remark          | varchar(500) | NULLABLE                    | 备注信息                                      |

记录示例包括 Omada 同步任务及初始化任务。

##### 定时任务日志表 - sys_job_log

记录任务执行的日志信息。

| 列名           | 数据类型      | 约束                        | 说明                     |
| -------------- | ------------- | --------------------------- | ------------------------ |
| job_log_id     | bigint(20)    | PRIMARY KEY``AUTO_INCREMENT | 任务日志ID               |
| job_name       | varchar(64)   | NOT NULL                    | 任务名称                 |
| job_group      | varchar(64)   | NOT NULL                    | 任务组名称               |
| invoke_target  | varchar(500)  | NOT NULL                    | 调用目标字符串           |
| job_message    | varchar(500)  | 可空                        | 日志信息                 |
| status         | char(1)       | DEFAULT '0'                 | 执行状态（0成功、1失败） |
| exception_info | varchar(2000) | DEFAULT ''                  | 异常信息                 |
| create_time    | datetime      | NULLABLE                    | 执行时间                 |

---

#### 系统访问记录 - sys_logininfor

记录系统用户的登录访问情况。

| 列名        | 数据类型     | 约束                        | 说明                     |
| ----------- | ------------ | --------------------------- | ------------------------ |
| info_id     | bigint(20)   | PRIMARY KEY``AUTO_INCREMENT | 访问记录主键             |
| user_name   | varchar(50)  | DEFAULT ''                  | 用户账号                 |
| ipaddr      | varchar(128) | DEFAULT ''                  | 登录 IP 地址             |
| status      | char(1)      | DEFAULT '0'                 | 登录状态（0成功，1失败） |
| msg         | varchar(255) | DEFAULT ''                  | 提示信息                 |
| access_time | datetime     | NULLABLE                    | 访问时间                 |

辅助索引包括 status 及 access_time。

---

#### 菜单权限表 - sys_menu

存储系统菜单信息以及相应的访问权限标识。

| 列名        | 数据类型     | 约束                        | 说明                                  |
| ----------- | ------------ | --------------------------- | ------------------------------------- |
| menu_id     | bigint(20)   | PRIMARY KEY``AUTO_INCREMENT | 菜单 ID                               |
| menu_name   | varchar(50)  | NOT NULL                    | 菜单名称，如 'menu.system.management' |
| parent_id   | bigint(20)   | DEFAULT 0                   | 父级菜单 ID                           |
| order_num   | int(11)      | DEFAULT 0                   | 显示顺序                              |
| path        | varchar(200) | DEFAULT ''                  | 路由地址                              |
| component   | varchar(255) | DEFAULT NULL                | 组件路径                              |
| menu_type   | char(1)      |                             | 类型（M:目录, C:菜单, F:按钮）        |
| visible     | char(1)      | DEFAULT '0'                 | 菜单显示状态（0显示，1隐藏）          |
| status      | char(1)      | DEFAULT '0'                 | 菜单状态（0正常，1停用）              |
| perms       | varchar(100) | DEFAULT NULL                | 权限标识                              |
| icon        | varchar(100) | DEFAULT '#'                 | 菜单图标                              |
| create_by   | varchar(64)  | DEFAULT ''                  | 创建者                                |
| create_time | datetime     | NULLABLE                    | 创建时间                              |
| update_by   | varchar(64)  | DEFAULT ''                  | 更新者                                |
| update_time | datetime     | NULLABLE                    | 更新时间                              |
| remark      | varchar(500) | DEFAULT ''                  | 备注                                  |
| name        | varchar(30)  | DEFAULT NULL                | 菜单 key，作为前端标识使用            |

记录插入部分展示了系统管理、工具、账户管理、角色管理、菜单管理、部门管理、岗位管理、字典管理以及多项操作权限的菜单。

---

#### 操作日志记录 - sys_oper_log

记录用户在系统中的各项操作，用于安全审计。

| 列名           | 数据类型      | 约束                        | 说明                                   |
| -------------- | ------------- | --------------------------- | -------------------------------------- |
| oper_id        | bigint(20)    | PRIMARY KEY``AUTO_INCREMENT | 日志主键                               |
| title          | varchar(50)   | DEFAULT ''                  | 模块标题                               |
| business_type  | int(11)       | DEFAULT 0                   | 业务类型（0其它、1新增、2修改、3删除） |
| method         | varchar(100)  | DEFAULT ''                  | 方法名称                               |
| request_method | varchar(10)   | DEFAULT ''                  | 请求方式                               |
| oper_name      | varchar(50)   | DEFAULT ''                  | 操作人员                               |
| dept_name      | varchar(50)   | DEFAULT ''                  | 部门名称                               |
| oper_url       | varchar(255)  | DEFAULT ''                  | 请求 URL                               |
| oper_ip        | varchar(128)  | DEFAULT ''                  | IP 地址                                |
| oper_location  | varchar(255)  | DEFAULT ''                  | 操作地点                               |
| oper_param     | varchar(2000) | DEFAULT ''                  | 请求参数                               |
| json_result    | varchar(2000) | DEFAULT ''                  | 返回结果                               |
| status         | int(11)       | DEFAULT 0                   | 操作状态（0正常、1异常）               |
| error_msg      | varchar(2000) | DEFAULT ''                  | 错误消息                               |
| oper_time      | datetime      | NULLABLE                    | 操作时间                               |
| cost_time      | bigint(20)    | DEFAULT 0                   | 消耗时间（毫秒）                       |

附带建立了 business_type、status 及 oper_time 的索引。

---

#### 岗位信息表 - sys_post

记录系统中定义的岗位信息。

| 列名        | 数据类型     | 约束                        | 说明                 |
| ----------- | ------------ | --------------------------- | -------------------- |
| post_id     | bigint(20)   | PRIMARY KEY``AUTO_INCREMENT | 岗位 ID              |
| post_code   | varchar(64)  | NOT NULL                    | 岗位编码             |
| post_name   | varchar(50)  | NOT NULL                    | 岗位名称             |
| post_sort   | int(11)      | NOT NULL                    | 显示顺序             |
| status      | char(1)      | NOT NULL                    | 状态（0正常、1停用） |
| create_by   | varchar(64)  | DEFAULT ''                  | 创建者               |
| create_time | datetime     | NULLABLE                    | 创建时间             |
| update_by   | varchar(64)  | DEFAULT ''                  | 更新者               |
| update_time | datetime     | NULLABLE                    | 更新时间             |
| remark      | varchar(500) | DEFAULT NULL                | 备注                 |

示例记录定义了 administrator、manager、hr 及 user 岗位。

---

#### 用户信息表 - sys_user

存储用户账号及相关信息，实现系统登录和管理。

| 列名        | 数据类型     | 约束                        | 说明                                 |
| ----------- | ------------ | --------------------------- | ------------------------------------ |
| user_id     | bigint(20)   | PRIMARY KEY``AUTO_INCREMENT | 用户 ID                              |
| dept_id     | bigint(20)   | NULLABLE                    | 所属部门 ID                          |
| user_name   | varchar(30)  | NOT NULL                    | 用户账号                             |
| nick_name   | varchar(30)  | NOT NULL                    | 用户昵称                             |
| user_type   | varchar(2)   | DEFAULT '00'                | 用户类型（例如：00系统用户）         |
| email       | varchar(50)  | DEFAULT ''                  | 用户邮箱                             |
| phonenumber | varchar(11)  | DEFAULT ''                  | 手机号码                             |
| sex         | char(1)      | DEFAULT '0'                 | 性别（0男、1女、2未知）              |
| avatar      | varchar(100) | DEFAULT ''                  | 头像地址                             |
| password    | varchar(100) | DEFAULT ''                  | 密码（通常加密存储，如 bcrypt 结果） |
| status      | char(1)      | DEFAULT '0'                 | 帐号状态（0正常、1停用）             |
| del_flag    | char(1)      | DEFAULT '0'                 | 删除标志（0存在、2删除）             |
| login_ip    | varchar(128) | DEFAULT ''                  | 最后登录IP                           |
| login_date  | datetime     | NULLABLE                    | 最后登录时间                         |
| create_by   | varchar(64)  | DEFAULT ''                  | 创建者                               |
| create_time | datetime     | NULLABLE                    | 创建时间                             |
| update_by   | varchar(64)  | DEFAULT ''                  | 更新者                               |
| update_time | datetime     | NULLABLE                    | 更新时间                             |
| remark      | varchar(500) | DEFAULT NULL                | 备注                                 |

系统默认记录了超级管理员（super）、管理员（admin）等用户信息。

---

#### 用户与岗位关联表 - sys_user_post

用于关联用户与其所属岗位。

| 列名    | 数据类型   | 约束                   | 说明    |
| ------- | ---------- | ---------------------- | ------- |
| user_id | bigint(20) | PRIMARY KEY (联合主键) | 用户 ID |
| post_id | bigint(20) | PRIMARY KEY (联合主键) | 岗位 ID |

---

#### 用户与角色关联表 - sys_user_role

用于关联用户与分配的角色，实现权限管理。

| 列名    | 数据类型   | 约束                   | 说明    |
| ------- | ---------- | ---------------------- | ------- |
| user_id | bigint(20) | PRIMARY KEY (联合主键) | 用户 ID |
| role_id | bigint(20) | PRIMARY KEY (联合主键) | 角色 ID |

插入示例中，用户 1 分配了角色 1（Supervisor），用户 2 分配了角色 2（Administrator）。

---

#### 角色信息表 - sys_role

定义系统内各角色及其基本属性。

| 列名                | 数据类型     | 约束                        | 说明                                   |
| ------------------- | ------------ | --------------------------- | -------------------------------------- |
| role_id             | bigint(20)   | PRIMARY KEY``AUTO_INCREMENT | 角色 ID                                |
| role_name           | varchar(30)  | NOT NULL                    | 角色名称                               |
| role_key            | varchar(100) | NOT NULL                    | 角色权限字符串（作为 RBAC 标识）       |
| role_sort           | int(11)      | 可空                        | 显示顺序                               |
| data_scope          | char(1)      | DEFAULT '1'                 | 数据权限范围（例如全部、自定、部门等） |
| menu_check_strictly | tinyint(1)   | DEFAULT 1                   | 菜单树选择时是否关联显示               |
| dept_check_strictly | tinyint(1)   | DEFAULT 1                   | 部门树选择时是否关联显示               |
| status              | char(1)      | NOT NULL                    | 角色状态（0正常、1停用）               |
| del_flag            | char(1)      | DEFAULT '0'                 | 删除标志（0存在、2删除）               |
| create_by           | varchar(64)  | DEFAULT ''                  | 创建者                                 |
| create_time         | datetime     | NULLABLE                    | 创建时间                               |
| update_by           | varchar(64)  | DEFAULT ''                  | 更新者                                 |
| update_time         | datetime     | NULLABLE                    | 更新时间                               |
| remark              | varchar(500) | NULLABLE                    | 备注                                   |

示例中定义了 Supervisor、Administrator 及 User 角色。

---

#### 角色与部门关联表 - sys_role_dept

用于关联角色和部门，控制数据权限。

| 列名    | 数据类型   | 约束                   | 说明    |
| ------- | ---------- | ---------------------- | ------- |
| role_id | bigint(20) | PRIMARY KEY (联合主键) | 角色 ID |
| dept_id | bigint(20) | PRIMARY KEY (联合主键) | 部门 ID |

---

#### 角色与菜单关联表 - `sys_role_menu`

用于关联角色与菜单，实现系统权限的控制。

| 列名    | 数据类型   | 约束                   | 说明    |
| ------- | ---------- | ---------------------- | ------- |
| role_id | bigint(20) | PRIMARY KEY (联合主键) | 角色 ID |
| menu_id | bigint(20) | PRIMARY KEY (联合主键) | 菜单 ID |

### 4.1.4. 关系与数据流

- **用户-角色**：通过 `sys_user_role` 表实现，一个用户可以拥有多个角色。
- **角色-菜单**：通过 `sys_role_menu` 表关联角色与菜单，实现权限分配。
- **用户-岗位**：通过 `sys_user_post` 实现，方便对岗位信息管理。
- **角色-部门**：通过 `sys_role_dept` 表实现角色对部门数据的访问控制。
- **数据字典**：`sys_dict_type` 定义字典类型，`sys_dict_data` 存储各字典项，系统中各模块均可引用以保证数据一致性。

## 4.2. 用户平台数据库表设计

### 4.2.1. 数据库架构

- **数据库名称**：`wfc_user_db`
- **字符集**：utf8mb4
- **校对规则**：utf8mb4_general_ci

### 4.2.2. 用户平台表总览

---

| 表名              | 主键        | 备注说明            | 说明                                                    |
| ----------------- | ----------- | ------------------- | ------------------------------------------------------- |
| u_account         | id          | 用户平台-账户表     | 存储用户账户信息（余额、套餐、流量、时长等）            |
| u_account_package | id          | 用户平台-账户套餐表 | 存储账户对应的套餐信息，如套餐流量、时长、有效期等      |
| u_bill            | id          | 用户平台-账单表     | 存储账单记录，包括金额、状态、支付信息等                |
| u_bill_rule       | id          | 用户平台-计费规则表 | 存储计费规则，包括价格、流量、单位及状态等              |
| u_cdr             | id          | 用户平台_用户话单表 | 存储用户话单数据，如流量、速率、数据包信息等            |
| u_cdr_history     | id          | 用户平台_话单历史表 | 存储详细话单历史记录，包括时长、流量等                  |
| u_client          | id          | 用户平台_用户设备表 | 存储用户设备信息，如设备名称、mac 地址、设备类型等      |
| u_device          | id          | 用户平台_AP设备表   | 存储 AP（无线接入点）设备信息                           |
| u_order           | id          | 用户平台-订单表     | 存储订单信息，包括订单编号、订单金额及状态等            |
| u_package         | id          | 用户平台-套餐表     | 存储套餐信息，如套餐价格、流量、时长、设备数等          |
| u_payment         | id          | 用户平台-支付表     | 存储支付相关信息，包括支付名称、类型、网关、证书等      |
| u_rate_limit      | id          | 用户平台-带宽限速表 | 存储限速设置，如下行/上行限速及启用状态                 |
| u_recharge        | recharge_id | 用户平台_用户信息表 | 存储充值信息，关联 u_user 表；外键约束确保用户存在      |
| u_user            | user_id     | 用户平台_用户信息表 | 存储用户基本信息，包括用户名、昵称、邮件、密码等        |
| u_kyc             | kyc_id      | 用户平台_用户信息表 | 存储实名认证信息（KYC），包括真实姓名、证件类型、状态等 |

### 4.2.2. 表结构设计

---

#### 用户账号信息 - u_account

| 字段名称          | 数据类型      | 是否允许 NULL | 默认值 | 额外属性       | 注释                    |
| ----------------- | ------------- | ------------- | ------ | -------------- | ----------------------- |
| id                | bigint(20)    | NO            | –     | AUTO_INCREMENT | 主键                    |
| user_id           | bigint(20)    | YES           | NULL   | –             | 用户ID                  |
| balance           | decimal(18,4) | YES           | NULL   | –             | 余额                    |
| balance_used      | decimal(18,4) | YES           | NULL   | –             | 余额已使用              |
| package_id        | bigint(20)    | YES           | NULL   | –             | 套餐ID                  |
| start_time        | datetime      | YES           | NULL   | –             | 开始时间                |
| end_time          | datetime      | YES           | NULL   | –             | 结束时间                |
| traffic           | bigint(20)    | YES           | NULL   | –             | 流量                    |
| traffic_used      | bigint(20)    | YES           | NULL   | –             | 流量已使用              |
| duration          | bigint(20)    | YES           | NULL   | –             | 时长                    |
| duration_used     | bigint(20)    | YES           | NULL   | –             | 时长已使用              |
| client_num        | int(11)       | YES           | NULL   | –             | 在线设备数              |
| client_num_used   | int(11)       | YES           | NULL   | –             | 在线设备数已使用        |
| expired_time      | datetime      | YES           | NULL   | –             | 失效时间                |
| package_name      | varchar(64)   | YES           | NULL   | –             | 套餐名称                |
| period_num        | int(11)       | YES           | NULL   | –             | 有效期数                |
| period_type       | tinyint(4)    | YES           | NULL   | –             | 有效期类型              |
| price             | decimal(18,4) | YES           | NULL   | –             | 价格                    |
| remark            | varchar(500)  | YES           | NULL   | –             | 备注                    |
| rate_limit_enable | tinyint(1)    | YES           | 0      | –             | 带宽是否限制            |
| traffic_enable    | tinyint(1)    | YES           | 0      | –             | 流量是否限制            |
| duration_enable   | tinyint(1)    | YES           | 0      | –             | 时长是否限制            |
| client_num_enable | tinyint(1)    | YES           | 0      | –             | 在线设备数是否限制      |
| rate_limit_name   | varchar(32)   | YES           | NULL   | –             | 限速名称                |
| down_limit        | bigint(20)    | YES           | NULL   | –             | 下行限速                |
| down_limit_enable | tinyint(1)    | YES           | 0      | –             | 下行限速启用            |
| up_limit          | bigint(20)    | YES           | NULL   | –             | 上行限速                |
| up_limit_enable   | tinyint(1)    | YES           | 0      | –             | 上行限速启用            |
| del_flag          | tinyint(1)    | YES           | 0      | –             | 删除标志（0存在 1删除） |
| create_by         | bigint(20)    | YES           | NULL   | –             | 创建人                  |
| create_time       | datetime      | YES           | NULL   | –             | 创建时间                |
| update_by         | bigint(20)    | YES           | NULL   | –             | 更新人                  |
| update_time       | datetime      | YES           | NULL   | –             | 更新时间                |

---

#### 账号与套餐关系表 - u_account_package

| 字段名称          | 数据类型      | 是否允许 NULL | 默认值 | 额外属性       | 注释                    |
| ----------------- | ------------- | ------------- | ------ | -------------- | ----------------------- |
| id                | bigint(20)    | NO            | –     | AUTO_INCREMENT | 主键                    |
| account_id        | bigint(20)    | YES           | NULL   | –             | 账户ID                  |
| package_id        | bigint(20)    | YES           | NULL   | –             | 套餐ID                  |
| traffic           | bigint(20)    | YES           | NULL   | –             | 流量                    |
| duration          | bigint(20)    | YES           | NULL   | –             | 时长                    |
| client_num        | int(11)       | YES           | NULL   | –             | 在线设备数              |
| expired_time      | datetime      | YES           | NULL   | –             | 失效时间                |
| package_name      | varchar(64)   | YES           | NULL   | –             | 套餐名称                |
| period_num        | int(11)       | YES           | NULL   | –             | 有效期数                |
| period_type       | tinyint(4)    | YES           | NULL   | –             | 有效期类型              |
| price             | decimal(18,4) | YES           | NULL   | –             | 价格                    |
| remark            | varchar(500)  | YES           | NULL   | –             | 备注                    |
| rate_limit_enable | tinyint(1)    | YES           | 0      | –             | 带宽是否限制            |
| traffic_enable    | tinyint(1)    | YES           | 0      | –             | 流量是否限制            |
| duration_enable   | tinyint(1)    | YES           | 0      | –             | 时长是否限制            |
| client_num_enable | tinyint(1)    | YES           | 0      | –             | 在线设备数是否限制      |
| rate_limit_name   | varchar(32)   | YES           | NULL   | –             | 限速名称                |
| down_limit        | bigint(20)    | YES           | NULL   | –             | 下行限速                |
| down_limit_enable | tinyint(1)    | YES           | 0      | –             | 下行限速启用            |
| up_limit          | bigint(20)    | YES           | NULL   | –             | 上行限速                |
| up_limit_enable   | tinyint(1)    | YES           | 0      | –             | 上行限速启用            |
| del_flag          | tinyint(1)    | YES           | 0      | –             | 删除标志（0存在 1删除） |
| create_by         | bigint(20)    | YES           | NULL   | –             | 创建人                  |
| create_time       | datetime      | YES           | NULL   | –             | 创建时间                |
| update_by         | bigint(20)    | YES           | NULL   | –             | 更新人                  |
| update_time       | datetime      | YES           | NULL   | –             | 更新时间                |

---

#### 账单表 - u_bill

| 字段名称       | 数据类型      | 是否允许 NULL | 默认值 | 额外属性       | 注释                    |
| -------------- | ------------- | ------------- | ------ | -------------- | ----------------------- |
| id             | bigint(20)    | NO            | –     | AUTO_INCREMENT | 主键                    |
| user_id        | bigint(20)    | YES           | NULL   | –             | 用户ID                  |
| cdr_history_id | bigint(20)    | YES           | NULL   | –             | 话单记录ID              |
| type           | tinyint(4)    | YES           | NULL   | –             | 类型                    |
| amount         | decimal(18,4) | YES           | NULL   | –             | 金额                    |
| status         | tinyint(4)    | YES           | NULL   | –             | 状态                    |
| del_flag       | tinyint(1)    | YES           | 0      | –             | 删除标志（0存在 1删除） |
| create_by      | bigint(20)    | YES           | NULL   | –             | 创建人                  |
| create_time    | datetime      | YES           | NULL   | –             | 创建时间                |
| update_by      | bigint(20)    | YES           | NULL   | –             | 更新人                  |
| update_time    | datetime      | YES           | NULL   | –             | 更新时间                |

---

#### 计费规则表 - u_bill_rule

| 字段名称    | 数据类型      | 是否允许 NULL | 默认值 | 额外属性       | 注释                    |
| ----------- | ------------- | ------------- | ------ | -------------- | ----------------------- |
| id          | bigint(20)    | NO            | –     | AUTO_INCREMENT | 主键                    |
| price       | decimal(18,4) | YES           | NULL   | –             | 价格                    |
| traffic     | bigint(20)    | YES           | NULL   | –             | 流量                    |
| unit        | tinyint(4)    | YES           | NULL   | –             | 单位                    |
| enable      | tinyint(1)    | YES           | NULL   | –             | 是否启用                |
| del_flag    | tinyint(1)    | YES           | 0      | –             | 删除标志（0存在 1删除） |
| create_by   | bigint(20)    | YES           | NULL   | –             | 创建人                  |
| create_time | datetime      | YES           | NULL   | –             | 创建时间                |
| update_by   | bigint(20)    | YES           | NULL   | –             | 更新人                  |
| update_time | datetime      | YES           | NULL   | –             | 更新时间                |

---

#### 话单表 - u_cdr

| 字段名称              | 数据类型    | 是否允许 NULL | 默认值 | 额外属性       | 注释                              |
| --------------------- | ----------- | ------------- | ------ | -------------- | --------------------------------- |
| id                    | bigint(20)  | NO            | –     | AUTO_INCREMENT | CDR ID                            |
| user_id               | bigint(20)  | YES           | NULL   | –             | User ID link to u_user            |
| client_id             | bigint(20)  | YES           | NULL   | –             | Client ID                         |
| device_id             | bigint(20)  | YES           | NULL   | –             | Device ID                         |
| ssid                  | varchar(64) | YES           | NULL   | –             | Wireless SSID name                |
| rx_rate               | bigint(20)  | YES           | NULL   | –             | rx rate                           |
| tx_rate               | bigint(20)  | YES           | NULL   | –             | tx rate                           |
| down_packet           | bigint(20)  | YES           | NULL   | –             | Number of downstream packets      |
| up_packet             | bigint(20)  | YES           | NULL   | –             | Number of upstream packets        |
| traffic_down          | bigint(20)  | YES           | NULL   | –             | Downstream traffic (Byte)         |
| traffic_up            | bigint(20)  | YES           | NULL   | –             | Upstream traffic (Byte)           |
| rate_limit_profile_id | varchar(16) | YES           | NULL   | –             | Rate limit profile ID             |
| up_time               | bigint(20)  | YES           | NULL   | –             | Up time (unit: s)                 |
| last_seen_time        | bigint(20)  | YES           | NULL   | –             | Last found time, timestamp (ms)   |
| activity              | bigint(20)  | YES           | NULL   | –             | Activity download speed (Bytes/s) |
| del_flag              | char(1)     | YES           | '0'    | –             | delete flag                       |
| create_by             | bigint(20)  | YES           | NULL   | –             | creater                           |
| create_time           | datetime    | YES           | NULL   | –             | create time                       |
| update_by             | bigint(20)  | YES           | NULL   | –             | updater                           |
| update_time           | datetime    | YES           | NULL   | –             | update time                       |

---

#### 历史话单表 - u_cdr_history

| 字段名称     | 数据类型   | 是否允许 NULL | 默认值 | 额外属性       | 注释                      |
| ------------ | ---------- | ------------- | ------ | -------------- | ------------------------- |
| id           | bigint(20) | NO            | –     | AUTO_INCREMENT | CDR Detail ID             |
| cdr_id       | bigint(20) | YES           | NULL   | –             | CDR ID                    |
| traffic_down | bigint(20) | YES           | NULL   | –             | Downstream traffic (Byte) |
| traffic_up   | bigint(20) | YES           | NULL   | –             | Upstream traffic (Byte)   |
| start_time   | bigint(20) | YES           | NULL   | –             | Start time                |
| end_time     | bigint(20) | YES           | NULL   | –             | End time                  |
| duration     | bigint(20) | YES           | NULL   | –             | Duration(s)               |
| del_flag     | char(1)    | YES           | '0'    | –             | delete flag               |
| create_by    | bigint(20) | YES           | NULL   | –             | creater                   |
| create_time  | datetime   | YES           | NULL   | –             | create time               |
| update_by    | bigint(20) | YES           | NULL   | –             | updater                   |
| update_time  | datetime   | YES           | NULL   | –             | update time               |

---

#### 终端信息表 - u_client

| 字段名称           | 数据类型    | 是否允许 NULL | 默认值 | 额外属性       | 注释                   |
| ------------------ | ----------- | ------------- | ------ | -------------- | ---------------------- |
| id                 | bigint(20)  | NO            | –     | AUTO_INCREMENT | Client ID              |
| user_id            | bigint(20)  | YES           | NULL   | –             | User ID link to u_user |
| site_id            | varchar(64) | YES           | NULL   | –             | Site ID                |
| client_name        | varchar(64) | YES           | NULL   | –             | Client Name            |
| client_device_type | varchar(16) | YES           | NULL   | –             | Client device type     |
| client_mac         | varchar(32) | YES           | NULL   | –             | Client mac address     |
| del_flag           | char(1)     | YES           | '0'    | –             | delete flag            |
| create_by          | bigint(20)  | YES           | NULL   | –             | creater                |
| create_time        | datetime    | YES           | NULL   | –             | create time            |
| update_by          | bigint(20)  | YES           | NULL   | –             | updater                |
| update_time        | datetime    | YES           | NULL   | –             | update time            |

---

#### 设备表 - u_device

| 字段名称     | 数据类型    | 是否允许 NULL | 默认值 | 额外属性       | 注释                   |
| ------------ | ----------- | ------------- | ------ | -------------- | ---------------------- |
| id           | bigint(20)  | NO            | –     | AUTO_INCREMENT | Device ID              |
| user_id      | bigint(20)  | YES           | NULL   | –             | User ID link to u_user |
| device_name  | varchar(64) | YES           | NULL   | –             | Device Name            |
| device_ip    | varchar(16) | YES           | NULL   | –             | Device ip              |
| device_mac   | varchar(32) | YES           | NULL   | –             | Device mac             |
| device_model | varchar(32) | YES           | NULL   | –             | Device model           |
| del_flag     | char(1)     | YES           | '0'    | –             | delete flag            |
| create_by    | bigint(20)  | YES           | NULL   | –             | creater                |
| create_time  | datetime    | YES           | NULL   | –             | create time            |
| update_by    | bigint(20)  | YES           | NULL   | –             | updater                |
| update_time  | datetime    | YES           | NULL   | –             | update time            |

---

#### 订单表 - u_order

| 字段名称     | 数据类型      | 是否允许 NULL | 默认值 | 额外属性       | 注释                              |
| ------------ | ------------- | ------------- | ------ | -------------- | --------------------------------- |
| id           | bigint(20)    | NO            | –     | AUTO_INCREMENT | 主键                              |
| user_id      | bigint(20)    | YES           | NULL   | –             | 用户ID                            |
| package_id   | bigint(20)    | YES           | NULL   | –             | 套餐ID                            |
| payment_id   | bigint(20)    | YES           | NULL   | –             | 支付ID                            |
| order_no     | varchar(64)   | YES           | NULL   | –             | 订单编号                          |
| type         | tinyint(4)    | YES           | NULL   | –             | 订单类型（0套餐 1充值）           |
| order_amount | decimal(18,4) | YES           | NULL   | –             | 订单金额                          |
| status       | tinyint(4)    | YES           | NULL   | –             | 订单状态(0待支付 1已支付 2已取消) |
| del_flag     | tinyint(1)    | YES           | 0      | –             | 删除标志（0存在 1删除）           |
| create_by    | bigint(20)    | YES           | NULL   | –             | 创建人                            |
| create_time  | datetime      | YES           | NULL   | –             | 创建时间                          |
| update_by    | bigint(20)    | YES           | NULL   | –             | 更新人                            |
| update_time  | datetime      | YES           | NULL   | –             | 更新时间                          |

---

#### 套餐表 - u_package

| 字段名称          | 数据类型      | 是否允许 NULL | 默认值 | 额外属性       | 注释                    |
| ----------------- | ------------- | ------------- | ------ | -------------- | ----------------------- |
| id                | bigint(20)    | NO            | –     | AUTO_INCREMENT | 主键                    |
| rate_limit_id     | bigint(20)    | YES           | NULL   | –             | 带宽限速ID              |
| package_name      | varchar(64)   | YES           | NULL   | –             | 套餐名称                |
| period_num        | int(11)       | YES           | NULL   | –             | 有效期数                |
| period_type       | tinyint(4)    | YES           | NULL   | –             | 有效期类型              |
| price             | decimal(18,4) | YES           | NULL   | –             | 价格                    |
| traffic           | bigint(20)    | YES           | NULL   | –             | 流量                    |
| duration          | bigint(20)    | YES           | NULL   | –             | 时长                    |
| client_num        | int(11)       | YES           | NULL   | –             | 在线设备数              |
| remark            | varchar(500)  | YES           | NULL   | –             | 备注                    |
| rate_limit_enable | tinyint(1)    | YES           | 0      | –             | 带宽是否限制            |
| traffic_enable    | tinyint(1)    | YES           | 0      | –             | 流量是否限制            |
| duration_enable   | tinyint(1)    | YES           | 0      | –             | 时长是否限制            |
| client_num_enable | tinyint(1)    | YES           | 0      | –             | 在线设备数是否限制      |
| package_enable    | tinyint(1)    | YES           | 0      | –             | 套餐是否启用            |
| del_flag          | tinyint(1)    | YES           | 0      | –             | 删除标志（0存在 1删除） |
| create_by         | bigint(20)    | YES           | NULL   | –             | 创建人                  |
| create_time       | datetime      | YES           | NULL   | –             | 创建时间                |
| update_by         | bigint(20)    | YES           | NULL   | –             | 更新人                  |
| update_time       | datetime      | YES           | NULL   | –             | 更新时间                |

---

#### 支付表 - u_payment

| 字段名称       | 数据类型     | 是否允许 NULL | 默认值 | 额外属性       | 注释                          |
| -------------- | ------------ | ------------- | ------ | -------------- | ----------------------------- |
| id             | bigint(20)   | NO            | –     | AUTO_INCREMENT | 主键                          |
| name           | varchar(32)  | YES           | NULL   | –             | 支付名称                      |
| type           | tinyint(4)   | YES           | NULL   | –             | 类型（0支付宝 1微信 2信用卡） |
| appId          | varchar(32)  | YES           | NULL   | –             | 应用编号                      |
| server_url     | varchar(32)  | YES           | NULL   | –             | 支付网关                      |
| domain         | varchar(32)  | YES           | NULL   | –             | 外网访问项目的域名            |
| private_key    | varchar(128) | YES           | NULL   | –             | 应用私钥                      |
| public_key     | varchar(128) | YES           | NULL   | –             | 应用公钥                      |
| app_cert_path  | varchar(64)  | YES           | NULL   | –             | 应用公钥证书                  |
| cert_path      | varchar(64)  | YES           | NULL   | –             | 公钥证书                      |
| root_cert_path | varchar(64)  | YES           | NULL   | –             | 根证书                        |
| enable         | tinyint(1)   | YES           | NULL   | –             | 是否启用                      |
| del_flag       | tinyint(1)   | YES           | 0      | –             | 删除标志（0存在 1删除）       |
| create_by      | bigint(20)   | YES           | NULL   | –             | 创建人                        |
| create_time    | datetime     | YES           | NULL   | –             | 创建时间                      |
| update_by      | bigint(20)   | YES           | NULL   | –             | 更新人                        |
| update_time    | datetime     | YES           | NULL   | –             | 更新时间                      |

---

#### 限速表 - u_rate_limit

| 字段名称          | 数据类型    | 是否允许 NULL | 默认值 | 额外属性       | 注释                    |
| ----------------- | ----------- | ------------- | ------ | -------------- | ----------------------- |
| id                | bigint(20)  | NO            | –     | AUTO_INCREMENT | 主键                    |
| rate_limit_name   | varchar(32) | YES           | NULL   | –             | 限速名称                |
| down_limit        | bigint(20)  | YES           | NULL   | –             | 下行限速                |
| down_limit_enable | tinyint(1)  | YES           | 0      | –             | 下行限速启用            |
| up_limit          | bigint(20)  | YES           | NULL   | –             | 上行限速                |
| up_limit_enable   | tinyint(1)  | YES           | 0      | –             | 上行限速启用            |
| del_flag          | tinyint(1)  | YES           | 0      | –             | 删除标志（0存在 1删除） |
| create_by         | bigint(20)  | YES           |        |                |                         |

---

#### 充值表 - u_recharge

| 字段名称    | 数据类型              | 允许 NULL | 默认值   | 自增           | 注释                   |
| ----------- | --------------------- | --------- | -------- | -------------- | ---------------------- |
| recharge_id | bigint(20)            | NO        | —       | AUTO_INCREMENT | Recharge ID            |
| user_id     | bigint(20)            | YES       | NULL     |                | User ID link to u_user |
| fee         | double                | YES       | NULL     |                | —                     |
| status      | enum('unpaid','paid') | YES       | 'unpaid' |                | —                     |
| create_by   | varchar(32)           | YES       | ''       |                | create name            |
| create_time | datetime              | YES       | NULL     |                | create time            |

---

#### 用户信息表 - u_user

| 字段名称    | 数据类型     | 允许 NULL | 默认值 | 自增           | 注释                            |
| ----------- | ------------ | --------- | ------ | -------------- | ------------------------------- |
| user_id     | bigint(20)   | NO        | —     | AUTO_INCREMENT | 用户ID                          |
| dept_id     | bigint(20)   | YES       | NULL   |                | 部门ID                          |
| user_name   | varchar(30)  | NO        | —     |                | 用户账号                        |
| nick_name   | varchar(30)  | NO        | —     |                | 用户昵称                        |
| full_name   | varchar(64)  | YES       | NULL   |                | 用户姓名                        |
| user_type   | varchar(2)   | YES       | '00'   |                | 用户类型（00系统用户）          |
| email       | varchar(50)  | YES       | ''     |                | 用户邮箱                        |
| phonenumber | varchar(15)  | YES       | ''     |                | 手机号码                        |
| sex         | char(1)      | YES       | '0'    |                | 用户性别（0男 1女 2未知）       |
| avatar      | varchar(100) | YES       | ''     |                | 头像地址                        |
| password    | varchar(100) | YES       | ''     |                | 密码                            |
| age         | int(11)      | YES       | NULL   |                | 年龄                            |
| birth_date  | date         | YES       | NULL   |                | 出生日期                        |
| address     | varchar(255) | YES       | NULL   |                | 地址                            |
| status      | char(1)      | YES       | '0'    |                | 帐号状态（0正常 1停用）         |
| del_flag    | char(1)      | YES       | '0'    |                | 删除标志（0代表存在 2代表删除） |
| login_ip    | varchar(128) | YES       | ''     |                | 最后登录IP                      |
| login_date  | datetime     | YES       | NULL   |                | 最后登录时间                    |
| create_by   | varchar(64)  | YES       | ''     |                | 创建者                          |
| create_time | datetime     | YES       | NULL   |                | 创建时间                        |
| update_by   | varchar(64)  | YES       | ''     |                | 更新者                          |
| update_time | datetime     | YES       | NULL   |                | 更新时间                        |
| remark      | varchar(500) | YES       | NULL   |                | 备注                            |

---

#### KYC表 - u_kyc

| 字段名称         | 数据类型     | 允许 NULL | 默认值    | 自增           | 注释                                                                                                            |
| ---------------- | ------------ | --------- | --------- | -------------- | --------------------------------------------------------------------------------------------------------------- |
| kyc_id           | bigint(20)   | NO        | —        | AUTO_INCREMENT | ID                                                                                                              |
| user_id          | bigint(20)   | YES       | NULL      |                | link to user_id of u_user                                                                                       |
| real_name        | varchar(64)  | YES       | NULL      |                | —                                                                                                              |
| birth_date       | date         | YES       | NULL      |                | —                                                                                                              |
| id_type          | enum         | YES       | NULL      |                | identify type('DRIVERS_LICENSE','PASSPORT','RESIDENCE_PERMIT','STUDENT_ID','MEDICARE_CARD','BIRTH_CERTIFICATE') |
| id_file          | varchar(128) | YES       | ''        |                | ID file                                                                                                         |
| identify_picture | varchar(128) | YES       | NULL      |                | identify picture                                                                                                |
| status           | enum         | YES       | 'PENDING' |                | KYC Status: 1-VERIFIED/2-UNVERIFIED/3-PENDING/4-REJECTED                                                        |
| description      | varchar(255) | YES       | NULL      |                | —                                                                                                              |
| del_flag         | char(1)      | YES       | '0'       |                | 删除标志（0代表存在 2代表删除）                                                                                 |
| create_by        | varchar(64)  | YES       | ''        |                | 创建者                                                                                                          |
| create_time      | datetime     | YES       | NULL      |                | 创建时间                                                                                                        |
| update_by        | varchar(64)  | YES       | ''        |                | 更新者                                                                                                          |
| update_time      | datetime     | YES       | NULL      |                | 更新时间                                                                                                        |

---

# 5. 功能模块设计

## 5.1. 客户平台

1. **Dashboard**：主控制面板，提供系统概览。
2. **设备管理**：

   - **AP设备管理**：管理接入点设备。
   - **无线网络**：配置和管理无线网络。
   - **门户**：管理门户设置。
   - **终端设备管理**：管理连接的终端设备。
   - **监控/配置/启停/移除/纳管**：对设备进行监控、配置、启动、停止、移除和纳管操作。
3. **用户管理**：

   - **用户信息**：查看和管理用户信息。
   - **KYC状态**：管理用户的KYC（了解你的客户）状态，包括未KYC和已KYC。
   - **MAC**：管理设备的MAC地址。
   - **话单管理**：查询通话记录，包括时长和流量。
4. **账单管理**：

   - **查询**：查询账单信息。
   - **KYC审核**：审核用户的KYC信息，包括批准和拒绝操作。
5. **计费管理**：

   - **计费规则**：设置计费规则。
   - **限速设置**：配置网络限速。
   - **套餐管理**：管理计费套餐，包括查询、增加、修改和删除操作。
6. **系统管理**：

   - **账号管理**：管理系统账号。
   - **角色管理**：管理用户角色。
   - **菜单管理**：管理系统菜单。
   - **字典管理**：管理系统字典。
   - **日志管理**：管理系统日志。
   - **任务管理**：管理系统任务。

这些功能模块共同构成了一个全面的管理门户，支持设备、用户、账单和系统的综合管理。

![](image/admin-portal-features-2.png)

## 5.2 用户平台

1. **账号注册**：

   - **个人信息填写**：包括账户名、姓名、年龄、性别、电话、邮箱、地址等信息。
   - **协议声明和签署**：用户需同意相关协议。
   - **获取验证码**：通过邮箱获取验证码进行验证。
2. **登录**：

   - **忘记密码**：提供找回密码功能，通过邮箱重置密码。
3. **用户平台**：

   - **主页/仪表盘**：用户主界面，提供系统概览。
   - **套餐购买**：提供套餐购买功能，支持多种支付方式，包括支付宝和微信支付。
   - **余额充值**：提供余额充值功能，支持多种支付方式，包括支付宝和微信支付。
4. **终端设备**：

   - **当前设备**：查询当前连接的设备。
   - **历史设备**：查询历史连接的设备。
5. **充值服务**：

   - **余额充值**：提供余额充值功能。
   - **套餐办理**：办理新的套餐。
6. **账单**：

   - **充值记录**：查询充值记录。
   - **上网记录**：查询上网记录。
   - **套餐记录**：查询套餐记录。
7. **个人信息**：

   - **修改信息**：修改个人信息。
   - **修改密码**：修改账户密码。
   - **KYC认证**：进行KYC认证，需人工审核。

这些功能模块共同构成了一个全面的用户平台，支持用户注册、登录、套餐购买、设备管理、充值服务、账单查询和个人信息管理等功能。
![](image/user-portal-features-1.png)

# 6. 计费和套餐设计

1. **计算周期**：

   - 支持小时、天、月、年等不同的计算周期。
2. **时间限制**：

   - 时段限制：支持小时、天或不限。
   - 计算差值：根据时间限制计算差值。
3. **流量限制**：

   - 支持设置不同的流量限制（流量1、流量2等）或不限。
4. **设备数据限制**：

   - 支持设置不同的设备数量限制（数量1、数量2等）或不限。
5. **带宽限制**：

   - 支持设置不同的带宽限制（带宽1、带宽2等）或不限。
6. **计算规则**：

   - **计时**：支持按秒、分钟、小时、天或不限进行计时。
   - **计算类型**：当前仅支持预付费，单位可以是KB、MB等。
   - **等头流量处理**：支持向上取整或四舍五入。
   - **价格**：支持按天或月设置价格周期。
7. **封闭设置**：

   - 支持设置封闭金额和期初限制。
8. **规则设置**：

   - 当前仅支持单一规则（规则1），不支持多种规则选择。
9. **备注**：

   - 当前仅支持预付费模式。
   - 标注“NA”的选项当前不支持。

计费套餐和计费规则共同构成了一个灵活的计费套餐和规则配置系统，支持根据时间、流量、设备和带宽等不同维度进行计费规则的定制。
![](image/billing-package-1.png)
