|
@@ -8,7 +8,9 @@ import org.springblade.manager.dto.ElementData;
|
|
import org.springblade.manager.dto.FormData;
|
|
import org.springblade.manager.dto.FormData;
|
|
|
|
|
|
import java.util.*;
|
|
import java.util.*;
|
|
|
|
+import java.util.concurrent.atomic.AtomicInteger;
|
|
import java.util.stream.Collectors;
|
|
import java.util.stream.Collectors;
|
|
|
|
+import java.util.stream.IntStream;
|
|
|
|
|
|
/**
|
|
/**
|
|
* @author yangyj
|
|
* @author yangyj
|
|
@@ -35,8 +37,8 @@ public class SubTable {
|
|
public SubTable(List<FormData> source) {
|
|
public SubTable(List<FormData> source) {
|
|
if (source != null && source.size() > 0) {
|
|
if (source != null && source.size() > 0) {
|
|
source.stream().filter(e -> KEYS.contains(e.getEName().trim())).forEach(fd -> {
|
|
source.stream().filter(e -> KEYS.contains(e.getEName().trim())).forEach(fd -> {
|
|
- /*这是把所有数据重置为空,如果要实现手填就必须分析出项目*/
|
|
|
|
- fd.getValues().forEach(e -> e.setValue(null));
|
|
|
|
|
|
+ /*这是把所有数据重置为空,如果要实现手填就必须分析出项目,按项目名称覆盖LinkedHashMap<String, List<Object>> group*/
|
|
|
|
+ /*fd.getValues().forEach(e -> e.setValue(null));*/
|
|
switch (KEYS.indexOf(fd.getEName().trim())) {
|
|
switch (KEYS.indexOf(fd.getEName().trim())) {
|
|
case 0:
|
|
case 0:
|
|
itemName = fd;
|
|
itemName = fd;
|
|
@@ -52,6 +54,13 @@ public class SubTable {
|
|
}
|
|
}
|
|
});
|
|
});
|
|
}
|
|
}
|
|
|
|
+ /*初始化group,保留原先内容,只做同KEY覆盖*/
|
|
|
|
+ initGroup();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /*获取每页的行数*/
|
|
|
|
+ public Integer getColumnSize(){
|
|
|
|
+ return this.itemName.getCoordsList().size();
|
|
}
|
|
}
|
|
|
|
|
|
public boolean checked() {
|
|
public boolean checked() {
|
|
@@ -65,20 +74,35 @@ public class SubTable {
|
|
}
|
|
}
|
|
|
|
|
|
public void flush() {
|
|
public void flush() {
|
|
|
|
+ /*行号,起始为0,当前行号整除列大小余0就是每页首行*/
|
|
|
|
+ AtomicInteger index=new AtomicInteger(0);
|
|
if (group.size() > 0) {
|
|
if (group.size() > 0) {
|
|
List<String> itemNameList = new ArrayList<>();
|
|
List<String> itemNameList = new ArrayList<>();
|
|
List<Object> designList = new ArrayList<>();
|
|
List<Object> designList = new ArrayList<>();
|
|
List<Object> dataList = new ArrayList<>();
|
|
List<Object> dataList = new ArrayList<>();
|
|
|
|
+ int columnSize = getColumnSize();
|
|
for (Map.Entry<String, List<Object>> entry : group.entrySet()) {
|
|
for (Map.Entry<String, List<Object>> entry : group.entrySet()) {
|
|
String key = entry.getKey();
|
|
String key = entry.getKey();
|
|
String[] nameAndDesign = key.split("@");
|
|
String[] nameAndDesign = key.split("@");
|
|
List<Object> values = entry.getValue();
|
|
List<Object> values = entry.getValue();
|
|
/*写人的行数*/
|
|
/*写人的行数*/
|
|
int count = (int) Math.ceil((double) values.size() / (double) ROW_SIZE);
|
|
int count = (int) Math.ceil((double) values.size() / (double) ROW_SIZE);
|
|
-// int count2=count/STEP[0];
|
|
|
|
- itemNameList.add(nameAndDesign[0]);
|
|
|
|
if(count>1) {
|
|
if(count>1) {
|
|
- itemNameList.addAll(Collections.nCopies(count-1, StringPool.EMPTY));
|
|
|
|
|
|
+ /*每一页的首行都要显示*/
|
|
|
|
+ int head= index.get();
|
|
|
|
+ List<String> tmp= IntStream.range(head,head+count).boxed().map(i->{
|
|
|
|
+ String res=StringPool.EMPTY;
|
|
|
|
+ if(i==head||(i%columnSize==0)){
|
|
|
|
+ res= nameAndDesign[0];
|
|
|
|
+ }
|
|
|
|
+ index.getAndIncrement();
|
|
|
|
+ return res;
|
|
|
|
+ }).collect(Collectors.toList());
|
|
|
|
+ itemNameList.addAll(tmp);
|
|
|
|
+ }else{
|
|
|
|
+ /*行号+1*/
|
|
|
|
+ index.getAndIncrement();
|
|
|
|
+ itemNameList.add(nameAndDesign[0]);
|
|
}
|
|
}
|
|
if (design != null) {
|
|
if (design != null) {
|
|
if (nameAndDesign.length >= 2) {
|
|
if (nameAndDesign.length >= 2) {
|
|
@@ -108,4 +132,27 @@ public class SubTable {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ /*用原有数据初始化*/
|
|
|
|
+ private void initGroup(){
|
|
|
|
+ if(checked()) {
|
|
|
|
+ List<String> itemName = this.itemName.getValues().stream().map(ElementData::stringValue).collect(Collectors.toList());
|
|
|
|
+ List<String> designs = this.design.getValues().stream().map(ElementData::stringValue).collect(Collectors.toList());
|
|
|
|
+ List<Object> data = this.data.getRawValue();
|
|
|
|
+ String name = itemName.get(0);
|
|
|
|
+ if(StringUtils.isNotEmpty(name)) {
|
|
|
|
+ int head = 0;
|
|
|
|
+ for (int i = 1; i < itemName.size(); i++) {
|
|
|
|
+ String x = itemName.get(i);
|
|
|
|
+ /*如果非空且与当前的不一样则视为新项目*/
|
|
|
|
+ if (StringUtils.isNotEmpty(x) && !x.equals(name) || (i == itemName.size() - 1)) {
|
|
|
|
+ String des = designs.subList(head, i).stream().filter(StringUtils::isNotEmpty).distinct().collect(Collectors.joining("/"));
|
|
|
|
+ group.put(name + StringPool.AT + des, data.subList(head*15, i*ROW_SIZE));
|
|
|
|
+ head = i;
|
|
|
|
+ name = x;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
}
|
|
}
|