3.2 KiB
3.2 KiB
任务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. 完成后点击下载
下载任务表
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% | [下载] |
质量约束
- 完成代码后执行
cargo check+tsc --noEmit,零报错零警告 - 分层拆分,单函数≤80行,命名语义化,完整注释
- 所有外部IO/网络请求异常捕获,禁止裸panic
- 分支逻辑全覆盖,不遗漏兜底分支
- 常量抽离,不使用废弃API
- Rust内存安全,React函数组件+Hooks
- 导出任务异步执行,不阻塞请求