evo-BMS/.trae/documents/保存单体电压_温度与充放电量到对应表.md

62 lines
4.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## 目标
-`MqttService` 中解析的三类数据按实体模型入库:
- 单体电压数据 → 表 `subsystem_voltage`
- 单体温度数据 → 表 `subsystem_temperature`
- 累计充/放电量 → 新增表(如 `charge_discharge_summary`
## 现状与模型
- 单体电压解析位于 `src/main/java/com/evobms/project/bms/service/MqttService.java:257-265`,具体方法在 `parseCellVoltageAtIndex``parseCellVoltagesDetail`
- 领域模型:`SubsystemVoltage``src/main/java/com/evobms/project/Battery/domain/SubsystemVoltage.java`
- Mapper/XML`SubsystemVoltageMapper` 与 `mybatis/voltage/SubsystemVoltageMapper.xml`
- 单体温度解析位于 `parseCellTemperatureAtIndex``parseCellTemperaturesDetail`
- 领域模型:`SubsystemTemperature``src/main/java/com/evobms/project/Battery/domain/SubsystemTemperature.java`
- Mapper/XML`SubsystemTemperatureMapper` 与 `mybatis/temperature/SubsystemTemperatureMapper.xml`
- 累计充/放电量解析在 `parseChargeDischargeAtIndex`,目前 `saveChargeDischargeSummary(...)` 空实现,代码库未定义实体与表。
## 字段映射
- 电压(来自 `parseCellVoltageAtIndex`
- `device_id` ⇔ 设备 SN
- `timestamp``new Date()`
- `subsystem_count` ⇔ 索引77
- `subsystem_no` ⇔ 索引78
- `subsystem_voltage` ⇔ 索引79-80 ×0.1V
- `subsystem_current` ⇔ 索引81-82 (值-10000)×0.1A
- `total_battery_count` ⇔ 索引83-84
- `frame_start_battery_no` ⇔ 索引85-86
- `frame_battery_count` ⇔ 索引87
- `battery_voltages` ⇔ 从 `parseCellVoltagesDetail` 得到列表,按 "," 连接为字符串mV→V
- 温度(来自 `parseCellTemperatureAtIndex`
- `device_id`、`timestamp`
- `subsystem_count` ⇔ 索引449
- `subsystem_no` ⇔ 索引450
- `temp_probe_count` ⇔ 索引451-452
- `temperature_values` ⇔ 从 `parseCellTemperaturesDetail` 得到列表(字节-40℃按 "," 连接为字符串
- 充/放电汇总(来自 `parseChargeDischargeAtIndex`
- 建议新增实体 `ChargeDischargeSummary``device_id`, `timestamp`, `discharge_kwh`, `charge_kwh`, 审计字段
## 实施步骤
1.`MqttService` 注入服务
- `ISubsystemVoltageService`、`ISubsystemTemperatureService`
2. 电压数据保存
- 调整 `parseCellVoltagesDetail(byte[], start, deviceSn, startCellIndex, cellCount)` 返回 `List<Double>`(以 V 为单位)
-`parseCellVoltageAtIndex(...)` 构造 `SubsystemVoltage`:填充映射字段与 `battery_voltages`(以 "," 连接),调用 `ISubsystemVoltageService.insertSubsystemVoltage(...)`
3. 温度数据保存
- 调整 `parseCellTemperaturesDetail(byte[], start, deviceSn, tempCount)` 返回 `List<Integer>`(单位 ℃)
-`parseCellTemperatureAtIndex(...)` 构造 `SubsystemTemperature`:填充映射字段与 `temperature_values`(以 "," 连接),调用 `ISubsystemTemperatureService.insertSubsystemTemperature(...)`
4. 累计充/放电量持久化
- 新增实体、Mapper、XML、Service命名示例`ChargeDischargeSummary`、`ChargeDischargeSummaryMapper`、`ChargeDischargeSummaryServiceImpl`
-`saveChargeDischargeSummary(deviceSn, dischargeKwh, chargeKwh)` 构造实体并插入
5. 审计字段
- 为入库对象设置 `create_time`(使用 `BaseEntity.setCreateTime(new Date())``create_by` 设置为设备 SN
## 校验与兼容
- 编译并运行现有单元/集成测试,确保构建成功
- 注意 `SubsystemTemperatureMapper.xml``updatedTime` 属性命名与 `BaseEntity.updateTime` 不一致,当前插入流程不依赖该字段,可后续统一为 `updateTime`
## 变更点位
- `MqttService.java:257-265` 处的三个解析方法内新增调用保存方法
- 新增或调整的私有方法:`saveSubsystemVoltage(...)`、`saveSubsystemTemperature(...)`、完善 `saveChargeDischargeSummary(...)`
- 新实体与持久化文件(仅用于充/放电汇总)按上述命名与目录创建
## 交付结果
- 三类数据均入库,对应后台列表页可查询;极值数据已按此前改造保持一致风格