浏览代码

公式相关

yangyj 3 年之前
父节点
当前提交
19dee67908

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

@@ -31,15 +31,15 @@ public class MileageClientImpl implements MileageClient {
     @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));
+         List<Mileagexy> target=this.service.list(Wrappers.<Mileagexy>lambdaQuery().eq(Mileagexy::getContractId,contractId.toString()).in(Mileagexy::getPartNo,parts).orderByAsc(Mileagexy::getValue));
          Map<String,String[]> result = new HashMap<>(mileages.size());
          if(CollectionUtil.isNotEmpty(target)){
             mileages.forEach(e->{
                 String[] r = new String[]{"",""};
-                if(Func.isBlank(e)){
+                if(Func.isNotBlank(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){
+                    if(db!=null&&db.length==3){
                         r[0]=String.valueOf(db[0]);
                         r[1]=String.valueOf(db[1]);
                         result.put(e,r);

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

@@ -46,6 +46,9 @@ public class FormulaController {
     @ApiOperationSupport(order = 4)
     @ApiOperation(value = "新增或修改", notes = "传入")
     public R save(@RequestBody Formula f) {
+        if(f.getFormula().contains("&gt;")||f.getFormula().contains("&lt;")){
+            f.setFormula(f.getFormula().replace("&lt;","<").replace("&gt;",">"));
+        }
         if(this.service.count(Wrappers.<Formula>query().lambda().eq(Formula::getElementId,f.getElementId()))>0){
             return R.status(false);
         }
@@ -60,6 +63,9 @@ public class FormulaController {
     @ApiOperationSupport(order = 5)
     @ApiOperation(value = "修改", notes = "传入脚本")
     public R update( @RequestBody FormulaBean f) {
+        if(f.getFormula().contains("&gt;")||f.getFormula().contains("&lt;")){
+            f.setFormula(f.getFormula().replace("&lt;","<").replace("&gt;",">"));
+        }
         if(f.getId()!=null){
             Formula old = this.service.getById(f.getId());
             if(old!=null){
@@ -100,6 +106,9 @@ public class FormulaController {
     public R<FormulaBean> detail(Formula f) {
         Formula detail = service.getOne(Condition.getQueryWrapper(f));
         if(detail!=null){
+//            if(detail.getFormula().contains("<")||detail.getFormula().contains(">")){
+//                detail.setFormula(detail.getFormula().replace("<","\\<").replace(">","\\>"));
+//            }
            return R.data(BeanUtil.copy(detail,FormulaBean.class));
         }
         return R.success("无数据");
@@ -129,8 +138,8 @@ public class FormulaController {
     public R execute() {
         List<FormData> list = new ArrayList<>();
         list.add(makeFd("MILE<M1,M2,M3,M4,M5,M6,M7,M8,M9>","MILE","M1,M2,M3,M4,M5,M6,M7,M8,M9"));
-        list.add(makeFd("","M1","",""));
-        list.add(makeFd("","M2","",""));
+        list.add(makeFd("","M1","","TK0+700","TK0+750","TK0+800","TK0+850","TK0+900"));
+        list.add(makeFd("","M2","","0","0","0","0","0"));
         list.add(makeFd("","M3","",""));
         list.add(makeFd("","M4","",""));
         list.add(makeFd("","M5","",""));

+ 38 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/FormulaMileage.java

@@ -3,6 +3,8 @@ package org.springblade.manager.formula.impl;
 import com.mixsmart.utils.FormulaUtils;
 import com.mixsmart.utils.ListUtils;
 import com.mixsmart.utils.StringUtils;
+import lombok.Data;
+import org.springblade.business.feign.MileageClient;
 import org.springblade.manager.dto.ElementData;
 import org.springblade.manager.dto.FormData;
 import org.springblade.manager.formula.FormulaStrategy;
@@ -11,6 +13,7 @@ import org.springframework.stereotype.Component;
 import java.util.*;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
+import java.util.stream.Collectors;
 
 /**
  * @author yangyj
@@ -18,8 +21,10 @@ import java.util.regex.Pattern;
  * @description TODO
  */
 @Component
+@Data
 public class FormulaMileage implements FormulaStrategy {
     private FormData cur;
+    private final MileageClient mileageClient;
     public static final Pattern MILE_ARGS= Pattern.compile("(?<=MILE<)[^>]+(?=>)");
     @Override
     public void execute(List<FormData> fds, Map<String,Object> constantMap) {
@@ -82,6 +87,39 @@ public class FormulaMileage implements FormulaStrategy {
         }
         this.cur.getFormula().setFormula("");
     }
+    public static final Pattern MILE_P = Pattern.compile("(?<=MILE<)([^,]+),([^,]+)(?=,)");
+
+    public  void test(String tmp,List<FormData> fds){
+        Matcher mile=MILE_P.matcher(tmp);
+        List<String> zhs;
+        List<String> jzs;
+        if (mile.find()){
+            String zh= mile.group(1);
+            String jz= mile.group(2);
+            Optional<FormData> op=fds.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=fds.stream().filter(e->e.getCode().equals(jz)).findFirst();
+                    if(op2.isPresent()){
+                        jzs=op2.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);
+                            }
+                        }
+                          mileageClient.mileage2Coordinate(mileages,111111L);
+//                        constantMap.put("mileages",mileageClient.mileage2Coordinate(mileages,contractId));
+                    }
+                }
+            }
+
+        }
+    }
 
     @Override
     public boolean accept(FormData fd) {

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

@@ -54,6 +54,7 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
 
     @Override
     public void execute(List<FormData> list ,Long contractId,Long primaryKeyId){
+        contractId=888888L;
 
         /*变量准备*/
         /*依赖排序*/
@@ -63,7 +64,8 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
         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<>();
+            Map<String,Object> constantMap = new HashMap<>(20);
+            constantMap.put("contractId",contractId);
             /*预设变量start*/
             List<WbsTreeContract> trees = new ArrayList<>();
             List<WbsTreeContract> nodes = treeContractService.searchParentAllNode(primaryKeyId,contractId);
@@ -134,8 +136,8 @@ 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<>();
+                          List<String> zhs;
+                          List<String> jzs;
                           if (mile.find()){
                               String zh= mile.group(1);
                               String jz= mile.group(2);
@@ -145,7 +147,7 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                                   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());
+                                          jzs=op2.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++){
@@ -155,7 +157,7 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                                                   mileages.add(s1+"@"+s2);
                                               }
                                           }
-                                         constantMap.put("MILE",mileageClient.mileage2Coordinate(mileages,contractId));
+                                         constantMap.put("mileages",mileageClient.mileage2Coordinate(mileages,contractId));
                                       }
                                   }
                               }
@@ -166,9 +168,6 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                     fd.getFormula().setFormula(tmp);
                 }
 
-
-
-
                /*公式执行*/
                 for(FormData fd:total){
                     Formula formula= fd.getFormula();