From 54a33a391e211a4b2b97621501c6236527d32331 Mon Sep 17 00:00:00 2001 From: zss <zss@example.com> Date: 星期四, 01 八月 2024 10:41:00 +0800 Subject: [PATCH] 文件采集公式计算调整 --- cnas-server/src/main/java/com/yuanchu/mom/utils/DataAcquisition.java | 42 ++++++++++++++++++------------------------ 1 files changed, 18 insertions(+), 24 deletions(-) diff --git a/cnas-server/src/main/java/com/yuanchu/mom/utils/DataAcquisition.java b/cnas-server/src/main/java/com/yuanchu/mom/utils/DataAcquisition.java index ab8db5b..4dab601 100644 --- a/cnas-server/src/main/java/com/yuanchu/mom/utils/DataAcquisition.java +++ b/cnas-server/src/main/java/com/yuanchu/mom/utils/DataAcquisition.java @@ -261,15 +261,13 @@ formula = formula.replace("锛�", "(") .replace("锛�", ")") .replace("锛�", ","); - //鐒跺悗鎻愬彇鑻辨枃瀛楁瘝,鍏ㄩ儴杞崲涓哄ぇ鍐� - String[] strs = formula.split("[^A-Za-z]+"); - String upperStr = ""; - for (String str : strs) { - upperStr += str.toUpperCase(); - } + //鐒跺悗鎻愬彇鍏紡 + String strs = formula.substring(0,formula.indexOf("(")); + String upperStr = strs.toUpperCase(); if (upperStr.equals("")) { throw new ErrorException(formula + "閲岄潰鐨勫叕寮忔病鏈夊嚱鏁�"); } + System.out.println(upperStr); //鐒跺悗鑾峰彇鏈�澶栭潰鎷彿閲岄潰鐨勫��,鍐嶆牴鎹�","鍒嗗壊 int start = formula.indexOf("("); int end = -1; @@ -289,51 +287,47 @@ throw new ErrorException("鍏紡鎷彿涓嶅尮閰�: " + formula); } - String inner = formula.substring(start + 1, end); + String argumentsStr = formula.substring(start + 1, end); List<String> arguments = new ArrayList<>(); - int depth = 0; + int bracketCount = 0; StringBuilder currentArgument = new StringBuilder(); - for ( - char c : inner.toCharArray()) { - if (c == ',' && depth == 0) { + for (char c : argumentsStr.toCharArray()) { + if (c == ',' && bracketCount == 0) { arguments.add(currentArgument.toString()); currentArgument.setLength(0); } else { - if (c == '(') { - depth++; - } else if (c == ')') { - depth--; - } + if (c == '(') bracketCount++; + if (c == ')') bracketCount--; currentArgument.append(c); } } arguments.add(currentArgument.toString()); String[] bracketStrs = arguments.toArray(new String[0]); - List<BigDecimal> results = new ArrayList<>(); - for ( - String expr : bracketStrs) { + for (String expr : bracketStrs) { System.out.println("鏇挎崲鍓�" + expr); - Pattern pattern = Pattern.compile("\\b\\d+\\b"); + Pattern pattern = Pattern.compile("([A-Z])(\\d+)"); Matcher matcher = pattern.matcher(expr); StringBuffer sb = new StringBuffer(); while (matcher.find()) { - int index = Integer.parseInt(matcher.group()) - 1; + String letter = matcher.group(1); + int index = Integer.parseInt(matcher.group(2)) - 1; // 灏�1-based杞负0-based if (index < bigDecimalList.size()) { matcher.appendReplacement(sb, bigDecimalList.get(index).toString()); } else { - throw new ErrorException("琛ㄨ揪寮忎腑鐨勪笅鏍� " + index + " 瓒呭嚭鑼冨洿"); + throw new RuntimeException("鍏紡涓殑涓嬫爣 " + index + " 瓒呭嚭鑼冨洿"); } } matcher.appendTail(sb); System.out.println("鏇挎崲鍚�" + sb.toString()); - //璁$畻 + + // 璁$畻琛ㄨ揪寮� ScriptEngine engine = new ScriptEngineManager().getEngineByName("JavaScript"); try { Object result = engine.eval(sb.toString()); results.add(new BigDecimal(result.toString())); } catch (Exception e) { - throw new IllegalArgumentException("鏃犳硶璁$畻琛ㄨ揪寮�: " + sb, e); + throw new IllegalArgumentException("鏃犳硶璁$畻鍏紡: " + sb, e); } } // 鏍规嵁鍑芥暟鍚嶇О杩涜鐩稿簲璁$畻 -- Gitblit v1.9.3