Browse Source

公式相关:公式日志分类

yangyj 1 năm trước cách đây
mục cha
commit
5d6f481f43

+ 3 - 8
blade-service/blade-manager/src/main/java/com/mixsmart/utils/FormulaUtils.java

@@ -2,9 +2,6 @@ package com.mixsmart.utils;
 
 
 import cn.hutool.log.StaticLog;
-import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson.JSONObject;
-
 import com.jfireel.expression.Expression;
 import org.apache.poi.hssf.usermodel.HSSFDataFormatter;
 import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
@@ -21,7 +18,6 @@ import org.jfree.chart.plot.ValueMarker;
 import org.jfree.chart.plot.XYPlot;
 import org.jfree.chart.renderer.xy.XYSplineRenderer;
 import org.jfree.chart.title.TextTitle;
-import org.jfree.data.xy.DefaultXYDataset;
 import org.jfree.data.xy.XYSeries;
 import org.jfree.data.xy.XYSeriesCollection;
 import org.jsoup.Jsoup;
@@ -30,7 +26,6 @@ import org.springblade.core.tool.utils.CollectionUtil;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.core.tool.utils.IoUtil;
 import org.springblade.core.tool.utils.StringPool;
-import org.springblade.manager.bean.TableInfo;
 import org.springblade.manager.dto.Coords;
 import org.springblade.manager.dto.ElementData;
 import org.springblade.manager.dto.FormData;
@@ -496,10 +491,10 @@ public class FormulaUtils {
         return data.stream().peek(e->{if(StringUtils.isDouble(e.getValue())){e.setValue(StringUtils.number2StringZero(e.getValue(),finalScale));}}).collect(Collectors.toList());
     }
 
-/*    public static void main(String[] args) {
-        Map<String,String> map=getElementCell("/www/wwwroot/Users/hongchuangyanfa/Desktop/privateUrl/1688447882195107840.html","key_31");
+    public static void main(String[] args) {
+        Map<String,String> map=getElementCell("/www/wwwroot//Users/hongchuangyanfa/Desktop/privateUrl/1584783238218383360.html","key_16");
         System.out.println(map);
-    }*/
+    }
     /**
      * @Description  定位信息排序
      * @Param [coords]

+ 0 - 25
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/Container.java

@@ -1,25 +0,0 @@
-package org.springblade.manager.formula;
-
-import lombok.Data;
-import org.springblade.manager.dto.FormData;
-import org.springblade.manager.entity.WbsTreeContract;
-import org.springblade.manager.formula.impl.TableElementConverter;
-import org.springframework.beans.factory.annotation.Qualifier;
-import org.springframework.stereotype.Component;
-
-import java.util.List;
-import java.util.Map;
-
-/**
- * @author yangyj
- * @Date 2022/9/8 9:49
- * @description TODO
- */
-@Component
-@Data
-public class Container {
-    public Map<String, Object> constantMap;
-    public List<FormData> formDataList;
-    public Map<Long, Map<String, Object>> crossDataMap;
-    public TableElementConverter tec;
-}

+ 42 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/FormulaLog.java

@@ -0,0 +1,42 @@
+package org.springblade.manager.formula;
+
+import com.alibaba.fastjson.JSON;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * @author yangyj
+ * @Date 2023/9/4 11:47
+ * @description 记录公式执行状态
+ */
+public class FormulaLog {
+    public static  final  String POSITION="缺失定位";
+    public static  final  String CROSS="缺失元素";
+    public static  final  String PARAM="本节点参数";
+    public static  final  String FUNC_ERROR="异常状态的公式";
+    public static  final  String SUB_TAB="附表装载状态";
+    public static  final  String RELY="不满足执行依赖";
+    public static  final  String CALC="计算错误";
+    public static  final  String OTHER="其它错误";
+    public static  final  String PF="性能相关";
+
+    private final Map<String, Set<String>> dataMap = new HashMap<>(20);
+    public void put(String key,String value){
+        dataMap.computeIfAbsent(key,k->new HashSet<>()).add(value);
+    }
+    public String toJsonString(){
+       return JSON.toJSONString(this.dataMap);
+    }
+
+/*    public static void main(String[] args) {
+        FormulaLog formulaLog = new FormulaLog();
+        formulaLog.put(POSITION,"m_20220928153737_1575026930275581952:key_18");
+        formulaLog.put(POSITION,"m_20220928153737_1575026930275581952:key_11");
+        formulaLog.put(POSITION,"m_20220928153737_1575026930275581952:key_05");
+        formulaLog.put(PARAM,"工程部位:C1;工序名称:C2C6");
+        System.out.println(formulaLog.toJsonString());
+    }*/
+}

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

