From 4d5a0213352c1e5fd9410241668cbd06ea47e4c6 Mon Sep 17 00:00:00 2001
From: liding <756868258@qq.com>
Date: 星期五, 18 四月 2025 14:56:30 +0800
Subject: [PATCH] 拉力机数采

---
 cnas-device/src/main/java/com/ruoyi/device/utils/DataAcquisition.java |  145 ++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 140 insertions(+), 5 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 5065c0b..44a20e5 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
@@ -48,7 +48,7 @@
             if (device.getFileType().equals(".xlsx")) {
                 String url = device.getCollectUrl() + "\\" + sampleCode.replace("/", "");
                 if (StringUtils.isNotBlank(dataConfig.get(0).getAnotherName())) {
-                    url += dataConfig.get(0).getAnotherName() ;
+                    url += dataConfig.get(0).getAnotherName();
                 }
                 url += ".xlsx";
                 device.setCollectUrl(url);
@@ -86,7 +86,7 @@
         JSONObject jsonObject = JSON.parseObject(result);
         if (Objects.equals(jsonObject.get("code"), 1)) {
             if (ObjectUtils.isEmpty(jsonObject.get("msg"))) {
-                throw new ErrorException("鏈煡璇㈠埌鏂囦欢锛佸彲鑳借璺緞锛�" + device.getCollectUrl() + "锛変笅骞舵病鏈夋墍闇�(" + device.getFileType() +")鏂囦欢锛�");
+                throw new ErrorException("鏈煡璇㈠埌鏂囦欢锛佸彲鑳借璺緞锛�" + device.getCollectUrl() + "锛変笅骞舵病鏈夋墍闇�(" + device.getFileType() + ")鏂囦欢锛�");
             } else {
                 throw new ErrorException(jsonObject.get("msg") + "");
             }
@@ -113,6 +113,9 @@
                 case ".xlsx":
                     map = analysisList(data, userMap, device, entrustCode, sampleCode);
                     break;
+                case ".xls":
+                    map = analysisXlsList(data, userMap, device, entrustCode, sampleCode);
+                    break;
                 case ".txt":
                     map = analysisTxt(data, userMap, device, entrustCode, sampleCode);
                     break;
@@ -133,6 +136,9 @@
                 case ".png":
                     map = readPngString(data, userMap, device);
                     break;
+                case ".pdf":
+                    map = readPdfString(data, userMap, device);
+                    break;
                 default:
                     map = null;
                     break;
@@ -144,6 +150,42 @@
             }
             return map;
         }
+    }
+
+    private static Map<String, Object> readPdfString(String data, Map<String, List<DataConfig>> dataConfig, Device device) {
+        Map<String, Object> map = new HashMap<>();
+        dataConfig.forEach((k, v) -> {
+            List<Object> list = new ArrayList<>();
+            for (int config = 0; config < v.size(); config++) {
+                String referx = getRefer(v.get(config).getReferx());
+                String result = null;
+                // 閫氳繃\n灏嗗瓧绗︿覆鍒嗗壊涓鸿
+                String[] aColumnY = data.split("\n");
+                List<String> list1 = new ArrayList<>();
+                // 璇ュ惊鐜緱鍑虹敤鎴烽厤缃殑y杞�
+                for (int i = 0; i < aColumnY.length; i++) {
+                    String addDataWithSpaces = referx.replaceAll("", " ");
+                    int x = getXOrY(v.get(config).getX(), k, "X");
+                    if (aColumnY[i].contains(addDataWithSpaces)) {
+                        Matcher matcher = SPATTERN.matcher(aColumnY[i]);
+                        while (matcher.find()) {
+                            String group = matcher.group();
+                            list1.add(group);
+                        }
+                    }
+                    if (ObjectUtils.isNotEmpty(list1)) {
+                        result = list1.get(x);
+                    }
+                }
+                if (ObjectUtils.isNotEmpty(result)) {
+                    list.add(result);
+                }
+            }
+            // 杩涜鍏紡璁$畻
+            Object resultValue = calculationFormula(list, 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) {
@@ -528,7 +570,33 @@
             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);
+                list = analyzeXlsData(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;
+    }
+
+    /**
+     * 鍙朮瀹氫綅
+     *
+     * @param data       閲囬泦鍒扮殑鏂囦欢瀛楃涓�
+     * @param dataConfig 鐢ㄦ埛閰嶇疆濂界殑x瀹氫綅鏁版嵁涓庡弬鐓х墿
+     * @return
+     */
+    public static Map<String, Object> analysisXlsList(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 = analyzeXlsData(data, v, k, splitIdentifier);
                 // 濮旀墭缂栧彿涓庢牱鍝佺紪鍙峰瓨鍦�
             } else if (ObjectUtils.isNotEmpty(device.getEntrustCode()) && ObjectUtils.isNotEmpty(device.getSampleCode())) {
                 list = analyzeDataEntrustCodAndSampleCode(data, v, k, splitIdentifier, device, entrustCode, sampleCode);
@@ -569,7 +637,7 @@
                         if (aLine[j].contains(entrustCode)) {
                             entrustCodeY = j;
                         }
-                        if (aLine[j].contains(sampleCode) ) {
+                        if (aLine[j].contains(sampleCode)) {
                             sampleCodeY = j;
                         }
                         if (aLine[j].contains(refery)) {
@@ -588,7 +656,8 @@
                                 list.add(result);
                             }
                         }
-                    } catch (Exception e) {}
+                    } catch (Exception e) {
+                    }
                 }
             }
         }
