cnas-device/src/main/java/com/ruoyi/device/controller/WeightController.java
@@ -1,11 +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; @@ -13,29 +16,44 @@ import org.springframework.web.bind.annotation.RestController; import java.util.List; import java.util.Objects; @RestController @RequestMapping("/weight") public class WeightController { @ApiOperation("ä¿ååæå¤©å¹³è´¨éæ°æ®å°Redis") @PostMapping("/handleWeights") public Result handleWeights(@RequestBody WeightRequestDto weightRequest) { List<Double> weightList = weightRequest.getWeights(); // å¨è¿éæ·»å æ°æ®å¤çé»è¾ï¼ä¾å¦æå°ãåå¨å°æ°æ®åºç System.out.println("æ¥æ¶å°çæ°æ®: " + weightList); processValueDataStream(weightList, WeightRequestDto.DENSITY); return Result.success(); } private void processValueDataStream(List<Double> weightList, String dataStream) { // å¤ç weightList 为 null çæ åµ if (weightList == null) { // è¥ weightList 为 nullï¼å¯éæ©å é¤ Redis ä¸ç对åºé®æåå ¥ç©ºæ°ç»ï¼è¿ééæ©åå ¥ç©ºæ°ç» RedisUtil.set(dataStream, "[]"); return; 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,"ä¿åæå"); } // å° weightList 转æ¢ä¸º JSON å符串并åå ¥ Redis String jsonStr = JSONArray.toJSONString(weightList); RedisUtil.set(dataStream, jsonStr); 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); // } } 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()); cnas-device/src/main/java/com/ruoyi/device/utils/DataAcquisition.java
@@ -7,6 +7,7 @@ import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.ruoyi.common.core.domain.Result; import com.ruoyi.common.utils.RedisUtil; import com.ruoyi.device.constant.DCResistanceMqttConstants; import com.ruoyi.device.dto.DeviceCollectionDto; @@ -25,6 +26,8 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Collectors; import static com.ruoyi.framework.datasource.DynamicDataSourceContextHolder.log; public class DataAcquisition { @@ -180,25 +183,22 @@ List<Object> list = new ArrayList<>(); for (int config = 0; config < v.size(); config++) { String refery = getRefer(v.get(config).getRefery()); // ä» Redis ä¸è·åå¼ Object value = RedisUtil.get(refery); if (ObjectUtils.isNotEmpty(value)) { if (value instanceof String && ((String) value).startsWith("[") && ((String) value).endsWith("]")) { try { // è§£æ JSON æ°ç»å符串为 List<BigDecimal> List<BigDecimal> values = JSONArray.parseArray((String) value, BigDecimal.class); list.addAll(values); numberOfDataEntries.addAndGet(values.size()); } catch (Exception e) { // è§£æå¤±è´¥ï¼è®°å½é误æ¥å¿ï¼ä½¿ç¨ååç¬¦ä¸²å¼ System.err.println("è§£æ Redis è¿åç JSON æ°ç»å¤±è´¥: " + value); list.add(value); if (refery.equals(DCResistanceMqttConstants.NSDQCS_DQCS_DZZ)){ // ä» Redis ä¸è·åä¸ä¸ªæ°æ® Object value = RedisUtil.get(refery); list.add(value); numberOfDataEntries.addAndGet(1); }else { // ä» Redis ä¸è·ååè¡¨æ°æ® List<Object> objectList = RedisUtil.lGet(refery, 0, -1); for (Object item : objectList) { // System.out.println(item); String[] split = item.toString().replace("[","").replace("]","").split(","); for (Object a : split) { list.add(a); numberOfDataEntries.addAndGet(1); } } else { numberOfDataEntries.addAndGet(1); list.add(value); } } } @@ -579,7 +579,7 @@ if (listResult.size() >= 1) { hashMap.put("result", listResult); } else { hashMap.put("result", listResult.get(0).toString()); hashMap.put("result", listResult); } hashMap.put("equipName", device.getDeviceName()); hashMap.put("equipValue", device.getManagementNumber()); cnas-device/src/main/java/com/ruoyi/device/vo/DeviceMqttVO.java
ÎļþÃû´Ó cnas-device/src/main/java/com/ruoyi/device/vo/DCResistanceMqttVO.java ÐÞ¸Ä @@ -7,10 +7,10 @@ import java.util.List; /** * ç´æµçµé»ï¼è§£æmqttæ°æ®ååºå¯¹è±¡ * ç½å£è®¾å¤(ç´æµçµé»ã伸é¿ç)ï¼è§£æmqttæ°æ®ååºå¯¹è±¡ */ @Data public class DCResistanceMqttVO implements Serializable { public class DeviceMqttVO implements Serializable { /** * æ°æ®ç±»åæ è¯