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