@@ -720,6 +789,72 @@
         return list;
     }
 
+    public static List<Object> analyzeXlsData(String data, List<DataConfig> v, String k, String split) {
+        List<Object> finalResult = new ArrayList<>(); // 鏈�缁堣繑鍥炵殑缁撴灉鍒楄〃
+
+        for (DataConfig config : v) {
+            // 鍙栫敤鎴烽厤缃殑鍙傜収鐗�
+            String referx = getRefer(config.getReferx());
+            if (ObjectUtils.isEmpty(referx)) {
+                continue;
+            }
+
+            // 绗竴姝ワ細瑙f瀽鏁版嵁锛屾壘鍒扮鍚堟潯浠剁殑琛岋紙绗簩涓垎闅旂鍓嶅拰鍐掑彿鍚庝负鏁板瓧锛�
+            List<String> validLines = new ArrayList<>();
+            String[] lines = data.replaceAll(" ", "").split("\n");
+            for (String line : lines) {
+                String[] parts = line.split(split);
+                if (parts.length > 1) {
+                    // 妫�鏌ョ浜屼釜鍒嗛殧绗﹀墠闈㈠拰鍐掑彿鍚庨潰鏄惁涓烘暟瀛�
+                    String beforeSplit = parts[1];
+                    String afterColon = "";
+                    if (beforeSplit.contains(":")) {
+                        String[] colonParts = beforeSplit.split(":");
+                        if (colonParts.length > 1) {
+                            afterColon = colonParts[1].trim();
+                        }
+                    }
+                    try {
+                        Double.parseDouble(afterColon); // 鍐掑彿鍚庢槸鍚︿负鏁板瓧
+                        validLines.add(line); // 濡傛灉绗﹀悎鏉′欢锛屾坊鍔犲埌涓存椂鍒楄〃涓�
+                    } catch (NumberFormatException e) {
+                        // 涓嶇鍚堟暟瀛楁潯浠讹紝蹇界暐
+                    }
+                }
+            }
+
+            // 绗簩姝ワ細浠庝复鏃跺垪琛ㄤ腑鎻愬彇鍖呭惈 referx 鐨勮锛屽苟鑾峰彇鍏跺悗闈㈢殑鏁板瓧鍊�
+            List<Object> result = new ArrayList<>();
+            for (String line : validLines) {
+                if (line.contains(referx)) {
+                    String[] parts = line.split(referx);
+                    if (parts.length > 1) {
+                        String xValue = parts[1].trim();
+                        // 鎻愬彇 referx 鍚庨潰鍒颁笅涓�涓垎闅旂涔嬮棿鐨勬暟瀛�
+                        String[] splitParts = xValue.split(split);
+                        if (splitParts.length > 0) {
+                            try {
+                                String trim = splitParts[0].trim();
+                                if (trim.contains(":")) {
+                                    trim = trim.replaceAll(":", "");
+                                }
+                                Double.parseDouble(trim); // 鍒ゆ柇鏄惁涓烘暟瀛�
+                                result.add(trim);
+                            } catch (NumberFormatException e) {
+                                // 涓嶆槸鏁板瓧锛屽拷鐣�
+                            }
+                        }
+                    }
+                }
+            }
+            // 闃叉璁$畻鍏紡鐨勬椂鍊欏嚭鐜帮細[null] 杩欑鏁版嵁
+            if (!result.isEmpty()) {
+                finalResult.addAll(result);
+            }
+        }
+        return finalResult;
+    }
+
     public static String getFormatProcessing(String value) {
         value = value.replaceAll("%", "");
         if (value.contains("=")) {

--
Gitblit v1.9.3