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 | 65 +++++++++++---------- ruoyi-common/src/main/java/com/ruoyi/common/utils/RedisUtil.java | 1 cnas-device/src/main/java/com/ruoyi/device/controller/WeightController.java | 57 +++++++++++------- cnas-device/src/main/java/com/ruoyi/device/vo/DeviceMqttVO.java | 4 4 files changed, 72 insertions(+), 55 deletions(-) diff --git a/cnas-device/src/main/java/com/ruoyi/device/controller/WeightController.java b/cnas-device/src/main/java/com/ruoyi/device/controller/WeightController.java index 8c3dfd0..6e51c4c 100644 --- a/cnas-device/src/main/java/com/ruoyi/device/controller/WeightController.java +++ b/cnas-device/src/main/java/com/ruoyi/device/controller/WeightController.java @@ -1,10 +1,14 @@ package com.ruoyi.device.controller; +import cn.hutool.core.collection.CollectionUtil; import com.alibaba.fastjson.JSONArray; +import com.ruoyi.common.core.domain.Result; import com.ruoyi.common.utils.RedisUtil; import com.ruoyi.device.constant.DCResistanceMqttConstants; import com.ruoyi.device.dto.WeightRequestDto; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiOperation; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; @@ -12,37 +16,44 @@ import org.springframework.web.bind.annotation.RestController; import java.util.List; +import java.util.Objects; @RestController @RequestMapping("/weight") public class WeightController { + @ApiOperation("淇濆瓨鍒嗘瀽澶╁钩璐ㄩ噺鏁版嵁鍒癛edis") @PostMapping("/handleWeights") - public ResponseEntity<String> handleWeights(@RequestBody WeightRequestDto weightRequest) { - try { - List<Double> weightList = weightRequest.getWeights(); - // 鍦ㄨ繖閲屾坊鍔犳暟鎹鐞嗛�昏緫锛屼緥濡傛墦鍗般�佸瓨鍌ㄥ埌鏁版嵁搴撶瓑 - System.out.println("鎺ユ敹鍒扮殑鏁版嵁: " + weightList); - processValueDataStream(weightList, WeightRequestDto.DENSITY); - - // 澶勭悊鎴愬姛杩斿洖 200 鐘舵�佺爜鍜屾秷鎭� - return ResponseEntity.ok("鏁版嵁澶勭悊鎴愬姛"); - } catch (Exception e) { - // 澶勭悊澶辫触杩斿洖 500 鐘舵�佺爜鍜岄敊璇秷鎭� - return ResponseEntity.internalServerError().body("鏁版嵁澶勭悊澶辫触: " + e.getMessage()); + public Result<String> handleWeights(@RequestBody WeightRequestDto weightRequest) { +// try { +// List<Double> weightList = weightRequest.getWeights(); +// // 鍦ㄨ繖閲屾坊鍔犳暟鎹鐞嗛�昏緫锛屼緥濡傛墦鍗般�佸瓨鍌ㄥ埌鏁版嵁搴撶瓑 +// System.out.println("鎺ユ敹鍒扮殑鏁版嵁: " + weightList); +// processValueDataStream(weightList, WeightRequestDto.DENSITY); +// +// // 澶勭悊鎴愬姛杩斿洖 200 鐘舵�佺爜鍜屾秷鎭� +// return ResponseEntity.ok("鏁版嵁澶勭悊鎴愬姛"); +// } catch (Exception e) { +// // 澶勭悊澶辫触杩斿洖 500 鐘舵�佺爜鍜岄敊璇秷鎭� +// return ResponseEntity.internalServerError().body("鏁版嵁澶勭悊澶辫触: " + e.getMessage()); +// } + if(Objects.nonNull(weightRequest) && CollectionUtil.isNotEmpty(weightRequest.getWeights())){ + RedisUtil.lSet(WeightRequestDto.DENSITY,weightRequest.getWeights()); + return Result.success(null,"淇濆瓨鎴愬姛"); } + return Result.fail(); } - private void processValueDataStream(List<Double> weightList, String dataStream) { - // 澶勭悊 weightList 涓� null 鐨勬儏鍐� - if (weightList == null) { - // 鑻� weightList 涓� null锛屽彲閫夋嫨鍒犻櫎 Redis 涓殑瀵瑰簲閿垨瀛樺叆绌烘暟缁勶紝杩欓噷閫夋嫨瀛樺叆绌烘暟缁� - RedisUtil.set(dataStream, "[]"); - return; - } - // 灏� weightList 杞崲涓� JSON 瀛楃涓插苟瀛樺叆 Redis - String jsonStr = JSONArray.toJSONString(weightList); - RedisUtil.set(dataStream, jsonStr); - } +// private void processValueDataStream(List<Double> weightList, String dataStream) { +// // 澶勭悊 weightList 涓� null 鐨勬儏鍐� +// if (weightList == null) { +// // 鑻� weightList 涓� null锛屽彲閫夋嫨鍒犻櫎 Redis 涓殑瀵瑰簲閿垨瀛樺叆绌烘暟缁勶紝杩欓噷閫夋嫨瀛樺叆绌烘暟缁� +// RedisUtil.set(dataStream, "[]"); +// return; +// } +// // 灏� weightList 杞崲涓� JSON 瀛楃涓插苟瀛樺叆 Redis +// String jsonStr = JSONArray.toJSONString(weightList); +// RedisUtil.set(dataStream, jsonStr); +// } } 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 f952d2b..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 @@ -13,7 +13,7 @@ import com.ruoyi.device.mapper.CollectBridgeMapper; import com.ruoyi.device.pojo.CollectBridge; import com.ruoyi.device.service.CollectBridgeService; -import com.ruoyi.device.vo.DCResistanceMqttVO; +import com.ruoyi.device.vo.DeviceMqttVO; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -111,10 +111,11 @@ 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<DCResistanceMqttVO> dataList = JSONArray.parseObject(dataMap.get("data").toString(), new TypeReference<List<DCResistanceMqttVO>>(){}.getType()); + List<DeviceMqttVO> dataList = JSONArray.parseObject(dataMap.get("data").toString(), new TypeReference<List<DeviceMqttVO>>(){}.getType()); //杩囨护鍑哄寘鍚疄闄呯數闃诲�肩殑瀵硅薄 // 澶勭悊 NSDQCS.DQCS.DZZ 鏁版嵁 - processSingleValueDataStream(dataList, DCResistanceMqttConstants.NSDQCS_DQCS_DZZ); + Double value = getValueByDataStream(dataList,DCResistanceMqttConstants.NSDQCS_DQCS_DZZ); + RedisUtil.set(DCResistanceMqttConstants.NSDQCS_DQCS_DZZ, value); } } @@ -122,28 +123,49 @@ 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<DCResistanceMqttVO> dataList = JSONArray.parseObject(dataMap.get("data").toString(), new TypeReference<List<DCResistanceMqttVO>>(){}.getType()); + List<DeviceMqttVO> dataList = JSONArray.parseObject(dataMap.get("data").toString(), new TypeReference<List<DeviceMqttVO>>(){}.getType()); //杩囨护鍑哄寘鍚疄闄呯數闃诲�肩殑瀵硅薄 // 澶勭悊 NSTSSC.TSSC.WY 鏁版嵁 - processThreeTimesValueDataStream(dataList, ElongationMqttConstants.NSTSSC_TSSC_WY); + processMultipleValueDataStream(dataList, ElongationMqttConstants.NSTSSC_TSSC_WY,3); } } /** - * 澶勭悊鍗曞�兼暟鎹祦鐨勬暟鎹苟淇濆瓨鍒� Redis + * 鑾峰彇mqtt娑堟伅浣撲腑瀵瑰簲鏍囪瘑鐨勫�� * @param dataList 鏁版嵁鍒楄〃 * @param dataStream 鏁版嵁娴佹爣璇� */ - private void processSingleValueDataStream(List<DCResistanceMqttVO> dataList, String dataStream) { - DCResistanceMqttVO dcResistanceMqttVO = dataList.stream() + 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(dcResistanceMqttVO)){ - List<DCResistanceMqttVO.DataPoint> dataPoints = dcResistanceMqttVO.getDataPoints(); + if(Objects.nonNull(deviceMqttVO)){ + List<DeviceMqttVO.DataPoint> dataPoints = deviceMqttVO.getDataPoints(); BigDecimal value = CollectionUtil.isNotEmpty(dataPoints)?dataPoints.get(0).getValue():BigDecimal.ZERO; - // 淇濆瓨鍗曚釜鍊煎埌 redis - RedisUtil.set(dataStream, value.doubleValue()); + 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); } } @@ -152,7 +174,7 @@ * @param dataList 鏁版嵁鍒楄〃 * @param dataStream 鏁版嵁娴佹爣璇� */ - private void processThreeTimesValueDataStream(List<DCResistanceMqttVO> dataList, String dataStream) { + private void processThreeTimesValueDataStream(List<DeviceMqttVO> dataList, String dataStream) { // 浠� Redis 鑾峰彇宸插瓨鍌ㄧ殑鍊� Object valueFromRedis = RedisUtil.get(dataStream); JSONArray valueArray = new JSONArray(); @@ -171,24 +193,7 @@ } } - // 绛涢�夊嚭褰撳墠鏁版嵁娴佸搴旂殑鏁版嵁 - DCResistanceMqttVO dcResistanceMqttVO = dataList.stream() - .filter(f -> StringUtils.equals(f.getDataStream(), dataStream)) - .findFirst() - .orElse(null); - if (Objects.nonNull(dcResistanceMqttVO)) { - List<DCResistanceMqttVO.DataPoint> dataPoints = dcResistanceMqttVO.getDataPoints(); - if (CollectionUtil.isNotEmpty(dataPoints)) { - BigDecimal value = dataPoints.get(0).getValue(); - valueArray.add(value.doubleValue()); - - // 鍙繚鐣欐渶鏂扮殑涓変釜鍊� - if (valueArray.size() > 3) { - valueArray.remove(0); - } - } - } // 灏嗘洿鏂板悗鐨勫�间繚瀛樺埌 Redis RedisUtil.set(dataStream, valueArray.toJSONString()); diff --git a/cnas-device/src/main/java/com/ruoyi/device/vo/DCResistanceMqttVO.java b/cnas-device/src/main/java/com/ruoyi/device/vo/DeviceMqttVO.java similarity index 80% rename from cnas-device/src/main/java/com/ruoyi/device/vo/DCResistanceMqttVO.java rename to cnas-device/src/main/java/com/ruoyi/device/vo/DeviceMqttVO.java index e19160d..53df3d4 100644 --- a/cnas-device/src/main/java/com/ruoyi/device/vo/DCResistanceMqttVO.java +++ b/cnas-device/src/main/java/com/ruoyi/device/vo/DeviceMqttVO.java @@ -7,10 +7,10 @@ import java.util.List; /** - * 鐩存祦鐢甸樆锛氳В鏋恗qtt鏁版嵁鍝嶅簲瀵硅薄 + * 缃戝彛璁惧(鐩存祦鐢甸樆銆佷几闀跨巼)锛氳В鏋恗qtt鏁版嵁鍝嶅簲瀵硅薄 */ @Data -public class DCResistanceMqttVO implements Serializable { +public class DeviceMqttVO implements Serializable { /** * 鏁版嵁绫诲瀷鏍囪瘑 diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/RedisUtil.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/RedisUtil.java index ad77b81..ed0d3ae 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/RedisUtil.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/RedisUtil.java @@ -153,6 +153,7 @@ public static boolean set(String key, Object value) { try { + redisTemplate.opsForValue().set(key, value); return true; } catch (Exception e) { -- Gitblit v1.9.3