|
@@ -9,7 +9,9 @@ import com.ruoyi.project.business.enums.CalculateResultEnum;
|
|
import com.ruoyi.project.business.enums.InputTypeEnum;
|
|
import com.ruoyi.project.business.enums.InputTypeEnum;
|
|
import com.ruoyi.project.business.enums.JEPFuncEnum;
|
|
import com.ruoyi.project.business.enums.JEPFuncEnum;
|
|
import com.ruoyi.project.business.enums.JEPSplitEnum;
|
|
import com.ruoyi.project.business.enums.JEPSplitEnum;
|
|
|
|
+
|
|
import java.math.BigDecimal;
|
|
import java.math.BigDecimal;
|
|
|
|
+import java.math.RoundingMode;
|
|
import java.util.ArrayList;
|
|
import java.util.ArrayList;
|
|
import java.util.HashMap;
|
|
import java.util.HashMap;
|
|
import java.util.List;
|
|
import java.util.List;
|
|
@@ -18,6 +20,7 @@ import java.util.Objects;
|
|
import java.util.regex.Matcher;
|
|
import java.util.regex.Matcher;
|
|
import java.util.regex.Pattern;
|
|
import java.util.regex.Pattern;
|
|
import java.util.stream.Collectors;
|
|
import java.util.stream.Collectors;
|
|
|
|
+
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import org.apache.commons.lang3.StringUtils;
|
|
import org.apache.commons.lang3.StringUtils;
|
|
import org.apache.commons.lang3.math.NumberUtils;
|
|
import org.apache.commons.lang3.math.NumberUtils;
|
|
@@ -60,7 +63,7 @@ public class JEPUtils {
|
|
* @date: 2024/6/13 14:20
|
|
* @date: 2024/6/13 14:20
|
|
**/
|
|
**/
|
|
public static Map<String, Object> calculate(String formula, Map<String, Object> map,
|
|
public static Map<String, Object> calculate(String formula, Map<String, Object> map,
|
|
- Map<String, String> paramInputType, Boolean isDebug) {
|
|
|
|
|
|
+ Map<String, String> paramInputType, Boolean isDebug) {
|
|
Map<String, Object> result = new HashMap<>();
|
|
Map<String, Object> result = new HashMap<>();
|
|
List<String> encipherdList = new ArrayList<>();
|
|
List<String> encipherdList = new ArrayList<>();
|
|
|
|
|
|
@@ -93,12 +96,12 @@ public class JEPUtils {
|
|
for (String param : map.keySet()) {
|
|
for (String param : map.keySet()) {
|
|
if (!isDebug) {
|
|
if (!isDebug) {
|
|
log.info("加密后的入参:{}",
|
|
log.info("加密后的入参:{}",
|
|
- JEPSplitEnum.PARAM_SPLIT_FLAG.getFuncKey() + param + JEPSplitEnum.PARAM_SPLIT_FLAG.getFuncKey());
|
|
|
|
|
|
+ JEPSplitEnum.PARAM_SPLIT_FLAG.getFuncKey() + param + JEPSplitEnum.PARAM_SPLIT_FLAG.getFuncKey());
|
|
encipherdList.add(
|
|
encipherdList.add(
|
|
- JEPSplitEnum.PARAM_SPLIT_FLAG.getFuncKey() + param + JEPSplitEnum.PARAM_SPLIT_FLAG.getFuncKey());
|
|
|
|
|
|
+ JEPSplitEnum.PARAM_SPLIT_FLAG.getFuncKey() + param + JEPSplitEnum.PARAM_SPLIT_FLAG.getFuncKey());
|
|
jep.addVariable(
|
|
jep.addVariable(
|
|
- JEPSplitEnum.PARAM_SPLIT_FLAG.getFuncKey() + param + JEPSplitEnum.PARAM_SPLIT_FLAG.getFuncKey(),
|
|
|
|
- map.get(param));
|
|
|
|
|
|
+ JEPSplitEnum.PARAM_SPLIT_FLAG.getFuncKey() + param + JEPSplitEnum.PARAM_SPLIT_FLAG.getFuncKey(),
|
|
|
|
+ map.get(param));
|
|
} else {
|
|
} else {
|
|
log.info("加密后的入参:{}", param);
|
|
log.info("加密后的入参:{}", param);
|
|
encipherdList.add(param);
|
|
encipherdList.add(param);
|
|
@@ -109,7 +112,7 @@ public class JEPUtils {
|
|
case INPUT:
|
|
case INPUT:
|
|
case SELECT:
|
|
case SELECT:
|
|
case INPUT_SELECT:
|
|
case INPUT_SELECT:
|
|
- String paramStr = (String)map.get(param);
|
|
|
|
|
|
+ String paramStr = (String) map.get(param);
|
|
if (StringUtils.isNotBlank(paramStr)) {
|
|
if (StringUtils.isNotBlank(paramStr)) {
|
|
boolean isNumberFlag = NumberUtils.isCreatable(paramStr);
|
|
boolean isNumberFlag = NumberUtils.isCreatable(paramStr);
|
|
jep.addVariable(param, isNumberFlag ? new BigDecimal(paramStr) : paramStr);
|
|
jep.addVariable(param, isNumberFlag ? new BigDecimal(paramStr) : paramStr);
|
|
@@ -121,7 +124,7 @@ public class JEPUtils {
|
|
break;
|
|
break;
|
|
case INPUT_NUMBER:
|
|
case INPUT_NUMBER:
|
|
case INPUT_DECIMAL:
|
|
case INPUT_DECIMAL:
|
|
- String paramStr1 = (String)map.get(param);
|
|
|
|
|
|
+ String paramStr1 = (String) map.get(param);
|
|
if (Objects.nonNull(paramStr1)) {
|
|
if (Objects.nonNull(paramStr1)) {
|
|
jep.addVariable(param, new BigDecimal(paramStr1));
|
|
jep.addVariable(param, new BigDecimal(paramStr1));
|
|
log.info("入参值:{}", new BigDecimal(paramStr1));
|
|
log.info("入参值:{}", new BigDecimal(paramStr1));
|
|
@@ -152,9 +155,12 @@ public class JEPUtils {
|
|
result.put(CALCULATE_VALUE, jep.getValue() + "");
|
|
result.put(CALCULATE_VALUE, jep.getValue() + "");
|
|
try {
|
|
try {
|
|
BigDecimal objValue = new BigDecimal(jep.getValueAsObject() + "");
|
|
BigDecimal objValue = new BigDecimal(jep.getValueAsObject() + "");
|
|
|
|
+ objValue = objValue.stripTrailingZeros();
|
|
|
|
+ objValue = objValue.setScale(2, RoundingMode.HALF_UP);
|
|
result.put(OBJECT_CALCULATE_VALUE, objValue.stripTrailingZeros().toPlainString());
|
|
result.put(OBJECT_CALCULATE_VALUE, objValue.stripTrailingZeros().toPlainString());
|
|
} catch (Exception e) {
|
|
} catch (Exception e) {
|
|
result.put(OBJECT_CALCULATE_VALUE, jep.getValueAsObject() + "");
|
|
result.put(OBJECT_CALCULATE_VALUE, jep.getValueAsObject() + "");
|
|
|
|
+ log.info("JEPUTils 计算结果 数值格式化失败,使用原始值:{}", jep.getValueAsObject());
|
|
log.error("JEPUtils 计算结果格式化失败", e);
|
|
log.error("JEPUtils 计算结果格式化失败", e);
|
|
}
|
|
}
|
|
return result;
|
|
return result;
|
|
@@ -206,11 +212,11 @@ public class JEPUtils {
|
|
//替换掉其中的 $_$、$@$ 按照长度 倒序排序
|
|
//替换掉其中的 $_$、$@$ 按照长度 倒序排序
|
|
if (paramList.size() > 0) {
|
|
if (paramList.size() > 0) {
|
|
paramList = paramList.stream().map(item -> item.replace(JEPSplitEnum.PARAM_SPLIT_FLAG.getFuncKey(), ""))
|
|
paramList = paramList.stream().map(item -> item.replace(JEPSplitEnum.PARAM_SPLIT_FLAG.getFuncKey(), ""))
|
|
- .collect(Collectors.toList());
|
|
|
|
|
|
+ .collect(Collectors.toList());
|
|
}
|
|
}
|
|
if (funcList.size() > 0) {
|
|
if (funcList.size() > 0) {
|
|
funcList = funcList.stream().map(item -> item.replace(JEPSplitEnum.FUNC_SPLIT_FLAG.getFuncKey(), ""))
|
|
funcList = funcList.stream().map(item -> item.replace(JEPSplitEnum.FUNC_SPLIT_FLAG.getFuncKey(), ""))
|
|
- .collect(Collectors.toList());
|
|
|
|
|
|
+ .collect(Collectors.toList());
|
|
}
|
|
}
|
|
|
|
|
|
paramList.sort((o1, o2) -> o2.length() - o1.length());
|
|
paramList.sort((o1, o2) -> o2.length() - o1.length());
|
|
@@ -220,7 +226,7 @@ public class JEPUtils {
|
|
for (String s : funcList) {
|
|
for (String s : funcList) {
|
|
JEPFuncEnum funcEnum = JEPFuncEnum.fromByKey(s);
|
|
JEPFuncEnum funcEnum = JEPFuncEnum.fromByKey(s);
|
|
formula = formula.replace(JEPSplitEnum.FUNC_SPLIT_FLAG.getFuncKey(), "")
|
|
formula = formula.replace(JEPSplitEnum.FUNC_SPLIT_FLAG.getFuncKey(), "")
|
|
- .replace(funcEnum.getFuncKey(), funcEnum.getFuncValue());
|
|
|
|
|
|
+ .replace(funcEnum.getFuncKey(), funcEnum.getFuncValue());
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|