From f7605d8f91c09d44f2372aff6b4671e84ebc6d8b Mon Sep 17 00:00:00 2001
From: zouyu <2723363702@qq.com>
Date: 星期二, 05 八月 2025 09:35:36 +0800
Subject: [PATCH] 能力范围:检验项目导入报错修复

---
 cnas-device/src/main/java/com/ruoyi/device/utils/DataAcquisition.java |  175 ++++++++++++++++++++++++++++++++++++++++++++++++----------
 1 files changed, 145 insertions(+), 30 deletions(-)

diff --git a/cnas-device/src/main/java/com/ruoyi/device/utils/DataAcquisition.java b/cnas-device/src/main/java/com/ruoyi/device/utils/DataAcquisition.java
index 98c04ec..281b5fa 100644
--- a/cnas-device/src/main/java/com/ruoyi/device/utils/DataAcquisition.java
+++ b/cnas-device/src/main/java/com/ruoyi/device/utils/DataAcquisition.java
@@ -7,6 +7,9 @@
 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;
 import com.ruoyi.device.pojo.DataConfig;
 import com.ruoyi.device.pojo.Device;
@@ -23,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 {
 
@@ -43,7 +48,7 @@
      * @param device
      * @return
      */
-    public static Map<String, Object> dataAcquisitionEntrance(List<DataConfig> dataConfig, Device device, String entrustCode, String sampleCode, String ip, String cableTag) {
+    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")) {
@@ -76,7 +81,10 @@
                 "&sampleCode=" + sampleCode +
                 "&mdbEntrustCode=" + device.getEntrustCode() +
                 "&mdbSampleCode=" + device.getSampleCode() +
-                "&dbFileName=" + device.getDbFileName();
+                "&dbFileName=" + device.getDbFileName()+
+                "&dbUserName=" + dbUserName +
+                "&dbPassword=" + dbPassword +
+                "&dbTable=" + dbTable;
         System.out.println("璇锋眰鐨� URL: " + http);
         String result = null;
         try {
@@ -134,10 +142,18 @@
                     }
                     break;
                 case ".db":
+//                    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;
@@ -151,6 +167,69 @@
             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());
+                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);
+                    List<?> 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);
+                        }
+                    }
+                }
+            }
+            // 鎷兼帴鏁伴噰閰嶇疆
+            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<>();
@@ -187,6 +266,56 @@
 
         return "1";
     }
+    private static Map<String, Object> analysisDb1(String data, Map<String, List<DataConfig>> dataConfig, Device device) {
+        JSONObject jsonObject = JSON.parseObject(data);
+        Map<String, Object> map = new HashMap<>();
+        if (jsonObject.isEmpty()) {
+            return map;
+        }
+        // 浠� JSON 鏁版嵁涓彁鍙� data 鏁扮粍
+        JSONArray dataList = JSONArray.parseArray(jsonObject.get("data").toString());
+        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());
+                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)) {
+                        numberOfDataEntries.addAndGet(1);
+                        list.add(o);
+                    }
+                }
+            }
+            // 鎷兼帴鏁伴噰閰嶇疆
+            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;
+                    }
+                    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;
+    }
 
     /**
      * 闇�瑕侀�氳繃X,Y杞村畾浣�
@@ -195,17 +324,20 @@
      * @param dataConfig
      * @return
      */
+
     private static Map<String, Object> analysisDb(String data, Map<String, List<DataConfig>> dataConfig, Device device) {
         JSONObject jsonObject = JSON.parseObject(data);
         Map<String, Object> map = new HashMap<>();
         if (jsonObject.isEmpty()) {
             return map;
         }
+        // 浠� JSON 鏁版嵁涓彁鍙� data 鏁扮粍
         JSONArray dataList = JSONArray.parseArray(jsonObject.get("data").toString());
         dataConfig.forEach((k, v) -> {
             AtomicInteger numberOfDataEntries = new AtomicInteger();
             List<Object> list = new ArrayList<>();
             for (int config = 0; config < v.size(); config++) {
+//                String refery = v.get(config).getRefery();
                 String refery = getRefer(v.get(config).getRefery());
                 for (int i = 0; i < dataList.size(); i++) {
                     JSONObject jsonObject1 = JSON.parseObject(dataList.get(i).toString());
@@ -445,10 +577,10 @@
             listResult.addAll(list);
         }
         // 涓轰簡缁欏墠绔仛鏁版嵁鍖哄垎
-        if (listResult.size() > 1) {
+        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());
@@ -546,24 +678,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銆乊瀹氳寖鍥达紝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(" ", "");
@@ -783,7 +898,7 @@
                 continue;
             }
             // 鏈�缁堢粨鏋�
-//            List<Object> result = new ArrayList<>();
+            List<Object> result = new ArrayList<>();
             // 閫氳繃\n灏嗗瓧绗︿覆鍒嗗壊涓鸿
             String[] aColumnY = data.replaceAll(" ", "").split("\n");
             Integer end = null;
@@ -807,7 +922,7 @@
                             }
                             try {
 //                                System.out.println("----------");
-                                list.add(split1[j]);
+                                result.add(split1[j]);
 
                             } catch (Exception e) {
                                 throw new ErrorException(k + "锛歑杞村畾浣嶈秴鍑猴紒");
@@ -831,7 +946,7 @@
                             if (aLineX[j].contains(referx)) {
                                 try {
 //                                    System.out.println("77777777777777");
-                                    list.add(aLineX[j + x]);
+                                    result.add(aLineX[j + x]);
                                 } catch (Exception e) {
                                     throw new ErrorException(k + "锛歑杞村畾浣嶈秴鍑猴紒");
                                 }
@@ -848,7 +963,7 @@
                         if (aLineX[j].contains(referx)) {
                             try {
 //                                System.out.println("4444444444444444");
-                                list.add(aLineX[j + x]);
+                                result.add(aLineX[j + x]);
                             } catch (Exception e) {
                                 throw new ErrorException(k + "锛歑杞村畾浣嶈秴鍑猴紒");
                             }
@@ -856,11 +971,11 @@
                     }
                 }
             }
-            // 闃叉璁$畻鍏紡鐨勬椂鍊欏嚭鐜帮細[null] 杩欑鏁版嵁
-//            if (ObjectUtils.isNotEmpty(result)) {
+//             闃叉璁$畻鍏紡鐨勬椂鍊欏嚭鐜帮細[null] 杩欑鏁版嵁
+            if (ObjectUtils.isNotEmpty(result)) {
 //                String formatProcessing = getFormatProcessing(result);
-//                list.addAll(result);
-//            }
+                list.addAll(result);
+            }
         }
         return list;
     }

--
Gitblit v1.9.3