feat:修改文件解析只支持column
This commit is contained in:
parent
d52e2cf0fc
commit
2a3e906a1a
@ -25,7 +25,6 @@ import lombok.Data;
|
|||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.commons.lang3.BooleanUtils;
|
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.apache.commons.lang3.tuple.Pair;
|
import org.apache.commons.lang3.tuple.Pair;
|
||||||
|
|
||||||
@ -126,13 +125,10 @@ public class DataSheetImporter extends DataSheetClient.ImporterBuilder {
|
|||||||
|
|
||||||
// 聚合来自入参和文件批注的meta信息;如果都存在,使用入参的meta覆盖文件批注的meta
|
// 聚合来自入参和文件批注的meta信息;如果都存在,使用入参的meta覆盖文件批注的meta
|
||||||
this.meta = mergeMeta(this.meta, parseMetaFromData(dataListener));
|
this.meta = mergeMeta(this.meta, parseMetaFromData(dataListener));
|
||||||
filterHeadMap(dataListener);
|
|
||||||
filterLines(dataListener);
|
filterLines(dataListener);
|
||||||
|
|
||||||
validateHeaders(dataListener);
|
|
||||||
validateMeta(dataListener);
|
validateMeta(dataListener);
|
||||||
|
|
||||||
List<String> headers = parseHeaders(dataListener);
|
|
||||||
List<JSONObject> lines = parseLines(dataListener);
|
List<JSONObject> lines = parseLines(dataListener);
|
||||||
if (!includeLineErrors) {
|
if (!includeLineErrors) {
|
||||||
// 没有设置includeLineErrors时,抛第一个发现的异常
|
// 没有设置includeLineErrors时,抛第一个发现的异常
|
||||||
@ -154,11 +150,10 @@ public class DataSheetImporter extends DataSheetClient.ImporterBuilder {
|
|||||||
.scene(scene)
|
.scene(scene)
|
||||||
.templateCode(Optional.ofNullable(meta).map(DataSheetClient.Meta::getTemplateCode).orElse(null))
|
.templateCode(Optional.ofNullable(meta).map(DataSheetClient.Meta::getTemplateCode).orElse(null))
|
||||||
.version(Optional.ofNullable(meta).map(DataSheetClient.Meta::getVersion).orElse(null))
|
.version(Optional.ofNullable(meta).map(DataSheetClient.Meta::getVersion).orElse(null))
|
||||||
.headers(headers)
|
|
||||||
.lines(lines)
|
.lines(lines)
|
||||||
.headerRowCount(1)
|
.headerRowCount(1)
|
||||||
.rowCount(lines.size())
|
.rowCount(lines.size())
|
||||||
.columnCount(headers.size())
|
.columnCount(lines.size())
|
||||||
.meta(meta)
|
.meta(meta)
|
||||||
.elapsedMillis(stopwatch.elapsed(TimeUnit.MILLISECONDS))
|
.elapsedMillis(stopwatch.elapsed(TimeUnit.MILLISECONDS))
|
||||||
.build();
|
.build();
|
||||||
@ -341,9 +336,9 @@ public class DataSheetImporter extends DataSheetClient.ImporterBuilder {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private List<String> parseHeaders(NoModelDataListener dataListener) {
|
private List<String> parseHeaders(NoModelDataListener dataListener) {
|
||||||
return dataListener.getHeadMap().keySet().stream()
|
return dataListener.getHeadMap().entrySet().stream()
|
||||||
.sorted()
|
.sorted()
|
||||||
.map(key -> Strings.nullToEmpty(dataListener.getHeadMap().get(key)))
|
.map(entry -> Strings.nullToEmpty(dataListener.getHeadMap().get(entry.getKey())))
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -360,8 +355,8 @@ public class DataSheetImporter extends DataSheetClient.ImporterBuilder {
|
|||||||
|
|
||||||
// 根据meta来校验cell的类型
|
// 根据meta来校验cell的类型
|
||||||
Map<Integer, String> headerMap = dataListener.getHeadMap();
|
Map<Integer, String> headerMap = dataListener.getHeadMap();
|
||||||
boolean cellTypeColumn = meta.getResolveRowType() == DataSheetClient.ResolveRowType.COLUMN;
|
Map<Integer, DataSheetClient.CellMeta> cellMetaMap = Maps.uniqueIndex(meta.getCellMetas(),
|
||||||
Map<String, DataSheetClient.CellMeta> cellMetaMap = resolveCellMetaMap(cellTypeColumn);
|
DataSheetClient.CellMeta::getColumn);;
|
||||||
|
|
||||||
List<Map<Integer, String>> lines = dataListener.getLines();
|
List<Map<Integer, String>> lines = dataListener.getLines();
|
||||||
return IntStream.range(0, lines.size())
|
return IntStream.range(0, lines.size())
|
||||||
@ -371,8 +366,7 @@ public class DataSheetImporter extends DataSheetClient.ImporterBuilder {
|
|||||||
Map<Boolean, List<ColumnConvertResp>> convertRespMap = headerMap.entrySet().stream()
|
Map<Boolean, List<ColumnConvertResp>> convertRespMap = headerMap.entrySet().stream()
|
||||||
.map(entry -> {
|
.map(entry -> {
|
||||||
Integer columnIndex = entry.getKey();
|
Integer columnIndex = entry.getKey();
|
||||||
String header = entry.getValue();
|
DataSheetClient.CellMeta cellMeta = cellMetaMap.get(columnIndex);
|
||||||
DataSheetClient.CellMeta cellMeta = cellTypeColumn ? cellMetaMap.get(columnIndex.toString()) : cellMetaMap.get(header);
|
|
||||||
return convertType(cellMeta, line.get(columnIndex), lineIndex, columnIndex);
|
return convertType(cellMeta, line.get(columnIndex), lineIndex, columnIndex);
|
||||||
})
|
})
|
||||||
.collect(Collectors.groupingBy(ColumnConvertResp::getSuccess));
|
.collect(Collectors.groupingBy(ColumnConvertResp::getSuccess));
|
||||||
@ -393,18 +387,6 @@ public class DataSheetImporter extends DataSheetClient.ImporterBuilder {
|
|||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private Map<String, DataSheetClient.CellMeta> resolveCellMetaMap(boolean cellTypeColumn) {
|
|
||||||
if (BooleanUtils.isTrue(cellTypeColumn)) {
|
|
||||||
// 根据列顺序解析
|
|
||||||
return Maps.uniqueIndex(meta.getCellMetas(),
|
|
||||||
cellMeta -> cellMeta.getColumn().toString());
|
|
||||||
}
|
|
||||||
// 根据列名字解析
|
|
||||||
return Maps.uniqueIndex(meta.getCellMetas(),
|
|
||||||
DataSheetClient.CellMeta::getName);
|
|
||||||
}
|
|
||||||
|
|
||||||
private ColumnConvertResp convertType(DataSheetClient.CellMeta cellMeta, String rawValue, int rowIndex, int columnIndex) {
|
private ColumnConvertResp convertType(DataSheetClient.CellMeta cellMeta, String rawValue, int rowIndex, int columnIndex) {
|
||||||
try {
|
try {
|
||||||
return ColumnConvertResp.builder()
|
return ColumnConvertResp.builder()
|
||||||
@ -440,6 +422,7 @@ public class DataSheetImporter extends DataSheetClient.ImporterBuilder {
|
|||||||
Set<String> headerNames = ImmutableSet.copyOf(headMap.values());
|
Set<String> headerNames = ImmutableSet.copyOf(headMap.values());
|
||||||
if (headerNames.size() != headMap.size()) {
|
if (headerNames.size() != headMap.size()) {
|
||||||
List<String> columnNames = headMap.values().stream()
|
List<String> columnNames = headMap.values().stream()
|
||||||
|
.filter(Objects::nonNull)
|
||||||
.collect(Collectors.groupingBy(Function.identity()))
|
.collect(Collectors.groupingBy(Function.identity()))
|
||||||
.entrySet().stream()
|
.entrySet().stream()
|
||||||
.filter(grouped -> grouped.getValue().size() > 1)
|
.filter(grouped -> grouped.getValue().size() > 1)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user