单体电池解析数据改动;枚举值匹配转换改动
This commit is contained in:
@ -187,7 +187,7 @@ xss:
|
||||
urlPatterns: /system/*,/monitor/*,/tool/*
|
||||
|
||||
mqtt:
|
||||
broker.url: tcp://122.51.194.184:1883
|
||||
broker.url: tcp://121.5.164.6:1883
|
||||
client.id: ems-cloud
|
||||
username: dmbroker
|
||||
password: qwer1234
|
||||
|
||||
@ -2,6 +2,7 @@ package com.xzzn.ems.service.impl;
|
||||
|
||||
import com.alibaba.fastjson2.JSON;
|
||||
import com.alibaba.fastjson2.JSONArray;
|
||||
import com.alibaba.fastjson2.JSONException;
|
||||
import com.alibaba.fastjson2.JSONObject;
|
||||
import com.alibaba.fastjson2.TypeReference;
|
||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||
@ -70,7 +71,6 @@ import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.regex.Matcher;
|
||||
@ -153,7 +153,9 @@ public class DeviceDataProcessServiceImpl extends AbstractBatteryDataProcessor i
|
||||
|
||||
@Override
|
||||
public void handleDeviceData(String message, String siteId) {
|
||||
JSONArray arraylist = JSONArray.parseArray(message);
|
||||
JSONArray arraylist = parseJsonData(message);
|
||||
if (arraylist == null) return;
|
||||
// 过滤掉空数据(空数据不处理,直接返回
|
||||
|
||||
for (int i = 0; i < arraylist.size(); i++) {
|
||||
JSONObject obj = JSONObject.parseObject(arraylist.get(i).toString());
|
||||
@ -181,6 +183,21 @@ public class DeviceDataProcessServiceImpl extends AbstractBatteryDataProcessor i
|
||||
}
|
||||
}
|
||||
|
||||
private JSONArray parseJsonData(String message) {
|
||||
try {
|
||||
JSONObject object = JSONObject.parseObject(message);
|
||||
return object.getJSONArray("payload");
|
||||
} catch (JSONException e) {
|
||||
log.info("mqtt message is not a json object: " + e.getMessage());
|
||||
try {
|
||||
return JSONArray.parseArray(message);
|
||||
} catch (Exception arrayException) {
|
||||
log.info("mqtt message is not a json array: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public void processingDeviceData(String siteId, String deviceId, String jsonData, Date dataUpdateTime) {
|
||||
// 判断设备类型,并调用对应的方法处理数据
|
||||
String deviceCategory = getDeviceCategory(siteId, deviceId);
|
||||
@ -242,11 +259,10 @@ public class DeviceDataProcessServiceImpl extends AbstractBatteryDataProcessor i
|
||||
log.info("未找到匹配的点位数据,无法处理EMS数据,siteId: " + siteId + ",deviceId: " + deviceId);
|
||||
return;
|
||||
}
|
||||
Map<String, List<EmsPointEnumMatch>> pointEnumMatchMap = devicePointMatchDataProcessor.getPointEnumMatchMap(siteId, DeviceMatchTable.EMS.getCode());
|
||||
|
||||
EmsEmsData emsData = new EmsEmsData();
|
||||
|
||||
saveDeviceData(pointMatchList, obj, emsData, pointEnumMatchMap);
|
||||
saveDeviceData(pointMatchList, obj, emsData);
|
||||
|
||||
emsData.setDataUpdateTime(dataUpdateTime);
|
||||
emsData.setCreateBy("system");
|
||||
@ -271,11 +287,10 @@ public class DeviceDataProcessServiceImpl extends AbstractBatteryDataProcessor i
|
||||
log.info("未找到匹配的点位数据,无法处理中水冷却数据,siteId: " + siteId + ",deviceId: " + deviceId);
|
||||
return;
|
||||
}
|
||||
Map<String, List<EmsPointEnumMatch>> pointEnumMatchMap = devicePointMatchDataProcessor.getPointEnumMatchMap(siteId, DeviceMatchTable.COOLING.getCode());
|
||||
|
||||
EmsCoolingData coolingData = new EmsCoolingData();
|
||||
|
||||
saveDeviceData(pointMatchList, obj, coolingData, pointEnumMatchMap);
|
||||
saveDeviceData(pointMatchList, obj, coolingData);
|
||||
|
||||
coolingData.setDataUpdateTime(dataUpdateTime);
|
||||
coolingData.setCreateBy("system");
|
||||
@ -301,14 +316,13 @@ public class DeviceDataProcessServiceImpl extends AbstractBatteryDataProcessor i
|
||||
log.info("未找到匹配的点位数据,无法处理消防数据,siteId: " + siteId + ",deviceId: " + deviceId);
|
||||
return;
|
||||
}
|
||||
Map<String, List<EmsPointEnumMatch>> pointEnumMatchMap = devicePointMatchDataProcessor.getPointEnumMatchMap(siteId, DeviceMatchTable.XF.getCode());
|
||||
|
||||
// 暂时只更新设备表的设备状态 ZDYBYDCZT-主电源备用电池状态
|
||||
// 数据存表
|
||||
EmsXfData xfData = new EmsXfData();
|
||||
xfData.setDataTimestamp(dataUpdateTime);
|
||||
|
||||
saveDeviceData(pointMatchList, obj, xfData, pointEnumMatchMap);
|
||||
saveDeviceData(pointMatchList, obj, xfData);
|
||||
|
||||
xfData.setCreateBy("system");
|
||||
xfData.setCreateTime(DateUtils.getNowDate());
|
||||
@ -336,12 +350,11 @@ public class DeviceDataProcessServiceImpl extends AbstractBatteryDataProcessor i
|
||||
log.info("未找到匹配的点位数据,无法处理动环数据,siteId: " + siteId + ",deviceId: " + deviceId);
|
||||
return;
|
||||
}
|
||||
Map<String, List<EmsPointEnumMatch>> pointEnumMatchMap = devicePointMatchDataProcessor.getPointEnumMatchMap(siteId, DeviceMatchTable.DH.getCode());
|
||||
|
||||
//DH
|
||||
EmsDhData dhData = new EmsDhData();
|
||||
|
||||
saveDeviceData(pointMatchList, obj, dhData, pointEnumMatchMap);
|
||||
saveDeviceData(pointMatchList, obj, dhData);
|
||||
|
||||
dhData.setDataUpdateTime(dateUpdateTime);
|
||||
dhData.setCreateBy("system");
|
||||
@ -371,7 +384,6 @@ public class DeviceDataProcessServiceImpl extends AbstractBatteryDataProcessor i
|
||||
log.info("未找到匹配的点位数据,无法处理电池堆数据,siteId: " + siteId + ",deviceId: " + deviceId);
|
||||
return;
|
||||
}
|
||||
Map<String, List<EmsPointEnumMatch>> pointEnumMatchMap = devicePointMatchDataProcessor.getPointEnumMatchMap(siteId, DeviceMatchTable.STACK.getCode());
|
||||
|
||||
//BMS 电池簇
|
||||
EmsBatteryStack dataStack = new EmsBatteryStack();
|
||||
@ -382,7 +394,7 @@ public class DeviceDataProcessServiceImpl extends AbstractBatteryDataProcessor i
|
||||
dataStack.setPcsCommunicationStatus(CommunicationStatus.OK.getCode());
|
||||
dataStack.setEmsCommunicationStatus(CommunicationStatus.OK.getCode());
|
||||
|
||||
saveDeviceData(pointMatchList, obj, dataStack, pointEnumMatchMap);
|
||||
saveDeviceData(pointMatchList, obj, dataStack);
|
||||
|
||||
dataStack.setCreateBy("system");
|
||||
dataStack.setCreateTime(DateUtils.getNowDate());
|
||||
@ -396,7 +408,7 @@ public class DeviceDataProcessServiceImpl extends AbstractBatteryDataProcessor i
|
||||
redisCache.setCacheObject(RedisKeyConstants.STACK + siteId + "_" + deviceId, dataStack);
|
||||
|
||||
// 同步更新设备工作状态
|
||||
saveDeviceWorkStatus(deviceId, siteId, dataStack.getWorkStatus());
|
||||
saveDeviceWorkStatus(siteId, deviceId, DeviceMatchTable.STACK.getCode(), dataStack.getWorkStatus());
|
||||
}
|
||||
|
||||
private void batteryGroupDataProcess(String siteId, String deviceId, String jsonData) {
|
||||
@ -601,10 +613,8 @@ public class DeviceDataProcessServiceImpl extends AbstractBatteryDataProcessor i
|
||||
* @param pointMatchList 字段匹配规则列表
|
||||
* @param obj 原始数据Map
|
||||
* @param entity 目标Java对象
|
||||
* @param pointEnumMatchMap 枚举匹配规则
|
||||
*/
|
||||
private void saveDeviceData(List<EmsPointMatch> pointMatchList, Map<String, Object> obj,
|
||||
Object entity, Map<String, List<EmsPointEnumMatch>> pointEnumMatchMap) {
|
||||
private void saveDeviceData(List<EmsPointMatch> pointMatchList, Map<String, Object> obj, Object entity) {
|
||||
if (null == obj || obj.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
@ -623,18 +633,7 @@ public class DeviceDataProcessServiceImpl extends AbstractBatteryDataProcessor i
|
||||
// 1. 从原始数据中获取匹配值
|
||||
Object matchValue = obj.get(pointMatchMap.get(fieldName));
|
||||
|
||||
// 2. 处理枚举值转换
|
||||
List<EmsPointEnumMatch> pointEnumMatchList = pointEnumMatchMap.get(fieldName);
|
||||
if (CollectionUtils.isNotEmpty(pointEnumMatchList) && matchValue != null) {
|
||||
String finalMatchValue = String.valueOf(matchValue).replace(".0", "");
|
||||
Optional<EmsPointEnumMatch> enumMatch = pointEnumMatchList.stream()
|
||||
.filter(data -> data.getDataEnumCode().equals(finalMatchValue)).findFirst();
|
||||
if (enumMatch.isPresent()) {
|
||||
matchValue = enumMatch.get().getEnumCode();
|
||||
}
|
||||
}
|
||||
|
||||
// 3. 类型转换
|
||||
// 2. 类型转换
|
||||
Class<?> fieldType = field.getType();
|
||||
if (String.class.equals(fieldType)) {
|
||||
matchValue = StringUtils.getString(matchValue);
|
||||
@ -665,12 +664,11 @@ public class DeviceDataProcessServiceImpl extends AbstractBatteryDataProcessor i
|
||||
log.info("未找到匹配的点位数据,无法处理电池簇数据,siteId: " + siteId + ",deviceId: " + deviceId);
|
||||
return;
|
||||
}
|
||||
Map<String, List<EmsPointEnumMatch>> pointEnumMatchMap = devicePointMatchDataProcessor.getPointEnumMatchMap(siteId, DeviceMatchTable.CLUSTER.getCode());
|
||||
String stackDeviceId = getStackDeviceId(deviceId);
|
||||
String stackDeviceId = getStackDeviceId(deviceId);
|
||||
//BMS 电池簇
|
||||
EmsBatteryCluster data = new EmsBatteryCluster();
|
||||
|
||||
saveDeviceData(pointMatchList, obj, data, pointEnumMatchMap);
|
||||
saveDeviceData(pointMatchList, obj, data);
|
||||
|
||||
data.setDataUpdateTime(dataUpdateTime);
|
||||
// data.setWorkStatus(WorkStatus.NORMAL.getCode()); // 或其他默认值
|
||||
@ -692,7 +690,7 @@ public class DeviceDataProcessServiceImpl extends AbstractBatteryDataProcessor i
|
||||
redisCache.setCacheObject(RedisKeyConstants.CLUSTER + siteId + "_" + deviceId, data);
|
||||
|
||||
// 同步更新设备工作状态
|
||||
saveDeviceWorkStatus(deviceId, siteId, data.getWorkStatus());
|
||||
saveDeviceWorkStatus(siteId, deviceId, DeviceMatchTable.CLUSTER.getCode(), data.getWorkStatus());
|
||||
}
|
||||
|
||||
private String getStackDeviceId(String deviceId) {
|
||||
@ -715,7 +713,7 @@ public class DeviceDataProcessServiceImpl extends AbstractBatteryDataProcessor i
|
||||
//单体电池
|
||||
Map<String, Map<String, Object>> records = processData(JSON.parseObject(dataJson, new TypeReference<Map<String, Object>>() {
|
||||
}));
|
||||
Map<String, List<EmsPointEnumMatch>> pointEnumMatchMap = devicePointMatchDataProcessor.getPointEnumMatchMap(siteId, DeviceMatchTable.BATTERY.getCode());
|
||||
log.info("站点:{},单体电池数据:{}", siteId, records);
|
||||
List<EmsBatteryData> list = new ArrayList<>();
|
||||
List<EmsBatteryDataDailyLatest> dailyList = new ArrayList<>();
|
||||
List<EmsBatteryDataMinutes> minutesList = new ArrayList<>();
|
||||
@ -730,6 +728,15 @@ public class DeviceDataProcessServiceImpl extends AbstractBatteryDataProcessor i
|
||||
String batteryDeviceId = recordId + deviceId;
|
||||
// 点位匹配数据
|
||||
List<EmsPointMatch> pointMatchList = devicePointMatchDataProcessor.getDevicePointMatch(siteId, batteryDeviceId, DeviceMatchTable.BATTERY.getCode());
|
||||
if (CollectionUtils.isEmpty(pointMatchList)) {
|
||||
pointMatchList = devicePointMatchDataProcessor.getDeviceDefaultPointMatch(siteId, DeviceMatchTable.BATTERY.getCode());
|
||||
} else {
|
||||
Map<String, Object> newFields = new HashMap<>();
|
||||
for (Map.Entry<String, Object> entry : fields.entrySet()) {
|
||||
newFields.put(entry.getKey() + recordId, entry.getValue());
|
||||
}
|
||||
fields = newFields;
|
||||
}
|
||||
if (CollectionUtils.isEmpty(pointMatchList)) {
|
||||
log.info("未找到匹配的点位数据,无法处理单体电池数据,siteId: " + siteId + ",deviceId: " + batteryDeviceId);
|
||||
return;
|
||||
@ -739,7 +746,7 @@ public class DeviceDataProcessServiceImpl extends AbstractBatteryDataProcessor i
|
||||
batteryData.setDeviceId(recordId);
|
||||
batteryData.setBatteryCellId(recordId);
|
||||
|
||||
saveDeviceData(pointMatchList, fields, batteryData, pointEnumMatchMap);
|
||||
saveDeviceData(pointMatchList, fields, batteryData);
|
||||
|
||||
batteryData.setBatteryCluster(deviceId);
|
||||
batteryData.setBatteryPack(getStackDeviceId(deviceId));
|
||||
@ -803,12 +810,11 @@ public class DeviceDataProcessServiceImpl extends AbstractBatteryDataProcessor i
|
||||
log.info("未找到匹配的点位数据,无法处理PCS数据,siteId: " + siteId + ",deviceId: " + deviceId);
|
||||
return;
|
||||
}
|
||||
Map<String, List<EmsPointEnumMatch>> pointEnumMatchMap = devicePointMatchDataProcessor.getPointEnumMatchMap(siteId, DeviceMatchTable.PCS.getCode());
|
||||
|
||||
//pcs
|
||||
EmsPcsData pcsData = new EmsPcsData();
|
||||
|
||||
saveDeviceData(pointMatchList, obj, pcsData, pointEnumMatchMap);
|
||||
saveDeviceData(pointMatchList, obj, pcsData);
|
||||
|
||||
// 状态指示类
|
||||
pcsData.setBranchStatus(BranchStatus.NORMAL.getCode());
|
||||
@ -838,7 +844,7 @@ public class DeviceDataProcessServiceImpl extends AbstractBatteryDataProcessor i
|
||||
redisCache.setCacheObject(RedisKeyConstants.PCS + siteId + "_" + deviceId, pcsData);
|
||||
|
||||
// 同步更新PCS设备工作状态
|
||||
saveDeviceWorkStatus(deviceId, siteId, pcsData.getWorkStatus());
|
||||
saveDeviceWorkStatus(siteId, deviceId, DeviceMatchTable.PCS.getCode(), pcsData.getWorkStatus());
|
||||
|
||||
// if (SiteEnum.FX.getCode().equals(siteId)) {
|
||||
// //更新每日充放电数据
|
||||
@ -857,7 +863,6 @@ public class DeviceDataProcessServiceImpl extends AbstractBatteryDataProcessor i
|
||||
log.info("未找到匹配的点位数据,无法处理PCS支路数据,siteId: " + siteId + ",deviceId: " + deviceId);
|
||||
return;
|
||||
}
|
||||
Map<String, List<EmsPointEnumMatch>> pointEnumMatchMap = devicePointMatchDataProcessor.getPointEnumMatchMap(siteId, DeviceMatchTable.BRANCH.getCode());
|
||||
|
||||
//PCS支路
|
||||
for (Map.Entry<String, Map<String, Object>> record : records.entrySet()) {
|
||||
@ -869,7 +874,7 @@ public class DeviceDataProcessServiceImpl extends AbstractBatteryDataProcessor i
|
||||
data.setSiteId(siteId);
|
||||
data.setGridStatus(GridStatus.GRID.getCode());
|
||||
|
||||
saveDeviceData(pointMatchList, fields, data, pointEnumMatchMap);
|
||||
saveDeviceData(pointMatchList, fields, data);
|
||||
|
||||
data.setBranchId(recordId);
|
||||
data.setCreateBy("system");
|
||||
@ -898,13 +903,12 @@ public class DeviceDataProcessServiceImpl extends AbstractBatteryDataProcessor i
|
||||
log.info("未找到匹配的点位数据,无法处理LOAD总表数据,siteId: " + siteId + ",deviceId: " + deviceId);
|
||||
return;
|
||||
}
|
||||
Map<String, List<EmsPointEnumMatch>> pointEnumMatchMap = devicePointMatchDataProcessor.getPointEnumMatchMap(siteId, DeviceMatchTable.AMMETER.getCode());
|
||||
|
||||
EmsAmmeterData dataLoad = new EmsAmmeterData();
|
||||
// 更新时间
|
||||
dataLoad.setDataUpdateTime(dataUpdateTime);
|
||||
|
||||
saveDeviceData(pointMatchList, obj, dataLoad, pointEnumMatchMap);
|
||||
saveDeviceData(pointMatchList, obj, dataLoad);
|
||||
|
||||
dataLoad.setCreateBy("system");
|
||||
dataLoad.setCreateTime(DateUtils.getNowDate());
|
||||
@ -935,7 +939,6 @@ public class DeviceDataProcessServiceImpl extends AbstractBatteryDataProcessor i
|
||||
log.info("未找到匹配的点位数据,无法处理电池簇数据,siteId: " + siteId + ",deviceId: " + deviceId);
|
||||
return;
|
||||
}
|
||||
Map<String, List<EmsPointEnumMatch>> pointEnumMatchMap = devicePointMatchDataProcessor.getPointEnumMatchMap(siteId, DeviceMatchTable.CLUSTER.getCode());
|
||||
//BMSC 电池簇
|
||||
EmsBatteryCluster data = new EmsBatteryCluster();
|
||||
// 其他非 BigDecimal 字段
|
||||
@ -957,25 +960,36 @@ public class DeviceDataProcessServiceImpl extends AbstractBatteryDataProcessor i
|
||||
// 获取redis获取最新的BMSD数据
|
||||
Map<String, Object> stackObj = redisCache.getCacheObject(RedisKeyConstants.ORIGINAL_BMSD + siteId + "_" + stackDeviceId);
|
||||
data.setDeviceId(deviceId);
|
||||
saveDeviceData(pointMatchList, obj, data, pointEnumMatchMap);
|
||||
saveDeviceData(pointMatchList, obj, data);
|
||||
|
||||
// 取堆里面数据
|
||||
saveDeviceData(pointMatchList, stackObj, data, pointEnumMatchMap);
|
||||
saveDeviceData(pointMatchList, stackObj, data);
|
||||
|
||||
emsBatteryClusterMapper.insertEmsBatteryCluster(data);
|
||||
redisCache.setCacheObject(RedisKeyConstants.CLUSTER + siteId + "_" + deviceId, data);
|
||||
|
||||
// 同步更新设备工作状态
|
||||
saveDeviceWorkStatus(deviceId, siteId, data.getWorkStatus());
|
||||
saveDeviceWorkStatus(siteId, deviceId, DeviceMatchTable.CLUSTER.getCode(), data.getWorkStatus());
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void saveDeviceWorkStatus(String deviceId, String siteId, String workStatus) {
|
||||
private void saveDeviceWorkStatus(String siteId, String deviceId, String deviceCategory, String workStatus) {
|
||||
if (StringUtils.isEmpty(workStatus)) {
|
||||
return;
|
||||
}
|
||||
// Map<String, List<EmsPointEnumMatch>> pointEnumMatchMap = devicePointMatchDataProcessor.getPointEnumMatchMap(siteId, deviceCategory);
|
||||
// // 枚举值转换
|
||||
// List<EmsPointEnumMatch> pointEnumMatchList = pointEnumMatchMap.get("workStatus");
|
||||
// if (CollectionUtils.isNotEmpty(pointEnumMatchList) && workStatus != null) {
|
||||
// String finalMatchValue = workStatus.replace(".0", "");
|
||||
// Optional<EmsPointEnumMatch> enumMatch = pointEnumMatchList.stream()
|
||||
// .filter(data -> data.getDataEnumCode().equals(finalMatchValue)).findFirst();
|
||||
// if (enumMatch.isPresent()) {
|
||||
// workStatus = enumMatch.get().getEnumCode();
|
||||
// }
|
||||
// }
|
||||
EmsDevicesSetting emsDevicesSetting = emsDevicesSettingMapper.getDeviceBySiteAndDeviceId(deviceId, siteId);
|
||||
emsDevicesSetting.setWorkStatus(workStatus);
|
||||
emsDevicesSetting.setUpdatedAt(DateUtils.getNowDate());
|
||||
@ -1046,7 +1060,6 @@ public class DeviceDataProcessServiceImpl extends AbstractBatteryDataProcessor i
|
||||
log.info("未找到匹配的点位数据,无法处理电表数据,siteId: " + siteId + ",deviceId: " + deviceId);
|
||||
return;
|
||||
}
|
||||
Map<String, List<EmsPointEnumMatch>> pointEnumMatchMap = devicePointMatchDataProcessor.getPointEnumMatchMap(siteId, DeviceMatchTable.AMMETER.getCode());
|
||||
|
||||
// 获取上次数据,便于后面计算差值均无则默认0
|
||||
EmsAmmeterData lastAmmeterData = getLastAmmeterData(siteId, deviceId);
|
||||
@ -1055,7 +1068,7 @@ public class DeviceDataProcessServiceImpl extends AbstractBatteryDataProcessor i
|
||||
// 更新时间
|
||||
dataMete.setDataUpdateTime(dataUpdateTime);
|
||||
|
||||
saveDeviceData(pointMatchList, obj, dataMete, pointEnumMatchMap);
|
||||
saveDeviceData(pointMatchList, obj, dataMete);
|
||||
|
||||
dataMete.setCreateBy("system");
|
||||
dataMete.setCreateTime(DateUtils.getNowDate());
|
||||
@ -1584,12 +1597,11 @@ public class DeviceDataProcessServiceImpl extends AbstractBatteryDataProcessor i
|
||||
log.info("未找到匹配的点位数据,无法处理中水冷却告警数据,siteId: " + siteId + ",deviceId: " + deviceId);
|
||||
return;
|
||||
}
|
||||
Map<String, List<EmsPointEnumMatch>> pointEnumMatchMap = devicePointMatchDataProcessor.getPointEnumMatchMap(siteId, DeviceMatchTable.PCS.getCode());
|
||||
EmsPcsAlarmData pcsAlarmData = new EmsPcsAlarmData();
|
||||
// 更新时间
|
||||
pcsAlarmData.setDataTimestamp(dataUpdateTime);
|
||||
|
||||
saveDeviceData(pointMatchList, obj, pcsAlarmData, pointEnumMatchMap);
|
||||
saveDeviceData(pointMatchList, obj, pcsAlarmData);
|
||||
|
||||
pcsAlarmData.setCreateBy("system");
|
||||
pcsAlarmData.setCreateTime(DateUtils.getNowDate());
|
||||
@ -1611,13 +1623,12 @@ public class DeviceDataProcessServiceImpl extends AbstractBatteryDataProcessor i
|
||||
log.info("未找到匹配的点位数据,无法处理电池堆告警数据,siteId: " + siteId + ",deviceId: " + deviceId);
|
||||
return;
|
||||
}
|
||||
Map<String, List<EmsPointEnumMatch>> pointEnumMatchMap = devicePointMatchDataProcessor.getPointEnumMatchMap(siteId, DeviceMatchTable.STACK.getCode());
|
||||
|
||||
EmsStackAlarmData stackAlarmData = new EmsStackAlarmData();
|
||||
// 更新时间
|
||||
stackAlarmData.setDataTimestamp(dataUpdateTime);
|
||||
|
||||
saveDeviceData(pointMatchList, obj, stackAlarmData, pointEnumMatchMap);
|
||||
saveDeviceData(pointMatchList, obj, stackAlarmData);
|
||||
|
||||
stackAlarmData.setCreateBy("system");
|
||||
stackAlarmData.setCreateTime(DateUtils.getNowDate());
|
||||
@ -1638,12 +1649,11 @@ public class DeviceDataProcessServiceImpl extends AbstractBatteryDataProcessor i
|
||||
log.info("未找到匹配的点位数据,无法处理电池簇告警数据,siteId: " + siteId + ",deviceId: " + deviceId);
|
||||
return;
|
||||
}
|
||||
Map<String, List<EmsPointEnumMatch>> pointEnumMatchMap = devicePointMatchDataProcessor.getPointEnumMatchMap(siteId, DeviceMatchTable.CLUSTER.getCode());
|
||||
EmsClusterAlarmData clusterAlarmData = new EmsClusterAlarmData();
|
||||
// 更新时间
|
||||
clusterAlarmData.setDataTimestamp(dataUpdateTime);
|
||||
|
||||
saveDeviceData(pointMatchList, obj, clusterAlarmData, pointEnumMatchMap);
|
||||
saveDeviceData(pointMatchList, obj, clusterAlarmData);
|
||||
|
||||
clusterAlarmData.setCreateBy("system");
|
||||
clusterAlarmData.setCreateTime(DateUtils.getNowDate());
|
||||
@ -1665,13 +1675,12 @@ public class DeviceDataProcessServiceImpl extends AbstractBatteryDataProcessor i
|
||||
log.info("未找到匹配的点位数据,无法处理中水冷却告警数据,siteId: " + siteId + ",deviceId: " + deviceId);
|
||||
return;
|
||||
}
|
||||
Map<String, List<EmsPointEnumMatch>> pointEnumMatchMap = devicePointMatchDataProcessor.getPointEnumMatchMap(siteId, DeviceMatchTable.COOLING.getCode());
|
||||
|
||||
EmsCoolingAlarmData coolingAlarmData = new EmsCoolingAlarmData();
|
||||
// 更新时间
|
||||
coolingAlarmData.setDataTimestamp(dataUpdateTime);
|
||||
|
||||
saveDeviceData(pointMatchList, obj, coolingAlarmData, pointEnumMatchMap);
|
||||
saveDeviceData(pointMatchList, obj, coolingAlarmData);
|
||||
|
||||
coolingAlarmData.setCreateBy("system");
|
||||
coolingAlarmData.setCreateTime(DateUtils.getNowDate());
|
||||
|
||||
@ -33,6 +33,7 @@ import com.xzzn.ems.mapper.EmsStrategyRunningMapper;
|
||||
import com.xzzn.ems.mapper.EmsStrategyTempMapper;
|
||||
import com.xzzn.ems.service.IEmsEnergyPriceConfigService;
|
||||
import com.xzzn.ems.service.ISingleSiteService;
|
||||
import com.xzzn.ems.utils.DevicePointMatchDataProcessor;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
@ -101,6 +102,8 @@ public class SingleSiteServiceImpl implements ISingleSiteService {
|
||||
private EmsEnergyPriceConfigMapper emsEnergyPriceConfigMapper;
|
||||
@Autowired
|
||||
private IEmsEnergyPriceConfigService iEmsEnergyPriceConfigService;
|
||||
@Autowired
|
||||
private DevicePointMatchDataProcessor devicePointMatchDataProcessor;
|
||||
|
||||
@Override
|
||||
public SiteMonitorHomeVo getSiteMonitorDataVo(String siteId) {
|
||||
@ -489,6 +492,9 @@ public class SingleSiteServiceImpl implements ISingleSiteService {
|
||||
pcsDetailInfoVo.setAlarmNum(alarmNum);
|
||||
pcsDetailInfoVo.setDeviceStatus(pcsDevice.get("deviceStatus") == null ? "" : pcsDevice.get("deviceStatus").toString());
|
||||
|
||||
// 处理枚举匹配字段
|
||||
devicePointMatchDataProcessor.convertFieldValueToEnumMatch(siteId, DeviceCategory.PCS.getCode(), pcsDetailInfoVo);
|
||||
|
||||
pcsDetailInfoVoList.add(pcsDetailInfoVo);
|
||||
}
|
||||
}
|
||||
@ -535,6 +541,10 @@ public class SingleSiteServiceImpl implements ISingleSiteService {
|
||||
// 告警设备点位个数
|
||||
int alarmNum = emsPointMatchMapper.getDevicePointAlarmNum(siteId, stackId, DeviceCategory.STACK.getCode());
|
||||
bmsOverViewVo.setAlarmNum(alarmNum);
|
||||
|
||||
// 处理枚举匹配字段
|
||||
devicePointMatchDataProcessor.convertFieldValueToEnumMatch(siteId, DeviceCategory.STACK.getCode(), bmsOverViewVo);
|
||||
|
||||
bmsOverViewVoList.add(bmsOverViewVo);
|
||||
}
|
||||
}
|
||||
@ -594,6 +604,10 @@ public class SingleSiteServiceImpl implements ISingleSiteService {
|
||||
// 告警设备点位个数
|
||||
int alarmNum = emsPointMatchMapper.getDevicePointAlarmNum(siteId, clusterId, DeviceCategory.CLUSTER.getCode());
|
||||
bmsBatteryClusterVo.setAlarmNum(alarmNum);
|
||||
|
||||
// 处理枚举匹配字段
|
||||
devicePointMatchDataProcessor.convertFieldValueToEnumMatch(siteId, DeviceCategory.CLUSTER.getCode(), bmsBatteryClusterVo);
|
||||
|
||||
bmsBatteryClusterVoList.add(bmsBatteryClusterVo);
|
||||
}
|
||||
}
|
||||
@ -746,6 +760,10 @@ public class SingleSiteServiceImpl implements ISingleSiteService {
|
||||
ammeterDataVo.setAlarmNum(alarmNum);
|
||||
// 设置表数据
|
||||
dealAmmeterData(ammeterData,ammeterDataVo);
|
||||
|
||||
// 处理枚举匹配字段
|
||||
devicePointMatchDataProcessor.convertFieldValueToEnumMatch(siteId, DeviceCategory.AMMETER.getCode(), ammeterDataVo);
|
||||
|
||||
ammeterResponse.add(ammeterDataVo);
|
||||
}
|
||||
return ammeterResponse;
|
||||
@ -836,6 +854,10 @@ public class SingleSiteServiceImpl implements ISingleSiteService {
|
||||
// 告警设备点位个数
|
||||
int alarmNum = emsPointMatchMapper.getDevicePointAlarmNum(siteId, dhDeviceId, DeviceCategory.DH.getCode());
|
||||
dhDataVo.setAlarmNum(alarmNum);
|
||||
|
||||
// 处理枚举匹配字段
|
||||
devicePointMatchDataProcessor.convertFieldValueToEnumMatch(siteId, DeviceCategory.DH.getCode(), dhDataVo);
|
||||
|
||||
emsDhDataList.add(dhDataVo);
|
||||
}
|
||||
return emsDhDataList;
|
||||
@ -865,6 +887,10 @@ public class SingleSiteServiceImpl implements ISingleSiteService {
|
||||
xfDataVo.setAlarmNum(alarmNum);
|
||||
}
|
||||
xfDataVo.setEmsCommunicationStatus(xfDevice.get("communicationStatus") == null ? "" : xfDevice.get("communicationStatus").toString());
|
||||
|
||||
// 处理枚举匹配字段
|
||||
devicePointMatchDataProcessor.convertFieldValueToEnumMatch(siteId, DeviceCategory.XF.getCode(), xfData);
|
||||
|
||||
emsXfDataList.add(xfDataVo);
|
||||
}
|
||||
return emsXfDataList;
|
||||
@ -888,6 +914,10 @@ public class SingleSiteServiceImpl implements ISingleSiteService {
|
||||
int alarmNum = emsPointMatchMapper.getDevicePointAlarmNum(siteId, emsDeviceId, DeviceCategory.EMS.getCode());
|
||||
emsDataVo.setAlarmNum(alarmNum);
|
||||
}
|
||||
|
||||
// 处理枚举匹配字段
|
||||
devicePointMatchDataProcessor.convertFieldValueToEnumMatch(siteId, DeviceCategory.EMS.getCode(), emsDataVo);
|
||||
|
||||
emsDataList.add(emsDataVo);
|
||||
}
|
||||
return emsDataList;
|
||||
|
||||
@ -21,6 +21,7 @@ import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
@ -79,6 +80,14 @@ public class DevicePointMatchDataProcessor {
|
||||
return null;
|
||||
}
|
||||
|
||||
public List<EmsPointMatch> getDeviceDefaultPointMatch(String siteId, String deviceCategory) {
|
||||
List<EmsPointMatch> pointMatchList = redisCache.getCacheList(getPointMacthCacheKey(siteId, null, deviceCategory));
|
||||
if (CollectionUtils.isEmpty(pointMatchList)) {
|
||||
pointMatchList = emsPointMatchMapper.getDevicePointMatchList(siteId, null, deviceCategory);
|
||||
}
|
||||
return pointMatchList;
|
||||
}
|
||||
|
||||
public List<EmsPointMatch> getDevicePointMatch(String siteId, String deviceId, String deviceCategory) {
|
||||
return getDevicePointMatch(siteId, deviceId, deviceCategory, false);
|
||||
}
|
||||
@ -206,7 +215,11 @@ public class DevicePointMatchDataProcessor {
|
||||
*/
|
||||
public static String getPointMacthCacheKey(String siteId, String deviceId, String deviceCategory)
|
||||
{
|
||||
return RedisKeyConstants.POINT_MATCH + deviceCategory + "_" + siteId + "_" + deviceId;
|
||||
if (StringUtils.isEmpty(deviceId)) {
|
||||
return RedisKeyConstants.POINT_MATCH + deviceCategory + "_" + siteId;
|
||||
} else {
|
||||
return RedisKeyConstants.POINT_MATCH + deviceCategory + "_" + siteId + "_" + deviceId;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -219,4 +232,42 @@ public class DevicePointMatchDataProcessor {
|
||||
{
|
||||
return RedisKeyConstants.POINT_ENUM_MATCH + deviceCategory + "_" + siteId;
|
||||
}
|
||||
|
||||
/**
|
||||
* 转换字段值为配置枚举值
|
||||
*/
|
||||
public void convertFieldValueToEnumMatch(String siteId, String deviceCategory, Object entity) {
|
||||
|
||||
Map<String, List<EmsPointEnumMatch>> pointEnumMatchMap = this.getPointEnumMatchMap(siteId, deviceCategory);
|
||||
Field[] fields = entity.getClass().getDeclaredFields();
|
||||
for (Field field : fields) {
|
||||
String fieldName = field.getName();
|
||||
if (pointEnumMatchMap.containsKey(fieldName)) {
|
||||
// 处理匹配的字段名,并设置值
|
||||
field.setAccessible(true); // 允许访问私有字段
|
||||
try {
|
||||
// 从原始数据中获取匹配值
|
||||
Object matchValue = field.get(entity);
|
||||
List<EmsPointEnumMatch> pointEnumMatchList = pointEnumMatchMap.get(fieldName);
|
||||
if (CollectionUtils.isNotEmpty(pointEnumMatchList) && matchValue != null) {
|
||||
String finalMatchValue = String.valueOf(matchValue).replace(".0", "");
|
||||
Optional<EmsPointEnumMatch> enumMatch = pointEnumMatchList.stream()
|
||||
.filter(data -> data.getDataEnumCode().equals(finalMatchValue)).findFirst();
|
||||
if (enumMatch.isPresent()) {
|
||||
matchValue = enumMatch.get().getEnumCode();
|
||||
}
|
||||
}
|
||||
if (matchValue == null) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// 设置字段值
|
||||
field.set(entity, matchValue);
|
||||
} catch (IllegalAccessException e) {
|
||||
log.warn("convertFieldValueToEnumMatch 设置字段值时出错", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -212,7 +212,7 @@
|
||||
battery_pack, battery_cluster, battery_cell_id,
|
||||
voltage, temperature, soc, soh, data_timestamp,
|
||||
create_by, create_time, update_by, update_time,
|
||||
remark, site_id, device_id, cluster_device_id, inter_resistance
|
||||
remark, site_id, device_id, cluster_device_id, inter_resistance, current
|
||||
) VALUES
|
||||
<foreach collection="list" item="item" separator=",">
|
||||
(
|
||||
|
||||
@ -522,8 +522,13 @@
|
||||
<select id="getDevicePointMatchList" resultMap="EmsPointMatchResult">
|
||||
<include refid="selectEmsPointMatchVo"/>
|
||||
where site_id = #{siteId}
|
||||
and device_id = #{deviceId}
|
||||
and device_category = #{deviceCategory}
|
||||
<if test="deviceId != null">
|
||||
and device_id = #{deviceId}
|
||||
</if>
|
||||
<if test="deviceId == null">
|
||||
and device_id is null
|
||||
</if>
|
||||
and device_category = #{deviceCategory}
|
||||
</select>
|
||||
|
||||
<select id="selectEmsPointMatchExportList" parameterType="EmsPointMatch" resultType="com.xzzn.ems.domain.vo.DevicePointMatchExportVo">
|
||||
|
||||
Reference in New Issue
Block a user