Files
fullstack-starter/README.md
T

131 lines
4.3 KiB
Markdown

# battery-soh
电池健康运营看板,用于接入客户现有设备数据,持续呈现电量状态、健康预测、风险分布与维护建议。系统以只读方式连接客户数据库,不改动生产数据;当健康预测暂不可用时,页面会明确显示不可用状态,避免用误导性数值替代真实结果。
## 产品能力
- **健康总览**:聚合展示设备规模、平均健康度、30/90 天趋势与预警设备占比。
- **风险识别**:按健康度、低电量、充电状态与预测风险生成重点关注设备清单。
- **实时明细**:支持按设备名称、编号、电量与充电状态筛选设备,快速定位需要排查的对象。
- **维护建议**:基于当前可用数据给出巡检、复查与优先处理建议。
- **可信展示**:缺少预测结果时显示“预测不可用”,不会将缺失值渲染为 `0%`
## 数据接入
系统接入客户现有 MySQL 数据源,业务运行时仅执行只读查询。需要配置:
```bash
DATABASE_URL=mysql://user:password@host:3306/database
```
客户设备表:`ls_battery_info`
| 字段名 | 数据类型 | 业务含义 |
| --- | --- | --- |
| `id` | `int(11)` auto increment | 记录 ID |
| `user_id` | `int(11)` | 用户 ID |
| `mac` | `varchar(50)` | 设备编号 |
| `dev_model` | `varchar(20)` | 设备型号 |
| `dev_name` | `varchar(50)` | 设备名称 |
| `is_low_power` | `varchar(10)` | 是否低电量:`true` / `false` |
| `power_status` | `tinyint(4)` | `0` 未充电,`1` 充电中,`2` 已充满 |
| `power` | `tinyint(4)` | 当前电量 `0~100` |
| `create_time` | `datetime` | 采集时间 |
| `remark` | `varchar(500)` | 备注 |
## 健康预测
看板需要接入外部 SoH 预测服务:
```bash
SOH_PREDICTION_API_BASE_URL=http://127.0.0.1:8000
SOH_PREDICTION_CACHE_TTL_SECONDS=86400
SOH_PREDICTION_TIMEOUT_MS=10000
```
服务端会调用 `${SOH_PREDICTION_API_BASE_URL}/predict`,使用返回的当前健康度、30 天趋势、90 天趋势和风险评分生成看板视图。预测结果会按设备与最新采集记录缓存,默认 24 小时;单台设备预测失败或历史数据不足时,仅该设备显示为“预测不可用”。
## 快速开始
```bash
cp .env.example .env
bun install
bun run dev
```
打开浏览器:
- `http://localhost:3000/`:设备健康运营看板
- `http://localhost:3000/batteries`:设备状态明细
- `http://localhost:3000/api/docs`:接口文档
## 本地演示环境
如果暂时没有生产数据库连接,可以使用 Docker Compose 启动本地 MySQL 并填充演示数据:
```bash
docker compose up --build
```
Compose 会启动:
- `db`:本地 MySQL 8.4
- `seed`:初始化本地 `ls_battery_info` 演示数据
- `app`:启动应用服务
也可以手动初始化本地数据:
```bash
DATABASE_URL=mysql://battery:battery@localhost:3306/battery_soh bun run seed
```
`seed` 仅用于本地开发和演示环境;应用运行时仍保持只读查询,不写入业务数据库。
## 系统结构
```text
src/
├── routes/ # 页面与 API 路由
├── server/
│ ├── api/ # 接口契约与路由
│ ├── battery/mysql.ts # 设备数据只读查询
│ └── prediction/client.ts # 健康预测服务客户端
├── domain/battery.ts # 电池领域模型与看板聚合
├── client/orpc.ts # 前端接口客户端
└── styles.css # 全局样式入口
```
核心接口:
- `battery.dashboard`:生成健康运营看板数据。
- `battery.batteries`:分页返回每台设备的最新状态,支持搜索、筛选和排序。
- `battery.history`:返回单台设备最近 500 条历史记录。
## 部署
```bash
bun run build
bun run compile
./out/server-<target>
```
构建产物为单个服务二进制文件,运行时需要配置 `DATABASE_URL` 与 SoH 预测服务地址。
## 常用命令
| 命令 | 作用 |
| --- | --- |
| `bun run dev` | 启动开发服务 |
| `bun run build` | 构建应用 |
| `bun run compile` | 生成单二进制产物 |
| `bun run seed` | 初始化本地演示数据 |
| `bun run typecheck` | TypeScript 类型检查 |
| `bun run test` | 运行测试 |
| `bun run fix` | 格式化与静态检查 |
交付前验证:
```bash
bun run fix && bun run typecheck && bun run test && bun run build
```