From a032452b151d005a7dd30d827846b9ebb17a7238 Mon Sep 17 00:00:00 2001 From: godot Date: Fri, 8 Jul 2022 18:01:50 +0800 Subject: [PATCH] =?UTF-8?q?perf[storage]:=20=E4=BC=98=E5=8C=96json?= =?UTF-8?q?=E8=BE=93=E5=87=BA=E6=A0=BC=E5=BC=8F=EF=BC=8C=E5=87=8F=E5=B0=91?= =?UTF-8?q?=E6=8D=A2=E8=A1=8C=EF=BC=8C=E5=A2=9E=E5=8A=A0=E8=A1=8C=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/zfoo/protocol/util/JsonUtils.java | 1 - .../storage/interpreter/ResourceReader.java | 4 +- .../storage/model/resource/ResourceData.java | 6 +-- .../storage/model/resource/ResourceEnum.java | 5 ++ .../storage/model/resource/ResourceRow.java | 51 +++++++++++++++++++ .../zfoo/storage/util/ExcelToJsonUtils.java | 23 +++++---- 6 files changed, 75 insertions(+), 15 deletions(-) create mode 100644 storage/src/main/java/com/zfoo/storage/model/resource/ResourceRow.java diff --git a/protocol/src/main/java/com/zfoo/protocol/util/JsonUtils.java b/protocol/src/main/java/com/zfoo/protocol/util/JsonUtils.java index f9a1e6cb..3b1dfac3 100644 --- a/protocol/src/main/java/com/zfoo/protocol/util/JsonUtils.java +++ b/protocol/src/main/java/com/zfoo/protocol/util/JsonUtils.java @@ -59,7 +59,6 @@ public abstract class JsonUtils { DefaultPrettyPrinter prettyPrinter = (DefaultPrettyPrinter) MAPPER.getSerializationConfig().getDefaultPrettyPrinter(); DefaultPrettyPrinter.Indenter indenter = new DefaultIndenter(StringUtils.TAB_ASCII, FileUtils.LS); prettyPrinter.indentObjectsWith(indenter); - prettyPrinter.indentArraysWith(indenter); MAPPER_TURBO.setSerializationInclusion(JsonInclude.Include.NON_NULL); MAPPER_TURBO.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false); diff --git a/storage/src/main/java/com/zfoo/storage/interpreter/ResourceReader.java b/storage/src/main/java/com/zfoo/storage/interpreter/ResourceReader.java index 0b62bad6..ec40432a 100644 --- a/storage/src/main/java/com/zfoo/storage/interpreter/ResourceReader.java +++ b/storage/src/main/java/com/zfoo/storage/interpreter/ResourceReader.java @@ -76,11 +76,11 @@ public class ResourceReader implements IResourceReader { var iterator = resource.getRows().iterator(); // 从ROW_SERVER这行开始读取数据 while (iterator.hasNext()) { - var row = iterator.next(); + var columns = iterator.next().getColumns(); var instance = ReflectionUtils.newInstance(clazz); for (var fieldInfo : fieldInfos) { - var content = row.get(fieldInfo.index); + var content = columns.get(fieldInfo.index); if (StringUtils.isNotEmpty(content) || fieldInfo.field.getType() == String.class) { inject(instance, fieldInfo.field, content); } diff --git a/storage/src/main/java/com/zfoo/storage/model/resource/ResourceData.java b/storage/src/main/java/com/zfoo/storage/model/resource/ResourceData.java index 14c8908b..020d5f8c 100644 --- a/storage/src/main/java/com/zfoo/storage/model/resource/ResourceData.java +++ b/storage/src/main/java/com/zfoo/storage/model/resource/ResourceData.java @@ -27,7 +27,7 @@ public class ResourceData { // 配置表字段名 private List headers = new ArrayList<>(); // 配置表数据 - private List> rows = new ArrayList<>(); + private List rows = new ArrayList<>(); public String getName() { return name; @@ -45,11 +45,11 @@ public class ResourceData { this.headers = headers; } - public List> getRows() { + public List getRows() { return rows; } - public void setRows(List> rows) { + public void setRows(List rows) { this.rows = rows; } diff --git a/storage/src/main/java/com/zfoo/storage/model/resource/ResourceEnum.java b/storage/src/main/java/com/zfoo/storage/model/resource/ResourceEnum.java index 713bbd66..53e34e44 100644 --- a/storage/src/main/java/com/zfoo/storage/model/resource/ResourceEnum.java +++ b/storage/src/main/java/com/zfoo/storage/model/resource/ResourceEnum.java @@ -59,6 +59,11 @@ public enum ResourceEnum { return typeMap.containsKey(type); } + public static boolean isExcel(String type) { + var resourceEnum = getResourceEnumByType(type); + return resourceEnum == ResourceEnum.EXCEL_XLS || resourceEnum == ResourceEnum.EXCEL_XLSX; + } + public static String typesToString() { return StringUtils.joinWith(StringUtils.SPACE, typeMap.values().toArray()); } diff --git a/storage/src/main/java/com/zfoo/storage/model/resource/ResourceRow.java b/storage/src/main/java/com/zfoo/storage/model/resource/ResourceRow.java new file mode 100644 index 00000000..764661dc --- /dev/null +++ b/storage/src/main/java/com/zfoo/storage/model/resource/ResourceRow.java @@ -0,0 +1,51 @@ +/* + * Copyright (C) 2020 The zfoo Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and limitations under the License. + */ +package com.zfoo.storage.model.resource; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author godotg + * @version 4.0 + */ +public class ResourceRow { + + private int row; + + private List columns = new ArrayList<>(); + + public static ResourceRow valueOf(int row, List columns) { + var resourceRow = new ResourceRow(); + resourceRow.row = row; + resourceRow.columns = columns; + return resourceRow; + } + + public int getRow() { + return row; + } + + public void setRow(int row) { + this.row = row; + } + + public List getColumns() { + return columns; + } + + public void setColumns(List columns) { + this.columns = columns; + } + +} diff --git a/storage/src/main/java/com/zfoo/storage/util/ExcelToJsonUtils.java b/storage/src/main/java/com/zfoo/storage/util/ExcelToJsonUtils.java index 2274e404..e6c24f24 100644 --- a/storage/src/main/java/com/zfoo/storage/util/ExcelToJsonUtils.java +++ b/storage/src/main/java/com/zfoo/storage/util/ExcelToJsonUtils.java @@ -20,6 +20,7 @@ import com.zfoo.protocol.util.StringUtils; import com.zfoo.storage.model.resource.ResourceData; import com.zfoo.storage.model.resource.ResourceEnum; import com.zfoo.storage.model.resource.ResourceHeader; +import com.zfoo.storage.model.resource.ResourceRow; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.usermodel.WorkbookFactory; @@ -42,14 +43,18 @@ public class ExcelToJsonUtils { public static void excelConvertJson(String inputDir, String outputDir) throws IOException { var listFiles = FileUtils.getAllReadableFiles(new File(inputDir)) .stream() - .filter(it -> ResourceEnum.containsResourceEnum(FileUtils.fileExtName(it.getName()))) + .filter(it -> ResourceEnum.isExcel(FileUtils.fileExtName(it.getName()))) .collect(Collectors.toList()); for (var file : listFiles) { - var fileName = StringUtils.format("{}.json", FileUtils.fileSimpleName(file.getName())); + var fileSimpleName = FileUtils.fileSimpleName(file.getName()); + var jsonFileName = StringUtils.format("{}.json", fileSimpleName); var inputStream = FileUtils.openInputStream(file); - var resourceData = readResourceDataFromExcel(inputStream, fileName); - FileUtils.writeStringToFile(new File(FileUtils.joinPath(outputDir, fileName)), JsonUtils.object2StringPrettyPrinter(resourceData)); + var resourceData = readResourceDataFromExcel(inputStream, file.getName()); + + var outputFilePath = FileUtils.joinPath(outputDir, jsonFileName); + FileUtils.deleteFile(new File(outputFilePath)); + FileUtils.writeStringToFile(new File(outputFilePath), JsonUtils.object2StringPrettyPrinter(resourceData)); } } @@ -70,18 +75,18 @@ public class ExcelToJsonUtils { iterator.next(); iterator.next(); // 从ROW_SERVER这行开始读取数据 - List> data = new ArrayList<>(); + List rows = new ArrayList<>(); while (iterator.hasNext()) { var row = iterator.next(); - List rowData = new ArrayList<>(); + var columns = new ArrayList(); for (var header : headers) { var cell = row.getCell(header.getIndex()); var content = CellUtils.getCellStringValue(cell); - rowData.add(content); + columns.add(content); } - data.add(rowData); + rows.add(ResourceRow.valueOf(row.getRowNum(), columns)); } - resource.setRows(data); + resource.setRows(rows); return resource; }