
# WANFi Control and Billing System 数据库设计文档

## 1. 概述

本数据库设计文档描述了 WANFi Control and Billing System 的数据库结构。系统采用 MySQL 数据库，字符集为 utf8mb4，主要涉及系统配置、部门、设备、数据字典、定时任务、日志、菜单、角色以及用户管理等模块。

## 2. 数据库架构

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

---

## 3. 表结构及说明

### 3.1 参数配置表 - `sys_config`

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

| 列名         | 数据类型      | 约束            | 说明                                     |
|--------------|---------------|-----------------|------------------------------------------|
| config_id    | int(11)       | PRIMARY KEY<br/>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        | 备注                                     |

记录示例：初始化账号密码、开启用户注册功能、设置登录 IP 黑名单等。

---

### 3.2 部门表 - `sys_dept`

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

| 列名         | 数据类型      | 约束                          | 说明                           |
|--------------|---------------|-------------------------------|--------------------------------|
| dept_id      | bigint(20)    | PRIMARY KEY<br/>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)   | 可空                          | 负责人                         |
| phone        | varchar(11)   | 可空                          | 联系电话                       |
| email        | varchar(50)   | 可空                          | 邮箱                           |
| 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                      | 备注                           |

插入示例中创建了 ROOT 及其子部门。

---

### 3.3 设备表 - `sys_device`

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

| 列名             | 数据类型      | 约束 & 默认值         | 说明                     |
|------------------|---------------|-----------------------|--------------------------|
| id               | bigint(20)    | PRIMARY KEY<br/>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              | 授权状态                 |
| ...              | ...           | ...                   | 其它详细字段             |

表中记录了设备相关信息及状态等。

---

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

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

| 列名         | 数据类型      | 约束                          | 说明                        |
|--------------|---------------|-------------------------------|-----------------------------|
| dict_code    | bigint(20)    | PRIMARY KEY<br/>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)  | 可为空                        | 样式属性（扩展）             |
| list_class   | varchar(100)  | 可为空                        | 列表显示样式                |
| 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)  | 可空                          | 备注                        |

示例记录包括用户性别、菜单显示与隐藏、系统开关、操作类型等配置项。

---

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

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

| 列名         | 数据类型      | 约束                          | 说明                          |
|--------------|---------------|-------------------------------|-------------------------------|
| dict_id      | bigint(20)    | PRIMARY KEY<br/>AUTO_INCREMENT| 字典主键                      |
| dict_name    | varchar(100)  | DEFAULT ''                    | 字典名称                      |
| dict_type    | varchar(100)  | DEFAULT ''<br/>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)  | 可空                          | 备注                          |

示例记录包括“User Gender”、“Menu Status”、 “System Switch”等类型。

---

### 3.6 定时任务相关

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

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

| 列名             | 数据类型       | 约束                          | 说明                                       |
|------------------|----------------|-------------------------------|--------------------------------------------|
| job_id           | bigint(20)     | PRIMARY KEY<br/>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暂停）                      |
| ...              | ...            | ...                           | 其它字段，如创建与更新时间等               |

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

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

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

| 列名         | 数据类型       | 约束                          | 说明                    |
|--------------|----------------|-------------------------------|-------------------------|
| job_log_id   | bigint(20)     | PRIMARY KEY<br/>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                      | 执行时间                |

---

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

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

| 列名         | 数据类型      | 约束                          | 说明                           |
|--------------|---------------|-------------------------------|--------------------------------|
| info_id      | bigint(20)    | PRIMARY KEY<br/>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。

---

### 3.8 菜单权限表 - `sys_menu`

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

| 列名         | 数据类型      | 约束                          | 说明                                                        |
|--------------|---------------|-------------------------------|-------------------------------------------------------------|
| menu_id      | bigint(20)    | PRIMARY KEY<br/>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，作为前端标识使用                                   |

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

---

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

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

| 列名         | 数据类型      | 约束                          | 说明                                               |
|--------------|---------------|-------------------------------|----------------------------------------------------|
| oper_id      | bigint(20)    | PRIMARY KEY<br/>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 的索引。

---

### 3.10 岗位信息表 - `sys_post`

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

| 列名         | 数据类型      | 约束                          | 说明                      |
|--------------|---------------|-------------------------------|---------------------------|
| post_id      | bigint(20)    | PRIMARY KEY<br/>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 岗位。

---

### 3.11 用户信息表 - `sys_user`

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

| 列名         | 数据类型      | 约束                          | 说明                                   |
|--------------|---------------|-------------------------------|----------------------------------------|
| user_id      | bigint(20)    | PRIMARY KEY<br/>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）等用户信息。

---

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

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

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

---

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

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

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

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

---

### 3.14 角色信息表 - `sys_role`

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

| 列名        | 数据类型      | 约束                          | 说明                                 |
|-------------|---------------|-------------------------------|--------------------------------------|
| role_id     | bigint(20)    | PRIMARY KEY<br/>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 角色。

---

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

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

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

---

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

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

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

示例中，角色 2（Administrator）关联了大量菜单权限。

---

## 4. 关系与数据流

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

---

## 5. 索引及性能优化

各表的主键和部分常用查询字段（如 `status`、`access_time`、`user_name` 等）均建立索引，确保数据查询速度满足系统需求。

---

## 6. 其他说明

- 表中的日期时间字段（如 `create_time`、`update_time` 等）建议统一使用 UTC+0 或转换为本地时区。  
- 部分字段如密码应进行加密存储。  
- 删除标志和状态字段为业务逻辑提供支持，后续可以根据需要进行索引和分区优化。

---

以上文档基于 SQL 脚本提取，适用于当前项目数据库设计说明。你可以进一步利用 ER 图工具生成图形化数据模型图，并补充业务流程说明。