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