Explorar el Código

Uncommitted changes before Update at 2022/7/13 9:44 [Default Changelist]

yangyj hace 3 años
padre
commit
05acc313b2

+ 11 - 0
blade-common/src/main/java/org/springblade/common/constant/RegexConstant.java

@@ -0,0 +1,11 @@
+package org.springblade.common.constant;
+
+/**
+ * @author yangyj
+ */
+public interface RegexConstant {
+    /**
+     * 标准里程
+     */
+   String KM_REG="[A-Z]*(\\d*)\\+([\\d|\\.]*)";
+}

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

@@ -0,0 +1,38 @@
+package org.springblade.common.utils;
+
+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.lang.annotation.Annotation;
+import java.net.JarURLConnection;
+import java.net.URL;
+import java.util.Enumeration;
+import java.util.HashSet;
+import java.util.Set;
+import java.util.jar.JarEntry;
+import java.util.jar.JarFile;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * @author yangyj
+ * @Date 2022/7/8 11:08
+ * @description 基础工具类
+ */
+public class BaseUtils {
+
+    public static Pattern KM=Pattern.compile(RegexConstant.KM_REG);
+    public static double k2d(Object k){
+        Matcher mt = KM.matcher(k.toString());
+        if(mt.find()){
+            return  Double.parseDouble(mt.group(1))*1000+Double.parseDouble(mt.group(2));
+        }
+        return -1;
+    }
+
+
+
+}

+ 30 - 0
blade-service-api/blade-business-api/src/main/java/org/springblade/business/feign/MileageClient.java

@@ -0,0 +1,30 @@
+package org.springblade.business.feign;
+
+import org.springblade.business.entity.Mileagexy;
+import org.springblade.common.constant.BusinessConstant;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author yangyj
+ */
+@FeignClient(value = BusinessConstant.APPLICATION_WEATHER_NAME)
+public interface MileageClient {
+    /**
+     * 接口前缀
+     */
+    String API_PREFIX = "/api/business/mileage";
+
+    /**
+     * 根据里程获取设计坐标
+     * @param mileages
+     * @return  坐标数组
+     */
+    @PostMapping(API_PREFIX+"m2c")
+    Map<String,String[]>  mileage2Coordinate(@RequestBody List<String> mileages, @RequestParam Long contractId);
+}

+ 40 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/dto/MileageData.java

@@ -0,0 +1,40 @@
+package org.springblade.manager.dto;
+
+import lombok.Data;
+
+/**
+ * @author yangyj
+ * @Date 2022/7/8 16:14
+ * @description 保存记录表5生成的数据
+ */
+@Data
+public class MileageData {
+    /**
+     * 设计坐标X*/
+    private String x;
+    /**
+     * 设计坐标Y
+     */
+    private String y;
+    /**
+     * 实测坐标X
+     */
+    private String sx;
+    /**
+     * 实测坐标Y
+     */
+    private String sy;
+    /**
+     * 偏差x=sx-x
+     */
+    private String dx;
+    /**
+     * 偏差y=sy-y;
+     */
+    private String dy;
+    /**
+     * ds=Math.round(Math.sqrt(dx^2+dy^2))
+     */
+    private String ds;
+
+}

+ 15 - 9
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/FormulaType.java

