瀏覽代碼

公式相关:G10

yangyj 2 年之前
父節點
當前提交
03529699f3

+ 4 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/dto/ElementData.java

@@ -108,5 +108,9 @@ public class ElementData {
     public String getCoords(){
         return y+ StringPool.UNDERSCORE+x;
     }
+    public String getRowKey(){
+        return this.groupId+StringPool.AT+this.index+StringPool.AT+this.y;
+    }
+
 
 }

+ 0 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/Mileage.java

@@ -1,7 +1,6 @@
 package org.springblade.manager.formula;
 
 import com.mixsmart.utils.StringUtils;
-import org.springblade.core.tool.utils.BeanUtil;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.core.tool.utils.StringPool;
 import org.springblade.manager.dto.ElementData;
@@ -9,7 +8,6 @@ import org.springblade.manager.dto.ElementData;
 import java.util.ArrayList;
 import java.util.LinkedHashMap;
 import java.util.List;
-import java.util.Map;
 
 /**
  * @author yangyj

+ 30 - 54
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/FormulaMileage.java

@@ -52,26 +52,37 @@ public class FormulaMileage implements FormulaStrategy {
             tec.getLog().append(cur.getEName()).append("不满足依赖");
             return;
         }
-        LinkedHashMap<String,FormData> linkedHashMap = new LinkedHashMap<>();
+        List<FormData> data=new ArrayList<>();
         for(String k:relyList){
-            linkedHashMap.put(k,tec.formDataMap.get(k));
+              FormData fdTmp =tec.formDataMap.get(k);
+              data.add(tec.formDataMap.get(k));
+              if(fdTmp==null){
+                  tec.getLog().append("G10依赖元素").append(k).append("缺失");
+              }
         }
-        CompositeDataAccess cda = new CompositeDataAccess(linkedHashMap);
+        /*元素定位信息接口很不靠谱,满足条件的行才计算*/
         List<Mileage> mileageList = new ArrayList<>();
-        while (cda.hasNext()){
-            LinkedHashMap<String,ElementData> row = cda.next();
-            if(row.size()<relyList.size()){
-                tec.getLog().append("G10元素定位信息异常");
-                /*结束运行*/
-                cur.setFinished(Boolean.TRUE);
-                return;
-            }
-            Mileage mileage = new Mileage(row);
-            for(int i=0;i<relyList.size();i++){
-                String key=relyList.get(i);
-                ElementData ed =row.get(key);
-                String val=ed.stringValue();
-                mileage.setValue(i,val);
+        FormData line0=data.get(0);
+        if(line0!=null&&Func.isNotEmpty(line0.getValues())){
+               List<ElementData> eds=line0.getValues();
+            for (ElementData ed : eds) {
+                LinkedHashMap<String, ElementData> row = new LinkedHashMap<>();
+                Mileage mileage = new Mileage(row);
+                mileage.setValue(0, ed.stringValue());
+                row.put(line0.getCode(), ed);
+                for (int j = 1; j < relyList.size(); j++) {
+                    FormData rely = data.get(j);
+                    if (rely != null && rely.getValues().size() > 0) {
+                        int finalJ = j;
+                        rely.getValues().stream().filter(eo -> StringUtils.isEquals(ed.getRowKey(), eo.getRowKey())).findAny().ifPresent(d -> {
+                            row.put(rely.getCode(), d);
+                            mileage.setValue(finalJ, d.stringValue());
+                        });
+                    }
+
+                }
+                mileageList.add(mileage);
+
             }
         }
         if(Func.isNotEmpty(mileageList)){
@@ -96,10 +107,8 @@ public class FormulaMileage implements FormulaStrategy {
                         m.calculate(relyList);
                     }
                 });
-                linkedHashMap.forEach((k,v)->{
-                    v.setUpdate(1);
-                    v.setFinished(Boolean.TRUE);
-                });
+                data.forEach(e->{e.setUpdate(1);e.setFinished(Boolean.TRUE);});
+
             }
 
         }
@@ -107,40 +116,7 @@ public class FormulaMileage implements FormulaStrategy {
     }
     public static final Pattern MILE_P = Pattern.compile("(?<=T\\(com.mixsmart.utils.CustomFunction\\).MILE\\()([^,]+),([^,]+)(?=,)");
 
-    public  Map<String,String[]> getCoordinate(String tmp,List<FormData> fds,Long contractId){
-        Matcher mile=MILE_P.matcher(tmp);
-        List<String> zhs;
-        List<String> jzs;
-        if (mile.find()){
-            String zh= mile.group(1).replaceAll("E\\['","").replaceAll("']","");
-            String jz= mile.group(2).replaceAll("E\\['","").replaceAll("']","");
-            /*查找桩号元素*/
-            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);
-                            }
-                        }
-                        return   mileageClient.mileage2Coordinate(mileages,contractId);
-                    }
-                }
-            }
 
-        }
-        return  new HashMap<>(20);
-    }
 
     public void write( LinkedHashMap<String,ElementData> row,List<Object>data,List<String> keys,List<String> scale3){
               if(ListUtils.isNotEmpty(data)){