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

4.0 KiB
Raw Blame History

目标

  • MqttService 中解析的三类数据按实体模型入库:
    • 单体电压数据 → 表 subsystem_voltage
    • 单体温度数据 → 表 subsystem_temperature
    • 累计充/放电量 → 新增表(如 charge_discharge_summary

现状与模型

  • 单体电压解析位于 src/main/java/com/evobms/project/bms/service/MqttService.java:257-265,具体方法在 parseCellVoltageAtIndexparseCellVoltagesDetail
    • 领域模型:SubsystemVoltagesrc/main/java/com/evobms/project/Battery/domain/SubsystemVoltage.java
    • Mapper/XMLSubsystemVoltageMappermybatis/voltage/SubsystemVoltageMapper.xml
  • 单体温度解析位于 parseCellTemperatureAtIndexparseCellTemperaturesDetail
    • 领域模型:SubsystemTemperaturesrc/main/java/com/evobms/project/Battery/domain/SubsystemTemperature.java
    • Mapper/XMLSubsystemTemperatureMappermybatis/temperature/SubsystemTemperatureMapper.xml
  • 累计充/放电量解析在 parseChargeDischargeAtIndex,目前 saveChargeDischargeSummary(...) 空实现,代码库未定义实体与表。

字段映射

  • 电压(来自 parseCellVoltageAtIndex
    • device_id ⇔ 设备 SN
    • timestampnew 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_idtimestamp
    • subsystem_count ⇔ 索引449
    • subsystem_no ⇔ 索引450
    • temp_probe_count ⇔ 索引451-452
    • temperature_values ⇔ 从 parseCellTemperaturesDetail 得到列表(字节-40℃按 "," 连接为字符串
  • 充/放电汇总(来自 parseChargeDischargeAtIndex
    • 建议新增实体 ChargeDischargeSummarydevice_id, timestamp, discharge_kwh, charge_kwh, 审计字段

实施步骤

  1. MqttService 注入服务
    • ISubsystemVoltageServiceISubsystemTemperatureService
  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命名示例ChargeDischargeSummaryChargeDischargeSummaryMapperChargeDischargeSummaryServiceImpl
    • saveChargeDischargeSummary(deviceSn, dischargeKwh, chargeKwh) 构造实体并插入
  5. 审计字段
    • 为入库对象设置 create_time(使用 BaseEntity.setCreateTime(new Date())create_by 设置为设备 SN

校验与兼容

  • 编译并运行现有单元/集成测试,确保构建成功
  • 注意 SubsystemTemperatureMapper.xmlupdatedTime 属性命名与 BaseEntity.updateTime 不一致,当前插入流程不依赖该字段,可后续统一为 updateTime

变更点位

  • MqttService.java:257-265 处的三个解析方法内新增调用保存方法
  • 新增或调整的私有方法:saveSubsystemVoltage(...)saveSubsystemTemperature(...)、完善 saveChargeDischargeSummary(...)
  • 新实体与持久化文件(仅用于充/放电汇总)按上述命名与目录创建

交付结果

  • 三类数据均入库,对应后台列表页可查询;极值数据已按此前改造保持一致风格