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