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. 导出任务异步执行,不阻塞请求
|