793 lines
18 KiB
Markdown
793 lines
18 KiB
Markdown
# System 基础模块文档
|
||
|
||
## 概述
|
||
|
||
System 基础模块提供了完整的系统管理功能,包括系统配置、数据字典、操作日志、任务管理、城市数据和文件上传等功能。
|
||
|
||
## 控制器结构
|
||
|
||
```
|
||
app/Http/Controllers/System/
|
||
├── Admin/ # 后台管理控制器
|
||
│ ├── Config.php # 系统配置控制器
|
||
│ ├── Log.php # 操作日志控制器
|
||
│ ├── Dictionary.php # 数据字典控制器
|
||
│ ├── Task.php # 任务管理控制器
|
||
│ ├── City.php # 城市数据控制器
|
||
│ └── Upload.php # 文件上传控制器
|
||
└── Api/ # 公共API控制器
|
||
├── Config.php # 系统配置API
|
||
├── Dictionary.php # 数据字典API
|
||
├── City.php # 城市数据API
|
||
└── Upload.php # 文件上传API
|
||
```
|
||
|
||
### Admin 控制器
|
||
|
||
**命名空间**: `App\Http\Controllers\System\Admin`
|
||
|
||
**路由前缀**: `/admin`
|
||
|
||
**中间件**: `auth.check:admin` (后台管理认证)
|
||
|
||
### Api 控制器
|
||
|
||
**命名空间**: `App\Http\Controllers\System\Api`
|
||
|
||
**路由前缀**: `/api`
|
||
|
||
**中间件**: `auth:api` (API认证,部分接口为公开接口)
|
||
|
||
## 技术栈
|
||
|
||
- PHP 8.1+
|
||
- Laravel 11
|
||
- Redis 缓存
|
||
- Intervention Image (图像处理)
|
||
|
||
## 数据库表结构
|
||
|
||
### system_configs (系统配置表)
|
||
- `id`: 主键
|
||
- `group`: 配置分组(如:system, site, upload)
|
||
- `key`: 配置键(唯一)
|
||
- `value`: 配置值(JSON格式)
|
||
- `type`: 数据类型(string, number, boolean, array, image, file)
|
||
- `name`: 配置名称
|
||
- `description`: 配置描述
|
||
- `options`: 可选值(JSON数组)
|
||
- `sort`: 排序
|
||
- `status`: 状态(0:禁用, 1:启用)
|
||
- `created_at`, `updated_at`: 时间戳
|
||
|
||
### system_dictionaries (数据字典分类表)
|
||
- `id`: 主键
|
||
- `name`: 字典名称
|
||
- `code`: 字典编码(唯一)
|
||
- `description`: 描述
|
||
- `sort`: 排序
|
||
- `status`: 状态
|
||
- `created_at`, `updated_at`: 时间戳
|
||
|
||
### system_dictionary_items (数据字典项表)
|
||
- `id`: 主键
|
||
- `dictionary_id`: 字典ID
|
||
- `label`: 显示标签
|
||
- `value`: 实际值
|
||
- `sort`: 排序
|
||
- `status`: 状态
|
||
- `created_at`, `updated_at`: 时间戳
|
||
|
||
### system_logs (操作日志表)
|
||
- `id`: 主键
|
||
- `user_id`: 用户ID
|
||
- `username`: 用户名
|
||
- `module`: 模块
|
||
- `action`: 操作
|
||
- `method`: 请求方法
|
||
- `url`: 请求URL
|
||
- `ip`: IP地址
|
||
- `user_agent`: 用户代理
|
||
- `request_data`: 请求数据(JSON)
|
||
- `response_data`: 响应数据(JSON)
|
||
- `duration`: 执行时间(毫秒)
|
||
- `status_code`: 状态码
|
||
- `created_at`: 创建时间
|
||
|
||
### system_tasks (任务表)
|
||
- `id`: 主键
|
||
- `name`: 任务名称
|
||
- `code`: 任务编码(唯一)
|
||
- `command`: 命令
|
||
- `description`: 描述
|
||
- `cron_expression`: Cron表达式
|
||
- `status`: 状态(0:禁用, 1:启用, 2:运行中, 3:失败)
|
||
- `last_run_at`: 最后运行时间
|
||
- `next_run_at`: 下次运行时间
|
||
- `run_count`: 运行次数
|
||
- `fail_count`: 失败次数
|
||
- `last_message`: 最后运行消息
|
||
- `sort`: 排序
|
||
- `created_at`, `updated_at`: 时间戳
|
||
|
||
### system_cities (城市表)
|
||
- `id`: 主键
|
||
- `name`: 城市名称
|
||
- `code`: 城市编码
|
||
- `level`: 级别(1:省, 2:市, 3:区县)
|
||
- `parent_id`: 父级ID
|
||
- `adcode`: 行政区划编码
|
||
- `sort`: 排序
|
||
- `status`: 状态
|
||
- `created_at`, `updated_at`: 时间戳
|
||
|
||
## Admin API 接口文档
|
||
|
||
### 系统配置管理
|
||
|
||
#### 获取配置列表
|
||
- **接口**: `GET /admin/configs`
|
||
- **参数**:
|
||
- `page`: 页码(默认1)
|
||
- `page_size`: 每页数量(默认20)
|
||
- `keyword`: 搜索关键词
|
||
- `group`: 配置分组
|
||
- `status`: 状态
|
||
- `order_by`, `order_direction`: 排序
|
||
|
||
#### 获取所有配置分组
|
||
- **接口**: `GET /admin/configs/groups`
|
||
|
||
#### 按分组获取配置
|
||
- **接口**: `GET /admin/configs/all`
|
||
- **参数**:
|
||
- `group`: 配置分组(可选)
|
||
|
||
#### 获取配置详情
|
||
- **接口**: `GET /admin/configs/{id}`
|
||
|
||
#### 创建配置
|
||
- **接口**: `POST /admin/configs`
|
||
- **参数**:
|
||
```json
|
||
{
|
||
"group": "site",
|
||
"key": "site_name",
|
||
"name": "网站名称",
|
||
"description": "网站显示的名称",
|
||
"type": "string",
|
||
"value": "\"我的网站\"",
|
||
"options": null,
|
||
"sort": 1,
|
||
"status": 1
|
||
}
|
||
```
|
||
- **数据类型说明**:
|
||
- `string`: 字符串
|
||
- `number`: 数字
|
||
- `boolean`: 布尔值
|
||
- `array`: 数组
|
||
- `image`: 图片
|
||
- `file`: 文件
|
||
|
||
#### 更新配置
|
||
- **接口**: `PUT /admin/configs/{id}`
|
||
|
||
#### 删除配置
|
||
- **接口**: `DELETE /admin/configs/{id}`
|
||
|
||
#### 批量删除配置
|
||
- **接口**: `POST /admin/configs/batch-delete`
|
||
- **参数**:
|
||
```json
|
||
{
|
||
"ids": [1, 2, 3]
|
||
}
|
||
```
|
||
|
||
#### 批量更新配置状态
|
||
- **接口**: `POST /admin/configs/batch-status`
|
||
- **参数**:
|
||
```json
|
||
{
|
||
"ids": [1, 2, 3],
|
||
"status": 1
|
||
}
|
||
```
|
||
|
||
### 操作日志管理
|
||
|
||
#### 获取日志列表
|
||
- **接口**: `GET /admin/logs`
|
||
- **参数**:
|
||
- `page`, `page_size`
|
||
- `keyword`: 搜索关键词(用户名/模块/操作)
|
||
- `module`: 模块
|
||
- `action`: 操作
|
||
- `user_id`: 用户ID
|
||
- `start_date`: 开始日期
|
||
- `end_date`: 结束日期
|
||
- `order_by`, `order_direction`
|
||
|
||
#### 获取日志详情
|
||
- **接口**: `GET /admin/logs/{id}`
|
||
|
||
#### 删除日志
|
||
- **接口**: `DELETE /admin/logs/{id}`
|
||
|
||
#### 批量删除日志
|
||
- **接口**: `POST /admin/logs/batch-delete`
|
||
- **参数**:
|
||
```json
|
||
{
|
||
"ids": [1, 2, 3]
|
||
}
|
||
```
|
||
|
||
#### 清理日志
|
||
- **接口**: `POST /admin/logs/clear`
|
||
- **参数**:
|
||
```json
|
||
{
|
||
"days": 30
|
||
}
|
||
```
|
||
- **说明**: 删除指定天数之前的日志记录
|
||
|
||
#### 获取日志统计
|
||
- **接口**: `GET /admin/logs/statistics`
|
||
- **参数**:
|
||
- `start_date`: 开始日期
|
||
- `end_date`: 结束日期
|
||
- **返回**:
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"message": "success",
|
||
"data": {
|
||
"total_count": 1000,
|
||
"module_stats": [
|
||
{
|
||
"module": "user",
|
||
"count": 500
|
||
}
|
||
],
|
||
"user_stats": [
|
||
{
|
||
"user_id": 1,
|
||
"username": "admin",
|
||
"count": 800
|
||
}
|
||
]
|
||
}
|
||
}
|
||
```
|
||
|
||
### 数据字典管理
|
||
|
||
#### 获取字典列表
|
||
- **接口**: `GET /admin/dictionaries`
|
||
- **参数**:
|
||
- `page`, `page_size`, `keyword`, `status`, `order_by`, `order_direction`
|
||
|
||
#### 获取所有字典
|
||
- **接口**: `GET /admin/dictionaries/all`
|
||
|
||
#### 获取字典详情
|
||
- **接口**: `GET /admin/dictionaries/{id}`
|
||
|
||
#### 创建字典
|
||
- **接口**: `POST /admin/dictionaries`
|
||
- **参数**:
|
||
```json
|
||
{
|
||
"name": "用户状态",
|
||
"code": "user_status",
|
||
"description": "用户状态字典",
|
||
"sort": 1,
|
||
"status": 1
|
||
}
|
||
```
|
||
|
||
#### 更新字典
|
||
- **接口**: `PUT /admin/dictionaries/{id}`
|
||
|
||
#### 删除字典
|
||
- **接口**: `DELETE /admin/dictionaries/{id}`
|
||
|
||
#### 批量删除字典
|
||
- **接口**: `POST /admin/dictionaries/batch-delete`
|
||
|
||
#### 批量更新字典状态
|
||
- **接口**: `POST /admin/dictionaries/batch-status`
|
||
|
||
### 数据字典项管理
|
||
|
||
#### 获取字典项列表
|
||
- **接口**: `GET /admin/dictionary-items`
|
||
- **参数**:
|
||
- `page`, `page_size`
|
||
- `dictionary_id`: 字典ID(必需)
|
||
- `keyword`: 搜索关键词
|
||
- `status`, `order_by`, `order_direction`
|
||
|
||
#### 创建字典项
|
||
- **接口**: `POST /admin/dictionary-items`
|
||
- **参数**:
|
||
```json
|
||
{
|
||
"dictionary_id": 1,
|
||
"label": "正常",
|
||
"value": "1",
|
||
"sort": 1,
|
||
"status": 1
|
||
}
|
||
```
|
||
|
||
#### 更新字典项
|
||
- **接口**: `PUT /admin/dictionary-items/{id}`
|
||
|
||
#### 删除字典项
|
||
- **接口**: `DELETE /admin/dictionary-items/{id}`
|
||
|
||
#### 批量删除字典项
|
||
- **接口**: `POST /admin/dictionary-items/batch-delete`
|
||
|
||
#### 批量更新字典项状态
|
||
- **接口**: `POST /admin/dictionary-items/batch-status`
|
||
|
||
### 任务管理
|
||
|
||
#### 获取任务列表
|
||
- **接口**: `GET /admin/tasks`
|
||
- **参数**:
|
||
- `page`, `page_size`, `keyword`, `status`, `order_by`, `order_direction`
|
||
|
||
#### 获取所有任务
|
||
- **接口**: `GET /admin/tasks/all`
|
||
|
||
#### 获取任务详情
|
||
- **接口**: `GET /admin/tasks/{id}`
|
||
|
||
#### 创建任务
|
||
- **接口**: `POST /admin/tasks`
|
||
- **参数**:
|
||
```json
|
||
{
|
||
"name": "清理临时文件",
|
||
"code": "cleanup_temp_files",
|
||
"command": "cleanup:temp",
|
||
"description": "每天清理过期临时文件",
|
||
"cron_expression": "0 2 * * *",
|
||
"sort": 1,
|
||
"status": 1
|
||
}
|
||
```
|
||
- **Cron表达式说明**:
|
||
- 格式:`分 时 日 月 周`
|
||
- 示例:`0 2 * * *` (每天凌晨2点执行)
|
||
- 示例:`*/5 * * * *` (每5分钟执行一次)
|
||
|
||
#### 更新任务
|
||
- **接口**: `PUT /admin/tasks/{id}`
|
||
|
||
#### 删除任务
|
||
- **接口**: `DELETE /admin/tasks/{id}`
|
||
|
||
#### 批量删除任务
|
||
- **接口**: `POST /admin/tasks/batch-delete`
|
||
|
||
#### 批量更新任务状态
|
||
- **接口**: `POST /admin/tasks/batch-status`
|
||
|
||
#### 手动执行任务
|
||
- **接口**: `POST /admin/tasks/{id}/run`
|
||
- **说明**: 立即执行指定任务
|
||
|
||
#### 获取任务统计
|
||
- **接口**: `GET /admin/tasks/statistics`
|
||
- **返回**:
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"message": "success",
|
||
"data": {
|
||
"total": 10,
|
||
"enabled": 8,
|
||
"disabled": 2,
|
||
"running": 0,
|
||
"failed": 0
|
||
}
|
||
}
|
||
```
|
||
|
||
### 城市数据管理
|
||
|
||
#### 获取城市列表
|
||
- **接口**: `GET /admin/cities`
|
||
- **参数**:
|
||
- `page`, `page_size`, `keyword`, `level`, `parent_id`, `status`
|
||
- `order_by`, `order_direction`
|
||
|
||
#### 获取城市树
|
||
- **接口**: `GET /admin/cities/tree`
|
||
- **说明**: 从缓存中获取完整的三级城市树
|
||
|
||
#### 获取城市详情
|
||
- **接口**: `GET /admin/cities/{id}`
|
||
|
||
#### 获取子级城市
|
||
- **接口**: `GET /admin/cities/{id}/children`
|
||
- **说明**: 获取指定城市的下级城市
|
||
|
||
#### 获取所有省份
|
||
- **接口**: `GET /admin/cities/provinces`
|
||
|
||
#### 获取指定省份的城市
|
||
- **接口**: `GET /admin/cities/{provinceId}/cities`
|
||
|
||
#### 获取指定城市的区县
|
||
- **接口**: `GET /admin/cities/{cityId}/districts`
|
||
|
||
#### 创建城市
|
||
- **接口**: `POST /admin/cities`
|
||
- **参数**:
|
||
```json
|
||
{
|
||
"name": "北京市",
|
||
"code": "110000",
|
||
"level": 1,
|
||
"parent_id": 0,
|
||
"adcode": "110000",
|
||
"sort": 1,
|
||
"status": 1
|
||
}
|
||
```
|
||
- **级别说明**:
|
||
- `1`: 省级
|
||
- `2`: 市级
|
||
- `3`: 区县级
|
||
|
||
#### 更新城市
|
||
- **接口**: `PUT /admin/cities/{id}`
|
||
|
||
#### 删除城市
|
||
- **接口**: `DELETE /admin/cities/{id}`
|
||
|
||
#### 批量删除城市
|
||
- **接口**: `POST /admin/cities/batch-delete`
|
||
|
||
#### 批量更新城市状态
|
||
- **接口**: `POST /admin/cities/batch-status`
|
||
|
||
### 文件上传管理
|
||
|
||
#### 单文件上传
|
||
- **接口**: `POST /admin/upload`
|
||
- **参数**:
|
||
- `file`: 文件(multipart/form-data,最大10MB)
|
||
- `directory`: 存储目录(默认:uploads)
|
||
- `compress`: 是否压缩图片(默认:false)
|
||
- `quality`: 图片质量(1-100,默认:80)
|
||
- `width`: 压缩宽度(可选)
|
||
- `height`: 压缩高度(可选)
|
||
- **返回**:
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"message": "上传成功",
|
||
"data": {
|
||
"url": "http://example.com/uploads/2024/01/xxx.jpg",
|
||
"path": "uploads/2024/01/xxx.jpg",
|
||
"name": "xxx.jpg",
|
||
"size": 102400,
|
||
"mime_type": "image/jpeg"
|
||
}
|
||
}
|
||
```
|
||
|
||
#### 多文件上传
|
||
- **接口**: `POST /admin/upload/multiple`
|
||
- **参数**:
|
||
- `files`: 文件数组(multipart/form-data)
|
||
- 其他参数同单文件上传
|
||
- **返回**: 文件数组
|
||
|
||
#### Base64上传
|
||
- **接口**: `POST /admin/upload/base64`
|
||
- **参数**:
|
||
```json
|
||
{
|
||
"base64": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQ...",
|
||
"directory": "uploads",
|
||
"file_name": "image.jpg"
|
||
}
|
||
```
|
||
|
||
#### 删除文件
|
||
- **接口**: `POST /admin/upload/delete`
|
||
- **参数**:
|
||
```json
|
||
{
|
||
"path": "uploads/2024/01/xxx.jpg"
|
||
}
|
||
```
|
||
|
||
#### 批量删除文件
|
||
- **接口**: `POST /admin/upload/batch-delete`
|
||
- **参数**:
|
||
```json
|
||
{
|
||
"paths": [
|
||
"uploads/2024/01/xxx.jpg",
|
||
"uploads/2024/01/yyy.jpg"
|
||
]
|
||
}
|
||
```
|
||
|
||
## Public API 接口文档
|
||
|
||
### 系统配置 API
|
||
|
||
#### 获取所有配置
|
||
- **接口**: `GET /api/system/configs`
|
||
- **认证**: 公开接口(无需认证)
|
||
- **返回**:
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"message": "success",
|
||
"data": {
|
||
"site_name": "我的网站",
|
||
"site_logo": "/uploads/logo.png"
|
||
}
|
||
}
|
||
```
|
||
|
||
#### 按分组获取配置
|
||
- **接口**: `GET /api/system/configs/group`
|
||
- **参数**:
|
||
- `group`: 配置分组
|
||
- **认证**: 公开接口
|
||
|
||
#### 根据键获取配置
|
||
- **接口**: `GET /api/system/configs/key`
|
||
- **参数**:
|
||
- `key`: 配置键
|
||
- **认证**: 公开接口
|
||
|
||
### 数据字典 API
|
||
|
||
#### 获取所有字典
|
||
- **接口**: `GET /api/system/dictionaries`
|
||
- **认证**: 公开接口
|
||
- **返回**:
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"message": "success",
|
||
"data": [
|
||
{
|
||
"id": 1,
|
||
"code": "user_status",
|
||
"name": "用户状态",
|
||
"items": [...]
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
#### 根据编码获取字典项
|
||
- **接口**: `GET /api/system/dictionaries/code`
|
||
- **参数**:
|
||
- `code`: 字典编码
|
||
- **认证**: 公开接口
|
||
- **返回**:
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"message": "success",
|
||
"data": {
|
||
"code": "user_status",
|
||
"items": [
|
||
{"label": "正常", "value": "1"},
|
||
{"label": "禁用", "value": "0"}
|
||
]
|
||
}
|
||
}
|
||
```
|
||
|
||
#### 获取字典详情
|
||
- **接口**: `GET /api/system/dictionaries/{id}`
|
||
- **认证**: 公开接口
|
||
|
||
### 城市数据 API
|
||
|
||
#### 获取城市树
|
||
- **接口**: `GET /api/system/cities/tree`
|
||
- **认证**: 公开接口
|
||
- **说明**: 从缓存中获取完整的三级城市树
|
||
|
||
#### 获取所有省份
|
||
- **接口**: `GET /api/system/cities/provinces`
|
||
- **认证**: 公开接口
|
||
|
||
#### 获取指定省份的城市
|
||
- **接口**: `GET /api/system/cities/{provinceId}/cities`
|
||
- **认证**: 公开接口
|
||
|
||
#### 获取指定城市的区县
|
||
- **接口**: `GET /api/system/cities/{cityId}/districts`
|
||
- **认证**: 公开接口
|
||
|
||
#### 获取城市详情
|
||
- **接口**: `GET /api/system/cities/{id}`
|
||
- **认证**: 公开接口
|
||
|
||
### 文件上传 API
|
||
|
||
#### 单文件上传
|
||
- **接口**: `POST /api/system/upload`
|
||
- **认证**: 需要认证(`auth:api`)
|
||
- **参数**: 同Admin上传接口
|
||
|
||
#### 多文件上传
|
||
- **接口**: `POST /api/system/upload/multiple`
|
||
- **认证**: 需要认证(`auth:api`)
|
||
- **参数**: 同Admin上传接口
|
||
|
||
#### Base64上传
|
||
- **接口**: `POST /api/system/upload/base64`
|
||
- **认证**: 需要认证(`auth:api`)
|
||
- **参数**: 同Admin上传接口
|
||
|
||
## 缓存机制
|
||
|
||
### 城市数据缓存
|
||
|
||
- **缓存键**: `city:tree`
|
||
- **过期时间**: 永久(手动清除)
|
||
- **更新时机**: 城市数据增删改时自动清除
|
||
|
||
### 系统配置缓存
|
||
|
||
- **缓存键**: `config:all` 或 `config:group:{group}`
|
||
- **过期时间**: 60分钟
|
||
- **更新时机**: 配置数据增删改时自动清除
|
||
|
||
### 数据字典缓存
|
||
|
||
- **缓存键**: `dictionary:all` 或 `dictionary:code:{code}`
|
||
- **过期时间**: 60分钟
|
||
- **更新时机**: 字典数据增删改时自动清除
|
||
|
||
## 服务层说明
|
||
|
||
### ConfigService
|
||
|
||
提供系统配置的CRUD操作和缓存管理。
|
||
|
||
**主要方法**:
|
||
- `getList()`: 获取配置列表
|
||
- `getByGroup()`: 按分组获取配置
|
||
- `getConfigValue()`: 获取配置值
|
||
- `create()`: 创建配置
|
||
- `update()`: 更新配置
|
||
- `delete()`: 删除配置
|
||
|
||
### LogService
|
||
|
||
提供操作日志的记录、查询和清理功能。
|
||
|
||
**主要方法**:
|
||
- `getList()`: 获取日志列表
|
||
- `getStatistics()`: 获取统计数据
|
||
- `clearLogs()`: 清理过期日志
|
||
- `record()`: 记录日志(由中间件自动调用)
|
||
|
||
### DictionaryService
|
||
|
||
提供数据字典和字典项的管理功能。
|
||
|
||
**主要方法**:
|
||
- `getList()`: 获取字典列表
|
||
- `getItemsByCode()`: 按编码获取字典项
|
||
- `create()`: 创建字典
|
||
- `createItem()`: 创建字典项
|
||
- `update()`: 更新字典
|
||
- `updateItem()`: 更新字典项
|
||
|
||
### TaskService
|
||
|
||
提供任务的管理和执行功能。
|
||
|
||
**主要方法**:
|
||
- `getList()`: 获取任务列表
|
||
- `run()`: 手动执行任务
|
||
- `getStatistics()`: 获取任务统计
|
||
- `updateStatus()`: 更新任务状态
|
||
|
||
### CityService
|
||
|
||
提供城市数据的管理和缓存功能。
|
||
|
||
**主要方法**:
|
||
- `getList()`: 获取城市列表
|
||
- `getCachedTree()`: 从缓存获取城市树
|
||
- `getProvinces()`: 获取省份列表
|
||
- `getCities()`: 获取城市列表
|
||
- `getDistricts()`: 获取区县列表
|
||
|
||
### UploadService
|
||
|
||
提供文件上传和删除功能。
|
||
|
||
**主要方法**:
|
||
- `upload()`: 单文件上传
|
||
- `uploadMultiple()`: 多文件上传
|
||
- `uploadBase64()`: Base64上传
|
||
- `delete()`: 删除文件
|
||
- `compressImage()`: 图片压缩
|
||
|
||
## 初始化数据
|
||
|
||
```bash
|
||
# 执行迁移
|
||
php artisan migrate
|
||
|
||
# 填充初始数据
|
||
php artisan db:seed --class=SystemSeeder
|
||
```
|
||
|
||
初始数据包括:
|
||
- 基础系统配置
|
||
- 常用数据字典
|
||
- 全国省市区数据
|
||
|
||
## 注意事项
|
||
|
||
1. **Swoole环境注意事项**:
|
||
- 文件上传时注意临时文件清理
|
||
- 使用Redis缓存避免内存泄漏
|
||
- 图片压缩使用协程安全的方式
|
||
|
||
2. **安全注意事项**:
|
||
- 文件上传必须验证文件类型和大小
|
||
- 敏感操作必须记录日志
|
||
- 配置数据不要存储密码等敏感信息
|
||
|
||
3. **性能优化**:
|
||
- 城市数据使用Redis缓存
|
||
- 大量日志数据定期清理
|
||
- 图片上传时进行压缩处理
|
||
|
||
4. **文件上传**:
|
||
- 限制文件上传大小
|
||
- 验证文件MIME类型
|
||
- 定期清理临时文件
|
||
|
||
## 扩展建议
|
||
|
||
1. **日志告警**: 添加日志异常告警功能
|
||
2. **配置加密**: 敏感配置数据加密存储
|
||
3. **多语言**: 支持配置数据的多语言
|
||
4. **任务监控**: 添加任务执行监控和通知
|
||
5. **CDN集成**: 文件上传支持CDN分发
|
||
|
||
## 常见问题
|
||
|
||
### Q: 如何清除城市数据缓存?
|
||
A: 调用 `CityService::clearCache()` 方法或运行 `php artisan cache:forget city:tree`。
|
||
|
||
### Q: 图片上传后如何压缩?
|
||
A: 上传时设置 `compress=true` 和 `quality` 参数,系统会自动压缩。
|
||
|
||
### Q: 如何配置定时任务?
|
||
A: 在Admin后台创建任务,设置Cron表达式,系统会自动调度执行。
|
||
|
||
### Q: 数据字典如何使用?
|
||
A: 通过Public API获取字典数据,前端根据数据渲染下拉框等组件。
|
||
|
||
### Q: 日志数据过多如何处理?
|
||
A: 定期使用 `/admin/logs/clear` 接口清理过期日志,或在后台设置自动清理任务。
|