@@ -10,6 +10,7 @@ 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.FormulaLog;
 import org.springblade.manager.formula.FormulaStrategy;
 import org.springblade.manager.formula.KeyMapper;
 import org.springblade.manager.formula.Mileage;
@@ -46,7 +47,6 @@ public class FormulaMileage implements FormulaStrategy {
     public void execute(FormData cur,TableElementConverter tec) {
         List<String> relyList = cur.getFormula().getRelyList();
         if (relyList.size() < KEYS.size()) {
-            tec.getLog().append(cur.getEName()).append("不满足依赖");
             return;
         }
         List<FormData> data = new ArrayList<>();
@@ -54,10 +54,9 @@ public class FormulaMileage implements FormulaStrategy {
             FormData fdTmp = tec.formDataMap.get(k);
             data.add(tec.formDataMap.get(k));
             if (fdTmp == null) {
-                tec.getLog().append("G10依赖元素").append(k).append("缺失");
+                tec.getLog().put(FormulaLog.RELY,"平面坐标计算缺失依赖元素:"+k);
             }
         }
-        /*元素定位信息接口很不靠谱,满足条件的行才计算*/
         List<Mileage> mileageList = new ArrayList<>();
         FormData line0 = data.get(0);
         if (line0 != null && Func.isNotEmpty(line0.getValues())) {

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

@@ -58,7 +58,7 @@ public class FormulaTurnPoint implements FormulaStrategy {
                 if (ov.isPresent()) {
                     dataSourceMap.put(k, ov.get());
                 } else if (i < 7) {
-                    tec.log.append("水准测量表不满足计算所需的元素");
+                    tec.log.put(FormulaLog.RELY,"水准测量表不满足计算所需的元素:"+k);
                     return;
                 }
             }

+ 4 - 3
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/TableElementConverter.java

@@ -14,6 +14,7 @@ import org.springblade.manager.dto.FormData;
 import org.springblade.manager.entity.Formula;
 import org.springblade.manager.dto.Coords;
 import org.springblade.manager.enums.ExecuteType;
+import org.springblade.manager.formula.FormulaLog;
 import org.springblade.manager.formula.ITableElementConverter;
 import org.springblade.manager.formula.KeyMapper;
 import org.springblade.manager.formula.NodeTable;
@@ -79,7 +80,7 @@ public class TableElementConverter implements ITableElementConverter {
     /**
      * 记录表公式执行的日志
      */
-    StringBuilder log;
+     FormulaLog log  ;
     /**
      * 当前执行环境全局变量
      */
@@ -178,7 +179,7 @@ public class TableElementConverter implements ITableElementConverter {
                     }
                 }
                 if (Func.isEmpty(fd.getCoordsList())) {
-                    log.append(fd.getEName()).append(fd.getCode()).append("定位信息不存在;");
+                    log.put(FormulaLog.POSITION,fd.getCode()+"("+fd.getEName()+")");
                 }
                 this.formDataMap.put(fd.getCode(), fd);
                 if (fd.getFormula() != null) {
@@ -223,7 +224,7 @@ public class TableElementConverter implements ITableElementConverter {
                 }
             }
         } else {
-            log.append("公式未插入或者修改任何数据");
+            log.put(FormulaLog.OTHER,"公式未插入或者修改任何数据");
         }
 
     }

+ 14 - 10
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ExcelTabServiceImpl.java

@@ -53,6 +53,7 @@ import org.springblade.core.tool.utils.*;
 import org.springblade.manager.bean.TableInfo;
 import org.springblade.manager.entity.*;
 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.TableElementConverter;
@@ -333,7 +334,7 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
         if (Func.isNotEmpty(tableInfoList)) {
             try {
                 /*用来保存日志执行情况*/
-                StringBuilder log = new StringBuilder();
+                FormulaLog log =new FormulaLog();
                 /*每次都是部分表单提交,保证跨节点跨表取数正常,其次是反向依赖的被动刷新*/
                 List<NodeTable> tableAll = createNodeTables(nodeId, tableInfoList.get(0).getContractId(), tableInfoList.get(0).getProjectId(), type);
                 StopWatch stopWatch = new StopWatch();
@@ -342,7 +343,6 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
                     Map<String, Map<String, String>> coordinateMap = createCoordinateMap(keyMappers, type);
                     stopWatch.start("公式处理");
                     List<Formula> formulas = this.formulaService.getFormulaList(keyMappers);
-
                     CurrentNode currentNode = null;
                     Long pKeyId = null;
                     Long contractId = null;
@@ -361,8 +361,8 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
                     }
                     if (currentNode != null) {
                         TableElementConverter tec = new TableElementConverter(tableInfoList, keyMappers, formulas, coordinateMap, currentNode, tableAll);
-                        tec.setExecuteType(type);
                         tec.setLog(log);
+                        tec.setExecuteType(type);
                         tec.setContractId(contractId);
                         tec.setProjectId(projectId);
                         if (tec.isPresent()) {
@@ -370,13 +370,13 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
                             this.formulaService.execute(tec);
                             tec.after();
                         } else {
-                            tec.getLog().append("【").append("没有执行任何公式").append("】");
+                            tec.getLog().put(FormulaLog.OTHER,"没有执行任何公式");
                         }
                         stopWatch.stop();
-                        Long totalTime = stopWatch.getTotalTimeMillis();
-                        log.append("公式执行消耗时间:").append(totalTime);
+                        long totalTime = stopWatch.getTotalTimeMillis();
+                        log.put(FormulaLog.PF,"公式执行消耗时间:"+totalTime/1000+"秒");
                         StaticLog.info("公式执行用时:{}", totalTime);
-                        updateFormulaLog(log, pKeyId);
+                        updateFormulaLog(log.toJsonString(), pKeyId);
                     }
                 }
             } catch (Exception e) {
@@ -417,13 +417,17 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
         return coordinateMap;
     }
 
