cnas-device/src/main/java/com/ruoyi/device/constant/DCResistanceMqttConstants.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
cnas-device/src/main/java/com/ruoyi/device/controller/WeightController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
cnas-device/src/main/java/com/ruoyi/device/dto/WeightRequestDto.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
cnas-device/src/main/java/com/ruoyi/device/mqtt/MQCallback.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
cnas-device/src/main/java/com/ruoyi/device/service/impl/CollectBridgeServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
cnas-device/src/main/java/com/ruoyi/device/utils/DataAcquisition.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
cnas-device/src/main/java/com/ruoyi/device/constant/DCResistanceMqttConstants.java
@@ -10,5 +10,6 @@ public final static String NSDQCS_DQCS_DZZ = "NSDQCS.DQCS.DZZ"; public final static String NSDQCS_DQCS_64 = "NSDQCS.DQCS.64"; public final static String NSTSSC_TSSC_WY = "NSTSSC.TSSC.WY"; } cnas-device/src/main/java/com/ruoyi/device/controller/WeightController.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,58 @@ package com.ruoyi.device.controller; import com.alibaba.fastjson.JSONArray; import com.ruoyi.common.utils.RedisUtil; import com.ruoyi.device.constant.DCResistanceMqttConstants; import com.ruoyi.device.dto.WeightRequestDto; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.List; @RestController @RequestMapping("/weight") public class WeightController { @PostMapping("/handleWeights") public ResponseEntity<String> handleWeights(@RequestBody WeightRequestDto weightRequest) { try { List<Double> weightList = weightRequest.getWeights(); // å¨è¿éæ·»å æ°æ®å¤çé»è¾ï¼ä¾å¦æå°ãåå¨å°æ°æ®åºç System.out.println("æ¥æ¶å°çæ°æ®: " + weightList); processThreeTimesValueDataStream(weightList, WeightRequestDto.DENSITY); // å¤çæåè¿å 200 ç¶æç åæ¶æ¯ return ResponseEntity.ok("æ°æ®å¤çæå"); } catch (Exception e) { // å¤ç失败è¿å 500 ç¶æç åéè¯¯æ¶æ¯ return ResponseEntity.internalServerError().body("æ°æ®å¤ç失败: " + e.getMessage()); } } private void processThreeTimesValueDataStream(List<Double> weightList, 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) { // å¦æè§£æå¤±è´¥ï¼è¯´æ Redis ä¸çå¼å¯è½ä¸æ¯åæ³ç JSON æ°ç»ï¼å建空æ°ç» valueArray = new JSONArray(); } } else if (valueFromRedis instanceof Double) { valueArray.add(valueFromRedis); } } valueArray.addAll(weightList); RedisUtil.set(dataStream, valueArray.toJSONString()); } } cnas-device/src/main/java/com/ruoyi/device/dto/WeightRequestDto.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,11 @@ package com.ruoyi.device.dto; import lombok.Data; import java.util.List; @Data public class WeightRequestDto { public final static String DENSITY = "DENSITY"; private List<Double> weights; } cnas-device/src/main/java/com/ruoyi/device/mqtt/MQCallback.java
@@ -76,7 +76,8 @@ break; case "/ztt/v3/2455221/publish": //èä¸ï¼ä¼¸é¿çæ°æ®è§£æ log.info("伸é¿çæ¶æ¯ä½ï¼{}",parse); mqCallback.collectBridgeService.addBridgeValueByNS(parse); // log.info("伸é¿çæ¶æ¯ä½ï¼{}",parse); break; } // å¡«å ééæ°æ® cnas-device/src/main/java/com/ruoyi/device/service/impl/CollectBridgeServiceImpl.java
@@ -112,16 +112,83 @@ if(CollectionUtil.isNotEmpty(dataMap) && Objects.nonNull(dataMap.get("data"))){ List<DCResistanceMqttVO> dataList = JSONArray.parseObject(dataMap.get("data").toString(), new TypeReference<List<DCResistanceMqttVO>>(){}.getType()); //è¿æ»¤åºå å«å®é çµé»å¼ç对象 DCResistanceMqttVO dcResistanceMqttVO = dataList.stream().filter(f -> StringUtils.equals(f.getDataStream(), DCResistanceMqttConstants.NSDQCS_DQCS_DZZ)).findFirst().orElse(null); // å¤ç NSDQCS.DQCS.DZZ æ°æ® processSingleValueDataStream(dataList, DCResistanceMqttConstants.NSDQCS_DQCS_DZZ); // å¤ç NSTSSC.TSSC.WY æ°æ® processThreeTimesValueDataStream(dataList, DCResistanceMqttConstants.NSTSSC_TSSC_WY); // DCResistanceMqttVO dcResistanceMqttVO = dataList.stream().filter(f -> StringUtils.equals(f.getDataStream(), DCResistanceMqttConstants.NSDQCS_DQCS_DZZ)).findFirst().orElse(null); // if(Objects.nonNull(dcResistanceMqttVO)){ // List<DCResistanceMqttVO.DataPoint> dataPoints = dcResistanceMqttVO.getDataPoints(); // BigDecimal value = CollectionUtil.isNotEmpty(dataPoints)?dataPoints.get(0).getValue():BigDecimal.ZERO; // //ä¿åå®é çµé»å¼å°redis // RedisUtil.set(DCResistanceMqttConstants.NSDQCS_DQCS_DZZ,value.doubleValue()); // } } } /** * å¤çå弿°æ®æµçæ°æ®å¹¶ä¿åå° Redis * @param dataList æ°æ®å表 * @param dataStream æ°æ®æµæ è¯ */ private void processSingleValueDataStream(List<DCResistanceMqttVO> dataList, String dataStream) { DCResistanceMqttVO dcResistanceMqttVO = dataList.stream() .filter(f -> StringUtils.equals(f.getDataStream(), dataStream)) .findFirst() .orElse(null); if(Objects.nonNull(dcResistanceMqttVO)){ List<DCResistanceMqttVO.DataPoint> dataPoints = dcResistanceMqttVO.getDataPoints(); BigDecimal value = CollectionUtil.isNotEmpty(dataPoints)?dataPoints.get(0).getValue():BigDecimal.ZERO; //ä¿åå®é çµé»å¼å°redis RedisUtil.set(DCResistanceMqttConstants.NSDQCS_DQCS_DZZ,value.doubleValue()); // ä¿åå个å¼å° redis RedisUtil.set(dataStream, value.doubleValue()); } } /** * å¤çéè¦è·å䏿¬¡ä¸åå¼çæ°æ®æµï¼å¹¶ä¿åå° Redis * @param dataList æ°æ®å表 * @param dataStream æ°æ®æµæ è¯ */ private void processThreeTimesValueDataStream(List<DCResistanceMqttVO> 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) { // å¦æè§£æå¤±è´¥ï¼è¯´æ Redis ä¸çå¼å¯è½ä¸æ¯åæ³ç JSON æ°ç»ï¼å建空æ°ç» valueArray = new JSONArray(); } } else if (valueFromRedis instanceof Double) { // å¦ææ¯ Double ç±»åï¼å°å ¶æ·»å å°æ°ç»ä¸ valueArray.add(valueFromRedis); } } // çéåºå½åæ°æ®æµå¯¹åºçæ°æ® 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()); } public static boolean isWithinTenMinutes(LocalDateTime dateTime1, LocalDateTime dateTime2) { Duration duration = Duration.between(dateTime1, dateTime2); long minutesDifference = Math.abs(duration.toMinutes()); cnas-device/src/main/java/com/ruoyi/device/utils/DataAcquisition.java
@@ -7,6 +7,8 @@ import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.ruoyi.common.utils.RedisUtil; import com.ruoyi.device.constant.DCResistanceMqttConstants; import com.ruoyi.device.dto.DeviceCollectionDto; import com.ruoyi.device.pojo.DataConfig; import com.ruoyi.device.pojo.Device; @@ -147,6 +149,9 @@ case ".png": map = readPngString(data, userMap, device); break; case ".mqtt": map = getActualResistanceValueAsMap(userMap, device); break; default: map = null; break; @@ -159,6 +164,71 @@ return map; } } /** * ä» Redis ä¸è·åå®é çµé»å¼ï¼å¹¶ä»¥é®å¼å¯¹å½¢å¼è¿å * @param dataConfig æ°æ®é ç½®ä¿¡æ¯ * @param device 设å¤ä¿¡æ¯ * @return å å«å®é çµé»å¼å¤çç»æçé®å¼å¯¹ï¼è¥æªè·åå°æææ°æ®åè¿å空 Map */ public static Map<String, Object> getActualResistanceValueAsMap(Map<String, List<DataConfig>> dataConfig, Device device) { Map<String, Object> map = new HashMap<>(); if (ObjectUtils.isEmpty(dataConfig)) { return map; } dataConfig.forEach((k, v) -> { AtomicInteger numberOfDataEntries = new AtomicInteger(); 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); numberOfDataEntries.addAndGet(1); } } else { numberOfDataEntries.addAndGet(1); list.add(value); } } } // æ¼æ¥æ°éé ç½® List<Object> result = new ArrayList<>(); for (int i = 0; i < numberOfDataEntries.get(); i++) { StringBuilder aggregate = new StringBuilder(); for (int j = 0; j < v.size(); j++) { int index; if (j == 0) { index = i; } else { index = numberOfDataEntries.get() + i; } if (index < list.size()) { aggregate.append(list.get(index).toString()).append(","); } } if (aggregate.length() > 0) { aggregate.setLength(aggregate.length() - 1); } result.add(aggregate.toString()); } // è¿è¡å ¬å¼è®¡ç® Object resultValue = calculationFormula(result, v.get(0), k, device); map.put(k, resultValue); }); return map; } public static Map<String, Object> createFrequency(String entrustCode, String sampleCode, Map<String, Object> map) { Set<String> set = new LinkedHashSet<>(); @@ -506,7 +576,7 @@ listResult.addAll(list); } // 为äºç»åç«¯åæ°æ®åºå if (listResult.size() > 1) { if (listResult.size() >= 1) { hashMap.put("result", listResult); } else { hashMap.put("result", listResult.get(0).toString());