yangyj 3 жил өмнө
parent
commit
35e4795d5a

+ 20 - 0
blade-common/src/main/java/org/springblade/common/utils/BaseUtils.java

@@ -32,6 +32,26 @@ public class BaseUtils {
     }
 
 
+    /**
+     * @Description 将key1(val1)key2(val2)key3(val3)...这种格式的参数转换为Map
+     * @Param [str]
+     * @return java.util.Map<java.lang.String,java.lang.String>
+     * @Author yangyj
+     * @Date 2022.08.12 10:39
+     **/
+    public  static  Map<String,String> string2Map(String str){
+        Map<String,String> result = new HashMap<>(15);
+        if(StringUtils.isNotEmpty(str)){
+            String[] args = str.split("\\)");
+            for(String a:args){
+                if(StringUtils.isNotEmpty(a)){
+                    String[] kv=a.split("\\(");
+                    result.put(kv[0],kv[1]);
+                }
+            }
+        }
+        return result;
+    }
 
 
 

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

@@ -58,4 +58,10 @@ public class FormData {
         this.formula = formula;
     }
 
+    public FormData(String code, Integer step, List<ElementData> values, Formula formula) {
+        this.code = code;
+        this.step = step;
+        this.values = values;
+        this.formula = formula;
+    }
 }

+ 1 - 1
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/entity/Formula.java