-    private void updateFormulaLog(StringBuilder log, Long pKeyId) {
+    private void updateFormulaLog(String log, Long pKeyId) {
         try {
-            String[] sql = new String[]{
+       /*     String[] sql = new String[]{
                     "delete from m_formula_log where id =" + pKeyId,
                     "INSERT INTO m_formula_log (id,content) VALUES (" + pKeyId + ", '" + log + "')"
             };
-            this.jdbcTemplate.batchUpdate(sql);
+            this.jdbcTemplate.batchUpdate(sql);*/
+            String deleteSql = "DELETE FROM m_formula_log WHERE id = ?";
+            String insertSql = "INSERT INTO m_formula_log (id, content) VALUES (?, ?)";
+            jdbcTemplate.update(deleteSql, pKeyId);
+            jdbcTemplate.update(insertSql, pKeyId, log);
         } catch (Exception e) {
             e.printStackTrace();
         }

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

@@ -74,13 +74,11 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
     private final IWbsTreeContractService wbsTreeContractService;
     private final IWbsTreePrivateService wbsTreePrivateService;
     private final IElementFormulaMappingService elementFormulaMappingService;
-    private final IWbsTreeService wbsTreeService;
     private final JdbcTemplate jdbcTemplate;
     private final IFormulaOptionService formulaOptionService;
     private final ITextdictInfoService textDictInfoService;
     private final IFormulaDataBlockService formulaDataBlockService;
     private final IExcelTabService excelTabService;
-    private final IWbsInfoService wbsInfoService;
 
     private   TableElementConverter tec;
     public final static String WP="WP";
@@ -101,8 +99,6 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
     public final static String E="E";
     /*公式参数*/
     public final static String FMOT="OP";
-    /**表单信息*/
-    public final static String TEXT_INFO_MAP="textInfoMap";
 
 
 
@@ -157,9 +153,7 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
         if(ExecuteType.INSPECTION.equals(tec.getExecuteType())) {
 
             List<WbsTreeContract> nodes = wpService.tracing(one.getPkId());
-            if (Func.isEmpty(nodes)) {
-                this.tec.getLog().append("【WBS信息缺失】");
-            }
+
             tec.constantMap.put(CHAIN,nodes.stream().map(e->StringUtils.isNotEmpty(e.getFullName())?e.getFullName():e.getNodeName()).collect(Collectors.toList()));
             /*节点参数*/
             tec.constantMap.put(WP,getWpMap(one));
@@ -196,7 +190,11 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
 
        missingFill(missingList);
        if(Func.isNotEmpty(missingList)){
-           tec.getLog().append("【没有能加载的跨节点数据:").append(missingList.stream().map(e->e.replaceAll("'","")).collect(Collectors.joining(","))).append("】");
+           StringBuilder sb = new StringBuilder();
+           missingList.stream().collect(Collectors.groupingBy(s->s.split(StringPool.COLON)[0])).forEach((k,v)->{
+                sb.append(k).append("(").append(v.stream().map(c->c.split(StringPool.COLON)[1]).collect(Collectors.joining(","))).append(")");
+           });
+           tec.getLog().put(FormulaLog.CROSS,sb.toString());
        }
     }
 
@@ -464,7 +462,7 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                 one.setEName(name);
                 return one;
             }
-            this.tec.getLog().append("【").append(name).append(code).append("定位信息不存在】");
+            this.tec.getLog().put(FormulaLog.POSITION,code+"("+name+")");
         }
         return null;
     }
