diff --git a/ems-admin/src/main/resources/application-prod.yml b/ems-admin/src/main/resources/application-prod.yml index 3c97d98..fee9ed4 100644 --- a/ems-admin/src/main/resources/application-prod.yml +++ b/ems-admin/src/main/resources/application-prod.yml @@ -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 diff --git a/ems-system/src/main/java/com/xzzn/ems/service/impl/DeviceDataProcessServiceImpl.java b/ems-system/src/main/java/com/xzzn/ems/service/impl/DeviceDataProcessServiceImpl.java index ce08e73..a52209a 100644 --- a/ems-system/src/main/java/com/xzzn/ems/service/impl/DeviceDataProcessServiceImpl.java +++ b/ems-system/src/main/java/com/xzzn/ems/service/impl/DeviceDataProcessServiceImpl.java @@ -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> 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> 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> 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> 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> 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 pointMatchList, Map obj, - Object entity, Map> pointEnumMatchMap) { + private void saveDeviceData(List pointMatchList, Map 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 pointEnumMatchList = pointEnumMatchMap.get(fieldName); - if (CollectionUtils.isNotEmpty(pointEnumMatchList) && matchValue != null) { - String finalMatchValue = String.valueOf(matchValue).replace(".0", ""); - Optional 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> 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> records = processData(JSON.parseObject(dataJson, new TypeReference>() { })); - Map> pointEnumMatchMap = devicePointMatchDataProcessor.getPointEnumMatchMap(siteId, DeviceMatchTable.BATTERY.getCode()); + log.info("站点:{},单体电池数据:{}", siteId, records); List list = new ArrayList<>(); List dailyList = new ArrayList<>(); List minutesList = new ArrayList<>(); @@ -730,6 +728,15 @@ public class DeviceDataProcessServiceImpl extends AbstractBatteryDataProcessor i String batteryDeviceId = recordId + deviceId; // 点位匹配数据 List pointMatchList = devicePointMatchDataProcessor.getDevicePointMatch(siteId, batteryDeviceId, DeviceMatchTable.BATTERY.getCode()); + if (CollectionUtils.isEmpty(pointMatchList)) { + pointMatchList = devicePointMatchDataProcessor.getDeviceDefaultPointMatch(siteId, DeviceMatchTable.BATTERY.getCode()); + } else { + Map newFields = new HashMap<>(); + for (Map.Entry 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> 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> pointEnumMatchMap = devicePointMatchDataProcessor.getPointEnumMatchMap(siteId, DeviceMatchTable.BRANCH.getCode()); //PCS支路 for (Map.Entry> 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> 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> 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 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> pointEnumMatchMap = devicePointMatchDataProcessor.getPointEnumMatchMap(siteId, deviceCategory); +// // 枚举值转换 +// List pointEnumMatchList = pointEnumMatchMap.get("workStatus"); +// if (CollectionUtils.isNotEmpty(pointEnumMatchList) && workStatus != null) { +// String finalMatchValue = workStatus.replace(".0", ""); +// Optional 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> 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> 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> 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> 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> 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()); diff --git a/ems-system/src/main/java/com/xzzn/ems/service/impl/SingleSiteServiceImpl.java b/ems-system/src/main/java/com/xzzn/ems/service/impl/SingleSiteServiceImpl.java index 4041379..bff693f 100644 --- a/ems-system/src/main/java/com/xzzn/ems/service/impl/SingleSiteServiceImpl.java +++ b/ems-system/src/main/java/com/xzzn/ems/service/impl/SingleSiteServiceImpl.java @@ -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; diff --git a/ems-system/src/main/java/com/xzzn/ems/utils/DevicePointMatchDataProcessor.java b/ems-system/src/main/java/com/xzzn/ems/utils/DevicePointMatchDataProcessor.java index 64aa1d2..a34ff2c 100644 --- a/ems-system/src/main/java/com/xzzn/ems/utils/DevicePointMatchDataProcessor.java +++ b/ems-system/src/main/java/com/xzzn/ems/utils/DevicePointMatchDataProcessor.java @@ -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 getDeviceDefaultPointMatch(String siteId, String deviceCategory) { + List pointMatchList = redisCache.getCacheList(getPointMacthCacheKey(siteId, null, deviceCategory)); + if (CollectionUtils.isEmpty(pointMatchList)) { + pointMatchList = emsPointMatchMapper.getDevicePointMatchList(siteId, null, deviceCategory); + } + return pointMatchList; + } + public List 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> 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 pointEnumMatchList = pointEnumMatchMap.get(fieldName); + if (CollectionUtils.isNotEmpty(pointEnumMatchList) && matchValue != null) { + String finalMatchValue = String.valueOf(matchValue).replace(".0", ""); + Optional 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); + } + } + } + } + } diff --git a/ems-system/src/main/resources/mapper/ems/EmsBatteryDataMapper.xml b/ems-system/src/main/resources/mapper/ems/EmsBatteryDataMapper.xml index 5776967..8794f26 100644 --- a/ems-system/src/main/resources/mapper/ems/EmsBatteryDataMapper.xml +++ b/ems-system/src/main/resources/mapper/ems/EmsBatteryDataMapper.xml @@ -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 ( diff --git a/ems-system/src/main/resources/mapper/ems/EmsPointMatchMapper.xml b/ems-system/src/main/resources/mapper/ems/EmsPointMatchMapper.xml index ef966be..6abab7a 100644 --- a/ems-system/src/main/resources/mapper/ems/EmsPointMatchMapper.xml +++ b/ems-system/src/main/resources/mapper/ems/EmsPointMatchMapper.xml @@ -522,8 +522,13 @@