|
@@ -5112,6 +5112,32 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
|
|
|
f = f.replace(el, "缺少数据无法匹配");
|
|
|
break;
|
|
|
}
|
|
|
+ //生成比较公式的时候是否使用或者
|
|
|
+ Boolean isOr = false;
|
|
|
+ //如果是范围
|
|
|
+ if (list1.get(0).contains("~") || list2.get(0).contains("~")) {
|
|
|
+ if(list1.get(0).contains("~")){
|
|
|
+ String[] split2 = list1.get(0).split("~");
|
|
|
+ list1.set(0, ">" + split2[0] + " <" + split2[1]);
|
|
|
+ }else{
|
|
|
+ String[] split2 = list2.get(0).split("~");
|
|
|
+ list2.set(0, ">" + split2[0] + " <" + split2[1]);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ } else if (list1.get(0).startsWith("±") || list2.get(0).startsWith("±")) {
|
|
|
+ isOr = true;
|
|
|
+ //如果是正负值
|
|
|
+ if(list1.get(0).startsWith("±")){
|
|
|
+ String value = list1.get(0).substring(1);
|
|
|
+
|
|
|
+ list1.set(0, "=" + value + " =-" + value);
|
|
|
+ }else{
|
|
|
+ String value = list2.get(0).substring(1);
|
|
|
+ list2.set(0, "=" + value + " =-" + value);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
//带后缀的数据去掉留纯数据
|
|
|
String strings1 = extractPureNumbers(list1.get(0));
|
|
|
String strings2 = extractPureNumbers(list2.get(0));
|
|
@@ -5149,10 +5175,15 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
|
|
|
}
|
|
|
|
|
|
operator = strReplace(operator);
|
|
|
- String str = split1[1] + operator + extractPureNumbers(number);
|
|
|
+ number = extractPureNumbers(number);
|
|
|
+ String str = split1[1] + operator + (number != null && number.startsWith("-") ? "(" + number + ")" : number);
|
|
|
list.add(str);
|
|
|
}
|
|
|
- formulaData = String.join("&&",list);
|
|
|
+ if(isOr){
|
|
|
+ formulaData = String.join("||",list);
|
|
|
+ }else{
|
|
|
+ formulaData = String.join("&&",list);
|
|
|
+ }
|
|
|
}else{
|
|
|
String number = null;
|
|
|
//获取比较符
|
|
@@ -5164,8 +5195,8 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
|
|
|
number = s3.substring(1);
|
|
|
}
|
|
|
operator = strReplace(operator);
|
|
|
-
|
|
|
- formulaData = split1[1] + operator + extractPureNumbers(number);
|
|
|
+ number = extractPureNumbers(number);
|
|
|
+ formulaData = split1[1] + operator + (number !=null && number.startsWith("-") ? "(" + number + ")" : number);
|
|
|
}
|
|
|
}else if (pattern.matcher(s3).matches() && !pattern.matcher(s4).matches()){
|
|
|
list1.set(0,s3);
|
|
@@ -5183,10 +5214,15 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
|
|
|
number = string.substring(1);
|
|
|
}
|
|
|
operator = strReplace(operator);
|
|
|
- String str = split1[0] + operator + extractPureNumbers(number);
|
|
|
+ number = extractPureNumbers(number);
|
|
|
+ String str = split1[0] + operator + (number !=null && number.startsWith("-") ? "(" + number + ")" : number);
|
|
|
list.add(str);
|
|
|
}
|
|
|
- formulaData = String.join("&&",list);
|
|
|
+ if(isOr){
|
|
|
+ formulaData = String.join("||",list);
|
|
|
+ }else{
|
|
|
+ formulaData = String.join("&&",list);
|
|
|
+ }
|
|
|
}else{
|
|
|
String number = null;
|
|
|
//获取比较符
|
|
@@ -5198,7 +5234,9 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
|
|
|
number = s4.substring(1);
|
|
|
}
|
|
|
operator = strReplace(operator);
|
|
|
- formulaData = split1[0] + operator + extractPureNumbers(number);
|
|
|
+ //新值
|
|
|
+ number = extractPureNumbers(number);
|
|
|
+ formulaData = split1[0] + operator + (number !=null && number.startsWith("-") ? "(" + number + ")" : number);
|
|
|
}
|
|
|
} else{
|
|
|
f = f.replace(el, "数据错误,无法比较");
|
|
@@ -5319,17 +5357,23 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
- // 检查第一个字符是否为数字
|
|
|
- if (Character.isDigit(input.charAt(0))) {
|
|
|
+ // 处理负数情况:以 '-' 开头且后跟数字
|
|
|
+ if (input.startsWith("-") && input.length() > 1 && Character.isDigit(input.charAt(1))) {
|
|
|
+ int endIndex = 2; // 从 '-' 后开始检查数字
|
|
|
+ while (endIndex < input.length() && Character.isDigit(input.charAt(endIndex))) {
|
|
|
+ endIndex++;
|
|
|
+ }
|
|
|
+ return input.substring(0, endIndex); // 返回 "-" + 连续数字
|
|
|
+ }
|
|
|
+ // 处理正数情况:以数字开头
|
|
|
+ else 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 input.substring(0, endIndex); // 返回连续数字
|
|
|
}
|
|
|
- // 如果开头不是数字,返回空字符串
|
|
|
+ // 其他情况返回 null
|
|
|
return null;
|
|
|
}
|
|
|
|