@@ -501,7 +499,7 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                 logMap.put(p.getK(),p.getName());
             }
         }
-        this.tec.getLog().append("【本节点参数情况:").append(result.entrySet().stream().map(p->logMap.get(p.getKey())+":"+p.getValue()).collect(Collectors.joining(";"))).append("】");
+        this.tec.getLog().put(FormulaLog.PARAM,result.entrySet().stream().map(p->logMap.get(p.getKey())+":"+p.getValue()).collect(Collectors.joining(";")));
         /*元素动态绑定*/
         Map<String,Formula> formulaIdMap = this.wpService.formulaKeyMap(total.stream().map(WbsParam::getK).collect(Collectors.toList()));
         /**查找无绑定公式且单元格只有一个的当前表单元素*/
@@ -667,7 +665,7 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                     formulaStrategyFactory.execute(fd,tec);
                 }
             }catch (Exception e){
-                tec.getLog().append("【特殊公式:").append(fd.getEName()).append(fd.getFormula().getNumber()).append("执行异常】");
+                tec.getLog().put(FormulaLog.CALC,fd.getCode()+"("+fd.getEName()+"公式id"+fd.getFormula().getId()+")");
                 e.printStackTrace();
             }
         }
@@ -754,7 +752,7 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                                 }
                             });
                             if(ele.size()<relyList.size()){
-                                this.tec.getLog().append("【").append(fd.getEName()).append(fd.getFormula().getFormula().replaceAll("'", "")).append("不满足执行依赖】");
+                                this.tec.getLog().put(FormulaLog.RELY,fd.getCode()+"@"+fd.getEName()+"@"+fd.getFormula().getFormula().replaceAll("'", ""));
                             }
                             if(fd.getCoordsList().size()>1&&f.split("[/+\\-*]").length>1){
                                 LinkedHashMap<String,FormData> fdMap =new LinkedHashMap<>();
@@ -827,7 +825,8 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                             write(fd,data);
                         }
                     }catch (Exception e){
-                        tec.getLog().append("【").append(fd.getEName()).append("计算错误】 ");
+                        e.printStackTrace();
+                        tec.getLog().put(FormulaLog.CALC,fd.getEName()+"("+formula+")");
                     }
 
                 }
@@ -861,7 +860,7 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                     boolean pd=tec.getTableAll().stream().anyMatch(e->e.getTableType().equals(5));
                     WbsTreePrivate sub = wbsTreePrivateService.getOne(Wrappers.<WbsTreePrivate>lambdaQuery().and(e->e.eq(WbsTreePrivate::getNodeName, pd?"质量检验评定表(附表)":"质量检验表(附表)").or().eq(WbsTreePrivate::getFullName, pd?"质量检验评定表(附表)":"质量检验表(附表)")).eq(WbsTreePrivate::getProjectId, tec.getProjectId()).eq(WbsTreePrivate::getIsLinkTable,2));
                     if (sub == null) {
-                        this.tec.getLog().append("该项目没有挂有附表信息");
+                        this.tec.getLog().put(FormulaLog.SUB_TAB,"该项目没有挂有附表信息");
                     } else {
                         this.wbsTreePrivateService.addWbsTreeContractInfo(this.tec.getCurrentNode().getPkId().toString(), sub.getPKeyId().toString(), tec.getContractId());
                         NodeTable one = this.tec.getTableAll().get(0);
@@ -978,7 +977,6 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
             }
 
         } catch (Exception e) {
-            this.tec.getLog().append("【").append("附表异常").append("】");
             e.printStackTrace();
         }
     }
@@ -1699,7 +1697,7 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                  }
                  formula.setFormula(f);
              }catch (Exception e){
-                 tec.getLog().append(e.getMessage());
+                 tec.getLog().put(FormulaLog.OTHER,e.getMessage());
                  e.printStackTrace();
              }
     }
@@ -1707,7 +1705,7 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
 
 
    public Map<String,Object> createCurrentMap(String el){
-         Map<String,Object> currentMap= new HashMap<String,Object>(tec.constantMap);
+         Map<String,Object> currentMap= new HashMap<>(tec.constantMap);
          List<FormData> fds= getFormDataByCode(String.join(",", getCodeByEl(el)));
          if(Func.isNotEmpty(fds)){
              Map<String,Object> Em= (Map<String, Object>) currentMap.computeIfAbsent(E, k->new HashMap<String,Object>());