单体电池解析数据改动;枚举值匹配转换改动

This commit is contained in:
zq
2026-01-24 20:51:16 +08:00
parent 6ae9126662
commit dd060b0abf
6 changed files with 156 additions and 61 deletions

View File

@ -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());

View File

@ -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;

View File

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

View File

@ -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=",">
(

View File

@ -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">