浏览代码

公式相关:G8重构

yangyj 2 年之前
父节点
当前提交
760013db82

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

@@ -2025,8 +2025,6 @@ public class CustomFunction {
 		return "";
 	}
 
-
-
 	public static  Object abs(Object o){
 		/**
 		 * @Description  测试

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

@@ -1,6 +1,7 @@
 package org.springblade.manager.formula;
 
 import org.springblade.manager.dto.FormData;
+import org.springblade.manager.formula.impl.TableElementConverter;
 
 import java.util.List;
 import java.util.Map;
@@ -9,5 +10,5 @@ import java.util.Map;
  * @author yangyj
  */
 public interface FormulaStrategy extends IStrategy{
-    void execute(List<FormData> fds, Map<String,Object> constantMap);
+    void execute(TableElementConverter tec);
 }

+ 5 - 7
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/ITurnPointCalculator.java

@@ -2,6 +2,7 @@ package org.springblade.manager.formula;
 
 import com.mixsmart.utils.ListUtils;
 import com.mixsmart.utils.StringUtils;
+import org.springblade.core.tool.utils.Func;
 
 import java.math.BigDecimal;
 import java.util.*;
@@ -18,15 +19,13 @@ public interface ITurnPointCalculator {
     public static final String TURN_POINT_FIELD="测点,仪器高,前视,后视,实测高程,设计高程,偏差值";
 
 
-     static List<Object> create(Object tableData, Map<String,String> configMap){
-        if(tableData!=null&&configMap!=null){
-            List<HashMap<String,Object>> data=objToArray(tableData);
-            if(ListUtils.isNotEmpty(data)){
+     static List<Object> create( List<Map<String,Object>> data, Map<String,String> configMap){
+        if(Func.isNotEmpty(data)&&configMap!=null){
                 LevelInfo levelInfo = new LevelInfo();
                 List<TurnPoint> tmp =new ArrayList<>();
                 for(int i=0;i<data.size();i++){
-                    HashMap<String,Object>dm = data.get(i);
-                    Map<String,Object> dataMap = new HashMap<>();
+                    Map<String,Object>dm = data.get(i);
+                    Map<String,Object> dataMap = new HashMap<>(configMap.size()*2);
                     TurnPoint tp = new TurnPoint(levelInfo,dataMap);
                     for(Map.Entry<String,String> kv:configMap.entrySet()){
                         String key =kv.getKey();
@@ -103,7 +102,6 @@ public interface ITurnPointCalculator {
                         }
                         return list.stream();
                     }).collect(Collectors.toList());
-                }
             }
         }
         return Collections.emptyList();

+ 192 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/Mileage.java

@@ -0,0 +1,192 @@
+package org.springblade.manager.formula;
+
+import com.mixsmart.utils.StringUtils;
+import org.springblade.core.tool.utils.BeanUtil;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.core.tool.utils.StringPool;
+import org.springblade.manager.dto.ElementData;
+
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author yangyj
+ * @Date 2023/1/17 16:04
+ * @description TODO
+ */
+public class Mileage {
+    public static String DEV="-5,+5";
+    private String zh;
+    private String pw;
+    private String sjx;
+    private String sjy;
+    private String scx;
+    private String scy;
+    private String dx;
+    private String dy;
+    private String ds;
+    private LinkedHashMap<String, ElementData> dataMap;
+
+    public Mileage(LinkedHashMap<String, ElementData> dataMap) {
+        this.dataMap = dataMap;
+    }
+
+    public Mileage() {
+    }
+
+    /**桩号、偏位都不为空*/
+    public boolean isChecked(){
+        return StringUtils.isNotEmpty(zh,pw);
+    }
+    public String getZhPw(){
+        if(isChecked()){
+            return zh+ StringPool.AT+pw;
+        }
+        return StringPool.EMPTY;
+    }
+    public void setValue(int index,String val){
+        switch (index){
+            case 0:setZh(val);break;
+            case 1:setPw(val);break;
+            case 2:setSjx(val);break;
+            case 3:setSjy(val);break;
+            case 4:setScx(val);break;
+            case 5:setScy(val);break;
+            case 6:setDx(val);break;
+            case 7:setDy(val);break;
+            case 8:setDs(val);break;
+            default:break;
+        }
+    }
+    /**数据回写到元素*/
+    public void calculate(List<String> relyList){
+           try {
+               if(StringUtils.isNotEmpty(sjx)){
+                   double sjxD=Double.parseDouble(sjx);
+                   if(StringUtils.isNotEmpty(dx)){
+                       double dxD=Double.parseDouble(dx)*0.001;
+                       this.scx=StringUtils.number2String(sjxD+dxD,3);
+                   }
+               }
+               if(StringUtils.isNotEmpty(sjy)){
+                   double sjyD=Double.parseDouble(sjy);
+                   if(StringUtils.isNotEmpty(dy)){
+                       double dyD=Double.parseDouble(dy)*0.001;
+                       this.scy=StringUtils.number2String(sjyD+dyD,3);
+                   }
+               }
+               if(Func.isNotEmpty(relyList)&&relyList.size()==this.dataMap.size()){
+                   List<ElementData> list =new ArrayList<>(this.dataMap.values());
+                   for(int i=0;i<list.size();i++){
+                       ElementData ed=list.get(i);
+                       switch (i){
+                           case 0:ed.setValue(getZh());break;
+                           case 1:ed.setValue(getPw());break;
+                           case 2:ed.setValue(getSjx());break;
+                           case 3:ed.setValue(getSjy());break;
+                           case 4:ed.setValue(getScx());break;
+                           case 5:ed.setValue(getScy());break;
+                           case 6:ed.setValue(getDx());break;
+                           case 7:ed.setValue(getDy());break;
+                           case 8:ed.setValue(getDs());break;
+                           default:break;
+                       }
+                   }
+               }
+           }catch (Exception e){
+               e.printStackTrace();
+           }
+    }
+    public boolean isEmptyDev(){
+        /*只要三个字段任意为空就要辅助生成*/
+        return StringUtils.isEmpty(dx,dy,ds);
+    }
+
+    public String getZh() {
+        return zh;
+    }
+
+    public void setZh(String zh) {
+        this.zh = zh;
+    }
+
+    public String getPw() {
+        return pw;
+    }
+
+    public void setPw(String pw) {
+        this.pw = pw;
+    }
+
+    public String getSjx() {
+        return sjx;
+    }
+
+    public void setSjx(String sjx) {
+        if(StringUtils.isNumber(sjx)) {
+            this.sjx = StringUtils.number2String(sjx,3);
+        }
+    }
+
+    public String getSjy() {
+        return sjy;
+    }
+
+    public void setSjy(String sjy) {
+        if(StringUtils.isNumber(sjy)) {
+            this.sjy = StringUtils.number2String(sjy,3);
+        }
+    }
+
+    public String getScx() {
+        return scx;
+    }
+
+    public void setScx(String scx) {
+        this.scx = scx;
+    }
+
+    public String getScy() {
+        return scy;
+    }
+
+    public void setScy(String scy) {
+        this.scy = scy;
+    }
+
+    public String getDx() {
+        return dx;
+    }
+
+    public void setDx(String dx) {
+        this.dx = dx;
+    }
+
+    public String getDy() {
+        return dy;
+    }
+
+    public void setDy(String dy) {
+        this.dy = dy;
+    }
+
+    public String getDs() {
+        return ds;
+    }
+
+    public void setDs(String ds) {
+        this.ds = ds;
+    }
+
+    public LinkedHashMap<String, ElementData> getDataMap() {
+        return dataMap;
+    }
+
+    public void setDataMap(LinkedHashMap<String, ElementData> dataMap) {
+        this.dataMap = dataMap;
+    }
+
+
+}

+ 2 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/TurnPoint.java

@@ -188,7 +188,7 @@ public class TurnPoint {
       return   this.levelInfo.getCloseZd().size()>1;
     }
 
-    /*public static void main(String[] args) {
+    public static void test() {
         for(int i=0;i<100;i++){
             LevelInfo info = new LevelInfo();
             info.setSightHeight(144.228);
@@ -197,8 +197,8 @@ public class TurnPoint {
             System.out.println("第"+(i+1)+"次");
             System.out.println(tp.limit().stream().map(TurnPoint::getBmd0L).collect(Collectors.toList()));
         }
+    }
 
-    }*/
     public static Random r = new Random();
     public  List<TurnPoint> limit(){
         List<TurnPoint> result = new ArrayList<>();

+ 1 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/FormulaA.java

@@ -18,8 +18,7 @@ import java.util.Map;
 public class FormulaA implements FormulaStrategy {
     private FormData cur;
     @Override
-    public void execute(List<FormData> fds, Map<String,Object> constantMap) {
-        System.out.println(this.cur.getFormula().getFormula());
+    public void execute(TableElementConverter tec) {
         cur.getValues().add(new ElementData(1,1,"result_ta"));
     }
 

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

@@ -19,7 +19,7 @@ public class FormulaB implements FormulaStrategy {
     private FormData cur;
 
     @Override
-    public void execute(List<FormData> fds, Map<String,Object> constantMap) {
+    public void execute(TableElementConverter tec) {
         System.out.println(this.cur.getFormula().getFormula());
         cur.getValues().add(new ElementData(1,1,"result_tb"));
     }

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

@@ -19,7 +19,7 @@ import java.util.Map;
 public class FormulaC implements FormulaStrategy {
     private FormData cur;
     @Override
-    public void execute(List<FormData> fds, Map<String,Object> constantMap) {
+    public void execute(TableElementConverter tec) {
         System.out.println(this.cur.getFormula().getFormula());
         cur.getValues().add(new ElementData(1,1,"result_tc"));
     }

+ 50 - 45
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/FormulaMileage.java

@@ -8,10 +8,12 @@ import lombok.Data;
 import org.springblade.business.feign.MileageClient;
 import org.springblade.common.utils.BaseUtils;
 import org.springblade.core.tool.utils.Func;
+import org.springblade.core.tool.utils.StringPool;
 import org.springblade.manager.dto.ElementData;
 import org.springblade.manager.dto.FormData;
 import org.springblade.manager.entity.Formula;
 import org.springblade.manager.formula.FormulaStrategy;
+import org.springblade.manager.formula.Mileage;
 import org.springframework.stereotype.Component;
 
 import java.util.*;
@@ -44,55 +46,58 @@ public class FormulaMileage implements FormulaStrategy {
 
 
     @Override
-    public void execute(List<FormData> fds, Map<String,Object> constantMap) {
-        List<ElementData> eds = cur.getValues();
-        Map<String,String[]> mileages = getCoordinate(cur.getFormula().getFormula(),fds, Func.toLong(constantMap.get("contractId")));
-        if(ListUtils.isNotEmpty(eds)&&!mileages.isEmpty()){
-            Matcher m= MILE_ARGS.matcher(cur.getFormula().getFormula());
-            if(m.find()){
-                this.relyList =cur.getFormula().getRelyList();
-                LinkedHashMap<String,FormData> map = new LinkedHashMap<>();
-                List<FormData> listFd = new ArrayList<>();
-                this.relyList.forEach(e->{
-                    fds.forEach(k->{
-                        if(e.equals(k.getCode())){
-                            map.put(k.getCode(),k);
-                            listFd.add(k);
+    public void execute(TableElementConverter tec) {
+        List<String> relyList = cur.getFormula().getRelyList();
+        if(relyList.size()<KEYS.size()){
+            tec.getLog().append(cur.getEName()).append("不满足依赖");
+            return;
+        }
+        LinkedHashMap<String,FormData> linkedHashMap = new LinkedHashMap<>();
+        for(String k:relyList){
+            linkedHashMap.put(k,tec.formDataMap.get(k));
+        }
+        CompositeDataAccess cda = new CompositeDataAccess(linkedHashMap);
+        List<Mileage> mileageList = new ArrayList<>();
+        while (cda.hasNext()){
+            LinkedHashMap<String,ElementData> row = cda.next();
+            Mileage mileage = new Mileage(row);
+            for(int i=0;i<relyList.size();i++){
+                String key=relyList.get(i);
+                ElementData ed =row.get(key);
+                String val=ed.stringValue();
+                mileage.setValue(i,val);
+            }
+        }
+        if(Func.isNotEmpty(mileageList)){
+              List<String>  zhpw =mileageList.stream().filter(Mileage::isChecked).map(Mileage::getZhPw).collect(Collectors.toList());
+            Map<String,String[]> coordinateMap  =  mileageClient.mileage2Coordinate(zhpw,Func.toLong(tec.getConstantMap().get("contractId")));
+            if(coordinateMap.size()>0){
+                mileageList.forEach(m->{
+                    String[] coordinate = coordinateMap.get(m.getZhPw());
+                    if(coordinate!=null){
+                        m.setSjx(coordinate[0]);
+                        m.setSjy(coordinate[1]);
+                        if(m.isEmptyDev()){
+                            String dev = cur.getFormula().getDev();
+                            if(StringUtils.isEmpty(dev)){
+                                dev=Mileage.DEV;
+                            }
+                            Map<String, Object> xyz = FormulaUtils.triangleSquare(dev);
+                            m.setDx(xyz.get("X").toString());
+                            m.setDy(xyz.get("Y").toString());
+                            m.setDs(xyz.get("Z").toString());
                         }
-                    });
-                });
-                if(listFd.size()<KEYS.size()){
-                    return;
-                }
-                CompositeDataAccess cda = new CompositeDataAccess(map);
-                List<String> keys = KEYS.stream().skip(2).collect(Collectors.toList());
-                List<String> scale3=Arrays.asList(SJX,SJY,SCX,SCY);
-                while (cda.hasNext()){
-                     LinkedHashMap<String,ElementData> row  = cda.next();
-                     /*桩号*/
-                    ElementData ea=row.get(relyList.get(0));
-                    /*偏距*/
-                    ElementData eb=row.get(relyList.get(1));
-                    if(!ea.isEmpty()&&!eb.isEmpty()){
-                        String k = ea.stringValue();
-                        String jz= eb.stringValue();
-                        String[] coordinate = mileages.get(k+"@"+jz);
-                        Map<String, Object> xyz = FormulaUtils.triangleSquare("-5,+5");
-                        double dx = Double.parseDouble(xyz.get("X").toString());
-                        double dy = Double.parseDouble(xyz.get("Y").toString());
-                        double ds = Double.parseDouble(xyz.get("Z").toString());
-                        double scx= Double.parseDouble(coordinate[0]) + dx * 0.001;
-                        double scy= Double.parseDouble(coordinate[1]) + dy * 0.001;
-                        double sjx= Double.parseDouble(coordinate[0]);
-                        double sjy= Double.parseDouble(coordinate[1]);
-                        List<Object> data = new ArrayList<>(Arrays.asList("占位","占位",sjx,sjy,scx,scy,dx,dy,ds));
-                        this.write(row,data,keys,scale3);
+                        m.calculate(relyList);
                     }
-                }
-                listFd.forEach(e->e.setUpdate(1));
+                });
+                linkedHashMap.forEach((k,v)->{
+                    v.setUpdate(1);
+                    v.setFinished(Boolean.TRUE);
+                });
             }
+
         }
-        this.cur.setFinished(Boolean.TRUE);
+
     }
     public static final Pattern MILE_P = Pattern.compile("(?<=T\\(com.mixsmart.utils.CustomFunction\\).MILE\\()([^,]+),([^,]+)(?=,)");
 

+ 33 - 32
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/FormulaTurnPoint.java

@@ -1,7 +1,9 @@
 package org.springblade.manager.formula.impl;
 
+import cn.hutool.core.util.ReUtil;
 import com.mixsmart.utils.StringUtils;
 import lombok.Data;
+import org.springblade.common.utils.CommonUtil;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.manager.dto.ElementData;
 import org.springblade.manager.dto.FormData;
@@ -11,67 +13,66 @@ import org.springblade.manager.formula.LevelInfo;
 import org.springframework.stereotype.Component;
 import java.util.*;
 import java.util.concurrent.atomic.AtomicInteger;
+import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 
 /**
  * @author yangyj
  * @Date 2022/8/10 16:16
- * @description TODO
+ * @description 生成转点是需要动态插入数据的,一组数据可能跨越几张表,必须要完整获取整组测量数据才能进行计算,先按照单张表的情况做,预留拓展
  */
 @Component
 @Data
 public class FormulaTurnPoint implements FormulaStrategy {
+    public static final String TURN_REG = "(?<=T\\(com.mixsmart.utils.CustomFunction\\).TURNPOINT\\()([^)]+)(?=,)";
     private FormData cur;
     static   final List<String>  KEYS;
     private List<String> args;
     static {
         KEYS=new ArrayList<>(Arrays.asList("测点","后视","前视","仪器高","实测高程","设计高程","偏差值","备注"));
     }
+
     @Override
-    public void execute(List<FormData> fds, Map<String, Object> constantMap) {
+    public void execute(TableElementConverter tec) {
         LinkedHashMap<String,FormData> dataSourceMap = new LinkedHashMap<>();
-        TurnPointCalculator tpc = new TurnPointCalculator();
-        List<String> args=cur.getFormula().getRelyList();
-        this.args=args;
+        String funArgs =ReUtil.getGroup1(TURN_REG,cur.getFormula().getFormula());
+        if(StringUtils.isNotEmpty(funArgs)){
+            this.args=new ArrayList<>(Arrays.asList(funArgs.split(",")));
+        }
         if(Func.isNotEmpty(args)) {
-            args.forEach(k -> {
-                Optional<FormData> ov =fds.stream().filter(e -> k.equals(e.getCode())).findFirst();
-                ov.ifPresent(formData -> dataSourceMap.put(k, formData));
-            });
-            /*包含所有基本元素,不满足就终止*/
-            if(dataSourceMap.size()<KEYS.size()){
-                return;
+            for(int i=0;i<args.size();i++){
+                String k =args.get(i);
+                Optional<FormData> ov =tec.getFormDataMap().values().stream().filter(e -> k.equals(e.getCode())).findFirst();
+                if(ov.isPresent()){
+                    dataSourceMap.put(k, ov.get());
+                }else if(i<7){
+                    tec.log.append("水准测量表不满足计算所需的元素");
+                    return;
+                }
             }
             CompositeDataAccess cda = new CompositeDataAccess(dataSourceMap);
-            cda.cursorReset();
             List<Map<String,Object>> tableData = new ArrayList<>();
-            Map<String,String> configMap = new HashMap<>();
-            configMap.put("测点","cd");
-            configMap.put("后视","hs");
-            configMap.put("前视","qs");
-            configMap.put("仪器高","yg");
-            configMap.put("实测高程","sc");
-            configMap.put("设计高程","sj");
-            configMap.put("偏差值","pc");
-            configMap.put("备注","bz");
+            /*用来映射元素*/
+            Map<String,String> configMap = new HashMap<>(KEYS.size()*2);
+            for(int i=0;i<KEYS.size();i++){
+                configMap.put(KEYS.get(i),this.args.get(i));
+            }
             while (cda.hasNext()) {
                 LinkedHashMap<String, ElementData> map = cda.next();
-                ElementData cd = map.get(c("测点"));
-                ElementData hs = map.get(c("后视"));
-                ElementData qs = map.get(c("前视"));
-                ElementData yg = map.get(c("仪器高"));
-                ElementData sc = map.get(c("实测高程"));
-                ElementData sj = map.get(c("设计高程"));
-                ElementData pc = map.get(c("偏差值"));
-                ElementData bz = map.get(c("备注"));
                 Map<String,Object> tmp = new HashMap<>(16);
-                tmp.put("cd",cd.getValue());
+                KEYS.forEach(k->{
+                    ElementData ed = map.get(c(k));
+                    tmp.put(configMap.get(k),ed.stringValue());
+                });
                 tableData.add(tmp);
             }
            List<Object> data= ITurnPointCalculator.create(tableData,configMap);
             AtomicInteger ai = new AtomicInteger();
             Map<Integer,List<Object>> dataMap = data.stream().collect(Collectors.groupingBy(e->ai.getAndAdd(1)%configMap.size()));
-            LinkedHashMap<String, FormData> fdsOrder =cda.getFds();
+            LinkedHashMap<String,FormData> fdsOrder =cda.getFds();
+            dataSourceMap.forEach((k,v)->{
+
+            });
             int i=0;
             for(FormData formData:fdsOrder.values()){
                 List<Object> dl =dataMap.get(i++);

+ 38 - 24
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/TableElementConverter.java

@@ -31,7 +31,10 @@ import java.util.stream.Stream;
 @Data
 public class TableElementConverter implements ITableElementConverter {
 
-    private  final String JOIN_REG="__\\d+_\\d+,?";
+    public static String JOIN_REG="__\\d+_\\d+,?";
+    public static Pattern RP= Pattern.compile("(?<=E\\[)[^]]+(?=])");
+
+
     private List<TableInfo> tableInfoList;
     private Long contractId;
     private Long nodeId;
@@ -47,12 +50,18 @@ public class TableElementConverter implements ITableElementConverter {
     Map<String,Map<String,String>> coordinateMap;
     /**{code:List<ElementData>}*/
     Map<String,ElementData> elementDataMap = new HashMap<>();
+    /**跨表数据*/
+    Map<String,Map<String,Object>> tableDataMaps=new HashMap<>();
+    /**当前节点相关信息*/
     CurrentNode currentNode;
+    /**当前节点所有表节点对象*/
     List<AppWbsTreeContractVO> tableAll;
     /**记录表公式执行的日志*/
     StringBuilder log;
-    /**元素取数日志*/
-    Pattern RP= Pattern.compile("(?<=E\\[)[^]]+(?=])");
+    /**当前执行环境全局变量*/
+    private   Map<String,Object> constantMap = new HashMap<>();
+
+
 
     public TableElementConverter(List<TableInfo> tableInfoList, List<KeyMapper> keyMappers, List<Formula> formulas, Map<String,Map<String,String>> coordinateMap, CurrentNode wtc,List<AppWbsTreeContractVO> tableAll) {
         this.tableInfoList = tableInfoList;
@@ -172,35 +181,40 @@ public class TableElementConverter implements ITableElementConverter {
     public void after() {
         /*这个方法的核心就是把fds的数据按照既定格式(key_xxx_val_y_x)回写到tableInfo,对fds进行tableName分组,非空循环写人*/
         LinkedHashMap<String,List<KeyMapper>> tabs = keyMappers.stream().collect(Collectors.groupingBy(KeyMapper::getCode,LinkedHashMap::new,Collectors.toList()));
-        for (FormData fd : this.fds) {
-            if(fd.getUpdate().equals(1)){
-                try {
-                    List<ElementData> elementDataList =fd.getValues();
-                    List<KeyMapper> kms = tabs.get(fd.getCode());
-                    List<TableInfo> tables = new ArrayList<>();
-                    for(TableInfo t:this.tableInfoList){
-                        if(kms.stream().anyMatch(e->StringUtils.isEquals(e.getPkId(),t.getPkeyId()))){
-                            /*获取将要写入的tableInfo*/
-                            tables.add(t);
+        List<FormData> updateList = this.formDataMap.values().stream().filter(e->e.getUpdate()==1).collect(Collectors.toList());
+        if(Func.isNotEmpty(updateList)){
+            for (FormData fd : updateList) {
+                if(fd.getUpdate().equals(1)){
+                    try {
+                        List<ElementData> elementDataList =fd.getValues();
+                        List<KeyMapper> kms = tabs.get(fd.getCode());
+                        List<TableInfo> tables = new ArrayList<>();
+                        for(TableInfo t:this.tableInfoList){
+                            if(kms.stream().anyMatch(e->StringUtils.isEquals(e.getPkId(),t.getPkeyId()))){
+                                /*获取将要写入的tableInfo*/
+                                tables.add(t);
+                            }
                         }
+                        LinkedHashMap<Integer,List<ElementData>> pages = elementDataList.stream().collect(Collectors.groupingBy(ElementData::getIndex,LinkedHashMap::new,Collectors.toList()));
+                        for(int i=0;i<pages.size();i++){
+                            /*每一页映射一个tableInfo*/
+                            List<ElementData> p = pages.get(i);
+                            TableInfo info = tables.get(i);
+                            info.getDataMap().put(fd.getKey(), recovery(p));
+                        }
+                    }catch (Exception e){
+                        StaticLog.error("元素{}回写报错",fd.getCode());
+                        e.printStackTrace();
                     }
-                    LinkedHashMap<Integer,List<ElementData>> pages = elementDataList.stream().collect(Collectors.groupingBy(ElementData::getIndex,LinkedHashMap::new,Collectors.toList()));
-                    for(int i=0;i<pages.size();i++){
-                        /*每一页映射一个tableInfo*/
-                        List<ElementData> p = pages.get(i);
-                        TableInfo info = tables.get(i);
-                        info.getDataMap().put(fd.getKey(), recovery(p));
-                    }
-                }catch (Exception e){
-                    StaticLog.error("元素{}回写报错",fd.getCode());
-                    e.printStackTrace();
                 }
             }
+        }else{
+            log.append("公式未插入或者修改任何数据");
         }
 
     }
     /**备份*/
-    public void _after() {
+    public void afterBak() {
         /*可以优化对每一张表进行元素分类,同一张元素*/
         /*根据数据库表分组*/
         LinkedHashMap<String,List<KeyMapper>> tabs = keyMappers.stream().collect(Collectors.groupingBy(KeyMapper::getCode,LinkedHashMap::new,Collectors.toList()));

+ 3 - 38
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/FormulaServiceImpl.java

@@ -58,7 +58,6 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
     private   TableElementConverter tec;
     private   Map<String,Object> constantMap;
     private   List<FormData> formDataList;
-    private   Map<Long,Map<String,Object>> crossDataMap;
     private   Map<String,FormData> formDataMap;
     private   Map<String,Map<String,Object>> tableDataMaps;
 
@@ -105,15 +104,14 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
 
     @Override
     public IFormulaService init() {
-        this.tableDataMaps=new HashMap<>();
+        this.tableDataMaps=this.tec.getTableDataMaps();
         this.formDataMap=this.tec.getFormDataMap();
-        this.crossDataMap=new HashMap<>();
         List<FormData> list =this.tec.getFds();
         Long contractId=this.tec.getContractId();
         CurrentNode one=this.tec.getCurrentNode();
         Long id =one.getId();
         Long primaryKeyId=one.getPkId();
-        this.constantMap=new HashMap<>(100);
+        this.constantMap=tec.getConstantMap();
         this.formDataList=list;
         this.constantMap.put("contractId",contractId);
         keyWord(this.constantMap);
@@ -169,39 +167,6 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
         return this;
     }
 
-    public void vs(FormData fd){
-        List<FormData> crossNodeFd=new ArrayList<>();
-        Matcher matcher=P2.matcher(fd.getFormula().getFormula());
-        while (matcher.find()){
-            String[] arr = matcher.group().split(StringPool.COLON);
-            if(arr.length>=3){
-                List<WbsTreeContract> targets=this.wbsTreeContractService.list(Wrappers.<WbsTreeContract>lambdaQuery().eq(WbsTreeContract::getContractId,this.tec.getContractId()).eq(WbsTreeContract::getId,Long.parseLong(arr[0])));
-                /*暂时先只取第一个满足条件的*/
-                if(Func.isNotEmpty(targets)){
-                    WbsTreeContract cross = targets.get(0);
-                    Map<String,Object> dataMap= this.crossDataMap.computeIfAbsent(cross.getPKeyId(),(k)->{List<Map<String,Object>> dmap=this.jdbcTemplate.queryForList("select * from " + arr[1] + " where p_key_id=" + k);
-                        if(Func.isNotEmpty(dmap)){
-                            return dmap.get(0);
-                        }else{
-                            return new HashMap<>();
-                        }
-                    });
-                    if(dataMap.size()>0){
-                        String v= StringUtils.handleNull(dataMap.get(arr[2]));
-                        if(StringUtils.isNotEmpty(v)){
-                            crossNodeFd.add(new FormData(matcher.group(), Arrays.stream(v.split("☆")).map(s->{
-                                String[] t = s.split("_\\^_");
-                                String[] c =t[1].split("_");
-                                return  new ElementData(0,0,t[0],Func.toInt(c[1]),Func.toInt(c[0]));
-                            }).collect(Collectors.toList()), null,StringPool.EMPTY));
-                        }else{
-                            crossNodeFd.add(new FormData(matcher.group(),new ArrayList<>(),null,StringPool.EMPTY));
-                        }
-                    }
-                }
-            }
-        }
-    }
     public void missingFill(List<String> missingList){
         /*数据池里面没有任何元素匹配和当前依赖匹配*/
         if(Func.isNotEmpty(missingList)){
@@ -444,7 +409,7 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
     public IFormulaService special() {
         for(FormData fd:this.formDataList) {
             if(Func.isNotEmpty(fd.getFormula())) {
-                formulaStrategyFactory.get(fd).forEach(e -> e.execute(this.formDataList, this.constantMap));
+                formulaStrategyFactory.get(fd).forEach(e -> e.execute(tec));
             }
         }
         return this;