charging-cabinet/tasks/006-charge-records-and-logs.md
2026-07-02 05:38:01 +08:00

3.2 KiB
Raw Blame History

任务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% [下载]

质量约束

  1. 完成代码后执行 cargo check + tsc --noEmit,零报错零警告
  2. 分层拆分单函数≤80行命名语义化完整注释
  3. 所有外部IO/网络请求异常捕获禁止裸panic
  4. 分支逻辑全覆盖,不遗漏兜底分支
  5. 常量抽离不使用废弃API
  6. Rust内存安全React函数组件+Hooks
  7. 导出任务异步执行,不阻塞请求