# 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- ``` 构建产物为单个服务二进制文件,运行时需要配置 `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 ```