From 6ae912666256b702fbb30085c23ee702aba94359 Mon Sep 17 00:00:00 2001 From: dashixiong Date: Sat, 24 Jan 2026 00:20:27 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9B=9E=E6=BB=9A=E5=88=B0=2019=EF=BC=9A29?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/DeviceDataProcessServiceImpl.java | 111 ++++-------------- 1 file changed, 21 insertions(+), 90 deletions(-) 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 c53640b..ce08e73 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 @@ -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 obj = JSON.parseObject(dataJson, new TypeReference>() { }); - log.info("解析后的数据键数量:{}", obj.size()); - List dataList = new ArrayList<>(); // 前一个小时 @@ -471,51 +459,32 @@ public class DeviceDataProcessServiceImpl extends AbstractBatteryDataProcessor i Map minutesMap = new HashMap<>(); String clusterId = getClusterDeviceIdByParentDeviceId(siteId, deviceId); - log.info("clusterId:{}", clusterId); - - int dtdcCount = 0; - int matchedCount = 0; - for (Map.Entry 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);