yangyj 2 gadi atpakaļ
vecāks
revīzija
39c091187c

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

@@ -2,6 +2,7 @@ package org.springblade.manager.dto;
 
 
 import org.springblade.core.tool.utils.Func;
+import org.springblade.core.tool.utils.StringPool;
 
 import java.util.Objects;
 
@@ -88,6 +89,8 @@ public class ElementData {
     public ElementData clone(Object value){
         return new ElementData(index,groupId,value);
     }
-
+    public String getCoords(){
+        return y+ StringPool.UNDERSCORE+x;
+    }
 
 }

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

@@ -59,6 +59,8 @@ public class FormData {
      */
     private List<String> tableIds;
 
+    private String position;
+
     public static final String CODE_REG="[^:]+:[^:]+";
 
     public FormData() {

+ 49 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/Coords.java

@@ -0,0 +1,49 @@
+package org.springblade.manager.formula;
+
+import lombok.Data;
+import org.springblade.core.tool.utils.Func;
+
+import java.util.List;
+
+/**
+ * @author yangyj
+ * @Date 2022/9/9 11:08
+ * @description TODO
+ */
+@Data
+public class Coords {
+    /**开始单元格xy
+     * */
+    private Integer x;
+    private Integer y;
+    /**结束单元格xy
+     * */
+    private Integer x2;
+    private Integer y2;
+    /**无效坐标x*/
+    private List<Integer> ex;
+    /**无效坐标y*/
+    private List<Integer> ey;
+    /**读写方向*/
+    private Boolean horizontal=true;
+    public Coords(String x, String y, String x2, String y2) {
+        this.x = Integer.parseInt(x);
+        this.y = Integer.parseInt(y);
+        this.x2 = Integer.parseInt(x2);
+        this.y2 = Integer.parseInt(y2);
+    }
+
+    public Coords(String x, String y) {
+        this.x = Integer.parseInt(x);
+        this.y = Integer.parseInt(y);
+        this.x2 = this.x;
+        this.y2 = this.y;
+    }
+    public Coords(){
+
+    }
+    public Boolean hasMerge(){
+        return Func.isNotEmpty(ex)||Func.isNotEmpty(ey);
+    }
+
+}

+ 10 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/ICoordsBuilder.java

@@ -0,0 +1,10 @@
+package org.springblade.manager.formula;
+
+import java.util.List;
+
+/**
+ * @author yangyj
+ */
+public interface ICoordsBuilder {
+     List<Coords> build(String position);
+}

+ 56 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/CoordsBuilder.java

@@ -0,0 +1,56 @@
+package org.springblade.manager.formula.impl;
+
+import org.springblade.core.tool.utils.Func;
+import org.springblade.core.tool.utils.StringPool;
+import org.springblade.manager.formula.Coords;
+import org.springblade.manager.formula.ICoordsBuilder;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * @author yangyj
+ * @Date 2022/9/9 11:46
+ * @description TODO
+ */
+public class CoordsBuilder implements ICoordsBuilder {
+    @Override
+    public List<Coords> build(String position) {
+        if(Func.isNotEmpty(position)){
+            String[] arr = position.split(StringPool.COLON);
+            if(arr.length>=2){
+                List<Coords> r = new ArrayList<>();
+                String[] coordsArr = arr[1].split("\\|");
+                for(String coords:coordsArr){
+                    String[] infoArr = coords.split(StringPool.AT);
+                    String[] xyx2y2=infoArr[0].split("\\D");
+                    Coords c;
+                    if(xyx2y2.length==2){
+                         c = new Coords(xyx2y2[0],xyx2y2[1]);
+                    }else if(xyx2y2.length==4){
+                         c = new Coords(xyx2y2[0],xyx2y2[1],xyx2y2[2],xyx2y2[3]);
+                    }else {
+                        continue;
+                    }
+                    if(infoArr.length>1){
+                        String[] exclude = infoArr[1].split("[XY]");
+                        c.setEx(Arrays.stream(exclude[1].split(StringPool.COMMA)).map(Integer::parseInt).collect(Collectors.toList()));
+                        c.setEy(Arrays.stream(exclude[2].split(StringPool.COMMA)).map(Integer::parseInt).collect(Collectors.toList()));
+                    }
+                    r.add(c);
+                }
+                return r;
+            }
+        }
+        return null;
+    }
+
+    public static ICoordsBuilder getInstance(){
+        return new CoordsBuilder();
+    }
+
+
+
+}

+ 54 - 6
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/TableElementConverter.java

@@ -11,6 +11,7 @@ import org.springblade.manager.bean.TableInfo;
 import org.springblade.manager.dto.ElementData;
 import org.springblade.manager.dto.FormData;
 import org.springblade.manager.entity.Formula;
+import org.springblade.manager.formula.Coords;
 import org.springblade.manager.formula.ITableElementConverter;
 import org.springblade.manager.formula.KeyMapper;
 import java.util.*;
@@ -33,8 +34,6 @@ public class TableElementConverter implements ITableElementConverter {
     List<Formula> formulas;
     List<FormData> fds;
 
-    private TableElementConverter() {
-    }
 
     public TableElementConverter(List<TableInfo> tableInfoList, List<KeyMapper> keyMappers, List<Formula> formulas) {
         this.tableInfoList = tableInfoList;
@@ -45,6 +44,10 @@ public class TableElementConverter implements ITableElementConverter {
         }
     }
 
+    public TableElementConverter() {
+
+    }
+
 
     public Boolean isPresent(){
         return BaseUtils.isNotNull(this.keyMappers,this.formulas,this.nodeId,this.contractId);
@@ -106,9 +109,11 @@ public class TableElementConverter implements ITableElementConverter {
             }
             groups.forEach((groupId, group) -> {
                    group.forEach((index,page)->{
-                       TableInfo info = tables.get(index);
-                       /*每一页对应一个info*/
-                       info.getDataMap().put(fd.getKey(),recovery(page,""));
+                       if(Func.isNotEmpty(page)) {
+                           TableInfo info = tables.get(index);
+                           /*每一页对应一个info*/
+                           info.getDataMap().put(fd.getKey(), recovery(page, fd.getPosition()));
+                       }
                    });
             });
 
@@ -118,8 +123,51 @@ public class TableElementConverter implements ITableElementConverter {
     }
 
     public String recovery(List<ElementData> dataList,String position){
-        return "";
+        List<Coords> coordsList = CoordsBuilder.getInstance().build(position);
+        StringBuilder sb = new StringBuilder();
+        List<Integer[]> total = new ArrayList<>();
+        int n=0;
+        for(Coords coords:coordsList){
+            int outer,outer2,inner,inner2;
+            if(coords.getHorizontal()){
+                outer =coords.getY();
+                outer2=coords.getY2();
+                inner=coords.getX();
+                inner2=coords.getX2();
+            }else{
+                outer =coords.getX();
+                outer2=coords.getX2();
+                inner= coords.getY();
+                inner2=coords.getY2();
+            }
+            List<Integer[]> indexs = new ArrayList<>();
+            for(int i=outer;i<outer2;i++){
+                for(int j=inner;j<inner2;j++){
+                    if(coords.getHorizontal()){
+                        /*[x,y]*/
+                        indexs.add(new Integer[]{j,i});
+                    }else{
+                        indexs.add(new Integer[]{i,j});
+                    }
+                }
+            }
+            if(coords.hasMerge()){
+                indexs=indexs.stream().filter(e->!coords.getEx().contains(e[0])&&!coords.getEy().contains(e[1])).collect(Collectors.toList());
+            }
+            total.addAll(indexs);
+        }
+         for(int i=0;i<dataList.size();i++){
+             if(i>=total.size()) { break;}
+             ElementData d = dataList.get(i);
+             Integer[] a=total.get(i);
+             /*a:[x,y]*/
+             sb.append(a[1]).append(StringPool.UNDERSCORE).append(a[0]).append(StringPool.UNDERSCORE).append(d.stringValue());
+         }
+        return sb.toString();
     }
 
 
+
+
+
 }