Browse Source

公式相关:优化

yangyj 1 year ago
parent
commit
742e3ce843

+ 30 - 7
blade-common/src/main/java/org/springblade/common/utils/BaseUtils.java

@@ -4,9 +4,7 @@ import cn.hutool.core.lang.func.Func;
 import com.alibaba.cloud.commons.lang.StringUtils;
 import org.springblade.common.constant.RegexConstant;
 
-import java.io.File;
-import java.io.FileFilter;
-import java.io.IOException;
+import java.io.*;
 import java.lang.annotation.Annotation;
 import java.math.BigDecimal;
 import java.net.JarURLConnection;
@@ -84,7 +82,6 @@ public class BaseUtils {
     /**
      * @Description  判断对象是否为数值
      * @Param [value]
-     * @return boolean
      * @Author yangyj
      * @Date 2023.01.17 13:48
      **/
@@ -116,6 +113,32 @@ public class BaseUtils {
                 .collect(Collectors.toList());
     }
 
+
+    /**
+     * @Description 深度拷贝
+     * @Param [originalList]
+     * @return java.util.List<T>
+     * @Author yangyj
+     * @Date 2023.04.28 14:18
+     **/
+    public static <T extends Serializable> List<T> copyList(List<T> originalList) {
+        try {
+            ByteArrayOutputStream baos = new ByteArrayOutputStream();
+            ObjectOutputStream oos = new ObjectOutputStream(baos);
+            oos.writeObject(originalList);
+            oos.close();
+            ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
+            ObjectInputStream ois = new ObjectInputStream(bais);
+            @SuppressWarnings("unchecked")
+            List<T> copiedList = (List<T>) ois.readObject();
+            ois.close();
+            return copiedList;
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
     public static String handleNull(Object obj) {
         if (null == obj) {
             return "";
@@ -129,8 +152,8 @@ public class BaseUtils {
                     return true;
                  }else if(value instanceof Map&&((Map<?, ?>) value).size()>0){
                      return true;
-                 }else if(value.toString().trim().length()>0){
-                     return true;
+                 }else {
+                     return value.toString().trim().length() > 0;
                  }
              }
              return false;
@@ -189,7 +212,7 @@ public class BaseUtils {
         if (null == obj) {
             return 0;
         } else {
-            double value = 0;
+            double value;
             try {
                 value = Double.parseDouble(obj.toString());
             } catch (Exception ex) {

+ 12 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/dto/FormData.java

@@ -3,6 +3,7 @@ package org.springblade.manager.dto;
 
 import lombok.Data;
 import lombok.Setter;
+import org.springblade.common.utils.BaseUtils;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.core.tool.utils.StringPool;
 import org.springblade.manager.entity.Formula;
@@ -62,6 +63,10 @@ public class FormData {
      * 用于输出
      */
     private List<ElementData> values;
+    /**
+     * 初始内容
+     * */
+    private List<ElementData> initial ;
     /**
      * 当需要偏移处理的时候需要备份原数据,等计算完成还原回去
      */
@@ -224,5 +229,12 @@ public class FormData {
         return this.values.stream().map(ElementData::getValue).collect(Collectors.toList());
     }
 
+    public void init(){
+        if(this.values.size()>0){
+            /*原始数据*/
+            this.setInitial(BaseUtils.copyList(this.values));
+        }
+    }
+
 
 }

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

@@ -22,6 +22,7 @@ import org.jfree.data.xy.XYSeries;
 import org.jfree.data.xy.XYSeriesCollection;
 import org.jsoup.Jsoup;
 import org.jsoup.nodes.Document;
+import org.springblade.common.utils.BaseUtils;
 import org.springblade.core.tool.utils.CollectionUtil;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.core.tool.utils.IoUtil;
@@ -320,30 +321,7 @@ public class FormulaUtils {
         itemNames.stream().map(FormulaUtils::checkItemName).forEach(System.out::println);
     }*/
 
-    /**
-     * @Description 深度拷贝
-     * @Param [originalList]
-     * @return java.util.List<T>
-     * @Author yangyj
-     * @Date 2023.04.28 14:18
-     **/
-    public static <T extends Serializable> List<T> copyList(List<T> originalList) {
-        try {
-            ByteArrayOutputStream baos = new ByteArrayOutputStream();
-            ObjectOutputStream oos = new ObjectOutputStream(baos);
-            oos.writeObject(originalList);
-            oos.close();
-            ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
-            ObjectInputStream ois = new ObjectInputStream(bais);
-            @SuppressWarnings("unchecked")
-            List<T> copiedList = (List<T>) ois.readObject();
-            ois.close();
-            return copiedList;
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-        return null;
-    }
+
 
 
 
@@ -611,8 +589,9 @@ public class FormulaUtils {
         return list;
     }
     /**从时间段中获取最后一个日期*/
+    static final  String RANGE_DATE_REG="^\\[(\\d{4}[年.\\-]\\d{2}[月.\\-]\\d{2}[日]?),\\s+(\\d{4}[年.\\-]\\d{2}[月.\\-]\\d{2}[日]?)]$";
     public  static String range2end(String t){
-        if(t!=null&&Pattern.matches("^\\[(\\d{4}[年.\\-]\\d{2}[月.\\-]\\d{2}[日]?),\\s+(\\d{4}[年.\\-]\\d{2}[月.\\-]\\d{2}[日]?)]$",t)){
+        if(t!=null&&Pattern.matches(RANGE_DATE_REG,t)){
             t=t.replaceAll("^\\[|]$","").split(",")[1].trim();
         }
         return t;
@@ -620,8 +599,6 @@ public class FormulaUtils {
 
     public static FormData createFormDataFast(String name,String code,String values,String coords){
         if(StringUtils.isNotEmpty(code,name)){
-            //String[] arr=code.split(":");
-           // String coords = tec.getCoordinateMap().get(arr[0]).get(arr[1]);
             if(StringUtils.isNotEmpty(coords)) {
                 /*定位信息存在才合法*/
                 List<Coords> coordsList = Stream.of(coords).flatMap(s -> Arrays.stream(s.split(";"))).map(s -> {
@@ -657,6 +634,8 @@ public class FormulaUtils {
                 }
                 FormData one = new FormData(code, eds, null, coords);
                 one.setEName(name);
+                /*备份原始数据,用于更新比较*/
+                one.init();
                 return one;
             }
         }
@@ -756,4 +735,6 @@ public class FormulaUtils {
 
 
 
+
+
 }

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

@@ -274,11 +274,9 @@ public class TurnPoint {
 
         }
     }
-/*
-    public static void main(String[] args) {
-        test();
-    }
-*/
+/*    public static void main(String[] args) {
+       test();
+    }*/
 
     public Boolean isNegativeQ(){
         return StringUtils.isNumber(q)&&getQ0L()<0;

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

@@ -2,6 +2,7 @@ package org.springblade.manager.formula.impl;
 
 
 import cn.hutool.log.StaticLog;
+import com.mixsmart.utils.FormulaUtils;
 import com.mixsmart.utils.StringUtils;
 import lombok.Data;
 import org.apache.poi.ss.usermodel.Workbook;
@@ -181,6 +182,8 @@ public class TableElementConverter implements ITableElementConverter {
                 if (Func.isEmpty(fd.getCoordsList())) {
                     log.put(FormulaLog.POSITION,fd.getCode()+"("+fd.getEName()+")");
                 }
+                /*备份原始数据,用于更新比较*/
+                fd.init();
                 this.formDataMap.put(fd.getCode(), fd);
                 if (fd.getFormula() != null) {
                     /*只有需要执行公式的才放这里*/

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

@@ -375,7 +375,7 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
                         }
                         stopWatch.stop();
                         long totalTime = stopWatch.getTotalTimeMillis();
-                        log.put(FormulaLog.PF, "公式执行消耗时间:" + totalTime / 1000 + "秒");
+                        log.put(FormulaLog.PF, "公式执行消耗时间:" + (double)totalTime / 1000 + "秒");
                         StaticLog.info("公式执行用时:{}", totalTime);
                         updateFormulaLog(log.toJsonString(), pKeyId);
                     }
@@ -1012,7 +1012,8 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
                         transactionManager1.rollback(transactionStatus);
                         log.append(e.getMessage()).append("@@");
                         e.printStackTrace();
-                        return R.fail(wbsTreeContract.getNodeName());
+                        /*return R.fail(wbsTreeContract.getNodeName());*/
+                        return R.fail(reason(e.getMessage()));
                     }
                 }
 
@@ -1048,7 +1049,7 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
     }
 
     public String reason(String log) {
-        /*字段过短提示*/
+        /*保存的时候错误提示例如:字段过短提示 yangyj*/
         StringBuilder sb = new StringBuilder();
         String[] part = log.split("@@");
         for (String p : part) {

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

@@ -460,6 +460,8 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                 }
                 FormData one = new FormData(code, eds, null, coords);
                 one.setEName(name);
+                /*备份原始数据,用于更新比较*/
+                one.init();
                 return one;
             }
             this.tec.getLog().put(FormulaLog.POSITION,code+"("+name+")");
@@ -522,24 +524,6 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                 });
             });
         }
-    /*    tec.formDataMap.values().stream().filter(e->e.getIsCurrentNodeElement()&&e.getFormula()==null).forEach(e->{
-            *//*执行列表里不存在,且元素的名称和节点参数名称匹配成功*//*
-            total.stream().filter(p->e.getEName().contains(p.getName().replace("【水】","").trim())&&!tec.formDataList.contains(e)).findAny().ifPresent(d->{
-                Formula  formula=new Formula();
-                formula.setOutm(Formula.FULL);
-             *//*   if(RegexUtil.match(ParamElements.LEVEL_REG,d.getV().trim())){
-                    *//**//*取层级*//**//*
-                    formula.setFormula("FC.tree(trees,WP["+d.getK()+"])");
-                }else{
-                    *//**//*直接取数*//**//*
-                    formula.setFormula("WP["+d.getK()+"]");
-                }*//*
-                formula.setFormula("FC.tree(trees,WP["+d.getK()+"])");
-                e.setFormula(formula);
-                tec.getLog().append("动态绑定参数:").append(e.getEName()).append(";");
-                tec.formDataList.add(e);
-            });
-        });*/
         return result;
     }
 
@@ -1002,7 +986,10 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                     result.addAll(customize);
                 }
                 tec.constantMap.put(CHECK_ITEMS,result);
-                tec.constantMap.put("CKD",tec.checkDate.stream().flatMap(k->k.getValues().stream()).map(ElementData::stringValue).filter(StringUtils::isNotEmpty).reduce((a, b) -> Comparator.<DateTime>reverseOrder().compare(new DateTime(a), new DateTime(b)) <= 0 ? a : b).orElse(null));
+                tec.constantMap.put("CKD",tec.checkDate.stream().flatMap(k->k.getValues().stream()).map(ElementData::stringValue)
+                        .filter(StringUtils::isNotEmpty)
+                        .map(FormulaUtils::range2end)
+                        .reduce((a, b) -> Comparator.<DateTime>reverseOrder().compare(new DateTime(a), new DateTime(b)) <= 0 ? a : b).orElse(null));
                 tec.summary.forEach(e->{
                     /*处理脚本*/
                     e.getFormula().setFormula(e.getFormula().getNumber());