Ver Fonte

G8转点

yangyj há 1 ano atrás
pai
commit
eb7074916a

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

@@ -24,6 +24,8 @@ public interface ITurnPointCalculator {
         * 2.尝试补充数据,如果不合理则重新生成转点,并用正尺方式生成
         * 3.合理性定义:(测点前视不存在或者非负数则视线高-测点实测高程在【0.5~4.8】范围,如果前视为负数则视线高-实际高程在【-0.5~-4.8】范围)*/
         if (Func.isNotEmpty(data) && configMap != null) {
+            /*重置*/
+            levelInfo.reset();
          /*   LevelInfo levelInfo = new LevelInfo();
             levelInfo.setDx(g8pcfw);*/
             List<TurnPoint> tmp = new ArrayList<>();

+ 4 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/LevelInfo.java

@@ -174,4 +174,8 @@ public class LevelInfo implements  Cloneable {
         return getStep()-getMin();
     }
 
+    public void reset(){
+           this.closeZd=new ArrayList<>();
+    }
+
 }

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

@@ -0,0 +1,31 @@
+package org.springblade.manager.formula.impl;
+
+import org.springblade.manager.bean.TableInfo;
+import org.springblade.manager.entity.Formula;
+import org.springblade.manager.formula.KeyMapper;
+import org.springblade.manager.formula.NodeTable;
+import org.springblade.manager.vo.CurrentNode;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author yangyj
+ * @Date 2023/9/26 14:57
+ * @description 表单保存优化
+ */
+public class ElementConverter extends TableElementConverter{
+    public ElementConverter(List<TableInfo> tableInfoList, List<KeyMapper> keyMappers, List<Formula> formulas, Map<String, Map<String, String>> coordinateMap, CurrentNode wtc, List<NodeTable> tableAll) {
+        super(tableInfoList, keyMappers, formulas, coordinateMap, wtc, tableAll);
+    }
+
+    @Override
+    public void before() {
+        super.before();
+    }
+
+    @Override
+    public void after() {
+        super.after();
+    }
+}

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

@@ -84,7 +84,7 @@ public class FormulaTurnPoint implements FormulaStrategy {
                 info.setMin(0.4D);
             }
            /* 分组计算*/
-            List<List<TurnPoint>> result = total.stream().map(e->ITurnPointCalculator.create(e, configMap, BeanUtil.copyProperties(info,LevelInfo.class))).collect(Collectors.toList());
+            List<List<TurnPoint>> result = total.stream().map(e->ITurnPointCalculator.create(e,configMap,info)).collect(Collectors.toList());
             /*附加属性如:顶面和底面高程判断*/
             forG8(cur,result, (Map<String, Object>)tec.getConstantMap().computeIfAbsent("G8", k -> new HashMap<>()),tec);
            /*插值分页*/

+ 41 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ExcelTabServiceImpl.java

@@ -59,6 +59,7 @@ import org.springblade.manager.enums.ExecuteType;
 import org.springblade.manager.formula.FormulaLog;
 import org.springblade.manager.formula.KeyMapper;
 import org.springblade.manager.formula.NodeTable;
+import org.springblade.manager.formula.impl.ElementConverter;
 import org.springblade.manager.formula.impl.TableElementConverter;
 import org.springblade.manager.mapper.ExcelTabMapper;
 import org.springblade.manager.service.*;
@@ -396,12 +397,50 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
                StopWatch stopWatch = new StopWatch();
                FormulaLog log = new FormulaLog();
                stopWatch.start("公式处理");
-               /*公式*/
                JSONObject tableInfo =dataArray.getJSONObject(0);
                Long nodeId=tableInfo.getLong("nodeId");
                List<TableInfo> tableInfoList = this.getTableInfoList(dataArray);
                List<NodeTable> tableAll = createNodeTables(nodeId, tableInfoList.get(0).getContractId(), tableInfoList.get(0).getProjectId(), type);
-               Thread.sleep(200);
+               List<KeyMapper> keyMappers = this.formulaService.getKeyMapperList(tableInfoList.stream().map(TableInfo::getPkeyId).filter(Func::isNotEmpty).map(Long::parseLong).collect(Collectors.toList()), tableInfoList.get(0).getProjectId(), String.valueOf(nodeId), type);
+               if (Func.isNotEmpty(keyMappers) && Func.isNotEmpty(tableAll)) {
+                   Map<String, Map<String, String>> coordinateMap = createCoordinateMap(keyMappers, type);
+                   List<Formula> formulas = this.formulaService.getFormulaList(keyMappers);
+                   CurrentNode currentNode = null;
+                   Long pKeyId = null;
+                   Long contractId = null;
+                   Long projectId = null;
+                   if (type.equals(ExecuteType.INSPECTION)) {
+                       WbsTreeContract wtc = this.wbsTreeContractService.getOne(Wrappers.<WbsTreeContract>lambdaQuery().eq(WbsTreeContract::getPKeyId, nodeId));
+                       pKeyId = wtc.getPKeyId();
+                       currentNode = createCurrentNode(wtc);
+                       contractId = Long.parseLong(wtc.getContractId());
+                       projectId = Long.parseLong(wtc.getProjectId());
+                   } else if (type.equals(ExecuteType.TESTING)) {
+                       WbsTreePrivate wtp = this.wbsTreePrivateService.getOne(Wrappers.<WbsTreePrivate>lambdaQuery().eq(WbsTreePrivate::getPKeyId, nodeId));
+                       pKeyId = wtp.getPKeyId();
+                       currentNode = createCurrentNode(wtp);
+                       projectId = Long.parseLong(wtp.getProjectId());
+                   }
+                   if (currentNode != null) {
+                       ElementConverter tec = new ElementConverter(tableInfoList, keyMappers, formulas, coordinateMap, currentNode, tableAll);
+                       tec.setLog(log);
+                       tec.setExecuteType(type);
+                       tec.setContractId(contractId);
+                       tec.setProjectId(projectId);
+                       if (tec.isPresent()) {
+                           tec.before();
+                           this.formulaService.execute(tec);
+                           tec.after();
+                       } else {
+                           tec.getLog().put(FormulaLog.OTHER, "没有执行任何公式");
+                       }
+                       stopWatch.stop();
+                       long totalTime = stopWatch.getTotalTimeMillis();
+                       log.put(FormulaLog.PF, "公式执行消耗时间:" + (double)totalTime / 1000 + "秒");
+                       StaticLog.info("公式执行用时:{}", totalTime);
+                       updateFormulaLog(log.toJsonString(), pKeyId);
+                   }
+               }
                stopWatch.stop();
                long totalTime = stopWatch.getTotalTimeMillis();
                log.put(FormulaLog.PF, "公式执行消耗时间:" + (double)totalTime / 1000 + "秒");

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

@@ -59,14 +59,11 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
 
     private final IWbsParamService wpService;
     private final FormulaStrategyFactory formulaStrategyFactory;
-    private final IContractInfoService contractInfoService;
-    private final IProjectInfoService projectInfoService;
     private final IWbsTreeContractService wbsTreeContractService;
     private final IWbsTreePrivateService wbsTreePrivateService;
     private final IElementFormulaMappingService elementFormulaMappingService;
     private final JdbcTemplate jdbcTemplate;
     private final IFormulaOptionService formulaOptionService;
-    private final ITextdictInfoService textDictInfoService;
     private final IFormulaDataBlockService formulaDataBlockService;
     private final IExcelTabService excelTabService;
 
@@ -85,9 +82,9 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
     public static final Pattern P2= Pattern.compile("(?<=E\\[)[^];]+:[^];]+:[^];]+(?=])");
     public final static String CTI="ContractInfo";
     public final static String PJI="ProjectInfo";
-    /*元素标识*/
+    /**元素标识*/
     public final static String E="E";
-    /*公式参数*/
+    /**公式参数*/
     public final static String FMOT="OP";