yangyj 1 рік тому
батько
коміт
86815c1643

+ 9 - 18
blade-service/blade-manager/src/main/java/com/jfireel/expression/node/impl/MinusNode.java

@@ -21,7 +21,7 @@ public class MinusNode extends OperatorResultNode {
         Object rightValue = rightOperand.calculate(variables);
         String leftStr=StringUtils.handleNull(leftValue);
         String rightStr=StringUtils.handleNull(rightValue);
-        if (leftStr.matches(DXD_REG) && rightStr.matches(DXD_REG)) {
+        if (leftStr.matches(DXD_REG) && rightStr.matches(DXD_REG)||rightStr.matches(DES_REG)) {
             return CustomFunction.dXd(rightValue, leftValue);
         }else if(leftStr.contains(COLON)&&rightStr.contains(COLON)){
             return fraction(leftStr)-fraction(rightStr);
@@ -52,29 +52,20 @@ public class MinusNode extends OperatorResultNode {
     }
 
 
+
 /*    public static void main(String[] args) {
         Map<String,Object> map = new HashMap<>();
         map.put("A","1:2.36");
         map.put("B","1:4");
+        map.put("C","536");
+        map.put("C2","503");
+        map.put("D","540/500");
         System.out.println(Expression.parse("A-B").calculate(map).toString());
+        System.out.println(Expression.parse("D-C").calculate(map).toString());
+        System.out.println(Expression.parse("C-D").calculate(map).toString());
+        System.out.println(Expression.parse("C2-D").calculate(map).toString());
     }*/
 
-//	public Object calculateOld(Map<String, Object> variables) {
-//		Object leftValue = leftOperand.calculate(variables);
-//		if(leftValue instanceof String && StringUtils.isNumber(leftValue)) {
-//			leftValue = new BigDecimal(leftValue.toString());
-//		}
-//		if (!(leftValue instanceof Number)) {
-//			return null;
-//		}
-//		Object rightValue = rightOperand.calculate(variables);
-//		if(rightValue instanceof String && StringUtils.isNumber(rightValue)) {
-//			rightValue = new BigDecimal(rightValue.toString());
-//		}
-//		if (!(rightValue instanceof Number)) {
-//			return null;
-//		}
-//		return SubtractUtil.calculate((Number) leftValue, (Number) rightValue);
-//	}
+
 
 }

+ 24 - 4
blade-service/blade-manager/src/main/java/com/mixsmart/utils/CustomFunction.java

@@ -1262,14 +1262,33 @@ public class CustomFunction {
     }*/
 
 
-    public static Object designFormat(Object design) {
-        if (StringUtils.isNotEmpty(design)) {
-            return Arrays.stream(design.toString().split("[^\\d.]")).filter(StringUtils::isNotEmpty).collect(Collectors.joining("/"));
+
+    public static Object designFormat(Object design){
+        if(StringUtils.isNotEmpty(design)){
+            if(design instanceof List){
+                List<Object> list = (List<Object>) design;
+                StringBuffer str = new StringBuffer();
+                for(Object o : list){
+                    if(o == null){
+                        continue;
+                    }
+                    if(o.toString().contains("*")){
+                        str.append(o).append("/");
+                    }else{
+                        String collect = Arrays.stream(o.toString().split("[^\\d.-]")).filter(StringUtils::isNotEmpty).collect(Collectors.joining("/"));
+                        if(StringUtils.isNotEmpty(collect)){
+                            str.append(collect).append("/");
+                        }
+                    }
+                }
+                return str;
+            }else{
+                return  Arrays.stream(design.toString().split("[^\\d.\\-*]")).filter(StringUtils::isNotEmpty).collect(Collectors.joining("/"));
+            }
         }
         return "";
     }
 
-
     public static double offRangeSum(Object o){
         if(o.equals(Double.MAX_VALUE)){
             return Double.MAX_VALUE;
@@ -1361,6 +1380,7 @@ public class CustomFunction {
         return dev;
     }
 
+
     public static List<Object> b445random(Object hz, Object design, Object dev, Object failed, Object xN) {
         List<Object> measureOut = new ArrayList<>();
         String hzStr = StringUtils.handleNull(hz);

+ 12 - 2
blade-service/blade-manager/src/main/java/com/mixsmart/utils/StringUtils.java

@@ -1317,11 +1317,21 @@ public class StringUtils {
         return max;
     }
 
+/*    public static void main(String[] args) {
+        System.out.println(getScaleZero(152000,"±10.0"));
+        System.out.println(getScaleZero(152000,"-10.0,10"));
+        System.out.println(getScaleZero(152000,"-10.0,10.0"));
+        System.out.println(getScaleZero(Double.MAX_VALUE,"-10.0,10"));
+        System.out.println(getScaleZero(152000,"-10,10"));
+    }*/
+
     public static List<Object> scaleParam(Object ... number){
-        return Arrays.stream(number).filter(StringUtils::isNotEmpty).flatMap(e-> CustomFunction.obj2ListNe(e).stream()).distinct().filter(StringUtils::isNumber).map(e->{
+        return Arrays.stream(number).filter(StringUtils::isNotEmpty).flatMap(e-> CustomFunction.obj2ListNe(e).stream()).distinct().map(s->s.toString().replaceAll("±","")).filter(StringUtils::isNumber).map(e->{
             /*0.3999999999999986 检测到超长小数位先转double处理,再还原回String*/
             String tg=e.toString();
-            if(tg.length()-tg.indexOf(StringPool.DOT)>6||tg.contains("e")){
+            int dot=tg.indexOf(StringPool.DOT);
+            boolean unlimited=dot>0&&(tg.length()-dot>6);
+            if(unlimited||tg.contains("e")){
                 return BigDecimal.valueOf(Double.parseDouble(tg)).setScale(2, RoundingMode.HALF_UP).toString();
             }else {
                 return e.toString();

+ 1 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/FormulaExecutor.java

@@ -12,7 +12,7 @@ import java.util.regex.Pattern;
  */
 @Data
 public abstract  class   FormulaExecutor implements FormulaHandleChain{
-    public final TableElementConverter tec;
+    final TableElementConverter tec;
     public final static String WP="WP";
     public final static String CHAIN="trees";
     public final static String FC="FC.";

+ 0 - 24
blade-service/blade-manager/src/main/java/org/springblade/manager/service/IFormulaService.java

@@ -56,30 +56,6 @@ public interface IFormulaService extends BaseService<Formula> {
      */
     IFormulaService init2(TableElementConverter tec);
 
-    /**
-     * 依赖排序
-     */
-    /*IFormulaService sort2();*/
-
-    /**
-     * 公式预处理
-     */
-    /*IFormulaService pre2();*/
-
-    /**
-     * 特殊公式处理
-     */
-    /*IFormulaService special2();*/
-
-    /**
-     * 公式运算
-     */
-    /*IFormulaService calculate2();*/
-
-    /**
-     * 格式化
-     */
-    /*void format2();*/
 
     List<Formula> getFormulaList(List<KeyMapper> keyMapperList);
     /**