feat:修改文件解析只支持column

This commit is contained in:
lilong 2024-03-30 08:15:32 +08:00
parent d52e2cf0fc
commit 2a3e906a1a

View File

@ -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)