diff --git a/ems-common/src/main/java/com/xzzn/common/constant/RedisKeyConstants.java b/ems-common/src/main/java/com/xzzn/common/constant/RedisKeyConstants.java index 46971ca..09e84e5 100644 --- a/ems-common/src/main/java/com/xzzn/common/constant/RedisKeyConstants.java +++ b/ems-common/src/main/java/com/xzzn/common/constant/RedisKeyConstants.java @@ -67,6 +67,8 @@ public class RedisKeyConstants /** topic 内没有数据设备维度告警 */ public static final String TOPIC_EMPTY_ALARM_RECORD = "topic_empty_"; + /** 设备信息初始化 */ + public static final String INIT_DEVICE_INFO = "init_device_info"; /** 告警匹配信息 */ public static final String ALARM_MATCH_INFO = "alarm_message_info"; diff --git a/ems-framework/src/main/java/com/xzzn/framework/manager/ModbusConnectionManager.java b/ems-framework/src/main/java/com/xzzn/framework/manager/ModbusConnectionManager.java index 901dec7..6ca81fc 100644 --- a/ems-framework/src/main/java/com/xzzn/framework/manager/ModbusConnectionManager.java +++ b/ems-framework/src/main/java/com/xzzn/framework/manager/ModbusConnectionManager.java @@ -4,6 +4,7 @@ import com.ghgande.j2mod.modbus.net.TCPMasterConnection; import com.xzzn.ems.domain.EmsDevicesSetting; import com.xzzn.ems.mapper.EmsDevicesSettingMapper; import com.xzzn.ems.service.IEmsAlarmRecordsService; +import com.xzzn.ems.service.IEmsDeviceSettingService; import com.xzzn.ems.service.IEmsEnergyPriceConfigService; import org.apache.commons.pool2.impl.GenericObjectPool; import org.slf4j.Logger; @@ -41,6 +42,8 @@ public class ModbusConnectionManager implements ApplicationRunner { private IEmsAlarmRecordsService iEmsAlarmRecordsService; @Autowired private IEmsEnergyPriceConfigService iEmsEnergyPriceConfigService; + @Autowired + private IEmsDeviceSettingService iEmsDeviceSettingService; @Override public void run(ApplicationArguments args) throws Exception { @@ -58,6 +61,8 @@ public class ModbusConnectionManager implements ApplicationRunner { } private void initData() { + // 初始化-设备信息 + iEmsDeviceSettingService.initDeviceInfo(); // 初始化-告警数据 iEmsAlarmRecordsService.initAlarmMatchInfo(); // 初始化当月电价 diff --git a/ems-system/src/main/java/com/xzzn/ems/service/IEmsDeviceSettingService.java b/ems-system/src/main/java/com/xzzn/ems/service/IEmsDeviceSettingService.java index eb21c9e..9540a9b 100644 --- a/ems-system/src/main/java/com/xzzn/ems/service/IEmsDeviceSettingService.java +++ b/ems-system/src/main/java/com/xzzn/ems/service/IEmsDeviceSettingService.java @@ -7,6 +7,7 @@ import com.xzzn.ems.domain.vo.PointDataRequest; import com.xzzn.ems.domain.vo.PointQueryResponse; import java.util.List; +import java.util.Map; /** * 设备信息 服务层 @@ -28,4 +29,6 @@ public interface IEmsDeviceSettingService public List getSingleSiteDevicePoints(PointDataRequest request); public List getSiteAllDeviceCategory(String siteId); + // 初始化设备信息 + public Map> initDeviceInfo(); } diff --git a/ems-system/src/main/java/com/xzzn/ems/service/impl/DDSDataProcessServiceImpl.java b/ems-system/src/main/java/com/xzzn/ems/service/impl/DDSDataProcessServiceImpl.java index 06cf38e..f066353 100644 --- a/ems-system/src/main/java/com/xzzn/ems/service/impl/DDSDataProcessServiceImpl.java +++ b/ems-system/src/main/java/com/xzzn/ems/service/impl/DDSDataProcessServiceImpl.java @@ -17,6 +17,7 @@ import com.xzzn.ems.domain.vo.EnergyPriceVo; import com.xzzn.ems.mapper.*; import com.xzzn.ems.service.IDDSDataProcessService; import com.xzzn.ems.service.IEmsAlarmRecordsService; +import com.xzzn.ems.service.IEmsDeviceSettingService; import com.xzzn.ems.utils.AbstractBatteryDataProcessor; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -81,6 +82,8 @@ public class DDSDataProcessServiceImpl extends AbstractBatteryDataProcessor impl private IEmsAlarmRecordsService iEmsAlarmRecordsService; @Autowired private EmsDailyEnergyDataMapper emsDailyEnergyDataMapper; + @Autowired + private IEmsDeviceSettingService iEmsDeviceSettingService; public DDSDataProcessServiceImpl(ObjectMapper objectMapper) { super(objectMapper); @@ -92,6 +95,8 @@ public class DDSDataProcessServiceImpl extends AbstractBatteryDataProcessor impl String deviceId = obj.get("Device").toString(); String jsonData = obj.get("Data").toString(); + Long timestamp = Long.valueOf(obj.get("timestamp").toString()); + Date dataUpdateTime = DateUtils.convertUpdateTime(timestamp); log.info("deviceId:" + deviceId); boolean isEmpty = checkJsonDataEmpty(jsonData); @@ -108,7 +113,7 @@ public class DDSDataProcessServiceImpl extends AbstractBatteryDataProcessor impl if (deviceId.contains("BMSD")) { batteryStackDataProcess(deviceId, jsonData); batteryGroupDataProcess(deviceId, jsonData); - batteryDataProcess(deviceId, jsonData); + batteryDataProcess(deviceId, jsonData, dataUpdateTime); } else if (deviceId.contains("PCS")) { pcsDataProcess(deviceId, jsonData); pcsBranchDataProcess(deviceId, jsonData); @@ -293,7 +298,7 @@ public class DDSDataProcessServiceImpl extends AbstractBatteryDataProcessor impl break; } } - private void batteryDataProcess(String deviceId, String dataJson) { + private void batteryDataProcess(String deviceId, String dataJson, Date dataUpdateTime) { //电池组 Map obj = JSON.parseObject(dataJson, new TypeReference>() { }); @@ -308,6 +313,7 @@ public class DDSDataProcessServiceImpl extends AbstractBatteryDataProcessor impl Map dailyMap = new HashMap<>(); Map minutesMap = new HashMap<>(); + String clusterId = getClusterDeviceIdByParentDeviceId(deviceId); for (Map.Entry entry : obj.entrySet()) { String key = entry.getKey(); @@ -319,10 +325,10 @@ public class DDSDataProcessServiceImpl extends AbstractBatteryDataProcessor impl EmsBatteryData data = dataMap.getOrDefault(batteryCellId, new EmsBatteryData()); if (StringUtils.isNotEmpty(batteryCellId)) { - data.setDataTimestamp(DateUtils.getNowDate()); + data.setDataTimestamp(dataUpdateTime); data.setBatteryPack(deviceId); - data.setBatteryCluster("BMSC01");// 写死 - data.setClusterDeviceId("BMSC01"); + data.setBatteryCluster(clusterId); + data.setClusterDeviceId(clusterId); data.setBatteryCellId(batteryCellId); data.setSiteId(SITE_ID); data.setDeviceId(batteryCellId); @@ -352,8 +358,8 @@ public class DDSDataProcessServiceImpl extends AbstractBatteryDataProcessor impl dataList = new ArrayList<>(dataMap.values()); emsBatteryDataMapper.insertEmsBatteryDataList(new ArrayList<>(dataList)); - redisCache.deleteList(RedisKeyConstants.BATTERY + SITE_ID + "_" + "BMSC01"); - redisCache.setCacheList(RedisKeyConstants.BATTERY + SITE_ID + "_" + "BMSC01" , dataList); + redisCache.deleteList(RedisKeyConstants.BATTERY + SITE_ID + "_" + clusterId); + redisCache.setCacheList(RedisKeyConstants.BATTERY + SITE_ID + "_" + clusterId , dataList); } // 批量处理每日最新数据 List dailyList = new ArrayList<>(dailyMap.values()); @@ -376,6 +382,26 @@ public class DDSDataProcessServiceImpl extends AbstractBatteryDataProcessor impl } } + private String getClusterDeviceIdByParentDeviceId(String deviceId) { + String clusterId = "BMSC01"; + Map> map = redisCache.getCacheObject(RedisKeyConstants.INIT_DEVICE_INFO); + if (map == null || map.isEmpty()) { + map = iEmsDeviceSettingService.initDeviceInfo(); + } + // 不为空,则查找子类的簇id + if (map != null && !map.isEmpty()) { + List list = map.get(SITE_ID); + if (list != null && list.size() > 0) { + for (EmsDevicesSetting emsDevicesSetting : list) { + if (deviceId.equals(emsDevicesSetting.getParentId())) { + clusterId = emsDevicesSetting.getDeviceId(); + } + } + } + } + return clusterId; + } + private void setDTDCPropertyValue(EmsBatteryData data, String property, Object value) { BigDecimal numberValue = null; if (value instanceof Number) { @@ -416,7 +442,7 @@ public class DDSDataProcessServiceImpl extends AbstractBatteryDataProcessor impl data.setSiteId(SITE_ID); // BMSC02 电流电压功率 deviceId = "BMSC02"; - String stackDeviceId = getDeviceParent(deviceId, SITE_ID); + String stackDeviceId = getDeviceParent(deviceId); if (StringUtils.isNotBlank(stackDeviceId)) { data.setStackDeviceId(stackDeviceId); } else { @@ -438,7 +464,7 @@ public class DDSDataProcessServiceImpl extends AbstractBatteryDataProcessor impl // BMSC01 电流电压功率 deviceId = "BMSC01"; - stackDeviceId = getDeviceParent(deviceId, SITE_ID); + stackDeviceId = getDeviceParent(deviceId); if (StringUtils.isNotBlank(stackDeviceId)) { data.setStackDeviceId(stackDeviceId); } else { @@ -469,16 +495,27 @@ public class DDSDataProcessServiceImpl extends AbstractBatteryDataProcessor impl redisCache.setCacheObject(RedisKeyConstants.CLUSTER + SITE_ID + "_" +deviceId, data); } - private String getDeviceParent(String deviceId,String siteId) { - EmsDevicesSetting joken = new EmsDevicesSetting(); - joken.setDeviceId(deviceId); - joken.setSiteId(siteId); - List up = emsDevicesSettingMapper.selectEmsDevicesSettingList(joken); - String stackDeviceId = ""; - if (up != null && up.size() >0) { - stackDeviceId = up.get(0).getParentId(); + private String getDeviceParent(String deviceId) { + Map> map = redisCache.getCacheObject(RedisKeyConstants.INIT_DEVICE_INFO); + if (map == null || map.isEmpty()) { + map = iEmsDeviceSettingService.initDeviceInfo(); + } + // 不为空,则查找父类 + String stackDeviceId = "1"; + if (map != null && !map.isEmpty()) { + List list = map.get(SITE_ID); + if (list == null || list.isEmpty()) { + EmsDevicesSetting deviceInfo = new EmsDevicesSetting(); + deviceInfo.setDeviceId(deviceId); + deviceInfo.setSiteId(SITE_ID); + list = emsDevicesSettingMapper.selectEmsDevicesSettingList(deviceInfo); + if (list == null || list.isEmpty()) { + return stackDeviceId; + } + } + stackDeviceId = list.get(0).getParentId(); if (stackDeviceId == null || stackDeviceId.isEmpty()) { - stackDeviceId = "1"; + return stackDeviceId; } } return stackDeviceId;