@@ -5,25 +5,31 @@ package org.springblade.manager.vo;
  */
 
 public enum FormulaType {
+    /**
+     *
+     */
     STATISTICS(0,"统计"),
-    Arithmetic(1,"基础运算"),
+    ARITHMETIC(1,"基础运算"),
     STR(2,"字符串"),
     DATE(3,"时间相关"),
     COLLECT(4,"数组、集合"),
-    logic(5,"逻辑");
+    LOGIC(5,"逻辑"),
+    SPECIFIC(6,"特殊");
+
+
     private final String name;
-    private int index;
+    private final Integer index;
     FormulaType(int index ,String name ) {
         this.name = name;
         this.index = index;
     }
     public static String getName(int index){
-         for(FormulaType ft:FormulaType.values()){
-             if(ft.index==index){
-                 return ft.name;
-             }
-         }
-         return "";
+        for(FormulaType ft:FormulaType.values()){
+            if(ft.index==index){
+                return ft.name;
+            }
+        }
+        return "";
     }
 
 

+ 59 - 0
blade-service/blade-business/src/main/java/org/springblade/business/feignClient/MileageClientImpl.java

@@ -0,0 +1,59 @@
+package org.springblade.business.feignClient;
+
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import lombok.AllArgsConstructor;
+import org.springblade.business.entity.Mileagexy;
+import org.springblade.business.feign.MileageClient;
+import org.springblade.business.service.impl.MileagePartService;
+import org.springblade.business.service.impl.MileagexyService;
+import org.springblade.business.utils.MileageUtill;
+import org.springblade.common.utils.BaseUtils;
+import org.springblade.core.tool.utils.CollectionUtil;
+import org.springblade.core.tool.utils.Func;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * @author yangyj
+ * @Date 2022/7/7 17:17
+ * @description TODO
+ */
+@RestController
+@AllArgsConstructor
+public class MileageClientImpl implements MileageClient {
+    private final MileagexyService service;
+
+
+    @Override
+    public Map<String,String[]> mileage2Coordinate(List<String> mileages,Long contractId) {
+         List<String>  parts=  mileages.stream().map(e->e.replaceAll("K.+","")).distinct().collect(Collectors.toList());
+         List<Mileagexy> target=this.service.list(Wrappers.<Mileagexy>lambdaQuery().eq(Mileagexy::getContractId,contractId.toString()).in(Mileagexy::getPartNo,parts).orderByAsc(Mileagexy::getOrderNum));
+         Map<String,String[]> result = new HashMap<>(mileages.size());
+         if(CollectionUtil.isNotEmpty(target)){
+            mileages.forEach(e->{
+                String[] r = new String[]{"",""};
+                if(Func.isBlank(e)){
+                    String[] arr=e.split("@");
+                    double[] db= MileageUtill.azimuthZbXy(BaseUtils.k2d(arr[0]),Double.parseDouble(arr[1]),90,target);
+                    if(db!=null&&db.length==2){
+                        r[0]=String.valueOf(db[0]);
+                        r[1]=String.valueOf(db[1]);
+                        result.put(e,r);
+                    }
+                }
+            });
+        }
+         /*坐标集合*/
+        System.out.println(result);
+         return result;
+    }
+
+
+
+
+
+}

+ 6 - 6
blade-service/blade-manager/src/main/java/com/mixsmart/sort/ChinaNumSort.java

@@ -12,18 +12,18 @@ public class ChinaNumSort {
 
 	private final String[] CHINA_NUM = new String[]{"一","二","三","四","五","六","七","八","九","十"};
 	private static ChinaNumSort instance = new ChinaNumSort();
-	
+
 	private ChinaNumSort() {
-		
+
 	}
-	
+
 	public static ChinaNumSort getIntance() {
 		return instance;
 	}
-	
+
 	/**
 	 * 比较排序
-	 * @param value 值 
+	 * @param value 值
 	 * @param otherValue 另外一个值
 	 * @return 返回比较结果;
 	 * 返回值请参考{@link Comparable#compareTo(Object)}的说明
@@ -50,7 +50,7 @@ public class ChinaNumSort {
 		}
 		return result;
 	}
-	
+
 	/**
 	 * 获取位置
 	 * @param value 获取value在<code>CHINA_NUM</code>数组中的位置

+ 11 - 12
blade-service/blade-manager/src/main/java/com/mixsmart/utils/NetUtils.java

@@ -15,14 +15,13 @@ import java.util.List;
  */
 public class NetUtils {
 
-	private NetUtils() {
-		throw new UnsupportedOperationException("NetUtils类无法实例化"); 
+	/*private NetUtils() {
+		throw new UnsupportedOperationException("NetUtils类无法实例化");
 	}
-	
-	/**
+	*//**
 	 * 获取本地IP地址
 	 * @return 返回获取到的IP地址
-	 */
+	 *//*
 	public static String getLocalIPv4() {
 		String ip = null;
 		try {
@@ -32,11 +31,11 @@ public class NetUtils {
 		}
 		return ip;
 	}
-	
-	/**
+
+	*//**
 	 * 获取本地所有激活了的IP地址(不包含127.0.0.1地址)
 	 * @return 返回IP数组
-	 */
+	 *//*
 	public static String[] getLocalAllIPv4() {
 		String[] ipArray = null;
 		List<String> ips = new ArrayList<String>();
@@ -63,11 +62,11 @@ public class NetUtils {
 		}
 		return ipArray;
 	}
-	
-	/**
+
+	*//**
 	 * 获取本地所有MAC
 	 * @return 返回MAC数组
-	 */
+	 *//*
 	public static String[] getLocalAllMac() {
 		String[] macArray = null;
 		List<String> macList = new ArrayList<String>();
@@ -102,5 +101,5 @@ public class NetUtils {
 			macList.toArray(macArray);
 		}
 		return macArray;
-	}
+	}*/
 }

+ 1 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/FormulaController.java

@@ -147,7 +147,7 @@ public class FormulaController {
         list.add(makeFd("","zms","","19","5"));
         list.add(makeFd("FC.pow(E[zms],2)","pow","zms"));
 
-        this.service.execute(list);
+        this.service.execute(list,12563252L);
        return R.success("执行完成");
     }
 

+ 1 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/feign/FormulaClientImpl.java

@@ -32,7 +32,7 @@ public class FormulaClientImpl implements  FormulaClient{
         list.add(makeFd("","b","",0,3,3,6,3,8));
         list.add(makeFd("","c","",0,5.5,3,7,3,9));
         list.add(makeFd("","d","",0,10,7,2,5,5));
-        service.execute(list);
+        service.execute(list,111111L);
     }
     public FormData makeFd(String fs,String code,String rely,Object ...obs){
         Formula f= new Formula();

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

@@ -14,5 +14,5 @@ public interface IFormulaService extends BaseService<Formula> {
      *
      * @param list
      */
-    void execute(List<FormData> list );
+    void execute(List<FormData> list,Long contractId );
 }

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

@@ -5,7 +5,11 @@ import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.jfireel.expression.Expression;
 import com.mixsmart.utils.CustomFunction;
+import com.mixsmart.utils.ListUtils;
+import com.mixsmart.utils.ReflectionUtil;
+import com.mixsmart.utils.StringUtils;
 import lombok.AllArgsConstructor;
+import org.springblade.business.feign.MileageClient;
 import org.springblade.core.mp.base.BaseServiceImpl;
 import org.springblade.core.tool.utils.CollectionUtil;
 import org.springblade.core.tool.utils.Func;
@@ -35,6 +39,7 @@ import java.util.stream.Collectors;
 public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula> implements IFormulaService {
 
     private final WbsParamServiceImpl wpService;
+    private final MileageClient mileageClient;
 
 
     public final static String WP="WP";
@@ -42,10 +47,13 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
     public final static String FC="FC.";
 
     public static final String POLY_REG= "(avg|min|max|sum)\\(([^)]+)\\)";
-    public static final  Pattern POLY = Pattern.compile(POLY_REG);
+    public static final Pattern POLY = Pattern.compile(POLY_REG);
+    public static final Pattern MILE_P = Pattern.compile("(?<=MILE<)([^,]+),([^,]+)(?=,)");
+
     @Override
-    public void execute(List<FormData> list ){
-             Map<Boolean,List<FormData>> map = list.stream().collect(Collectors.partitioningBy(e->e!=null&&e.getFormula().getFormula().contains("E[")));
+    public void execute(List<FormData> list ,Long contractId){
+
+        Map<Boolean,List<FormData>> map = list.stream().collect(Collectors.partitioningBy(e->e!=null&&e.getFormula().getFormula().contains("E[")));
             List<FormData>total = new ArrayList<>();
             /*用来保存所有变量*/
             Map<String,Object> constantMap = new HashMap<>();
@@ -78,6 +86,7 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
              }
 
             if(CollectionUtil.isNotEmpty(total)){
+                /*变量环境加载*/
                 constantMap.put(WP,wpMap);
                 constantMap.put(CHAIN,trees.stream().map(WbsTree::getDeptName).collect(Collectors.toList()));
                 for(FormData fd:total){
@@ -112,9 +121,36 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                           }
                       }
 
+                      if(tmp.startsWith("MILE<")){
+                          Matcher mile=MILE_P.matcher(tmp);
+                          List<String> zhs=new ArrayList<>();
+                          List<String> jzs=new ArrayList<>();
+                          if (mile.find()){
+                              String zh= mile.group(1);
+                              String jz= mile.group(2);
+                              Optional<FormData> op=list.stream().filter(e->e.getCode().equals(zh)).findFirst();
+                              if(op.isPresent()){
+                                  zhs=op.get().getValues().stream().map(ElementData::getValue).map(StringUtils::handleNull).collect(Collectors.toList());
+                                  if(zhs.size()>0){
+                                      Optional<FormData> op2=list.stream().filter(e->e.getCode().equals(jz)).findFirst();
+                                      if(op2.isPresent()){
+                                          jzs=op.get().getValues().stream().map(ElementData::getValue).map(StringUtils::handleNull).collect(Collectors.toList());
+                                          List<String> mileages = new ArrayList<>();
+                                          int size = Math.min(zhs.size(),jzs.size());
+                                          for(int i=0;i<size;i++){
+                                              String s1 =zhs.get(i);
+                                              String s2 =jzs.get(i);
+                                              if(StringUtils.isNotEmpty(s1,s2)){
+                                                  mileages.add(s1+"@"+s2);
+                                              }
+                                          }
+                                         constantMap.put("MILE",mileageClient.mileage2Coordinate(mileages,contractId));
+                                      }
+                                  }
+                              }
 
-
-
+                          }
+                      }
 
                     fd.getFormula().setFormula(tmp);
                 }
@@ -287,6 +323,55 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
             }
         }
     }
+    public static final Pattern MILE_ARGS= Pattern.compile("(?<=MILE<)[^>]+(?=>)");
+    /**
+     * @Description
+     * @Param [fd]
+     * @return void
+     * @Author yangyj
+     * @Date 2022.07.08 16:39
+     **/
+    public void mileageCalc(FormData fd,List<FormData> fds,Map<String,Object> constantMap){
+           List<ElementData> eds = fd.getValues();
+           Map<String,String[]> mileages = (Map<String, String[]>) constantMap.get("mileages");
+           if(ListUtils.isNotEmpty(eds)){
+               Matcher m= MILE_ARGS.matcher(fd.getCode());
+               if(m.find()){
+                   String tmp =m.group();
+                   tmp=tmp.replace("E[","").replace("]","");
+                   List<String> cp = Arrays.asList(tmp.split(","));
+                   Map<String,FormData> map = new HashMap<>();
+                   fds.forEach(e->{
+                       if(cp.contains(e.getCode())){
+                           map.put(e.getCode(),fd);
+                       }
+                   });
+                   List<ElementData> a = map.get(cp.get(0)).getValues();
+                   List<ElementData> b = map.get(cp.get(2)).getValues();
+                   int size=Math.min(a.size(),b.size());
+                   for(int i=0;i<size;i++){
+                        String k =a.get(i).getValue().toString();
+                        String jz=b.get(i).getValue().toString();
+                       String[] coordinate = mileages.get(k+"@"+jz);
+                   }
+               }
+           }
+    }
+
+    public static void main(String[] args) {
+        Set<Class<?>> classList =  ReflectionUtil.getClassSetBySuper(IFcHandler.class);
+        List<IFcHandler> receiptHandlerList = new ArrayList<>();
+        if (classList.size() > 0) {
+            for (Class<?> clazz : classList) {
+                try {
+                    receiptHandlerList.add((IFcHandler)clazz.newInstance());
+                } catch ( Exception e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+        System.out.println();
+    }
 
 }