From 365dd819b5e3d539865a6ce1f0bb5a89ad651219 Mon Sep 17 00:00:00 2001 From: dashixiong Date: Fri, 27 Jun 2025 17:08:26 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A5=89=E8=B4=A4=E6=95=B0=E6=8D=AE=E6=8E=A5?= =?UTF-8?q?=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/ems/MqttMessageController.java | 91 ++++++++++++++++++ .../ems/service/IEmsBatteryDataService.java | 62 ++++++++++++ .../xzzn/ems/service/IEmsPcsDataService.java | 62 ++++++++++++ .../impl/EmsBatteryDataServiceImpl.java | 96 +++++++++++++++++++ .../service/impl/EmsPcsDataServiceImpl.java | 96 +++++++++++++++++++ 5 files changed, 407 insertions(+) create mode 100644 ems-system/src/main/java/com/xzzn/ems/service/IEmsBatteryDataService.java create mode 100644 ems-system/src/main/java/com/xzzn/ems/service/IEmsPcsDataService.java create mode 100644 ems-system/src/main/java/com/xzzn/ems/service/impl/EmsBatteryDataServiceImpl.java create mode 100644 ems-system/src/main/java/com/xzzn/ems/service/impl/EmsPcsDataServiceImpl.java diff --git a/ems-admin/src/main/java/com/xzzn/web/controller/ems/MqttMessageController.java b/ems-admin/src/main/java/com/xzzn/web/controller/ems/MqttMessageController.java index e0d989a..30d5de0 100644 --- a/ems-admin/src/main/java/com/xzzn/web/controller/ems/MqttMessageController.java +++ b/ems-admin/src/main/java/com/xzzn/web/controller/ems/MqttMessageController.java @@ -1,7 +1,17 @@ package com.xzzn.web.controller.ems; +import com.alibaba.druid.support.json.JSONParser; +import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.JSONArray; +import com.alibaba.fastjson2.JSONObject; +import com.alibaba.fastjson2.TypeReference; +import com.fasterxml.jackson.databind.json.JsonMapper; +import com.xzzn.ems.domain.EmsBatteryData; import com.xzzn.ems.domain.EmsMqttMessage; +import com.xzzn.ems.domain.EmsPcsData; +import com.xzzn.ems.service.IEmsBatteryDataService; import com.xzzn.ems.service.IEmsMqttMessageService; +import com.xzzn.ems.service.IEmsPcsDataService; import com.xzzn.framework.manager.MqttLifecycleManager; import com.xzzn.framework.web.service.MqttPublisher; import com.xzzn.framework.web.service.MqttSubscriber; @@ -15,6 +25,11 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.annotation.PostConstruct; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; @Service public class MqttMessageController implements MqttPublisher, MqttSubscriber { @@ -28,6 +43,11 @@ public class MqttMessageController implements MqttPublisher, MqttSubscriber { @Autowired private IEmsMqttMessageService emsMqttMessageService; + @Autowired + private IEmsBatteryDataService emsBatteryDataService; + + @Autowired + private IEmsPcsDataService emsPcsDataService; @Autowired public MqttMessageController(MqttLifecycleManager mqttLifecycleManager) { @@ -70,6 +90,8 @@ public class MqttMessageController implements MqttPublisher, MqttSubscriber { System.out.println("[DEVICE] data: " + payload); try { // 业务处理逻辑 +// handleFxData(JSONArray.parseArray(payload).get(0).toString()); + EmsMqttMessage mqttMessage = new EmsMqttMessage(); mqttMessage.setMqttTopic(topic); mqttMessage.setMqttMessage(payload); @@ -110,4 +132,73 @@ public class MqttMessageController implements MqttPublisher, MqttSubscriber { System.err.println("Failed to send command to device " + deviceId); } } + + + private void handleFxData(String message) { + + + List upAll = JSON.parseObject(message, new TypeReference>() {}); + + for (int i = 0; i < upAll.size(); i++) { + JSONObject obj = JSONObject.parseObject(upAll.get(i)); + + String deviceId = obj.get("Device").toString(); + String jsonData = obj.get("Data").toString(); + + + if (deviceId.contains("BMS")) { + Map> records = processData(JSON.parseObject(jsonData, new TypeReference>() {})); + + //单体电池 + for (Map.Entry> record : records.entrySet()) { + String recordId = record.getKey(); + Map fields = record.getValue(); + + EmsBatteryData data = new EmsBatteryData(); + data.setDeviceId(Long.parseLong(recordId)); + data.setBatteryCellId(recordId); + data.setSoc(new BigDecimal(fields.get("DTSOC").toString())); + data.setSoh(new BigDecimal(fields.get("DTSOH").toString())); + data.setTemperature(new BigDecimal(fields.get("DTWD").toString())); + data.setVoltage(new BigDecimal(fields.get("DTDY").toString())); + + data.setBatteryCluster(deviceId); + data.setBatteryPack(deviceId); + emsBatteryDataService.insertEmsBatteryData(data); + } + } else if (deviceId.contains("PCS")) { + //pcs + EmsPcsData data = new EmsPcsData(); + + + + + + emsPcsDataService.insertEmsPcsData(data); + + } + + } + + + } + + // 数据分组处理 + private static Map> processData(Map rawData) { + Map> records = new HashMap<>(); + + for (Map.Entry entry : rawData.entrySet()) { + String key = entry.getKey(); + // 提取记录ID(最后3位) + String recordId = key.substring(key.length() - 3); + // 提取字段类型(前缀) + String fieldType = key.substring(0, key.length() - 3); + + // 初始化记录 + records.putIfAbsent(recordId, new HashMap<>()); + // 存入字段值 + records.get(recordId).put(fieldType, entry.getValue()); + } + return records; + } } \ No newline at end of file diff --git a/ems-system/src/main/java/com/xzzn/ems/service/IEmsBatteryDataService.java b/ems-system/src/main/java/com/xzzn/ems/service/IEmsBatteryDataService.java new file mode 100644 index 0000000..d694c11 --- /dev/null +++ b/ems-system/src/main/java/com/xzzn/ems/service/IEmsBatteryDataService.java @@ -0,0 +1,62 @@ +package com.xzzn.ems.service; + +import com.xzzn.ems.domain.EmsBatteryData; + +import java.util.List; + +/** + * 单体电池实时数据Service接口 + * + * @author xzzn + * @date 2025-06-27 + */ +public interface IEmsBatteryDataService +{ + /** + * 查询单体电池实时数据 + * + * @param id 单体电池实时数据主键 + * @return 单体电池实时数据 + */ + public EmsBatteryData selectEmsBatteryDataById(Long id); + + /** + * 查询单体电池实时数据列表 + * + * @param emsBatteryData 单体电池实时数据 + * @return 单体电池实时数据集合 + */ + public List selectEmsBatteryDataList(EmsBatteryData emsBatteryData); + + /** + * 新增单体电池实时数据 + * + * @param emsBatteryData 单体电池实时数据 + * @return 结果 + */ + public int insertEmsBatteryData(EmsBatteryData emsBatteryData); + + /** + * 修改单体电池实时数据 + * + * @param emsBatteryData 单体电池实时数据 + * @return 结果 + */ + public int updateEmsBatteryData(EmsBatteryData emsBatteryData); + + /** + * 批量删除单体电池实时数据 + * + * @param ids 需要删除的单体电池实时数据主键集合 + * @return 结果 + */ + public int deleteEmsBatteryDataByIds(Long[] ids); + + /** + * 删除单体电池实时数据信息 + * + * @param id 单体电池实时数据主键 + * @return 结果 + */ + public int deleteEmsBatteryDataById(Long id); +} diff --git a/ems-system/src/main/java/com/xzzn/ems/service/IEmsPcsDataService.java b/ems-system/src/main/java/com/xzzn/ems/service/IEmsPcsDataService.java new file mode 100644 index 0000000..bff774d --- /dev/null +++ b/ems-system/src/main/java/com/xzzn/ems/service/IEmsPcsDataService.java @@ -0,0 +1,62 @@ +package com.xzzn.ems.service; + +import com.xzzn.ems.domain.EmsPcsData; + +import java.util.List; + +/** + * PCS数据Service接口 + * + * @author xzzn + * @date 2025-06-27 + */ +public interface IEmsPcsDataService +{ + /** + * 查询PCS数据 + * + * @param id PCS数据主键 + * @return PCS数据 + */ + public EmsPcsData selectEmsPcsDataById(Long id); + + /** + * 查询PCS数据列表 + * + * @param emsPcsData PCS数据 + * @return PCS数据集合 + */ + public List selectEmsPcsDataList(EmsPcsData emsPcsData); + + /** + * 新增PCS数据 + * + * @param emsPcsData PCS数据 + * @return 结果 + */ + public int insertEmsPcsData(EmsPcsData emsPcsData); + + /** + * 修改PCS数据 + * + * @param emsPcsData PCS数据 + * @return 结果 + */ + public int updateEmsPcsData(EmsPcsData emsPcsData); + + /** + * 批量删除PCS数据 + * + * @param ids 需要删除的PCS数据主键集合 + * @return 结果 + */ + public int deleteEmsPcsDataByIds(Long[] ids); + + /** + * 删除PCS数据信息 + * + * @param id PCS数据主键 + * @return 结果 + */ + public int deleteEmsPcsDataById(Long id); +} diff --git a/ems-system/src/main/java/com/xzzn/ems/service/impl/EmsBatteryDataServiceImpl.java b/ems-system/src/main/java/com/xzzn/ems/service/impl/EmsBatteryDataServiceImpl.java new file mode 100644 index 0000000..562eb7c --- /dev/null +++ b/ems-system/src/main/java/com/xzzn/ems/service/impl/EmsBatteryDataServiceImpl.java @@ -0,0 +1,96 @@ +package com.xzzn.ems.service.impl; + +import java.util.List; +import com.xzzn.common.utils.DateUtils; +import com.xzzn.ems.domain.EmsBatteryData; +import com.xzzn.ems.mapper.EmsBatteryDataMapper; +import com.xzzn.ems.service.IEmsBatteryDataService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * 单体电池实时数据Service业务层处理 + * + * @author xzzn + * @date 2025-06-27 + */ +@Service +public class EmsBatteryDataServiceImpl implements IEmsBatteryDataService +{ + @Autowired + private EmsBatteryDataMapper emsBatteryDataMapper; + + /** + * 查询单体电池实时数据 + * + * @param id 单体电池实时数据主键 + * @return 单体电池实时数据 + */ + @Override + public EmsBatteryData selectEmsBatteryDataById(Long id) + { + return emsBatteryDataMapper.selectEmsBatteryDataById(id); + } + + /** + * 查询单体电池实时数据列表 + * + * @param emsBatteryData 单体电池实时数据 + * @return 单体电池实时数据 + */ + @Override + public List selectEmsBatteryDataList(EmsBatteryData emsBatteryData) + { + return emsBatteryDataMapper.selectEmsBatteryDataList(emsBatteryData); + } + + /** + * 新增单体电池实时数据 + * + * @param emsBatteryData 单体电池实时数据 + * @return 结果 + */ + @Override + public int insertEmsBatteryData(EmsBatteryData emsBatteryData) + { + emsBatteryData.setCreateTime(DateUtils.getNowDate()); + return emsBatteryDataMapper.insertEmsBatteryData(emsBatteryData); + } + + /** + * 修改单体电池实时数据 + * + * @param emsBatteryData 单体电池实时数据 + * @return 结果 + */ + @Override + public int updateEmsBatteryData(EmsBatteryData emsBatteryData) + { + emsBatteryData.setUpdateTime(DateUtils.getNowDate()); + return emsBatteryDataMapper.updateEmsBatteryData(emsBatteryData); + } + + /** + * 批量删除单体电池实时数据 + * + * @param ids 需要删除的单体电池实时数据主键 + * @return 结果 + */ + @Override + public int deleteEmsBatteryDataByIds(Long[] ids) + { + return emsBatteryDataMapper.deleteEmsBatteryDataByIds(ids); + } + + /** + * 删除单体电池实时数据信息 + * + * @param id 单体电池实时数据主键 + * @return 结果 + */ + @Override + public int deleteEmsBatteryDataById(Long id) + { + return emsBatteryDataMapper.deleteEmsBatteryDataById(id); + } +} diff --git a/ems-system/src/main/java/com/xzzn/ems/service/impl/EmsPcsDataServiceImpl.java b/ems-system/src/main/java/com/xzzn/ems/service/impl/EmsPcsDataServiceImpl.java new file mode 100644 index 0000000..d3c1ba0 --- /dev/null +++ b/ems-system/src/main/java/com/xzzn/ems/service/impl/EmsPcsDataServiceImpl.java @@ -0,0 +1,96 @@ +package com.xzzn.ems.service.impl; + +import java.util.List; +import com.xzzn.common.utils.DateUtils; +import com.xzzn.ems.domain.EmsPcsData; +import com.xzzn.ems.mapper.EmsPcsDataMapper; +import com.xzzn.ems.service.IEmsPcsDataService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * PCS数据Service业务层处理 + * + * @author xzzn + * @date 2025-06-27 + */ +@Service +public class EmsPcsDataServiceImpl implements IEmsPcsDataService +{ + @Autowired + private EmsPcsDataMapper emsPcsDataMapper; + + /** + * 查询PCS数据 + * + * @param id PCS数据主键 + * @return PCS数据 + */ + @Override + public EmsPcsData selectEmsPcsDataById(Long id) + { + return emsPcsDataMapper.selectEmsPcsDataById(id); + } + + /** + * 查询PCS数据列表 + * + * @param emsPcsData PCS数据 + * @return PCS数据 + */ + @Override + public List selectEmsPcsDataList(EmsPcsData emsPcsData) + { + return emsPcsDataMapper.selectEmsPcsDataList(emsPcsData); + } + + /** + * 新增PCS数据 + * + * @param emsPcsData PCS数据 + * @return 结果 + */ + @Override + public int insertEmsPcsData(EmsPcsData emsPcsData) + { + emsPcsData.setCreateTime(DateUtils.getNowDate()); + return emsPcsDataMapper.insertEmsPcsData(emsPcsData); + } + + /** + * 修改PCS数据 + * + * @param emsPcsData PCS数据 + * @return 结果 + */ + @Override + public int updateEmsPcsData(EmsPcsData emsPcsData) + { + emsPcsData.setUpdateTime(DateUtils.getNowDate()); + return emsPcsDataMapper.updateEmsPcsData(emsPcsData); + } + + /** + * 批量删除PCS数据 + * + * @param ids 需要删除的PCS数据主键 + * @return 结果 + */ + @Override + public int deleteEmsPcsDataByIds(Long[] ids) + { + return emsPcsDataMapper.deleteEmsPcsDataByIds(ids); + } + + /** + * 删除PCS数据信息 + * + * @param id PCS数据主键 + * @return 结果 + */ + @Override + public int deleteEmsPcsDataById(Long id) + { + return emsPcsDataMapper.deleteEmsPcsDataById(id); + } +}