yangyj 3 лет назад
Родитель
Сommit
d1eabf7119

+ 4 - 8
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/dto/ElementData.java

@@ -1,6 +1,8 @@
 package org.springblade.manager.dto;
 
+import lombok.AllArgsConstructor;
 import lombok.Data;
+import lombok.NoArgsConstructor;
 
 /**
  * @author yangyj
@@ -8,6 +10,8 @@ import lombok.Data;
  * @description TODO
  */
 @Data
+@AllArgsConstructor
+@NoArgsConstructor
 public class ElementData {
     /**
      *  表的自然顺序,同一张表复制N次,index代表该数据在第几张
@@ -19,12 +23,4 @@ public class ElementData {
     Integer groupId;
     Object  value;
 
-    public ElementData() {
-    }
-
-    public ElementData(Integer index, Integer groupId, Object value) {
-        this.index = index;
-        this.groupId = groupId;
-        this.value = value;
-    }
 }

+ 24 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/dto/LocalVariable.java

@@ -0,0 +1,24 @@
+package org.springblade.manager.dto;
+
+import lombok.Data;
+
+import java.util.Map;
+
+/**
+ * @author yangyj
+ * @Date 2022/7/5 17:10
+ * @description TODO
+ */
+@Data
+public class LocalVariable {
+   private Integer index;
+   private String formula;
+   private Map<String,Object> currentMap;
+   public LocalVariable(){
+   }
+   public LocalVariable(Integer index, String formula, Map<String, Object> currentMap) {
+      this.index = index;
+      this.formula = formula;
+      this.currentMap = currentMap;
+   }
+}

+ 1 - 1
blade-service/blade-manager/pom.xml

@@ -11,7 +11,7 @@
 
     <artifactId>blade-manager</artifactId>
     <name>${project.artifactId}</name>
-<!--    <version>${bladex.project.version}</version>-->
+<version>${bladex.project.version}</version>
     <packaging>jar</packaging>
 
     <repositories>

+ 14 - 6
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/FormulaServiceImpl.java

@@ -10,6 +10,7 @@ import org.springblade.core.tool.utils.CollectionUtil;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.manager.dto.ElementData;
 import org.springblade.manager.dto.FormData;
+import org.springblade.manager.dto.LocalVariable;
 import org.springblade.manager.entity.Formula;
 import org.springblade.manager.entity.WbsParam;
 import org.springblade.manager.entity.WbsTree;
@@ -129,7 +130,6 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                                         for(Map.Entry<Integer,Map<String,List<Object>>> entry:dataSource.entrySet()){
                                             if(entry.getValue().keySet().size()>=ele.size()){
                                                 List<ElementData> eds = slice(entry.getValue(),constantMap,f,entry.getKey());
-                                                System.out.println(eds);
                                                 fd.setValues(eds);
                                             }
                                         }
@@ -161,8 +161,6 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
     public  List<ElementData> slice(Map<String,List<Object>> elementMap,Map<String,Object> constantMap,String formula,Integer groupId){
         int min =0;
         List<ElementData> result = new ArrayList<>();
-        Map<String,Object> currentMap = new HashMap<>();
-        Map<String,Object> E=getMap(currentMap,"E");
         for(Map.Entry<String,List<Object>> entry:elementMap.entrySet()){
             List<Object> tmp =  entry.getValue();
             if(min==0){
@@ -172,18 +170,28 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
             }
         }
         if(min>0){
-            currentMap.putAll(constantMap);
+            List<LocalVariable>  lvab= new ArrayList<>();
             for(int i=0;i<min;i++){
+                Map<String, Object> currentMap = new HashMap<>(constantMap);
+                Map<String,Object> E=getMap(currentMap,"E");
                 for(Map.Entry<String,List<Object>> e:elementMap.entrySet()){
                     E.put(e.getKey(),e.getValue().get(i));
                 }
-                Object data  = Expression.parse(formula).calculate(currentMap);
-                result.add(new ElementData(i,groupId,data));
+                lvab.add(new LocalVariable(i,formula,currentMap));
+            }
+            /*并发执行*/
+            List<ElementData>   r= lvab.parallelStream().map(e->{
+                Object data =Expression.parse(e.getFormula()).calculate(e.getCurrentMap());
+                return new ElementData(e.getIndex(),groupId,data);
+            }).collect(Collectors.toList());
+            if(CollectionUtil.isNotEmpty(r)){
+                result.addAll(r);
             }
         }
         return  result;
     }
 
+
     public static final String WP_REG= "(?<=P\\[)[^]]+(?=\\])";
     public static final  Pattern PP = Pattern.compile(WP_REG);