From 73c668709ae6d531274132b76d29d68e76b1f68a Mon Sep 17 00:00:00 2001 From: zq Date: Thu, 11 Dec 2025 16:13:39 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B9=B3=E5=8F=B0=E4=BF=AE=E6=94=B9=E6=84=8F?= =?UTF-8?q?=E8=A7=8120251120-=E7=82=B9=E4=BD=8D=E4=B8=8A=E4=BC=A0=E6=A0=B9?= =?UTF-8?q?=E6=8D=AE=E8=AE=BE=E5=A4=87ID=E5=8C=BA=E5=88=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/constant/RedisKeyConstants.java | 8 ++++++ .../com/xzzn/ems/domain/EmsPointMatch.java | 13 ++++++++++ .../ems/domain/vo/ImportPointDataRequest.java | 11 ++++++++ .../xzzn/ems/mapper/EmsPointMatchMapper.java | 5 ++-- .../impl/DeviceDataProcessServiceImpl.java | 6 +++++ .../impl/EmsDeviceSettingServiceImpl.java | 26 ++++++++++++++----- .../impl/EmsPointMatchServiceImpl.java | 16 ++++++++---- .../utils/DevicePointMatchDataProcessor.java | 10 +++---- .../mapper/ems/EmsPointMatchMapper.xml | 15 ++++++++++- 9 files changed, 90 insertions(+), 20 deletions(-) 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 c9d4a11..6d124f9 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 @@ -87,6 +87,11 @@ public class RedisKeyConstants */ public static final String ORIGINAL_MQTT_DATA = "MQTT_"; + /** + * 存放单个设备同步过来的告警点位原始数据-最晚一次数据 + */ + public static final String ORIGINAL_MQTT_DATA_ALARM = "MQTT_ALARM_"; + /** 存放订阅失败告警信息 */ public static final String TOPIC_FAILED_ALRAM_RECORD = "topic_failed_"; /** topic 内没有数据设备维度告警 */ @@ -110,4 +115,7 @@ public class RedisKeyConstants /** 每个设备最新数据-设置失效时间-判断是否正常同步数据 */ public static final String SYNC_DATA= "SYNC_DATA_"; + + /** 每个设备最新数据-设置失效时间-判断是否正常同步数据 */ + public static final String SYNC_DATA_ALARM = "SYNC_DATA_ALARM_"; } diff --git a/ems-system/src/main/java/com/xzzn/ems/domain/EmsPointMatch.java b/ems-system/src/main/java/com/xzzn/ems/domain/EmsPointMatch.java index 3d80901..b12eb32 100644 --- a/ems-system/src/main/java/com/xzzn/ems/domain/EmsPointMatch.java +++ b/ems-system/src/main/java/com/xzzn/ems/domain/EmsPointMatch.java @@ -74,6 +74,10 @@ public class EmsPointMatch extends BaseEntity @Excel(name = "是否告警点位", readConverterExp = "0=否,1=是") private Integer isAlarm; + /** 设备唯一标识符 */ + @Excel(name = "设备唯一标识符") + private String deviceId; + public void setId(Long id) { this.id = id; @@ -220,6 +224,14 @@ public class EmsPointMatch extends BaseEntity this.isAlarm = isAlarm; } + public String getDeviceId() { + return deviceId; + } + + public void setDeviceId(String deviceId) { + this.deviceId = deviceId; + } + @Override public String toString() { return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) @@ -243,6 +255,7 @@ public class EmsPointMatch extends BaseEntity .append("updateTime", getUpdateTime()) .append("remark", getRemark()) .append("isAlarm", getIsAlarm()) + .append("deviceId", getDeviceId()) .toString(); } } diff --git a/ems-system/src/main/java/com/xzzn/ems/domain/vo/ImportPointDataRequest.java b/ems-system/src/main/java/com/xzzn/ems/domain/vo/ImportPointDataRequest.java index 3406156..d5a6416 100644 --- a/ems-system/src/main/java/com/xzzn/ems/domain/vo/ImportPointDataRequest.java +++ b/ems-system/src/main/java/com/xzzn/ems/domain/vo/ImportPointDataRequest.java @@ -17,6 +17,9 @@ public class ImportPointDataRequest { /** 站点id */ @NotBlank(message = "站点ID不能为空") private String siteId; + /** 设备id */ + @NotBlank(message = "设备ID不能为空") + private String deviceId; /** 设备类型 */ @NotBlank(message = "设备类型不能为空") private String deviceCategory; @@ -32,6 +35,14 @@ public class ImportPointDataRequest { this.siteId = siteId; } + public String getDeviceId() { + return deviceId; + } + + public void setDeviceId(String deviceId) { + this.deviceId = deviceId; + } + public String getDeviceCategory() { return deviceCategory; } diff --git a/ems-system/src/main/java/com/xzzn/ems/mapper/EmsPointMatchMapper.java b/ems-system/src/main/java/com/xzzn/ems/mapper/EmsPointMatchMapper.java index 3614287..e7b3795 100644 --- a/ems-system/src/main/java/com/xzzn/ems/mapper/EmsPointMatchMapper.java +++ b/ems-system/src/main/java/com/xzzn/ems/mapper/EmsPointMatchMapper.java @@ -141,6 +141,7 @@ public interface EmsPointMatchMapper // 单个站点单个设备点位查询-除了电池簇其他设备使用 public List getSingleSiteDevicePoints(@Param("siteId")String siteId, + @Param("deviceId")String deviceId, @Param("deviceCategory")String deviceCategory, @Param("pointName")String pointName, @Param("dataPoint")String dataPoint, @@ -161,9 +162,9 @@ public interface EmsPointMatchMapper // 根据站点,设备类别,点位,获取唯一数据 public EmsPointMatch getUniquePoint(@Param("siteId")String siteId, @Param("deviceCategory")String deviceCategory, @Param("dataPoint")String dataPoint); - EmsPointMatch getOnePointMatch(@Param("siteId") String siteId, @Param("deviceCategory") String deviceCategory, @Param("dataPoint") String dataPoint); + EmsPointMatch getOnePointMatch(@Param("siteId") String siteId, @Param("deviceId") String deviceId, @Param("deviceCategory") String deviceCategory, @Param("dataPoint") String dataPoint); - List getDevicePointMatchList(@Param("siteId") String siteId, @Param("deviceCategory") String deviceCategory); + List getDevicePointMatchList(@Param("siteId") String siteId, @Param("deviceId") String deviceId, @Param("deviceCategory") String deviceCategory); List selectEmsPointMatchExportList(EmsPointMatch emsPointMatch); 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 a7e08aa..65ca69f 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 @@ -1405,6 +1405,12 @@ public class DeviceDataProcessServiceImpl extends AbstractBatteryDataProcessor i Date dataUpdateTime = DateUtils.convertUpdateTime(timestamp); log.info("deviceId:" + deviceId); + + // 存放mqtt原始每个设备最晚一次数据,便于后面点位获取数据 + redisCache.setCacheObject(RedisKeyConstants.ORIGINAL_MQTT_DATA_ALARM + siteId + "_" + deviceId, obj); + // 存放每次同步数据,失效时间(同同步时间)-用于判断是否正常同步数据 + redisCache.setCacheObject(RedisKeyConstants.SYNC_DATA_ALARM + siteId + "_" + deviceId, obj, 1, TimeUnit.MINUTES); + String deviceCategory = ""; if (deviceId.contains(SiteDevice.ZSLQ.name())) { coolingAlarmDataProcess(siteId, deviceId, jsonData, dataUpdateTime); diff --git a/ems-system/src/main/java/com/xzzn/ems/service/impl/EmsDeviceSettingServiceImpl.java b/ems-system/src/main/java/com/xzzn/ems/service/impl/EmsDeviceSettingServiceImpl.java index 3c27c12..465096c 100644 --- a/ems-system/src/main/java/com/xzzn/ems/service/impl/EmsDeviceSettingServiceImpl.java +++ b/ems-system/src/main/java/com/xzzn/ems/service/impl/EmsDeviceSettingServiceImpl.java @@ -152,9 +152,13 @@ public class EmsDeviceSettingServiceImpl implements IEmsDeviceSettingService dataPointName,dataPoint,parentDeviceId,ipAddress,ipPort,isAlarm); } else { response = emsPointMatchMapper.getSingleSiteDevicePoints( - siteId,deviceCategory,dataPointName,dataPoint,ipAddress,ipPort,isAlarm); + siteId,deviceId,deviceCategory,dataPointName,dataPoint,ipAddress,ipPort,isAlarm); + String redisDataKey = RedisKeyConstants.ORIGINAL_MQTT_DATA; + if (PointType.YES.getCode().equals(isAlarm)) { + redisDataKey = RedisKeyConstants.ORIGINAL_MQTT_DATA_ALARM; + } // 从redis取最新数据 - JSONObject mqttJson = redisCache.getCacheObject(RedisKeyConstants.ORIGINAL_MQTT_DATA + siteId + "_" + deviceId); + JSONObject mqttJson = redisCache.getCacheObject(redisDataKey + siteId + "_" + deviceId); if(mqttJson == null){ return response; } @@ -239,11 +243,15 @@ public class EmsDeviceSettingServiceImpl implements IEmsDeviceSettingService private List specialDealWithBattery(String siteId, String deviceId, String deviceCategory, String dataPointName, String dataPoint, String parentDeviceId, String ipAddress, Integer ipPort, Integer isAlarm) { - List response = emsPointMatchMapper.getSingleSiteDevicePoints(siteId,deviceCategory, + List response = emsPointMatchMapper.getSingleSiteDevicePoints(siteId,deviceId,deviceCategory, dataPointName,dataPoint,ipAddress,ipPort,isAlarm); // 获取redis同步最新数据 JSONObject jsonObject = new JSONObject(); + String redisDataKey = RedisKeyConstants.ORIGINAL_MQTT_DATA; + if (PointType.YES.getCode().equals(isAlarm)) { + redisDataKey = RedisKeyConstants.ORIGINAL_MQTT_DATA_ALARM; + } if (SiteEnum.DDS.getCode().equals(siteId)) { // dds单体电池数据来源于BMSD EmsDevicesSetting clusterDevice = emsDevicesMapper.getDeviceBySiteAndDeviceId(parentDeviceId,siteId); @@ -251,10 +259,10 @@ public class EmsDeviceSettingServiceImpl implements IEmsDeviceSettingService if (StringUtils.isEmpty(bmsdDeviceId)) { return response; } - jsonObject = redisCache.getCacheObject(RedisKeyConstants.ORIGINAL_MQTT_DATA + siteId + "_" + bmsdDeviceId); + jsonObject = redisCache.getCacheObject(redisDataKey + siteId + "_" + bmsdDeviceId); } else if (SiteEnum.FX.getCode().equals(siteId)) { // fx单体电池数据来源于父类簇BMSC - jsonObject = redisCache.getCacheObject(RedisKeyConstants.ORIGINAL_MQTT_DATA + siteId + "_" + parentDeviceId); + jsonObject = redisCache.getCacheObject(redisDataKey + siteId + "_" + parentDeviceId); } if (jsonObject != null) { // 填充数据 @@ -329,15 +337,19 @@ public class EmsDeviceSettingServiceImpl implements IEmsDeviceSettingService JSONObject mergedData = new JSONObject(); + String redisDataKey = RedisKeyConstants.ORIGINAL_MQTT_DATA; + if (PointType.YES.getCode().equals(isAlarm)) { + redisDataKey = RedisKeyConstants.ORIGINAL_MQTT_DATA_ALARM; + } // 数据来源pcs - JSONObject pcsJson = redisCache.getCacheObject(RedisKeyConstants.ORIGINAL_MQTT_DATA + siteId + "_PCS"); + JSONObject pcsJson = redisCache.getCacheObject(redisDataKey + siteId + "_PCS"); if (pcsJson != null) { JSONObject data = pcsJson.getJSONObject("Data"); mergedData.putAll(data); } // 根据deviceId获取父类bmsd - JSONObject bmsdJson = redisCache.getCacheObject(RedisKeyConstants.ORIGINAL_MQTT_DATA + siteId + "_" + bmsdDeviceId); + JSONObject bmsdJson = redisCache.getCacheObject(redisDataKey + siteId + "_" + bmsdDeviceId); if (bmsdJson != null) { JSONObject data = bmsdJson.getJSONObject("Data"); mergedData.putAll(data); diff --git a/ems-system/src/main/java/com/xzzn/ems/service/impl/EmsPointMatchServiceImpl.java b/ems-system/src/main/java/com/xzzn/ems/service/impl/EmsPointMatchServiceImpl.java index 1a92c07..fd32959 100644 --- a/ems-system/src/main/java/com/xzzn/ems/service/impl/EmsPointMatchServiceImpl.java +++ b/ems-system/src/main/java/com/xzzn/ems/service/impl/EmsPointMatchServiceImpl.java @@ -51,6 +51,8 @@ import javax.validation.Validator; public class EmsPointMatchServiceImpl implements IEmsPointMatchService { private static final Logger log = LoggerFactory.getLogger(EmsPointMatchServiceImpl.class); private static final String SEPARATOR = "#"; + + private static final String SITE_ID = "DEFAULT"; @Autowired private EmsPointMatchMapper emsPointMatchMapper; @Autowired @@ -68,6 +70,9 @@ public class EmsPointMatchServiceImpl implements IEmsPointMatchService { */ @Override public List selectEmsPointMatchList(EmsPointMatch emsPointMatch) { + if (StringUtils.isBlank(emsPointMatch.getDeviceId())) { + emsPointMatch.setSiteId(SITE_ID); + } List devicePointMatchExportVos = emsPointMatchMapper.selectEmsPointMatchExportList(emsPointMatch); if (CollectionUtils.isEmpty(devicePointMatchExportVos)) { return devicePointMatchExportVos; @@ -171,6 +176,7 @@ public class EmsPointMatchServiceImpl implements IEmsPointMatchService { } String siteId = request.getSiteId(); + String deviceId = request.getDeviceId(); String deviceCategory = request.getDeviceCategory(); List errorList = new ArrayList<>(); for (DevicePointMatchVo pointMatch : pointMatchList) { @@ -193,7 +199,7 @@ public class EmsPointMatchServiceImpl implements IEmsPointMatchService { savePoint.setCreateBy(operName); savePoint.setUpdateBy(operName); // 验证点位是否存在 - EmsPointMatch dbPoint = emsPointMatchMapper.getOnePointMatch(siteId, deviceCategory, pointMatch.getDataPoint()); + EmsPointMatch dbPoint = emsPointMatchMapper.getOnePointMatch(siteId, deviceId, deviceCategory, pointMatch.getDataPoint()); if (Objects.isNull(dbPoint)) { emsPointMatchMapper.insertEmsPointMatch(savePoint); } else { @@ -209,7 +215,7 @@ public class EmsPointMatchServiceImpl implements IEmsPointMatchService { } } // 同步到Redis - syncToRedis(siteId, deviceCategory); + syncToRedis(siteId, deviceId, deviceCategory); return errorList; } @@ -232,10 +238,10 @@ public class EmsPointMatchServiceImpl implements IEmsPointMatchService { return false; } - private void syncToRedis(String siteId, String deviceCategory) { + private void syncToRedis(String siteId, String deviceId, String deviceCategory) { // 点位匹配数据同步到Redis - String pointMatchKey = DevicePointMatchDataProcessor.getPointMacthCacheKey(siteId, deviceCategory); - List pointMatchData = emsPointMatchMapper.getDevicePointMatchList(siteId, deviceCategory); + String pointMatchKey = DevicePointMatchDataProcessor.getPointMacthCacheKey(siteId, deviceId, deviceCategory); + List pointMatchData = emsPointMatchMapper.getDevicePointMatchList(siteId, deviceId, deviceCategory); // log.info("同步点位匹配数据到Redis key:{} data:{}", pointMatchKey, pointMatchData); if (redisCache.hasKey(pointMatchKey)) { redisCache.deleteObject(pointMatchKey); 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 6c5abe4..8a0add0 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 @@ -104,9 +104,9 @@ public class DevicePointMatchDataProcessor { // log.info("未找到设备配置信息,siteId: " + siteId + ", deviceId: "+ deviceId); // return pointMatchList; // } - List pointMatchList = redisCache.getCacheList(getPointMacthCacheKey(siteId, deviceCategory)); + List pointMatchList = redisCache.getCacheList(getPointMacthCacheKey(siteId, deviceId, deviceCategory)); if (CollectionUtils.isEmpty(pointMatchList)) { - pointMatchList = emsPointMatchMapper.getDevicePointMatchList(siteId, deviceCategory); + pointMatchList = emsPointMatchMapper.getDevicePointMatchList(siteId, deviceId, deviceCategory); } if (CollectionUtils.isNotEmpty(pointMatchList)) { Map> map = pointMatchList.stream().collect(Collectors.groupingBy(EmsPointMatch::getIsAlarm)); @@ -154,7 +154,7 @@ public class DevicePointMatchDataProcessor { try { devicePintointMtachInfo.forEach((key, value) -> { // 查询点位是否存在 - EmsPointMatch dbPoint = emsPointMatchMapper.getOnePointMatch(siteId, deviceCategory, value); + EmsPointMatch dbPoint = emsPointMatchMapper.getOnePointMatch(siteId, deviceId, deviceCategory, value); if (!Objects.isNull(dbPoint)) { return; } @@ -214,9 +214,9 @@ public class DevicePointMatchDataProcessor { * @param deviceCategory * @return 点位缓存key */ - public static String getPointMacthCacheKey(String siteId, String deviceCategory) + public static String getPointMacthCacheKey(String siteId, String deviceId, String deviceCategory) { - return RedisKeyConstants.POINT_MATCH + deviceCategory + "_" + siteId; + return RedisKeyConstants.POINT_MATCH + deviceCategory + "_" + siteId + "_" + deviceId; } /** diff --git a/ems-system/src/main/resources/mapper/ems/EmsPointMatchMapper.xml b/ems-system/src/main/resources/mapper/ems/EmsPointMatchMapper.xml index 6eb771b..91eb980 100644 --- a/ems-system/src/main/resources/mapper/ems/EmsPointMatchMapper.xml +++ b/ems-system/src/main/resources/mapper/ems/EmsPointMatchMapper.xml @@ -25,10 +25,11 @@ + - select id, point_name, match_table, match_field, site_id, device_category, data_point, data_point_name, data_device, data_unit, ip_address, ip_port, data_type, need_diff_device_id, create_by, create_time, update_by, update_time, remark, is_alarm from ems_point_match + select id, point_name, match_table, match_field, site_id, device_category, data_point, data_point_name, data_device, data_unit, ip_address, ip_port, data_type, need_diff_device_id, create_by, create_time, update_by, update_time, remark, is_alarm, device_id from ems_point_match where site_id = #{siteId} + and device_id = #{deviceId} and device_category = #{deviceCategory} and data_point = #{dataPoint} order by update_time desc @@ -499,6 +509,7 @@ @@ -515,6 +526,7 @@ ems_point_match and site_id = #{siteId} + and device_id = #{deviceId} and device_category = #{deviceCategory} @@ -525,6 +537,7 @@ ems_point_match where is_alarm = 1 and site_id = #{siteId} + and device_id = #{deviceId} and device_category = #{deviceCategory}