@@ -20,7 +20,7 @@ import java.util.List;
 @TableName("m_formula")
 public class Formula extends BaseEntity {
    private String rely;
-   @Size(max = 1024)
+   @Size(max = 2048)
    private String formula;
    @Size(max = 50)
    private String number;

+ 11 - 21
blade-service/blade-manager/src/main/java/com/mixsmart/utils/CustomFunction.java

@@ -1,6 +1,7 @@
 package com.mixsmart.utils;
 
 
+import cn.hutool.dfa.SensitiveUtil;
 import com.jfireel.expression.Expression;
 import org.apache.commons.collections4.MapUtils;
 import org.springblade.core.tool.utils.CollectionUtil;
@@ -3189,23 +3190,6 @@ public class CustomFunction {
 
 
 
-	/**
-	 *  @author: zhifk
-	 *  @Date:  2020/9/4 - 11:00
-	 *  @Description:
-	 *  value1:公式所在单元格的分类,value2:选择的分类,value3:从记录表获得的共检点合格点
-	 *  根据选择的分类判断是否是该分类的共检点合格点
-	 *  为:FUNC.isfenlei(TABLE['t_pf_RecordTable015']['shigongkaishiriqi'],'板拱',FORMULA[‘公式编号’])
-	 */
-	public static Object isfenlei(Object value1,Object value2,Object value3){
-		if( StringUtils.isEmpty(value1)  || StringUtils.isEmpty(value2) || StringUtils.isEmpty(value3)){
-			return null;
-		}
-		if(value1.toString().contains(value2.toString())){
-			return value3;
-		}
-		return null;
-	}
 
 
 
@@ -3324,13 +3308,19 @@ public class CustomFunction {
 	}
 
 
-/*
+
 	public static void main(String[] args)  {
 		   List<Object> list  = new ArrayList<>(Arrays.asList(1,2,2,4,5,6,7,8,9,0));
-		   System.out.println(join(list));
-		   System.out.println(join(list,";"));
+
+		   Set<String> set = new HashSet<>(20);
+		   set.add("yang");
+		   set.add("yu");
+		   set.add("jiu");
+		   SensitiveUtil.init(set);
+		  System.out.println(SensitiveUtil.getFoundAllSensitive("yang are good man"));
+
 	}
 
- */
+
 
 }

+ 150 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/CompositeDataAccess.java

@@ -0,0 +1,150 @@
+package org.springblade.manager.formula.impl;
+
+
+import com.mixsmart.utils.ListUtils;
+import com.mixsmart.utils.StringUtils;
+import org.springblade.manager.dto.ElementData;
+import org.springblade.manager.dto.FormData;
+import org.springblade.manager.entity.Formula;
+import java.util.*;
+import java.util.stream.Collectors;
+
+
+/**
+ * @author yangyj
+ * @Date 2022/8/18 10:34
+ * @description TODO
+ */
+public class CompositeDataAccess  {
+    private  LinkedHashMap<String, FormData> fds =new LinkedHashMap<>();
+    private int maxSize=1;
+    private int cursor=0;
+
+    public CompositeDataAccess(LinkedHashMap<String, FormData> fds) {
+        if(fds!=null){
+            for(FormData fd:fds.values()){
+                List<ElementData> elementDataList = fd.getValues();
+                if(ListUtils.isNotEmpty(elementDataList)){
+                    maxSize = Math.max(maxSize,elementDataList.size()*fd.getStep());
+                }
+            }
+        }
+        this.fds = fds;
+    }
+
+    public CompositeDataAccess() {
+    }
+
+    /**
+     * 重置游标
+     **/
+    public void cursorReset(){
+      synchronized(this){this.cursor=0;};
+    }
+
+    public void addFormData(String key, FormData val){
+        if(fds!=null&&StringUtils.isNotEmpty(key)&&val!=null) {
+            List<ElementData> elementDataList = val.getValues();
+            if(ListUtils.isNotEmpty(elementDataList)){
+                maxSize = Math.max(maxSize,elementDataList.size()*val.getStep());
+                fds.put(key,val);
+            }
+
+        }
+    }
+
+    public   LinkedHashMap<String, ElementData> get(Integer index){
+        LinkedHashMap<String, ElementData> data =new LinkedHashMap<>();
+        for(FormData fd:fds.values()){
+            int step = fd.getStep()==null?1:fd.getStep();
+            List<ElementData> elementDataList = fd.getValues();
+            int n=index/step;
+            if(n>elementDataList.size()-1){
+                data.put(fd.getCode(),null);
+            }else{
+                data.put(fd.getCode(),elementDataList.get(index/step));
+            }
+        }
+        return data;
+    }
+
+
+
+    public void insert(LinkedHashMap<String, ElementData> data){
+        for(Map.Entry<String,FormData> fd:fds.entrySet()){
+            List<ElementData> list = fd.getValue().getValues();
+            /*当前游标已经指向下一个位置*/
+            if(list.size()<=cursor){
+                list.addAll(Collections.nCopies(cursor-list.size()+1,null));
+            }
+            /*动态增减的时候难以判定是否换页,暂时全部用1代替*/
+            ElementData d = data.getOrDefault(fd.getKey(),new ElementData(1,1,""));
+            list.add(cursor,d);
+        }
+        ++cursor;
+    }
+
+
+    public void append(LinkedHashMap<String, ElementData> data){
+        if(data!=null){
+            for(Map.Entry<String,ElementData> d:data.entrySet()){
+                List<ElementData> list = fds.get(d.getKey()).getValues();
+                /*当前游标已经指向下一个位置*/
+                if(list.size()<maxSize){
+                    list.addAll(Collections.nCopies(maxSize-list.size(),null));
+                }
+                list.add(maxSize,d.getValue());
+            }
+        }
+    }
+
+
+    public Boolean hasNext(){
+          return cursor<maxSize;
+    }
+
+    public LinkedHashMap<String, ElementData> next(){
+        return get(cursor++);
+    }
+
+
+//    public static FormData makeFd(String fs, String code, String rely,Integer step, Object... obs){
+//        Formula f= new Formula();
+//        f.setRely(rely);
+//        f.setFormula(fs);
+//        List<ElementData> list = new ArrayList<>();
+//        if(obs!=null){
+//            list= Arrays.stream(obs).map(e->new ElementData(0,0,e)).collect(Collectors.toList());
+//        }
+//        return new FormData(code,step, list,f);
+//    }
+//    public static void main(String[] args) {
+//        List<FormData> list = new ArrayList<>();
+//        list.add(makeFd("","a","",1,0,2,2,2,2,2));
+//        list.add(makeFd("","b","",1,0,3,3,6,3,8,9));
+//        list.add(makeFd("","c","",1,0,5.5,3,7,3,9));
+//        list.add(makeFd("","d","",1,0,10,7,2,5,5,0));
+//        list.add(makeFd("","e","",2,13,23,39));
+//        CompositeDataAccess cda = new CompositeDataAccess();
+//        for(FormData fd:list){
+//            cda.addFormData(fd.getCode(),fd);
+//        }
+//        while (cda.hasNext()){
+//            LinkedHashMap<String, ElementData> data =cda.next();
+//            if(cda.cursor==1){
+//                LinkedHashMap<String, ElementData> t1= new LinkedHashMap<>();
+//                t1.put("a",new ElementData(1,1,666));
+//                cda.insert(t1);
+//            }
+//            data.get("d").setValue(100);
+//        }
+//        LinkedHashMap<String, ElementData> t= new LinkedHashMap<>();
+//        t.put("c",new ElementData(1,1,777));
+//        cda.append(t);
+//        System.out.println();
+//
+//
+//    }
+
+
+}

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

@@ -1,5 +1,6 @@
 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;

+ 35 - 12
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/FormulaMileage.java

@@ -5,6 +5,7 @@ import com.mixsmart.utils.ListUtils;
 import com.mixsmart.utils.StringUtils;
 import lombok.Data;
 import org.springblade.business.feign.MileageClient;
+import org.springblade.common.utils.BaseUtils;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.manager.dto.ElementData;
 import org.springblade.manager.dto.FormData;
@@ -26,13 +27,35 @@ import java.util.stream.Collectors;
 public class FormulaMileage implements FormulaStrategy {
     private FormData cur;
     private final MileageClient mileageClient;
-    public static final Pattern MILE_ARGS= Pattern.compile("(?<=MILE<)[^>]+(?=>)");
+    public static final Pattern MILE_ARGS= Pattern.compile("(?<=MILE\\()[^>]+(?=\\))");
+    public static final String ZH="桩号";
+    public static final String PW="偏位";
+    public static final String SJX="设计值X";
+    public static final String SJY="设计值Y";
+    public static final String SCX="实测值X";
+    public static final String SCY="实测值Y";
+    public static final String DX="dx";
+    public static final String DY="dy";
+    public static final String DS="ds";
+    public static final List<String> keys = new ArrayList<>(Arrays.asList(ZH,PW,SJX,SJY,SCX,SCY,DX,DY,DS));
+    public static final int   MIN_ELE_SIZE=9;
+
+
     @Override
     public void execute(List<FormData> fds, Map<String,Object> constantMap) {
         List<ElementData> eds = cur.getValues();
         Map<String,String[]> mileages = getCoordinate(cur.getFormula().getFormula(),fds, Func.toLong(constantMap.get("contractId")));
         if(ListUtils.isNotEmpty(eds)){
             Matcher m= MILE_ARGS.matcher(cur.getCode());
+            String f= cur.getFormula().getFormula();
+            f=f.replace("MILE-","");
+            Map<String,String> keyMap = BaseUtils.string2Map(f);
+            if(keyMap.size()<MIN_ELE_SIZE){
+                return;
+            }
+            Map<String,FormData> mapFd=new HashMap<>(100);
+            keys.forEach(e->mapFd.put(e,fds.stream().filter(k->e.equals(k.getCode())).findFirst().orElseGet(null)));
+
             if(m.find()){
                 String tmp =m.group();
                 tmp=tmp.replace("E[","").replace("]","");
@@ -51,7 +74,7 @@ public class FormulaMileage implements FormulaStrategy {
                 /*测点名称*/
                 List<ElementData> a = map.get(cp.get(0)).getValues();
                 /*编号*/
-                List<ElementData> b = map.get(cp.get(2)).getValues();
+                List<ElementData> b = map.get(cp.get(1)).getValues();
                 int size=Math.min(a.size(),b.size());
                 for(int i=0;i<size;i++){
                     ElementData ea=a.get(i);
@@ -59,10 +82,10 @@ public class FormulaMileage implements FormulaStrategy {
                     String k =ea.getValue().toString();
                     String jz=eb.getValue().toString();
                     String[] coordinate = mileages.get(k+"@"+jz);
-                    Map xyz = FormulaUtils.triangleSquare("-5,+5");
+                    Map<String, Object> xyz = FormulaUtils.triangleSquare("-5,+5");
                     double dx = Double.parseDouble(xyz.get("X").toString());
                     double dy = Double.parseDouble(xyz.get("Y").toString());
-                    double dz = Double.parseDouble(xyz.get("Z").toString());
+                    double ds = Double.parseDouble(xyz.get("Z").toString());
                     double scx= Double.parseDouble(coordinate[0]) + dx * 0.001;
                     double scy= Double.parseDouble(coordinate[1]) + dy * 0.001;
                     double sjx= Double.parseDouble(coordinate[0]);
@@ -70,25 +93,25 @@ public class FormulaMileage implements FormulaStrategy {
                     int index=ea.getIndex();
                     int groupId=ea.getGroupId();
                     /*实测x*/
-                    listFd.get(2).getValues().add(new ElementData(index,groupId,dx));
+                    listFd.get(2).getValues().add(new ElementData(index,groupId,scx));
                     /*实测y*/
-                    listFd.get(3).getValues().add(new ElementData(index,groupId,dx));
+                    listFd.get(3).getValues().add(new ElementData(index,groupId,scy));
                     /*设计x*/
-                    listFd.get(4).getValues().add(new ElementData(index,groupId,dx));
+                    listFd.get(4).getValues().add(new ElementData(index,groupId,sjx));
                     /*设计x*/
-                    listFd.get(5).getValues().add(new ElementData(index,groupId,dx));
+                    listFd.get(5).getValues().add(new ElementData(index,groupId,sjy));
                     /*设计dx*/
                     listFd.get(6).getValues().add(new ElementData(index,groupId,dx));
                     /*设计dy*/
-                    listFd.get(7).getValues().add(new ElementData(index,groupId,dx));
+                    listFd.get(7).getValues().add(new ElementData(index,groupId,dy));
                     /*设计ds*/
-                    listFd.get(8).getValues().add(new ElementData(index,groupId,dx));
+                    listFd.get(8).getValues().add(new ElementData(index,groupId,ds));
                 }
             }
         }
         this.cur.getFormula().setFormula("");
     }
-    public static final Pattern MILE_P = Pattern.compile("(?<=MILE<)([^,]+),([^,]+)(?=,)");
+    public static final Pattern MILE_P = Pattern.compile("(?<=MILE\\()([^,]+),([^,]+)(?=,)");
 
     public  Map<String,String[]> getCoordinate(String tmp,List<FormData> fds,Long contractId){
         Matcher mile=MILE_P.matcher(tmp);
@@ -129,6 +152,6 @@ public class FormulaMileage implements FormulaStrategy {
     public boolean accept(FormData fd) {
         this.cur=fd;
         String f= fd.getFormula().getFormula();
-        return StringUtils.isNotEmpty(f)&&f.startsWith("MILE<");
+        return StringUtils.isNotEmpty(f)&&f.startsWith("MILE-");
     }
 }

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

@@ -27,6 +27,6 @@ public class FormulaTurnPoint implements FormulaStrategy {
     public boolean accept(FormData fd) {
         this.cur=fd;
         String f= fd.getFormula().getFormula();
-        return StringUtils.isNotEmpty(f)&&f.startsWith("TURN<");
+        return StringUtils.isNotEmpty(f)&&f.startsWith("TURN_POINT(");
     }
 }