回滚到 19:29

This commit is contained in:
2026-01-24 00:20:27 +08:00
parent 83fae710fb
commit 6ae9126662

View File

@ -153,10 +153,7 @@ public class DeviceDataProcessServiceImpl extends AbstractBatteryDataProcessor i
@Override
public void handleDeviceData(String message, String siteId) {
log.info("=== handleDeviceData 开始 === siteId:{}, message length:{}", siteId, message != null ? message.length() : 0);
JSONArray arraylist = (JSONArray) JSON.parse(message);
log.info("解析到{}条设备数据", arraylist.size());
JSONArray arraylist = JSONArray.parseArray(message);
for (int i = 0; i < arraylist.size(); i++) {
JSONObject obj = JSONObject.parseObject(arraylist.get(i).toString());
@ -166,13 +163,10 @@ public class DeviceDataProcessServiceImpl extends AbstractBatteryDataProcessor i
Long timestamp = obj.getLong("timestamp");
Date dataUpdateTime = DateUtils.convertUpdateTime(timestamp);
log.info("处理第{}条设备数据 - deviceId:{}, timestamp:{}, dataUpdateTime:{}, jsonData length:{}",
i + 1, deviceId, timestamp, dataUpdateTime, jsonData != null ? jsonData.length() : 0);
log.info("deviceId:" + deviceId);
boolean isEmpty = checkJsonDataEmpty(jsonData);
if (isEmpty) {
// 添加设备告警
log.warn("设备数据为空 - deviceId:{}", deviceId);
iEmsAlarmRecordsService.addEmptyDataAlarmRecord(siteId, deviceId);
return;
}
@ -190,17 +184,11 @@ public class DeviceDataProcessServiceImpl extends AbstractBatteryDataProcessor i
public void processingDeviceData(String siteId, String deviceId, String jsonData, Date dataUpdateTime) {
// 判断设备类型,并调用对应的方法处理数据
String deviceCategory = getDeviceCategory(siteId, deviceId);
log.info("processingDeviceData - siteId:{}, deviceId:{}, deviceCategory:{}", siteId, deviceId, deviceCategory);
if (deviceId.contains(SiteDevice.BMSD.name())) {
log.info("设备类型是BMSD");
batteryStackDataProcess(siteId, deviceId, jsonData, dataUpdateTime);
if (SiteEnum.DDS.getCode().equals(siteId)) {
log.info("siteId是DDS调用batteryGroupDataProcess和batteryDataProcessFromBmsd");
batteryGroupDataProcess(siteId, deviceId, jsonData);
batteryDataProcessFromBmsd(siteId, deviceId, jsonData, dataUpdateTime);
} else {
log.info("siteId不是DDS (期望:{}, 实际:{})跳过batteryDataProcessFromBmsd", SiteEnum.DDS.getCode(), siteId);
}
} else if (deviceId.contains(SiteDevice.BMSC.name())) {
batteryClusterDataProcess(siteId, deviceId, jsonData, dataUpdateTime);
@ -453,12 +441,12 @@ public class DeviceDataProcessServiceImpl extends AbstractBatteryDataProcessor i
}
private void batteryDataProcessFromBmsd(String siteId, String deviceId, String dataJson, Date dataUpdateTime) {
log.info("=== batteryDataProcessFromBmsd 开始 === siteId:{}, deviceId:{}", siteId, deviceId);
// if (!SiteEnum.DDS.getCode().equals(siteId)) {
// return;
// }
//电池组
Map<String, Object> obj = JSON.parseObject(dataJson, new TypeReference<Map<String, Object>>() {
});
log.info("解析后的数据键数量:{}", obj.size());
List<EmsBatteryData> dataList = new ArrayList<>();
// 前一个小时
@ -471,51 +459,32 @@ public class DeviceDataProcessServiceImpl extends AbstractBatteryDataProcessor i
Map<String, EmsBatteryDataMinutes> minutesMap = new HashMap<>();
String clusterId = getClusterDeviceIdByParentDeviceId(siteId, deviceId);
log.info("clusterId:{}", clusterId);
int dtdcCount = 0;
int matchedCount = 0;
for (Map.Entry<String, Object> entry : obj.entrySet()) {
String key = entry.getKey();
if (key.startsWith("DTDC")) {
dtdcCount++;
Matcher matcher = DTDC_PATTERN.matcher(key);
if (matcher.matches()) {
matchedCount++;
String batteryCellId = matcher.group(1);
String property = matcher.group(2);
Object value = entry.getValue();
log.info("匹配到DTDC数据 - key:{}, batteryCellId:{}, property:{}, value:{}, value type:{}",
key, batteryCellId, property, value, value != null ? value.getClass().getName() : "null");
EmsBatteryData data = dataMap.get(batteryCellId);
boolean isNew = (data == null);
if (isNew) {
data = new EmsBatteryData();
if (StringUtils.isNotEmpty(batteryCellId)) {
data.setDataTimestamp(dataUpdateTime);
data.setBatteryPack(deviceId);
data.setBatteryCluster(clusterId);
data.setClusterDeviceId(clusterId);
data.setBatteryCellId(batteryCellId);
data.setSiteId(siteId);
data.setDeviceId(batteryCellId+clusterId);
data.setCreateBy("system");
data.setCreateTime(DateUtils.getNowDate());
data.setUpdateBy("system");
data.setUpdateTime(DateUtils.getNowDate());
}
dataMap.put(batteryCellId, data);
log.info("创建新的电池数据对象 - batteryCellId:{}", batteryCellId);
} else {
log.info("使用已有的电池数据对象 - batteryCellId:{}", batteryCellId);
EmsBatteryData data = dataMap.getOrDefault(batteryCellId, new EmsBatteryData());
if (StringUtils.isNotEmpty(batteryCellId)) {
data.setDataTimestamp(dataUpdateTime);
data.setBatteryPack(deviceId);
data.setBatteryCluster(clusterId);
data.setClusterDeviceId(clusterId);
data.setBatteryCellId(batteryCellId);
data.setSiteId(siteId);
data.setDeviceId(batteryCellId);
data.setCreateBy("system");
data.setCreateTime(DateUtils.getNowDate());
data.setUpdateBy("system");
data.setUpdateTime(DateUtils.getNowDate());
}
// 根据后缀设置对应属性
setDTDCPropertyValue(data, property, entry.getValue());
dataMap.put(batteryCellId, data);
// 每日最新数据按batteryCellId去重
EmsBatteryDataDailyLatest daily = dailyMap.getOrDefault(batteryCellId, new EmsBatteryDataDailyLatest());
@ -530,23 +499,9 @@ public class DeviceDataProcessServiceImpl extends AbstractBatteryDataProcessor i
}
}
}
log.info("=== DTDC数据处理完成 === DTDC键数量:{}, 成功匹配数量:{}, 最终电池数据数量:{}",
dtdcCount, matchedCount, dataMap.size());
if (!CollectionUtils.sizeIsEmpty(dataMap)) {
dataList = new ArrayList<>(dataMap.values());
// 打印前5条数据用于调试
int printCount = Math.min(5, dataList.size());
for (int i = 0; i < printCount; i++) {
EmsBatteryData data = dataList.get(i);
log.info("准备插入的第{}条数据 - batteryCellId:{}, voltage:{}, temperature:{}, interResistance:{}",
i + 1, data.getBatteryCellId(), data.getVoltage(), data.getTemperature(), data.getInterResistance());
}
emsBatteryDataMapper.insertEmsBatteryDataList(new ArrayList<>(dataList));
log.info("成功插入{}条电池数据", dataList.size());
redisCache.deleteList(RedisKeyConstants.BATTERY + siteId + "_" + clusterId);
redisCache.setCacheList(RedisKeyConstants.BATTERY + siteId + "_" + clusterId, dataList);
@ -594,44 +549,20 @@ public class DeviceDataProcessServiceImpl extends AbstractBatteryDataProcessor i
private void setDTDCPropertyValue(EmsBatteryData data, String property, Object value) {
BigDecimal numberValue = null;
log.info("setDTDCPropertyValue 开始 - property:{}, value:{}, value type:{}",
property, value, value != null ? value.getClass().getName() : "null");
if (value instanceof Number) {
numberValue = new BigDecimal(value.toString());
log.info("值是Number类型转换为BigDecimal: {}", numberValue);
} else if (value != null) {
log.warn("值不是Number类型尝试从字符串转换。Value: {}, type: {}", value, value.getClass().getName());
try {
numberValue = new BigDecimal(value.toString());
log.info("成功从字符串转换为BigDecimal: {}", numberValue);
} catch (Exception e) {
log.error("无法将值转换为BigDecimal: {}", value, e);
}
} else {
log.warn("值为null");
}
switch (property) {
case "DY":
data.setVoltage(numberValue);
log.info("设置 voltage: {}", numberValue);
break;
case "WD":
data.setTemperature(numberValue);
log.info("设置 temperature: {}", numberValue);
break;
case "NZ":
data.setInterResistance(numberValue);
log.info("设置 interResistance: {}", numberValue);
break;
default:
log.warn("未知的属性类型: {}", property);
}
log.info("setDTDCPropertyValue 结束 - 当前对象状态 voltage:{}, temperature:{}, interResistance:{}",
data.getVoltage(), data.getTemperature(), data.getInterResistance());
}
//根据属性名设置对应的值
@ -805,7 +736,7 @@ public class DeviceDataProcessServiceImpl extends AbstractBatteryDataProcessor i
}
EmsBatteryData batteryData = new EmsBatteryData();
batteryData.setDeviceId(recordId+deviceId);
batteryData.setDeviceId(recordId);
batteryData.setBatteryCellId(recordId);
saveDeviceData(pointMatchList, fields, batteryData, pointEnumMatchMap);