yangyj 2 жил өмнө
parent
commit
b1ad0006cd

+ 8 - 0
blade-service/blade-manager/src/main/java/com/mixsmart/utils/CustomFunction.java

@@ -1437,6 +1437,14 @@ public class CustomFunction {
 		return "";
 	}
 
+	public static Object pow(Object a) {
+		if(StringUtils.isNumber(a)){
+			return  Math.pow(Double.parseDouble(a.toString()),2);
+		}
+		return "";
+	}
+
+
 
 
 	/**

+ 1 - 9
blade-service/blade-manager/src/main/java/com/mixsmart/utils/FormulaUtils.java

@@ -1,6 +1,7 @@
 package com.mixsmart.utils;
 
 
+import java.math.BigDecimal;
 import java.util.*;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
@@ -30,15 +31,6 @@ public class FormulaUtils {
         return map;
     }
 
-//    public static void main(String[] args) {
-//        Matcher m = RegexUtils.matcher("(\\-?\\d+)(\\D)(\\+?\\d+)","-5,5");
-//        if(m.find()){
-//            System.out.println(m.group());
-//            System.out.println(m.group(1));
-//            System.out.println(m.group(2));
-//            System.out.println(m.group(3));
-//        }
-//    }
 
     /**
      * result[0]^2+result[1]^2=result[2]^2  result[] 元素均为正整数

+ 22 - 23
blade-service/blade-manager/src/main/java/com/mixsmart/utils/StringUtils.java

@@ -1315,7 +1315,7 @@ public class StringUtils {
 	 * @Author yangyj
 	 * @Date 2021.10.15 10:35
 	 **/
-   public static String number2String(Object number, Object scale){
+   public static String number2StringZero(Object number, Object scale){
 		if(isNumber(number)){
 			if(isEmpty(scale)){
 				scale=0;
@@ -1324,6 +1324,19 @@ public class StringUtils {
 		}
         return "";
    }
+	public static String number2String(Object number, Object scale){
+		if(isNumber(number)){
+			if(isEmpty(scale)){
+				scale=0;
+			}
+			String val =new BigDecimal(handleNull(number)).setScale(handleObj2Integer(scale),BigDecimal.ROUND_HALF_UP).toString();
+			if(val.contains(".")){
+				return new BigDecimal(val).toString().replaceAll("(0+|\\.0+)$","");
+			}
+			return  val;
+		}
+		return "";
+	}
 
 	/**
 	 * @Description byte数组转Md5字符串
@@ -1370,28 +1383,7 @@ public class StringUtils {
 
 
 
-	/**
-	 * @Description 获取最大小数位
-	 * @Param [number]
-	 * @return int
-	 * @Author yangyj
-	 * @Date 2021.12.23 15:08
-	 **/
-//	public  static Integer getScale(Object ...number){
-//		int max=0;
-//        for(Object n:number){
-//        	if(StringUtils.isNotEmpty(n)){
-//        		String[] sa = n.toString().split(",");
-//                for(String s:sa){
-//                	Matcher m = ReportUtils.matcher("(\\d)+.(\\d)+",s);
-//                	if(m.find()){
-//						max=Math.max(new StringBuilder(m.group()).reverse().toString().indexOf("."),max);
-//					}
-//				}
-//			}
-//		}
-//        return max;
-//	}
+
 
 	/**
 	 *
@@ -1475,5 +1467,12 @@ public class StringUtils {
 		return max;
 	}
 
+	public static void main(String[] args) {
+		System.out.println(getScale(5.0));
+		System.out.println(getScale(5.01));
+		System.out.println(getScale(5.2001));
+		System.out.println(getScale(5.20010));
+	}
+
 
 }

+ 25 - 5
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/FormulaServiceImpl.java

@@ -73,8 +73,13 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
      **/
     @Override
     public void execute(List<FormData> list ,Long contractId,Long primaryKeyId){
-        /*初始化变量>>依赖排序>>预处理>>特殊公式>>通用公式执行*/
-        this.init(list,contractId,primaryKeyId).sort().pre().special().calculate();
+        /*初始化变量>>依赖排序>>预处理>>特殊公式>>通用公式执行>>数据格式化*/
+        this.init(list,contractId,primaryKeyId)
+                .sort()
+                .pre()
+                .special()
+                .calculate()
+                .format();
     }
 
     @Override
@@ -218,8 +223,8 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                         fd.getValues().add(new ElementData(0,0,Expression.parse(formula.getFormula()).calculate(currentMap)));
                     }
                 }
-                if(fd.getValues().size()>0&&cp.size()!=fd.getValues().size()){
-                    /*往后还要判断是否更新*/
+                if(notEquals(cp,fd.getValues())){
+                     /*数量不相等*/
                     fd.setUpdate(1);
                 }
             }
@@ -227,6 +232,19 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
         return this;
     }
 
+    /**对比内容再觉得是否刷新,如果允许牺牲部分性能,也可以不做判断进行全部刷新*/
+    public boolean notEquals(List<ElementData> old,List<ElementData> enw){
+        List<Object> a=old.stream().map(ElementData::getValue).collect(Collectors.toList());
+        List<Object> b=enw.stream().map(ElementData::getValue).collect(Collectors.toList());
+        if(a.size()!=b.size()){
+            return true;
+        }else if(!a.containsAll(b)){
+            return true;
+        }else {
+            return !a.stream().map(Func::toStr).collect(Collectors.joining()).equals(b.stream().map(Func::toStr).collect(Collectors.joining()));
+        }
+    }
+
     @Override
     public void format() {
         for(FormData fd:this.env.formDataList){
@@ -351,7 +369,9 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                             Map<String, Object> E = getMap(currentMap, "E");
                             tmp.forEach(e -> E.put(e.getCode(), e.getValues().stream().map(ElementData::getValue).collect(Collectors.toList())));
                             Object data = Expression.parse(CustomFunction.CLASS_CALL + m.group()).calculate(currentMap);
-                            f = f.replace(CustomFunction.CLASS_CALL + m.group(), data.toString());
+                            data=StringUtils.number2String(data,StringUtils.getScale(data));
+                            /*必须要用括号套壳,不然无法处理负数*/
+                            f = f.replace(CustomFunction.CLASS_CALL + m.group(), "("+data.toString()+")");
                             fd.getFormula().setFormula(f);
                         }
                     }