Pārlūkot izejas kodu

试验管理-规范管理-公式处理

LHB 1 mēnesi atpakaļ
vecāks
revīzija
6f1e11db57

+ 6 - 1
blade-service/blade-manager/src/main/java/com/jfireel/expression/node/impl/GtEqNode.java

@@ -23,7 +23,12 @@ public class GtEqNode extends OperatorResultNode {
 //		if (rightValue == null) {
 //			return null;
 //		}
-        Object[] leftAndRight = ValueUtil.obtain(leftOperand.calculate(variables), rightOperand.calculate(variables));
+        Object calculate = leftOperand.calculate(variables);
+        if(calculate instanceof Boolean && !(Boolean) calculate){
+            return calculate;
+        }
+        Object calculate1 = rightOperand.calculate(variables);
+        Object[] leftAndRight = ValueUtil.obtain(calculate, calculate1);
         return leftAndRight == null ? null : !((Boolean) LtUtil.calculate((Number) leftAndRight[0], (Number) leftAndRight[1]));
     }
 }

+ 29 - 30
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/FormulaServiceImpl.java

@@ -5002,17 +5002,17 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                                     break;
                                 }
                                 //带后缀的数据去掉留纯数据
-                                List<String> strings1 = extractPureNumbers(list1.get(0));
-                                List<String> strings2 = extractPureNumbers(list1.get(1));
+                                String strings1 = extractPureNumbers(list1.get(0));
+                                String strings2 = extractPureNumbers(list2.get(0));
 
 
                                 String s3 = list1.get(0);
                                 String s4 = list2.get(0);
-                                if(CollectionUtils.isNotEmpty(strings1)){
-                                    s3 = strings1.get(0);
+                                if(StringUtils.isNotEmpty(strings1)){
+                                    s3 = strings1;
                                 }
-                                if(CollectionUtils.isNotEmpty(strings2)){
-                                    s4 = strings2.get(0);
+                                if(StringUtils.isNotEmpty(strings2)){
+                                    s4 = strings2;
                                 }
 
                                 //比较符
@@ -5021,33 +5021,31 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                                 String formulaData = "";
                                 //不是纯数字
                                 if(!pattern.matcher(s3).matches() && pattern.matcher(s4).matches()){
+                                    //如果有特殊后缀,把值替换为纯数字
+                                    list2.set(0,s4);
                                     if(s3.contains(" ")){
-
                                         String[] split2 = s3.split(" ");
                                         List<String> list = new ArrayList<>();
                                         for (String string : split2) {
                                             //获取比较符
                                             operator = string.substring(0, 1);
                                             String number = string.substring(1);
-                                            list1.set(0,number);
-
                                             operator = strReplace(operator);
-
-                                            String str = extractPureNumbers(split1[1]).get(0) + operator + extractPureNumbers(number).get(0);
+                                            String str = split1[1] + operator + extractPureNumbers(number);
                                             list.add(str);
                                         }
+                                        list1.set(0,s4);
                                         formulaData = String.join("&&",list);
                                     }else{
                                         //获取比较符
                                         operator = s3.substring(0, 1);
                                         String number = s3.substring(1);
-                                        list1.set(0,number);
-
                                         operator = strReplace(operator);
 
-                                        formulaData = extractPureNumbers(split1[1]).get(0) + operator + extractPureNumbers(number).get(0);
+                                        formulaData = split1[1] + operator + extractPureNumbers(number);
                                     }
                                 }else if (pattern.matcher(s3).matches() && !pattern.matcher(s4).matches()){
+                                    list1.set(0,s3);
                                     if(s4.contains(" ")){
                                         String[] split2 = s4.split(" ");
                                         List<String> list = new ArrayList<>();
@@ -5055,11 +5053,8 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                                             //获取比较符
                                             operator = string.substring(0, 1);
                                             String number = string.substring(1);
-                                            list1.set(0,number);
-
                                             operator = strReplace(operator);
-
-                                            String str = extractPureNumbers(split1[0]).get(0) + operator + extractPureNumbers(number).get(0);
+                                            String str = split1[0] + operator + extractPureNumbers(number);
                                             list.add(str);
                                         }
                                         formulaData = String.join("&&",list);
@@ -5067,11 +5062,8 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                                         //获取比较符
                                         operator = s4.substring(0, 1);
                                         String number = s4.substring(1);
-                                        list2.set(0,number);
-
                                         operator = strReplace(operator);
-
-                                        formulaData = extractPureNumbers(split1[0]).get(0) + operator + extractPureNumbers(number).get(0);
+                                        formulaData = split1[0] + operator + extractPureNumbers(number);
                                     }
                                 } else{
                                     f = f.replace(el, "数据错误,无法比较");
@@ -5153,16 +5145,23 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
      * @param input
      * @return
      */
-    public static List<String> extractPureNumbers(String input) {
-        List<String> result = new ArrayList<>();
-        // 正则表达式:匹配整数或小数(包括小数点),忽略其他字符
-        Pattern pattern = Pattern.compile("\\d+(?:\\.\\d+)?");
-        Matcher matcher = pattern.matcher(input);
+    public static String extractPureNumbers(String input) {
+        if (input == null || input.isEmpty()) {
+            return null;
+        }
 
-        while (matcher.find()) {
-            result.add(matcher.group());
+        // 检查第一个字符是否为数字
+        if (Character.isDigit(input.charAt(0))) {
+            int endIndex = 1;
+            // 遍历后续字符,直到遇到非数字或字符串结束
+            while (endIndex < input.length() && Character.isDigit(input.charAt(endIndex))) {
+                endIndex++;
+            }
+            // 返回开头的连续数字子串
+            return input.substring(0, endIndex);
         }
-        return result;
+        // 如果开头不是数字,返回空字符串
+        return null;
     }