奉贤数据接入

This commit is contained in:
2025-06-27 17:08:26 +08:00
parent 31dc8e72c6
commit 365dd819b5
5 changed files with 407 additions and 0 deletions

View File

@ -1,7 +1,17 @@
package com.xzzn.web.controller.ems; 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.EmsMqttMessage;
import com.xzzn.ems.domain.EmsPcsData;
import com.xzzn.ems.service.IEmsBatteryDataService;
import com.xzzn.ems.service.IEmsMqttMessageService; import com.xzzn.ems.service.IEmsMqttMessageService;
import com.xzzn.ems.service.IEmsPcsDataService;
import com.xzzn.framework.manager.MqttLifecycleManager; import com.xzzn.framework.manager.MqttLifecycleManager;
import com.xzzn.framework.web.service.MqttPublisher; import com.xzzn.framework.web.service.MqttPublisher;
import com.xzzn.framework.web.service.MqttSubscriber; import com.xzzn.framework.web.service.MqttSubscriber;
@ -15,6 +25,11 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct; 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 @Service
public class MqttMessageController implements MqttPublisher, MqttSubscriber { public class MqttMessageController implements MqttPublisher, MqttSubscriber {
@ -28,6 +43,11 @@ public class MqttMessageController implements MqttPublisher, MqttSubscriber {
@Autowired @Autowired
private IEmsMqttMessageService emsMqttMessageService; private IEmsMqttMessageService emsMqttMessageService;
@Autowired
private IEmsBatteryDataService emsBatteryDataService;
@Autowired
private IEmsPcsDataService emsPcsDataService;
@Autowired @Autowired
public MqttMessageController(MqttLifecycleManager mqttLifecycleManager) { public MqttMessageController(MqttLifecycleManager mqttLifecycleManager) {
@ -70,6 +90,8 @@ public class MqttMessageController implements MqttPublisher, MqttSubscriber {
System.out.println("[DEVICE] data: " + payload); System.out.println("[DEVICE] data: " + payload);
try { try {
// 业务处理逻辑 // 业务处理逻辑
// handleFxData(JSONArray.parseArray(payload).get(0).toString());
EmsMqttMessage mqttMessage = new EmsMqttMessage(); EmsMqttMessage mqttMessage = new EmsMqttMessage();
mqttMessage.setMqttTopic(topic); mqttMessage.setMqttTopic(topic);
mqttMessage.setMqttMessage(payload); mqttMessage.setMqttMessage(payload);
@ -110,4 +132,73 @@ public class MqttMessageController implements MqttPublisher, MqttSubscriber {
System.err.println("Failed to send command to device " + deviceId); System.err.println("Failed to send command to device " + deviceId);
} }
} }
private void handleFxData(String message) {
List<String> upAll = JSON.parseObject(message, new TypeReference<ArrayList<String>>() {});
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<String, Map<String, Object>> records = processData(JSON.parseObject(jsonData, new TypeReference<Map<String, Object>>() {}));
//单体电池
for (Map.Entry<String, Map<String, Object>> record : records.entrySet()) {
String recordId = record.getKey();
Map<String, Object> 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<String, Map<String, Object>> processData(Map<String, Object> rawData) {
Map<String, Map<String, Object>> records = new HashMap<>();
for (Map.Entry<String, Object> 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;
}
} }

View File

@ -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<EmsBatteryData> 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);
}

View File

@ -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<EmsPcsData> 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);
}

View File

@ -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<EmsBatteryData> 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);
}
}

View File

@ -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<EmsPcsData> 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);
}
}