82 lines
2.2 KiB
Markdown
82 lines
2.2 KiB
Markdown
# 任务007:能耗管理
|
||
|
||
## 目标
|
||
|
||
实现电表数据统计,柜子/项目维度的能耗分析,趋势图表。
|
||
|
||
## 后端API
|
||
|
||
```
|
||
GET /api/energy-stats/summary # 总览(今日/本月总能耗、电费估算)
|
||
GET /api/energy-stats/cabinets # 柜子能耗排行
|
||
GET /api/energy-stats/projects # 项目能耗统计
|
||
GET /api/energy-stats/trend # 趋势数据(日/周/月)
|
||
GET /api/energy-stats/export # 导出能耗报表(异步)
|
||
```
|
||
|
||
### 响应示例
|
||
|
||
**总览:**
|
||
```json
|
||
{
|
||
"today_energy": 3750.50,
|
||
"month_energy": 85200.00,
|
||
"estimated_cost": 68160.00,
|
||
"cabinet_count": 128,
|
||
"online_count": 125
|
||
}
|
||
```
|
||
|
||
**柜子排行:**
|
||
```json
|
||
[
|
||
{"cabinet_id": 1, "abstract_id": "10-00000001", "today_energy": 320.5},
|
||
{"cabinet_id": 2, "abstract_id": "10-00000002", "today_energy": 285.0}
|
||
]
|
||
```
|
||
|
||
**趋势(日):**
|
||
```json
|
||
[
|
||
{"date": "2026-07-01", "energy": 3750.50, "charge_count": 423},
|
||
{"date": "2026-06-30", "energy": 3680.20, "charge_count": 415}
|
||
]
|
||
```
|
||
|
||
## 前端页面
|
||
|
||
### 能耗管理页
|
||
|
||
**顶部数据卡片:**
|
||
```
|
||
┌─────────┐ ┌───────── ┌─────────┐ ┌─────────
|
||
│今日能耗 │ │本月能耗 │ │电费估算 │ │在线柜子 │
|
||
│3,750 kWh│ │85,200 kWh│ │¥68,160 │ │ 125 │
|
||
└───────── └─────────┘ └───────── └─────────┘
|
||
```
|
||
|
||
**柜子能耗排行:**
|
||
- 表格显示柜子ID、今日能耗、本月能耗
|
||
- 支持排序
|
||
|
||
**项目能耗统计:**
|
||
- 表格显示项目名、柜子数、今日能耗、本月能耗
|
||
|
||
**趋势图:**
|
||
- 日/周/月切换
|
||
- 折线图显示能耗趋势
|
||
- 柱状图显示充电次数
|
||
|
||
**导出按钮:**
|
||
- 异步导出Excel
|
||
- 文件名:`能耗统计_2026年7月.xlsx`
|
||
|
||
## 质量约束
|
||
|
||
1. 完成代码后执行 `cargo check` + `tsc --noEmit`,零报错零警告
|
||
2. 分层拆分,单函数≤80行,命名语义化,完整注释
|
||
3. 所有外部IO/网络请求异常捕获,禁止裸panic
|
||
4. 分支逻辑全覆盖,不遗漏兜底分支
|
||
5. 常量抽离,不使用废弃API
|
||
6. Rust内存安全,React函数组件+Hooks
|