Browse Source

公式相关:G8重构

yangyj 2 năm trước cách đây
mục cha
commit
6344f8dfda

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

@@ -77,8 +77,10 @@ public class FormData {
     /**是否是当前节点的执行元素*/
     public  Boolean isCurrentNodeElement=false;
     public static final String CODE_REG="[^:]+:[^:]+";
-
-
+    /*打印调试信息*/
+    public String info(){
+        return getCode()+getEName()+getFormula().getFormula();
+    }
     public FormData() {
     }
     public FormData(String code, List<ElementData> values, Formula formula,String coords) {

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

@@ -1737,6 +1737,7 @@ public class CustomFunction {
 		}
 		return  result;
 	}
+
 	/**
 	 * @Description 对象转字符串,list取第一个对象
 	 * @Param [obj]

+ 16 - 4
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/FormulaController.java

@@ -218,12 +218,24 @@ public class FormulaController {
             info.setKey(info.getKey().replaceAll("__[\\d_]+",""));
             if(Func.isNotEmpty(info.getPkId())&&Func.isBlank(info.getDev())){
                 try{
-                    Map<String,Object> data =  this.jdbcTemplate.queryForMap("SELECT a.e_allow_deviation as dev from m_wbs_form_element  a left join m_wbs_tree b on a.f_id=b.id left join m_wbs_tree_contract c on c.init_table_name=b.init_table_name where c.p_key_id="+info.getPkId()+" and a.e_key='"+info.getKey()+"'");
-                    if(Func.isNotEmpty(data.get("dev"))){
-                        info.setDev(Func.toStr(data.get("dev")));
+                    String dev="";
+                    /*偏差范围优先获取公式里的,其次是元素自带的*/
+                    List<Map<String,Object>> data =  this.jdbcTemplate.queryForList("select c.id,c.e_allow_deviation dev from(select init_table_name from m_wbs_tree_contract where p_key_id="+info.getPkId()+")  a join m_table_info b on a.init_table_name = b.tab_en_name JOIN m_wbs_form_element c on c.f_id=b.id where c.is_deleted=0 and c.e_key='"+info.getKey()+"'");
+                    if(Func.isNotEmpty(data)){
+                        String tmpDev = StringUtils.handleNull(data.get(0).get("dev"));
+                        String tmpId = StringUtils.handleNull(data.get(0).get("id"));
+                        if(Func.isBlank(tmpDev)&&Func.isNotBlank(tmpId)){
+                              List<Map<String,Object>> listMap = this.jdbcTemplate.queryForList("select b.dev from m_element_formula_mapping a join m_formula b on a.formula_id=b.id where LENGTH(b.dev)>0 and a.element_id="+tmpId+" ORDER BY b.scope desc limit 1");
+                              if(Func.isNotEmpty(listMap)){
+                                   dev=StringUtils.handleNull(listMap.get(0).get("dev"));
+                              }
+                        }else{
+                            dev=tmpDev;
+                        }
+                        info.setDev(dev);
                     }
                 }catch (EmptyResultDataAccessException e){
-                    info.setDev("-3,3");
+                   e.printStackTrace();
                 }
             }
             if(Func.isBlank(info.getDev())){

+ 6 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/FormulaMileage.java

@@ -60,6 +60,12 @@ public class FormulaMileage implements FormulaStrategy {
         List<Mileage> mileageList = new ArrayList<>();
         while (cda.hasNext()){
             LinkedHashMap<String,ElementData> row = cda.next();
+            if(row.size()<relyList.size()){
+                tec.getLog().append("G10元素定位信息异常");
+                /*结束运行*/
+                cur.setFinished(Boolean.TRUE);
+                return;
+            }
             Mileage mileage = new Mileage(row);
             for(int i=0;i<relyList.size();i++){
                 String key=relyList.get(i);

+ 14 - 17
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/FormulaTurnPoint.java

@@ -3,17 +3,15 @@ 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;
+import org.springblade.manager.entity.Formula;
 import org.springblade.manager.formula.FormulaStrategy;
 import org.springblade.manager.formula.ITurnPointCalculator;
-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;
 
 /**
@@ -69,20 +67,19 @@ public class FormulaTurnPoint implements FormulaStrategy {
            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();
+            AtomicInteger i= new AtomicInteger();
             dataSourceMap.forEach((k,v)->{
-
+                List<Object> dl =dataMap.get(i.getAndIncrement());
+                List<ElementData> list = v.getValues();
+                v.setUpdate(1);
+                v.setFinished(Boolean.TRUE);
+                for(int n=0;n<list.size();n++){
+                    ElementData ed = list.get(n);
+                    /*dl的数量肯定是大于等于list,否则存在问题*/
+                    ed.setValue(dl.get(n));
+                }
             });
-            int i=0;
-            for(FormData formData:fdsOrder.values()){
-                List<Object> dl =dataMap.get(i++);
-               List<ElementData> list = formData.getValues();
-               for(int k=0;k<list.size();k++){
-                   ElementData ed = list.get(k);
-                   /*dl的数量肯定是大于等于list,否则存在问题*/
-                   ed.setValue(dl.get(k));
-               }
-            }
+
         }
     }
 
@@ -101,8 +98,8 @@ public class FormulaTurnPoint implements FormulaStrategy {
     @Override
     public boolean accept(FormData fd) {
         this.cur=fd;
-        String f= fd.getFormula().getFormula();
-        return StringUtils.isNotEmpty(f)&&f.startsWith("TURN_POINT(");
+        Formula f= fd.getFormula();
+        return StringUtils.isEquals(f.getNumber(),"TURN_POINT");
     }