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