yaowanxin
6 天以前 4e818e2aa272786be2a5b252d222595812d52c2b
调整方法返回格式
已重命名1个文件
已修改3个文件
155 ■■■■■ 文件已修改
cnas-device/src/main/java/com/ruoyi/device/controller/WeightController.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/service/impl/CollectBridgeServiceImpl.java 65 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/utils/DataAcquisition.java 36 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/vo/DeviceMqttVO.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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 {
    /**
     * æ•°æ®ç±»åž‹æ ‡è¯†