yaowanxin
3 天以前 d5e714fecf9cba48c1a225e6eb53078cdad647c7
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;
@@ -43,7 +45,7 @@
     * @param device
     * @return
     */
    public static Map<String, Object> dataAcquisitionEntrance(List<DataConfig> dataConfig, Device device, String entrustCode, String sampleCode, String ip, String cableTag, String dbUserName, String dbPassword) {
    public static Map<String, Object> dataAcquisitionEntrance(List<DataConfig> dataConfig, Device device, String entrustCode, String sampleCode, String ip, String cableTag, String dbUserName, String dbPassword,String dbTable) {
        // 判断是否是影像测量仪
        if (device.getManagementNumber().equals("JCZX-ZB-OP07001")) {
            if (device.getFileType().equals(".xlsx")) {
@@ -78,7 +80,8 @@
                "&mdbSampleCode=" + device.getSampleCode() +
                "&dbFileName=" + device.getDbFileName()+
                "&dbUserName=" + dbUserName +
                "&dbPassword=" + dbPassword;
                "&dbPassword=" + dbPassword +
                "&dbTable=" + dbTable;
        System.out.println("请求的 URL: " + http);
        String result = null;
        try {
@@ -136,11 +139,18 @@
                    }
                    break;
                case ".db":
                    map = analysisDb1(data, userMap, device);
//                    map = analysisDb(data, userMap, device);
//                    map = analysisDb1(data, userMap, device);
                    map = analysisDb(data, userMap, device);
                    break;
                case ".mysql":
//                    map = analysisDb1(data, userMap, device);
                    map = analysisDb(data, userMap, device);
                    break;
                case ".png":
                    map = readPngString(data, userMap, device);
                    break;
                case ".mqtt":
                    map = getActualResistanceValueAsMap(userMap, device);
                    break;
                default:
                    map = null;
@@ -154,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<>();
@@ -205,15 +280,15 @@
                String refery = getRefer(v.get(config).getRefery());
                for (int i = 0; i < dataList.size(); i++) {
                    JSONObject jsonObject1 = JSON.parseObject(dataList.get(i).toString());
                    if (ObjectUtils.isNotEmpty(jsonObject1.get(refery))) {
                        numberOfDataEntries.addAndGet(1);
                        list.add(jsonObject1.get(refery));
                    }
//                    Object o = jsonObject1.get(refery);
//                    if (ObjectUtils.isNotEmpty(o)) {
//                    if (ObjectUtils.isNotEmpty(jsonObject1.get(refery))) {
//                        numberOfDataEntries.addAndGet(1);
//                        list.add(o);
//                        list.add(jsonObject1.get(refery));
//                    }
                    Object o = jsonObject1.get(refery);
                    if (ObjectUtils.isNotEmpty(o)) {
                        numberOfDataEntries.addAndGet(1);
                        list.add(o);
                    }
                }
            }
            // 拼接数采配置
@@ -501,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());
@@ -602,24 +677,7 @@
        });
        return map;
    }
    public static Map<String, Object> analysisList1(String data, Map<String, List<DataConfig>> dataConfig,
                                                   Device device, String entrustCode, String sampleCode) {
        Map<String, Object> map = new HashMap<>();
        dataConfig.forEach((k, v) -> {
            List<Object> list = new ArrayList<>();
            // 委托编号与样品编号不存在,定:1、Y定范围,X定横坐标;2、只存在Y;3、只存在X
            if (ObjectUtils.isEmpty(device.getEntrustCode()) && ObjectUtils.isEmpty(device.getSampleCode())) {
                list = analyzeData(data, v, k, splitIdentifier);
                // 委托编号与样品编号存在
            } else if (ObjectUtils.isNotEmpty(device.getEntrustCode()) && ObjectUtils.isNotEmpty(device.getSampleCode())) {
                list = analyzeDataEntrustCodAndSampleCode(data, v, k, splitIdentifier, device, entrustCode, sampleCode);
            }
            // 进行公式计算
            Object resultValue = calculationFormula(list, v.get(0), k, device);
            map.put(k, resultValue);
        });
        return map;
    }
    private static List<Object> analyzeDataEntrustCodAndSampleCode(String data, List<DataConfig> v, String k, String splitIdentifier,
                                                                   Device device, String entrustCodeValue, String sampleCodeValue) {
        entrustCodeValue = entrustCodeValue.replaceAll(" ", "");