Browse Source

公式解析

yangyj 3 years ago
parent
commit
90ec8e4bc1

+ 5 - 4
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/dto/FormData.java

@@ -19,7 +19,7 @@ public class FormData {
      */
     private String code;
     /**
-     * 步长
+     * 步长;跟别的元素计算时候,用于一对多
      */
     private Integer step;
     /**
@@ -42,15 +42,16 @@ public class FormData {
      */
     private String eAllowDeviation;
     /**
-     * 内容
+     * 内容:同一个groupId下List<每一页内容>
+     * 用于输出
      */
     private List<List<Object>> values;
     /**
-     * 公式脚本
+     * 公式对象
      */
     private Formula formula;
     /**
-     * 业务组
+     * 业务组:同一个节点,一种表格数据分为多组独立运算
      */
     private  Integer groupId;
 

+ 28 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/FormulaServiceImpl.java

@@ -128,7 +128,34 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                     }
                 }
             }
-        System.out.println();
+        System.out.println("执行结束");
+    }
+
+
+    public static void slice(Map<String,Object> variables,String formula){
+            int min =0;
+        Map<String,Object> currentMap = new HashMap<>();
+        Map<String,List<Object>> massMap = new HashMap<>();
+        for(Map.Entry<String,Object> entry:variables.entrySet()){
+                if(entry.getValue() instanceof  List){
+                    List<Object> tmp = (List<Object>) entry.getValue();
+                    if(min==0){
+                        min=tmp.size();
+                    }else{
+                        min= Math.min(min,tmp.size());
+                    }
+                    massMap.put(entry.getKey(),tmp);
+                }else{
+                    currentMap.put(entry.getKey(),entry.getValue());
+                }
+        }
+        for(int i=0;i<min;i++){
+                for(Map.Entry<String,List<Object>> e:massMap.entrySet()){
+                    currentMap.put(e.getKey(),e.getValue().get(i));
+                }
+            Object data  = Expression.parse(formula).calculate(currentMap);
+
+        }
     }
 
     public static final String WP_REG= "(?<=P\\[)[^]]+(?=\\])";