From 7c5e1ef7db84731610d5616b2ee7e6e63abd886d Mon Sep 17 00:00:00 2001 From: zouyu <2723363702@qq.com> Date: 星期五, 01 八月 2025 13:21:02 +0800 Subject: [PATCH] mqtt回调方法调整 --- cnas-device/src/main/java/com/ruoyi/device/service/impl/CollectBridgeServiceImpl.java | 101 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 101 insertions(+), 0 deletions(-) diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/impl/CollectBridgeServiceImpl.java b/cnas-device/src/main/java/com/ruoyi/device/service/impl/CollectBridgeServiceImpl.java index a1acb6e..874a419 100644 --- a/cnas-device/src/main/java/com/ruoyi/device/service/impl/CollectBridgeServiceImpl.java +++ b/cnas-device/src/main/java/com/ruoyi/device/service/impl/CollectBridgeServiceImpl.java @@ -1,20 +1,30 @@ package com.ruoyi.device.service.impl; +import cn.hutool.core.collection.CollectionUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson.TypeReference; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.common.utils.RedisUtil; +import com.ruoyi.device.constant.DCResistanceMqttConstants; +import com.ruoyi.device.constant.ElongationMqttConstants; import com.ruoyi.device.mapper.CollectBridgeMapper; import com.ruoyi.device.pojo.CollectBridge; import com.ruoyi.device.service.CollectBridgeService; +import com.ruoyi.device.vo.DeviceMqttVO; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import java.math.BigDecimal; import java.time.Duration; import java.time.Instant; import java.time.LocalDateTime; import java.time.ZoneId; +import java.util.List; +import java.util.Map; +import java.util.Objects; /** * 鏁板瓧鐢垫ˉ閲囬泦 @@ -97,6 +107,97 @@ } } + @Override + public void addBridgeValueByNS(String jsonStr) { + Map<String, Object> dataMap = JSONObject.parseObject(jsonStr, new TypeReference<Map<String, Object>>(){}.getType()); + if(CollectionUtil.isNotEmpty(dataMap) && Objects.nonNull(dataMap.get("data"))){ + List<DeviceMqttVO> dataList = JSONArray.parseObject(dataMap.get("data").toString(), new TypeReference<List<DeviceMqttVO>>(){}.getType()); + //杩囨护鍑哄寘鍚疄闄呯數闃诲�肩殑瀵硅薄 + // 澶勭悊 NSDQCS.DQCS.DZZ 鏁版嵁 + Double value = getValueByDataStream(dataList,DCResistanceMqttConstants.NSDQCS_DQCS_DZZ); + RedisUtil.set(DCResistanceMqttConstants.NSDQCS_DQCS_DZZ, value); + } + } + + @Override + public void addBridgeValueByNSD(String jsonStr) { + Map<String, Object> dataMap = JSONObject.parseObject(jsonStr, new TypeReference<Map<String, Object>>(){}.getType()); + if(CollectionUtil.isNotEmpty(dataMap) && Objects.nonNull(dataMap.get("data"))){ + List<DeviceMqttVO> dataList = JSONArray.parseObject(dataMap.get("data").toString(), new TypeReference<List<DeviceMqttVO>>(){}.getType()); + //杩囨护鍑哄寘鍚疄闄呯數闃诲�肩殑瀵硅薄 + // 澶勭悊 NSTSSC.TSSC.WY 鏁版嵁 + processMultipleValueDataStream(dataList, ElongationMqttConstants.NSTSSC_TSSC_WY,3); + } + } + + /** + * 鑾峰彇mqtt娑堟伅浣撲腑瀵瑰簲鏍囪瘑鐨勫�� + * @param dataList 鏁版嵁鍒楄〃 + * @param dataStream 鏁版嵁娴佹爣璇� + */ + private Double getValueByDataStream(List<DeviceMqttVO> dataList, String dataStream) { + DeviceMqttVO deviceMqttVO = dataList.stream() + .filter(f -> StringUtils.equals(f.getDataStream(), dataStream)) + .findFirst() + .orElse(null); + if(Objects.nonNull(deviceMqttVO)){ + List<DeviceMqttVO.DataPoint> dataPoints = deviceMqttVO.getDataPoints(); + BigDecimal value = CollectionUtil.isNotEmpty(dataPoints)?dataPoints.get(0).getValue():BigDecimal.ZERO; + return value.doubleValue(); + } + return 0.0; + } + + /** + * 澶勭悊闇�瑕佷繚瀛樺涓�肩殑鏁版嵁娴侊紝骞朵繚瀛樺埌 Redis + * @param dataList 鏁版嵁鍒楄〃 + * @param dataStream 鏁版嵁娴佹爣璇� + * @param maxSize 淇濆瓨鐨勬渶澶т釜鏁� + */ + private void processMultipleValueDataStream(List<DeviceMqttVO> dataList, String dataStream,int maxSize){ + // 绛涢�夊嚭褰撳墠鏁版嵁娴佸搴旂殑鏁版嵁 + Double value = getValueByDataStream(dataList, dataStream); + //鍒ゆ柇key鏄惁瀛樺湪 + boolean existKey = RedisUtil.hasKey(dataStream); + if(existKey){ + long listSize = RedisUtil.lGetListSize(dataStream); + if(listSize<maxSize){ + RedisUtil.lSet(dataStream,value); + } + }else{ + RedisUtil.lSet(dataStream,value); + } + } + + /** + * 澶勭悊闇�瑕佽幏鍙栦笁娆′笉鍚屽�肩殑鏁版嵁娴侊紝骞朵繚瀛樺埌 Redis + * @param dataList 鏁版嵁鍒楄〃 + * @param dataStream 鏁版嵁娴佹爣璇� + */ + private void processThreeTimesValueDataStream(List<DeviceMqttVO> dataList, String dataStream) { + // 浠� Redis 鑾峰彇宸插瓨鍌ㄧ殑鍊� + Object valueFromRedis = RedisUtil.get(dataStream); + JSONArray valueArray = new JSONArray(); + + if (valueFromRedis != null) { + if (valueFromRedis instanceof String) { + try { + valueArray = JSONArray.parseArray((String) valueFromRedis); + } catch (Exception e) { + // 濡傛灉瑙f瀽澶辫触锛岃鏄� Redis 涓殑鍊煎彲鑳戒笉鏄悎娉曠殑 JSON 鏁扮粍锛屽垱寤虹┖鏁扮粍 + valueArray = new JSONArray(); + } + } else if (valueFromRedis instanceof Double) { + // 濡傛灉鏄� Double 绫诲瀷锛屽皢鍏舵坊鍔犲埌鏁扮粍涓� + valueArray.add(valueFromRedis); + } + } + + + + // 灏嗘洿鏂板悗鐨勫�间繚瀛樺埌 Redis + RedisUtil.set(dataStream, valueArray.toJSONString()); + } public static boolean isWithinTenMinutes(LocalDateTime dateTime1, LocalDateTime dateTime2) { Duration duration = Duration.between(dateTime1, dateTime2); long minutesDifference = Math.abs(duration.toMinutes()); -- Gitblit v1.9.3