浏览代码

Merge remote-tracking branch 'origin/master'

liuyc 2 年之前
父节点
当前提交
d124fdab98

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

@@ -10,5 +10,5 @@ import java.util.Map;
  * @author yangyj
  */
 public interface FormulaStrategy extends IStrategy {
-    void execute(TableElementConverter tec);
+    void execute(FormData cur,TableElementConverter tec);
 }

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

@@ -2,6 +2,7 @@ package org.springblade.manager.formula;
 
 import lombok.Data;
 import org.springblade.manager.dto.FormData;
+import org.springblade.manager.formula.impl.TableElementConverter;
 import org.springframework.stereotype.Component;
 
 import java.util.List;
@@ -18,8 +19,8 @@ public class FormulaStrategyFactory {
 
     private final List<FormulaStrategy> testStrategyList;
 
-    public List<FormulaStrategy> get(FormData fd) {
-        return testStrategyList.stream().filter(t -> t.accept(fd)).collect(Collectors.toList());
+    public void execute(FormData fd, TableElementConverter tec) {
+         testStrategyList.stream().filter(t -> t.accept(fd)).forEach(t->t.execute(fd,tec));
     }
 
 }

+ 0 - 31
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/FormulaA.java

@@ -1,31 +0,0 @@
-package org.springblade.manager.formula.impl;
-
-import com.alibaba.cloud.commons.lang.StringUtils;
-import org.springblade.manager.dto.ElementData;
-import org.springblade.manager.dto.FormData;
-import org.springblade.manager.formula.FormulaStrategy;
-import org.springframework.stereotype.Component;
-
-import java.util.List;
-import java.util.Map;
-
-/**
- * @author yangyj
- * @Date 2022/7/15 16:13
- * @description TODO
- */
-@Component
-public class FormulaA implements FormulaStrategy {
-    private FormData cur;
-
-    @Override
-    public void execute(TableElementConverter tec) {
-        cur.getValues().add(new ElementData(1, 1, "result_ta"));
-    }
-
-    @Override
-    public boolean accept(FormData fd) {
-        this.cur = fd;
-        return StringUtils.equals("ta", fd.getCode());
-    }
-}

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

@@ -1,32 +0,0 @@
-package org.springblade.manager.formula.impl;
-
-import com.alibaba.cloud.commons.lang.StringUtils;
-import org.springblade.manager.dto.ElementData;
-import org.springblade.manager.dto.FormData;
-import org.springblade.manager.formula.FormulaStrategy;
-import org.springframework.stereotype.Component;
-
-import java.util.List;
-import java.util.Map;
-
-/**
- * @author yangyj
- * @Date 2022/7/15 16:13
- * @description TODO
- */
-@Component
-public class FormulaB implements FormulaStrategy {
-    private FormData cur;
-
-    @Override
-    public void execute(TableElementConverter tec) {
-        System.out.println(this.cur.getFormula().getFormula());
-        cur.getValues().add(new ElementData(1, 1, "result_tb"));
-    }
-
-    @Override
-    public boolean accept(FormData fd) {
-        this.cur = fd;
-        return StringUtils.equals("ta", fd.getCode());
-    }
-}

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

@@ -1,34 +0,0 @@
-package org.springblade.manager.formula.impl;
-
-import cn.hutool.core.bean.BeanUtil;
-import com.alibaba.cloud.commons.lang.StringUtils;
-import org.springblade.manager.dto.ElementData;
-import org.springblade.manager.dto.FormData;
-import org.springblade.manager.formula.FormulaStrategy;
-import org.springframework.stereotype.Component;
-
-import java.util.List;
-import java.util.Map;
-
-/**
- * @author yangyj
- * @Date 2022/7/15 16:13
- * @description TODO
- */
-@Component
-public class FormulaC implements FormulaStrategy {
-    private FormData cur;
-
-    @Override
-    public void execute(TableElementConverter tec) {
-        System.out.println(this.cur.getFormula().getFormula());
-        cur.getValues().add(new ElementData(1, 1, "result_tc"));
-    }
-
-    @Override
-    public boolean accept(FormData fd) {
-        this.cur = fd;
-        return StringUtils.equals("ta", fd.getCode());
-    }
-
-}

+ 5 - 13
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/FormulaMileage.java

@@ -10,14 +10,10 @@ 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.entity.WbsTreeContract;
 import org.springblade.manager.formula.FormulaStrategy;
 import org.springblade.manager.formula.KeyMapper;
 import org.springblade.manager.formula.Mileage;
-import org.springframework.context.annotation.Scope;
-import org.springframework.context.annotation.ScopedProxyMode;
 import org.springframework.stereotype.Component;
-import org.springframework.web.context.WebApplicationContext;
 
 import java.util.*;
 import java.util.regex.Pattern;
@@ -30,9 +26,7 @@ import java.util.stream.Collectors;
  */
 @Component
 @Data
-@Scope(value = WebApplicationContext.SCOPE_REQUEST, proxyMode = ScopedProxyMode.TARGET_CLASS)
 public class FormulaMileage implements FormulaStrategy {
-    private FormData cur;
     private final MileageClient mileageClient;
     public static final Pattern MILE_ARGS = Pattern.compile("(?<=T\\(com.mixsmart.utils.CustomFunction\\)\\.MILE\\()[^)]+(?=\\))");
     public static final String ZH = "桩号";
@@ -46,11 +40,10 @@ public class FormulaMileage implements FormulaStrategy {
     public static final String DS = "ds";
     public static final String F_DEV="WP['G10pcfw']";
     public static final List<String> KEYS = new ArrayList<>(Arrays.asList(ZH, PW, SJX, SJY, SCX, SCY, DX, DY, DS));
-    private List<String> relyList;
 
 
     @Override
-    public void execute(TableElementConverter tec) {
+    public void execute(FormData cur,TableElementConverter tec) {
         List<String> relyList = cur.getFormula().getRelyList();
         if (relyList.size() < KEYS.size()) {
             tec.getLog().append(cur.getEName()).append("不满足依赖");
@@ -139,10 +132,10 @@ public class FormulaMileage implements FormulaStrategy {
         }
     }
 
-    public void write(LinkedHashMap<String, ElementData> row, List<Object> data, List<String> keys, List<String> scale3) {
+    public void write(LinkedHashMap<String, ElementData> row, List<Object> data, List<String> keys, List<String> scale3,List<String> relyList) {
         if (ListUtils.isNotEmpty(data)) {
             keys.forEach(k -> {
-                ElementData elt = row.get(c(k));
+                ElementData elt = row.get(c(k,relyList));
                 /*这里只单纯写人内容,插入的其他属性在获取的时候已经准备好*/
                 if (elt.isEmpty()) {
                     if (scale3.contains(k)) {
@@ -156,11 +149,11 @@ public class FormulaMileage implements FormulaStrategy {
     }
 
 
-    private String c(String name) {
+    private String c(String name,List<String> relyList) {
         if (Func.isNotEmpty(name) && Func.isNotEmpty(KEYS)) {
             int index = KEYS.indexOf(name);
             if (index >= 0) {
-                return this.relyList.get(index);
+                return relyList.get(index);
             }
         }
         return null;
@@ -182,7 +175,6 @@ public class FormulaMileage implements FormulaStrategy {
         if (!fd.verify()) {
             return false;
         }
-        this.cur = fd;
         Formula f = fd.getFormula();
         return "MILE".equals(f.getNumber());
     }

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

@@ -31,12 +31,11 @@ import static org.springblade.manager.formula.TurnPoint.*;
  */
 @Component
 @Data
-@Scope(value = WebApplicationContext.SCOPE_REQUEST, proxyMode = ScopedProxyMode.TARGET_CLASS)
 public class FormulaTurnPoint implements FormulaStrategy {
     public static final String TURN_REG = "(?<=T\\(com.mixsmart.utils.CustomFunction\\).TURNPOINT\\()([^)]+)(?=\\))";
-    private FormData cur;
+//    private FormData cur;
     static final List<String> KEYS;
-    private List<String> args;
+//    private List<String> args;
     /**从节点参数获取G8偏差范围的公式脚本*/
     static final String F_DEV="WP['g8pcfw']";
 
@@ -45,12 +44,13 @@ public class FormulaTurnPoint implements FormulaStrategy {
     }
 
     @Override
-    public void execute(TableElementConverter tec) {
+    public void execute(FormData cur,TableElementConverter tec) {
         cur.setFinished(Boolean.TRUE);
         LinkedHashMap<String, FormData> dataSourceMap = new LinkedHashMap<>();
         String funArgs = ReUtil.getGroup1(TURN_REG, cur.getFormula().getFormula());
+        List<String> args=new ArrayList<>();
         if (StringUtils.isNotEmpty(funArgs)) {
-            this.args = new ArrayList<>(Arrays.asList(funArgs.split(",")));
+            args = new ArrayList<>(Arrays.asList(funArgs.split(",")));
             args = args.stream().map(k -> k.replaceAll("[(E\\[)'\\]]", "")).collect(Collectors.toList());
         }
         if (Func.isNotEmpty(args)) {
@@ -67,10 +67,10 @@ public class FormulaTurnPoint implements FormulaStrategy {
             /*用来映射元素*/
             LinkedHashMap<String, String> configMap = new LinkedHashMap<>(KEYS.size() * 2);
             for (int i = 0; i < KEYS.size(); i++) {
-                configMap.put(KEYS.get(i), this.args.get(i));
+                configMap.put(KEYS.get(i), args.get(i));
             }
             /*原始数据转ListMap*/
-            List<Map<String, Object>>  tableData=listMaps( tec, dataSourceMap,configMap);
+            List<Map<String, Object>>  tableData=listMaps( cur,tec, dataSourceMap,configMap,args);
             /*数据分组*/
             List<List<Map<String, Object>>> total = group(tableData);
            /* 分组计算*/
@@ -78,7 +78,7 @@ public class FormulaTurnPoint implements FormulaStrategy {
             /*附加属性如:顶面和底面高程判断*/
             forG8(result.stream().flatMap(Collection::stream).collect(Collectors.toList()), (Map<String, Object>)tec.getConstantMap().computeIfAbsent("G8", k -> new HashMap<>()),tec);
            /*插值分页*/
-            List<Object> data = paginate(result,configMap);
+            List<Object> data = paginate(cur,result,configMap);
             /*数据回写*/
             write(data,dataSourceMap,configMap.size());
 
@@ -86,7 +86,7 @@ public class FormulaTurnPoint implements FormulaStrategy {
     }
 
 
-    public List<Object> paginate( List<List<TurnPoint>> result,LinkedHashMap<String, String> configMap){
+    public List<Object> paginate( FormData cur,List<List<TurnPoint>> result,LinkedHashMap<String, String> configMap){
         int rowSize= cur.getCoordsList().size();
         List<Object> data = new ArrayList<>();
         for(List<TurnPoint> turnPoints:result){
@@ -99,7 +99,7 @@ public class FormulaTurnPoint implements FormulaStrategy {
         return data;
     }
 
-    private List<Map<String, Object>> listMaps(TableElementConverter tec,LinkedHashMap<String, FormData> dataSourceMap,LinkedHashMap<String, String> configMap){
+    private List<Map<String, Object>> listMaps(FormData cur,TableElementConverter tec,LinkedHashMap<String, FormData> dataSourceMap,LinkedHashMap<String, String> configMap,List<String> args){
         CompositeDataAccess cda = new CompositeDataAccess(dataSourceMap);
         List<Map<String, Object>> tableData = new ArrayList<>();
         List<Long> tableInfoIds = tec.getKeyMappers().stream().filter(k -> k.getTableName().equals(cur.getTableName())).map(KeyMapper::getPkId).distinct().collect(Collectors.toList());
@@ -107,7 +107,7 @@ public class FormulaTurnPoint implements FormulaStrategy {
             LinkedHashMap<String, ElementData> map = cda.next();
                 Map<String, Object> tmp = new HashMap<>(16);
                 KEYS.forEach(k -> {
-                    ElementData ed = map.get(c(k));
+                    ElementData ed = map.get(c(k,args));
                     tmp.put(configMap.get(k), ed.stringValue());
                     /*V判断*/
                     if (CD.equals(k)) {
@@ -228,8 +228,8 @@ public class FormulaTurnPoint implements FormulaStrategy {
         });
     }
 
-    private String c(String name) {
-        if (Func.isNotEmpty(name) && Func.isNotEmpty(this.args)) {
+    private String c(String name,List<String> args) {
+        if (Func.isNotEmpty(name) && Func.isNotEmpty(args)) {
             int index = KEYS.indexOf(name);
             if (index < args.size()) {
                 return args.get(index);
@@ -240,7 +240,6 @@ public class FormulaTurnPoint implements FormulaStrategy {
 
     @Override
     public boolean accept(FormData fd) {
-        this.cur = fd;
         Formula f = fd.getFormula();
         return StringUtils.isEquals(f.getNumber(), "TURN_POINT");
     }

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

@@ -93,6 +93,7 @@ public class SubTable {
                 FormulaUtils.write(design, designList, true);
                 design.setUpdate(1);
             }
+
             FormulaUtils.write(data, dataList, true);
             itemName.setUpdate(1);
             data.setUpdate(1);

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

@@ -664,7 +664,7 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
         for(FormData fd:tec.formDataList) {
             try {
                 if(Func.isNotEmpty(fd.getFormula())) {
-                    formulaStrategyFactory.get(fd).forEach(e -> e.execute(tec));
+                    formulaStrategyFactory.execute(fd,tec);
                 }
             }catch (Exception e){
                 tec.getLog().append("【特殊公式:").append(fd.getEName()).append(fd.getFormula().getNumber()).append("执行异常】");
@@ -946,13 +946,13 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                     if(designFdOp.isPresent()){
                         key+="@"+designFdOp.get().getValues().stream().map(ElementData::getValue).filter(StringUtils::isNotEmpty).findAny().orElse("");
                     }
-                    sta.put(key,setScale(2,overList));
+                    sta.put(key,FormulaUtils.setScale(null,overList));
                 });
                 if(sta.checked()){
                     /*把附表数据刷入对应的附表元素对象*/
                     sta.flush();
                 }
-                String mainTableName = this.tec.getTableAll().stream().filter(e -> e.getNodeName().contains("检验单") || e.getTableType().equals(5)).map(NodeTable::getInitTableName).findFirst().orElse("");
+                String mainTableName = this.tec.getTableAll().stream().filter(e -> e.getTableType().equals(1) || e.getTableType().equals(5)).map(NodeTable::getInitTableName).findFirst().orElse("");
                 if(Func.isNotBlank(mainTableName)){
                     List<FormData> sourceFds=tec.getFormDataMap().values().stream().filter(s->!s.empty()).filter(s->StringUtils.isEquals(s.getTableName(),mainTableName)).collect(Collectors.toList());
                     Map<String,Object> copyMap= new HashMap<>();
@@ -1203,13 +1203,13 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
    }
 
 
-public  List<ElementData> setScale(Integer scale,List<ElementData> data){
+/*public  List<ElementData> setScale(Integer scale,List<ElementData> data){
     if(scale==null){
         scale=StringUtils.getScale(data.stream().map(ElementData::getValue).filter(StringUtils::isDouble).collect(Collectors.toList()));
     }
     Integer finalScale = scale;
     return data.stream().peek(e->{if(StringUtils.isDouble(e.getValue())){e.setValue(StringUtils.number2StringZero(e.getValue(),finalScale));}}).collect(Collectors.toList());
-}
+}*/
 
     @Override
     public void format() {
@@ -1219,7 +1219,7 @@ public  List<ElementData> setScale(Integer scale,List<ElementData> data){
                 /*保留小数位*/
                 if(fd.getFormula()!=null&&!fd.empty()&&fd.getValues().stream().map(ElementData::getValue).anyMatch(StringUtils::isNumber)){
                     Formula f = fd.getFormula();
-                    fd.setValues(setScale(f.getScale(),fd.getValues()));
+                    fd.setValues(FormulaUtils.setScale(f.getScale(),fd.getValues()));
                 }
             }
         }