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