114 lines
3.2 KiB
Markdown
114 lines
3.2 KiB
Markdown
# 任务006:充电记录与设备日志
|
||
|
||
## 目标
|
||
|
||
实现充电记录查询/导出、设备日志查看、异步导出下载中心。
|
||
|
||
## 后端API
|
||
|
||
### 充电记录
|
||
```
|
||
GET /api/charge-records # 充电记录列表
|
||
?cabinet_id=xxx&cabin_board_id=xxx&compartment_id=xxx
|
||
&start_time=xxx&end_time=xxx&page=1&page_size=20
|
||
|
||
GET /api/charge-records/export # 导出充电记录(异步)
|
||
?cabinet_id=xxx&start_time=xxx&end_time=xxx
|
||
```
|
||
|
||
### 设备日志
|
||
```
|
||
GET /api/device-logs # 设备日志列表
|
||
?cabinet_id=xxx&log_type=xxx
|
||
&start_time=xxx&end_time=xxx&page=1&page_size=20
|
||
```
|
||
|
||
### 下载中心
|
||
```
|
||
GET /api/downloads # 下载任务列表
|
||
GET /api/downloads/:id # 获取下载链接
|
||
POST /api/downloads/cleanup # 清理过期文件
|
||
```
|
||
|
||
## 异步导出流程
|
||
|
||
```
|
||
1. 用户点击"导出" → POST /api/charge-records/export
|
||
2. 后端创建下载任务,返回任务ID
|
||
3. 后台异步生成Excel文件
|
||
4. 用户到"下载中心"查看进度
|
||
5. 完成后点击下载
|
||
```
|
||
|
||
### 下载任务表
|
||
```sql
|
||
CREATE TABLE download_tasks (
|
||
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
||
user_id BIGINT NOT NULL,
|
||
task_type VARCHAR(50) NOT NULL COMMENT 'charge_records/energy_stats',
|
||
status TINYINT DEFAULT 0 COMMENT '0排队 1处理中 2完成 3失败',
|
||
file_path VARCHAR(500) COMMENT '文件路径',
|
||
file_name VARCHAR(200) COMMENT '文件名',
|
||
progress INT DEFAULT 0 COMMENT '进度百分比',
|
||
error_message TEXT,
|
||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
completed_at TIMESTAMP,
|
||
FOREIGN KEY (user_id) REFERENCES users(id)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||
```
|
||
|
||
### 文件名智能生成
|
||
```
|
||
充电记录_项目A_20260701-20260731.xlsx
|
||
能耗统计_组织B_2026年7月.xlsx
|
||
设备日志_柜子10-00000001_20260701.xlsx
|
||
```
|
||
|
||
## 前端页面
|
||
|
||
### 充电记录页
|
||
|
||
**顶部过滤:**
|
||
- 柜子下拉(可选)
|
||
- 仓板下拉(可选,依赖柜子)
|
||
- 通道下拉(可选,依赖仓板)
|
||
- 时间范围选择器
|
||
- 查询按钮 + 导出按钮
|
||
|
||
**列表显示:**
|
||
| 柜子ID | 仓板 | 通道 | 开始时间 | 结束时间 | 充电量 | 最高温度 | 状态 |
|
||
|--------|------|------|----------|----------|--------|----------|------|
|
||
|
||
**分页:** 每页20条
|
||
|
||
### 设备日志页
|
||
|
||
**顶部过滤:**
|
||
- 柜子下拉
|
||
- 日志类型(状态上报/故障/告警/停电)
|
||
- 时间范围
|
||
|
||
**列表显示:**
|
||
| 柜子ID | 类型 | 内容摘要 | 时间 |
|
||
|--------|------|----------|------|
|
||
|
||
### 下载中心
|
||
|
||
**位置:** 充电记录页/能耗管理页的"导出"按钮旁
|
||
|
||
**弹窗显示:**
|
||
| 任务名称 | 状态 | 进度 | 操作 |
|
||
|----------|------|------|------|
|
||
| 充电记录_项目A... | 处理中 | 65% | 等待... |
|
||
| 能耗统计_组织B... | 完成 | 100% | [下载] |
|
||
|
||
## 质量约束
|
||
|
||
1. 完成代码后执行 `cargo check` + `tsc --noEmit`,零报错零警告
|
||
2. 分层拆分,单函数≤80行,命名语义化,完整注释
|
||
3. 所有外部IO/网络请求异常捕获,禁止裸panic
|
||
4. 分支逻辑全覆盖,不遗漏兜底分支
|
||
5. 常量抽离,不使用废弃API
|
||
6. Rust内存安全,React函数组件+Hooks
|
||
7. 导出任务异步执行,不阻塞请求
|