|
@@ -25,12 +25,19 @@ public class SubTable {
|
|
|
public static final String DATA = "检验结果";
|
|
|
public static final Integer[] STEP = new Integer[]{15, 15, 1};
|
|
|
public static final List<String> KEYS = Arrays.asList(ITEM, DESIGN, DATA);
|
|
|
+ /**每页最大行数*/
|
|
|
public static final Integer ROW_SIZE = 15;
|
|
|
+ /**表单数据*/
|
|
|
private LinkedHashMap<String, Item> group = new LinkedHashMap<>();
|
|
|
+ /**上次的记录*/
|
|
|
private LinkedHashMap<String, Item> original = new LinkedHashMap<>();
|
|
|
+ /**检验单检查项目元素,用来排序*/
|
|
|
private List<FormData> mainList;
|
|
|
+ /**项目名称*/
|
|
|
private FormData itemName;
|
|
|
+ /**设计值*/
|
|
|
private FormData design;
|
|
|
+ /**实测值*/
|
|
|
private FormData data;
|
|
|
|
|
|
|
|
@@ -40,8 +47,6 @@ public class SubTable {
|
|
|
public SubTable(List<FormData> source,List<FormData> mainList) {
|
|
|
if (source != null && source.size() > 0) {
|
|
|
source.stream().filter(e -> KEYS.contains(e.getEName().trim())).forEach(fd -> {
|
|
|
- /*这是把所有数据重置为空,如果要实现手填就必须分析出项目,按项目名称覆盖LinkedHashMap<String, List<Object>> group*/
|
|
|
- /*fd.getValues().forEach(e -> e.setValue(null));*/
|
|
|
switch (KEYS.indexOf(fd.getEName().trim())) {
|
|
|
case 0:
|
|
|
itemName = fd;
|
|
@@ -69,44 +74,44 @@ public class SubTable {
|
|
|
return itemName != null && data != null;
|
|
|
}
|
|
|
|
|
|
-/* public void put(String key, List<ElementData> data) {
|
|
|
- if (data != null && data.size() > 0) {
|
|
|
- group.put(key, data.stream().map(ElementData::getValue).filter(StringUtils::isNotEmpty).collect(Collectors.toList()));
|
|
|
- }
|
|
|
- }*/
|
|
|
|
|
|
+
|
|
|
+ /*解析项目信息*/
|
|
|
public void put(List<FormData> inspectionList,Map<String, FormData> formDataMap) {
|
|
|
+ /*根据行号排序*/
|
|
|
+ inspectionList.sort(Comparator.comparingInt(e->e.getCoordsList().get(0).getY()));
|
|
|
/*检验单、评定表不能超过一页,多余的需要删除并把检测项数据写人附表*/
|
|
|
/*检验单或者评定表存的超页数据汇总到附表对象*/
|
|
|
- for(FormData fd:inspectionList){
|
|
|
+ for(FormData fd:inspectionList) {
|
|
|
List<ElementData> overList = fd.getValues().stream().skip(fd.getCoordsList().size()).collect(Collectors.toList());
|
|
|
fd.setValues(fd.getValues().stream().limit(fd.getCoordsList().size()).collect(Collectors.toList()));
|
|
|
fd.setAddPages(0);
|
|
|
- Item item = new Item(FormulaUtils.parseItemName(fd.getEName()).trim());
|
|
|
- /*同项目*/
|
|
|
- Optional<FormData> designFdOp = formDataMap.values().stream().filter(o -> o.getTableName().equals(fd.getTableName()) && !o.equals(fd) && fd.getMaxRow().equals(o.getMaxRow()) && o.getEName().contains("设计")).findAny();
|
|
|
- designFdOp.ifPresent(formData -> item.setDesign(formData.getValues().stream().map(ElementData::stringValue).filter(StringUtils::isNotEmpty).collect(Collectors.toList())));
|
|
|
- item.setData(FormulaUtils.setScale(null, overList).stream().map(ElementData::getValue).filter(StringUtils::isNotEmpty).collect(Collectors.toList()));
|
|
|
- group.put(item.getName(),item);
|
|
|
+ if (overList.stream().anyMatch(ElementData::isNotEmpty)){
|
|
|
+ Item item = new Item(FormulaUtils.parseItemName(fd.getEName()).trim());
|
|
|
+ /*同项目*/
|
|
|
+ Optional<FormData> designFdOp = formDataMap.values().stream().filter(o -> o.getTableName().equals(fd.getTableName()) && !o.equals(fd) && fd.getMaxRow().equals(o.getMaxRow()) && o.getEName().contains("设计")).findAny();
|
|
|
+ designFdOp.ifPresent(formData -> item.setDesign(formData.getValues().stream().map(ElementData::stringValue).filter(StringUtils::isNotEmpty).collect(Collectors.toList())));
|
|
|
+ item.setData(FormulaUtils.setScale(null, overList).stream().map(ElementData::getValue).filter(StringUtils::isNotEmpty).collect(Collectors.toList()));
|
|
|
+ group.put(item.getName(), item);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
+ /**将项目信息写入附表元素*/
|
|
|
public void flush() {
|
|
|
if(!checked()){
|
|
|
return;
|
|
|
}
|
|
|
- /*初始化group,保留原先内容,只做同KEY覆盖*/
|
|
|
- initGroup();
|
|
|
- /*行号,起始为0,当前行号整除列大小余0就是每页首行*/
|
|
|
- AtomicInteger index=new AtomicInteger(0);
|
|
|
+ /*获取项目数据*/
|
|
|
List<Item> itemList =getPutOutList();
|
|
|
if (itemList.size() > 0) {
|
|
|
+ /*行号,起始为0,当前行号整除列大小余0就是每页首行*/
|
|
|
+ AtomicInteger index=new AtomicInteger(0);
|
|
|
List<String> itemNameList = new ArrayList<>();
|
|
|
List<Object> designList = new ArrayList<>();
|
|
|
List<Object> dataList = new ArrayList<>();
|
|
|
int columnSize = getColumnSize();
|
|
|
-
|
|
|
for (Item item :itemList) {
|
|
|
String name = item.getName();
|
|
|
List<Object> values = item.getData();
|
|
@@ -159,16 +164,22 @@ public class SubTable {
|
|
|
|
|
|
/*获取最终输出的项目信息*/
|
|
|
public List<Item> getPutOutList(){
|
|
|
+ /*初始化group,保留原先内容,只做同KEY覆盖*/
|
|
|
+ initOriginal();
|
|
|
List<Item> itemList = new ArrayList<>(group.values());
|
|
|
if(this.mainList!=null){
|
|
|
- List<String> itemNameIndex = this.mainList.stream().map(e->FormulaUtils.parseItemName(e.getEName()).trim()).collect(Collectors.toList());
|
|
|
- AtomicInteger other= new AtomicInteger(itemList.size());
|
|
|
- itemList.sort(Comparator.comparingInt(item-> itemNameIndex.contains(item.getName()) ?itemNameIndex.indexOf(item.getName()): other.getAndIncrement()));
|
|
|
+ List<String> itemNameIndex = this.mainList.stream().sorted(Comparator.comparingInt(FormData::getMaxRow)).map(e->FormulaUtils.parseItemName(e.getEName()).trim()).collect(Collectors.toList());
|
|
|
+ /*额外手写的项目排在所有检验项的后面*/
|
|
|
+ itemList.sort(Comparator.comparingInt(item-> itemNameIndex.contains(item.getName()) ?itemNameIndex.indexOf(item.getName()):itemNameIndex.size()));
|
|
|
+ itemList.forEach(e->{
|
|
|
+ /*去掉空白行数据*/
|
|
|
+ e.setData(e.getData().stream().filter(StringUtils::isNotEmpty).collect(Collectors.toList()));
|
|
|
+ });
|
|
|
}
|
|
|
return itemList;
|
|
|
}
|
|
|
/*用原有数据初始化*/
|
|
|
- private void initGroup(){
|
|
|
+ private void initOriginal(){
|
|
|
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();
|