yangyj 2 жил өмнө
parent
commit
109fa9ddcd

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

@@ -77,9 +77,9 @@ public class FormData {
     /**是否是当前节点的执行元素*/
     public  Boolean isCurrentNodeElement=false;
     public static final String CODE_REG="[^:]+:[^:]+";
-    /*打印调试信息*/
+    /**打印调试信息*/
     public String info(){
-        return getCode()+getEName()+getFormula().getFormula();
+        return getCode()+getEName()+(getFormula()==null?StringPool.EMPTY:getFormula().getFormula());
     }
     public FormData() {
     }

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

@@ -18,10 +18,17 @@ import com.jfireel.expression.token.TokenType;
 import org.apache.commons.collections4.MapUtils;
 import org.apache.poi.ss.formula.functions.T;
 import org.checkerframework.checker.units.qual.A;
+import org.jsoup.Jsoup;
+import org.jsoup.nodes.Document;
+import org.jsoup.nodes.Element;
+import org.jsoup.select.Elements;
 import org.springblade.core.tool.utils.*;
 import org.springblade.manager.dto.ElementData;
+import org.springblade.manager.vo.AppWbsTreeContractVO;
 
 import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
 import java.math.BigDecimal;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
@@ -1927,6 +1934,36 @@ public class CustomFunction {
 	}
 
 
+	 public static Map<String, String> getTableCols(String uri) throws FileNotFoundException {
+		Map<String, String> dataMap = new HashMap<>();
+		File file1 = ResourceUtil.getFile(uri);
+		FileInputStream fileInputStream = new FileInputStream(file1);
+		String htmlString = IoUtil.readToString(fileInputStream);
+		Document doc = Jsoup.parse(htmlString);
+		Element table = doc.select("table").first();
+		Elements trs = table.select("tr");
+		for (int i = 0; i <= trs.size() - 1; i++) {
+			Element tr = trs.get(i);
+			Elements tds = tr.select("td");
+			for (int j = 0; j < tds.size(); j++) {
+				Element data = tds.get(j);
+				if (!data.children().isEmpty()) {
+					String keyVal = i + "_" + j;
+					Element input=data.children().get(0);
+					String keyname = input.attr("keyname");
+					String name=input.attr("placeholder");
+					if (StringUtils.isNotEmpty(keyname)) {
+						String[] keys = keyname.split("__");
+						String datakey = keys[0]+name;
+						dataMap.merge(datakey, keyVal, (v1, v2) -> v1 + ";" + v2);
+					}
+				}
+			}
+		}
+		return dataMap;
+	}
+
+
 
 	/**
 	 * @Description  关键字转换

+ 21 - 25
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/ITurnPointCalculator.java

@@ -3,21 +3,17 @@ package org.springblade.manager.formula;
 import com.mixsmart.utils.ListUtils;
 import com.mixsmart.utils.StringUtils;
 import org.springblade.core.tool.utils.Func;
-import org.springblade.core.tool.utils.StringPool;
-
 import java.math.BigDecimal;
 import java.util.*;
 import java.util.stream.Collectors;
-
 import static com.mixsmart.utils.CustomFunction.rangeList;
-import static com.mixsmart.utils.CustomFunction.objToArray;
 import static java.math.BigDecimal.ROUND_HALF_UP;
+import static org.springblade.manager.formula.TurnPoint.*;
 
 /**
  * @author yangyj
  */
 public interface ITurnPointCalculator {
-    public static final String TURN_POINT_FIELD="测点,仪器高,前视,后视,实测高程,设计高程,偏差值";
 
 
      static List<Object> create( List<Map<String,Object>> data, LinkedHashMap<String,String> configMap){
@@ -33,18 +29,18 @@ public interface ITurnPointCalculator {
                         String field =kv.getValue();
                         String value= StringUtils.handleNull(dm.get(field));
                         switch (key){
-                            case "测点":tp.setName(value);break;
-                            case "仪器高":tp.setBmd(value);break;
-                            case "前视":tp.setQ(value);break;
-                            case "后视":tp.setH(value);break;
-                            case "实测高程":tp.setSc(value);break;
-                            case "设计高程":tp.setSj(value);break;
-                            case "偏差值":tp.setDx(value);break;
+                            case CD:tp.setName(value);break;
+                            case YG:tp.setBmd(value);break;
+                            case HS:tp.setH(value);break;
+                            case QS:tp.setQ(value);break;
+                            case SC:tp.setSc(value);break;
+                            case SJ:tp.setSj(value);break;
+                            case GC:tp.setDx(value);break;
                             default:dataMap.put(key,value);
                         }
                     }
                     if(i==0){
-                        if(StringUtils.isNotEmpty(tp.getSj(),tp.getH())){
+                        if(tp.checkBmd()){
                             tp.setType(TurnPoint.BMD);
                             tp.setBmd(tp.getSj0L()+tp.getH0L());
                             levelInfo.setBmdName(tp.getName());
@@ -76,10 +72,10 @@ public interface ITurnPointCalculator {
                             close.setSc(close.getSj0L()+ldx);
                             close.setDx(ldx);
                             close.setType(TurnPoint.CLOSE);
-                            close.getDataMap().put("测点", close.getName());
-                            close.getDataMap().put("仪器高",close.getBmd());
-                            close.getDataMap().put("前视", close.getQ());
-                            close.getDataMap().put("后视", close.getH());
+                            close.getDataMap().put(CD, close.getName());
+                            close.getDataMap().put(YG,close.getBmd());
+                            close.getDataMap().put(QS, close.getQ());
+                            close.getDataMap().put(HS, close.getH());
                             tmp.add(close);
                             break;
                         }
@@ -155,7 +151,7 @@ public interface ITurnPointCalculator {
                             }
                             tp.setQ(info.getSightHeight() - tp.getSc0L());
                         } else if (StringUtils.isNotEmpty(tp.getSj())) {
-                            String dx = rangeList(1, 0, info.getDx(), 0.001, 3, 1).get(0).toString();
+                            String dx = rangeList(1, 0, info.getDx(), 1, 0, 1).get(0).toString();
                             tp.setDx(dx);
                             tp.setSc(tp.getSj0L() + tp.getDx0L());
                             tp.setQ(info.getSightHeight() - tp.getSc0L());
@@ -174,13 +170,13 @@ public interface ITurnPointCalculator {
                         st.setType(TurnPoint.ZD);
                         tp.getLevelInfo().getCloseZd().add(st);
                     }
-                    tp.getDataMap().put("测点", tp.getName());
-                    tp.getDataMap().put("仪器高", tp.getBmd());
-                    tp.getDataMap().put("前视", tp.getQ());
-                    tp.getDataMap().put("后视", tp.getH());
-                    tp.getDataMap().put("实测高程", tp.getSc());
-                    tp.getDataMap().put("设计高程", tp.getSj());
-                    tp.getDataMap().put("偏差值", StringUtils.number2StringZero(StringUtils.isNotEmpty(tp.getDx())?tp.getDx0L()*1000:"",0));
+                    tp.getDataMap().put(CD, tp.getName());
+                    tp.getDataMap().put(YG, tp.getBmd());
+                    tp.getDataMap().put(QS, tp.getQ());
+                    tp.getDataMap().put(HS, tp.getH());
+                    tp.getDataMap().put(SC, tp.getSc());
+                    tp.getDataMap().put(SJ, tp.getSj());
+                    tp.getDataMap().put(GC, StringUtils.number2StringZero(StringUtils.isNotEmpty(tp.getDx())?tp.getDx0L()*1000:"",0));
                     result.add(tp);
                 }catch (Exception e){
                     tp.getDataMap().put("数据异常", tp.getName());

+ 25 - 10
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/TurnPoint.java

@@ -1,5 +1,6 @@
 package org.springblade.manager.formula;
 
+import com.mixsmart.utils.CustomFunction;
 import com.mixsmart.utils.StringUtils;
 import org.springframework.beans.BeanUtils;
 
@@ -26,6 +27,15 @@ public class TurnPoint {
     public static final Double  FA=0.618;
     public  static  Random RD= new Random();
 
+    public static final String CD="测点";
+    public static final String YG="仪器高";
+    public static final String HS="后视";
+    public static final String QS="前视";
+    public static final String SC="实测标高";
+    public static final String SJ="设计标高";
+    public static final String GC="高程偏差";
+
+
     private String name;
     private String q;
     /**
@@ -147,7 +157,9 @@ public class TurnPoint {
         return Double.parseDouble(dx);
     }
     public void setDx(String dx) {
-        this.dx = dx;
+        if(StringUtils.isNotEmpty(dx)){
+            this.dx = CustomFunction.xN(dx,0.001).toString();
+        }
     }
     public void setDx(Double dx) {
         this.dx = StringUtils.number2StringZero(dx,levelInfo.getScale());
@@ -261,10 +273,10 @@ public class TurnPoint {
                 np.setH(small);
             }
             this.levelInfo.setSightHeight(np.getBmd0L());
-            np.getDataMap().put("测点", np.getName());
-            np.getDataMap().put("仪器高",np.getBmd());
-            np.getDataMap().put("前视", np.getQ());
-            np.getDataMap().put("后视", np.getH());
+            np.getDataMap().put(CD, np.getName());
+            np.getDataMap().put(YG,np.getBmd());
+            np.getDataMap().put(QS, np.getQ());
+            np.getDataMap().put(HS, np.getH());
             this.setQ(this.levelInfo.getSightHeight()-this.getSc0L());
         }
         return  result;
@@ -307,13 +319,16 @@ public class TurnPoint {
             zd.setQ(big);
         }
         levelInfo.setSightHeight(zd.getBmd0L());
-        zd.getDataMap().put("测点", name);
-        zd.getDataMap().put("仪器高",zd.getBmd());
-        zd.getDataMap().put("前视", zd.getQ());
-        zd.getDataMap().put("后视", zd.getH());
+        zd.getDataMap().put(CD, name);
+        zd.getDataMap().put(YG,zd.getBmd());
+        zd.getDataMap().put(QS, zd.getQ());
+        zd.getDataMap().put(HS, zd.getH());
         return zd;
     }
 
-
+  public Boolean checkBmd(){
+        /*合法水准点,设计标高、后视必须为数字*/
+        return StringUtils.isNumber(this.sj)&&StringUtils.isNumber(this.h);
+  }
 
 }

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

@@ -14,6 +14,8 @@ import java.util.*;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.stream.Collectors;
 
+import static org.springblade.manager.formula.TurnPoint.*;
+
 /**
  * @author yangyj
  * @Date 2022/8/10 16:16
@@ -22,25 +24,27 @@ import java.util.stream.Collectors;
 @Component
 @Data
 public class FormulaTurnPoint implements FormulaStrategy {
-    public static final String TURN_REG = "(?<=T\\(com.mixsmart.utils.CustomFunction\\).TURNPOINT\\()([^)]+)(?=,)";
+    public static final String TURN_REG = "(?<=T\\(com.mixsmart.utils.CustomFunction\\).TURNPOINT\\()([^)]+)(?=))";
     private FormData cur;
     static   final List<String>  KEYS;
     private List<String> args;
     static {
-        KEYS=new ArrayList<>(Arrays.asList("测点","后视","前视","仪器高","实测高程","设计高程","偏差值","备注"));
+        KEYS=new ArrayList<>(Arrays.asList(CD,YG,HS,QS,SC,SJ,GC,"备注"));
     }
 
     @Override
     public void execute(TableElementConverter tec) {
+        cur.setFinished(Boolean.TRUE);
         LinkedHashMap<String,FormData> dataSourceMap = new LinkedHashMap<>();
-        String funArgs =ReUtil.getGroup1(TURN_REG,cur.getFormula().getFormula());
+        String funArgs =ReUtil.getGroup1("(?<=T\\(com.mixsmart.utils.CustomFunction\\).TURNPOINT\\()([^)]+)(?=\\))",cur.getFormula().getFormula());
         if(StringUtils.isNotEmpty(funArgs)){
             this.args=new ArrayList<>(Arrays.asList(funArgs.split(",")));
+            args=args.stream().map(k->k.replaceAll("[(E\\[)'\\]]","")).collect(Collectors.toList());
         }
         if(Func.isNotEmpty(args)) {
             for(int i=0;i<args.size();i++){
                 String k =args.get(i);
-                Optional<FormData> ov =tec.getFormDataMap().values().stream().filter(e -> k.equals(e.getCode())).findFirst();
+                Optional<FormData> ov =tec.getFormDataMap().values().stream().filter(e ->k.equals(e.getCode())).findFirst();
                 if(ov.isPresent()){
                     dataSourceMap.put(k, ov.get());
                 }else if(i<7){
@@ -57,28 +61,31 @@ public class FormulaTurnPoint implements FormulaStrategy {
             }
             while (cda.hasNext()) {
                 LinkedHashMap<String, ElementData> map = cda.next();
-                Map<String,Object> tmp = new HashMap<>(16);
-                KEYS.forEach(k->{
-                    ElementData ed = map.get(c(k));
-                    tmp.put(configMap.get(k),ed.stringValue());
-                });
-                tableData.add(tmp);
+                if(!map.get(configMap.get(KEYS.get(0))).isEmpty()){
+                    Map<String,Object> tmp = new HashMap<>(16);
+                    KEYS.forEach(k->{
+                        ElementData ed = map.get(c(k));
+                        tmp.put(configMap.get(k),ed.stringValue());
+                    });
+                    tableData.add(tmp);
+                }
             }
            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()));
-            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));
-                }
-            });
+            if(Func.isNotEmpty(data)){
+                AtomicInteger ai = new AtomicInteger();
+                Map<Integer,List<Object>> dataMap = data.stream().collect(Collectors.groupingBy(e->ai.getAndAdd(1)%configMap.size()));
+                ai.set(0);
+                dataSourceMap.forEach((k,v)->{
+                    List<Object> dl =dataMap.get(ai.getAndIncrement());
+                    List<ElementData> list = v.getValues();
+                    v.setUpdate(1);
+                    v.setFinished(Boolean.TRUE);
+                    for(int n=0;n<dl.size();n++){
+                        ElementData ed = list.get(n);
+                        ed.setValue(dl.get(n));
+                    }
+                });
+            }
 
         }
     }

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

@@ -553,7 +553,7 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                 "inner join m_table_info b on a.init_table_name=b.tab_en_name " +
                 "INNER JOIN m_wbs_form_element c on b.id=c.f_id " +
                 "left join m_element_formula_mapping d on c.id=d.element_id " +
-                "where a.p_key_id in("+ids.stream().map(String::valueOf).collect(Collectors.joining(","))+") ORDER BY a.init_table_name,d.scope");
+                "where a.p_key_id in("+ids.stream().map(String::valueOf).collect(Collectors.joining(","))+")  ORDER BY a.init_table_name,d.scope");
         /*当前节点的参数可以是私有级和公有级*/
 
         if(Func.isNotEmpty(listMap)){