mirror of
https://github.com/dataease/dataease.git
synced 2026-06-13 09:04:38 +08:00
fix: 【嵌入式】iframe嵌入的汇总表做了下钻后导出 excel 缺失表头
This commit is contained in:
@@ -300,21 +300,9 @@ public class ChartDataServer implements ChartDataApi {
|
||||
|
||||
detailsSheet = wb.createSheet("数据" + sheetIndex);
|
||||
Integer[] excelTypes = request.getExcelTypes();
|
||||
List<ChartViewFieldDTO> xAxis = new ArrayList<>();
|
||||
xAxis.addAll(request.getViewInfo().getXAxis());
|
||||
xAxis.addAll(request.getViewInfo().getYAxis());
|
||||
xAxis.addAll(request.getViewInfo().getXAxisExt());
|
||||
xAxis.addAll(request.getViewInfo().getYAxisExt());
|
||||
xAxis.addAll(request.getViewInfo().getExtStack());
|
||||
Object[] header = Arrays.stream(request.getHeader()).filter(item -> xAxis.stream().map(d -> StringUtils.isNotBlank(d.getChartShowName()) ? d.getChartShowName() : d.getName()).toList().contains(item)).collect(Collectors.toList()).toArray();
|
||||
Object[] header = filterExportHeader(request.getHeader(), request.getViewInfo());
|
||||
details.add(0, header);
|
||||
List<Integer> columnIndexs = new ArrayList<>();
|
||||
for (int i1 = 0; i1 < xAxis.size(); i1++) {
|
||||
ChartViewFieldDTO xAxi = xAxis.get(i1);
|
||||
if (xAxi.isHide()) {
|
||||
columnIndexs.add(i1);
|
||||
}
|
||||
}
|
||||
List<Integer> columnIndexs = getHiddenExportColumnIndexes(header, request.getViewInfo());
|
||||
ExportCenterDownLoadManage.removeColumn(details, columnIndexs);
|
||||
ViewDetailField[] detailFields = request.getDetailFields();
|
||||
ChartDataServer.setExcelData(detailsSheet, cellStyle, header, details, detailFields, excelTypes, request.getViewInfo(), wb);
|
||||
@@ -591,7 +579,7 @@ public class ChartDataServer implements ChartDataApi {
|
||||
}
|
||||
}
|
||||
|
||||
static List<ChartViewFieldDTO> resolveExportFields(ChartViewDTO viewInfo, Object[] header) {
|
||||
public static List<ChartViewFieldDTO> resolveExportFields(ChartViewDTO viewInfo, Object[] header) {
|
||||
List<ChartViewFieldDTO> fields = new ArrayList<>();
|
||||
if (viewInfo != null && viewInfo.getData() != null && viewInfo.getData().get("fields") != null) {
|
||||
Object fieldsObj = viewInfo.getData().get("fields");
|
||||
@@ -628,6 +616,29 @@ public class ChartDataServer implements ChartDataApi {
|
||||
return CollectionUtils.isNotEmpty(orderedFields) ? orderedFields : fields;
|
||||
}
|
||||
|
||||
public static Object[] filterExportHeader(Object[] header, ChartViewDTO viewInfo) {
|
||||
if (ArrayUtils.isEmpty(header)) {
|
||||
return ArrayUtils.EMPTY_OBJECT_ARRAY;
|
||||
}
|
||||
List<ChartViewFieldDTO> exportFields = resolveExportFields(viewInfo, header);
|
||||
if (CollectionUtils.isEmpty(exportFields)) {
|
||||
return header;
|
||||
}
|
||||
Set<String> exportFieldNames = exportFields.stream().map(ChartDataServer::getExportFieldName).collect(Collectors.toSet());
|
||||
return Arrays.stream(header).filter(Objects::nonNull).filter(item -> exportFieldNames.contains(item.toString())).toArray();
|
||||
}
|
||||
|
||||
public static List<Integer> getHiddenExportColumnIndexes(Object[] header, ChartViewDTO viewInfo) {
|
||||
List<ChartViewFieldDTO> exportFields = resolveExportFields(viewInfo, header);
|
||||
List<Integer> columnIndexs = new ArrayList<>();
|
||||
for (int i = 0; i < exportFields.size(); i++) {
|
||||
if (exportFields.get(i).isHide()) {
|
||||
columnIndexs.add(i);
|
||||
}
|
||||
}
|
||||
return columnIndexs;
|
||||
}
|
||||
|
||||
private static void appendFields(List<ChartViewFieldDTO> target, List<ChartViewFieldDTO> source) {
|
||||
if (CollectionUtils.isNotEmpty(source)) {
|
||||
target.addAll(source);
|
||||
|
||||
@@ -519,23 +519,9 @@ public class ExportCenterDownLoadManage {
|
||||
detailsSheet = wb.createSheet("数据" + sheetIndex);
|
||||
Integer[] excelTypes = request.getExcelTypes();
|
||||
ViewDetailField[] detailFields = request.getDetailFields();
|
||||
Object[] header = request.getHeader();
|
||||
List<ChartViewFieldDTO> xAxis = new ArrayList<>();
|
||||
xAxis.addAll(request.getViewInfo().getXAxis());
|
||||
xAxis.addAll(request.getViewInfo().getYAxis());
|
||||
xAxis.addAll(request.getViewInfo().getXAxisExt());
|
||||
xAxis.addAll(request.getViewInfo().getYAxisExt());
|
||||
xAxis.addAll(request.getViewInfo().getExtStack());
|
||||
xAxis.addAll(request.getViewInfo().getDrillFields());
|
||||
header = Arrays.stream(request.getHeader()).filter(item -> xAxis.stream().map(d -> StringUtils.isNotBlank(d.getChartShowName()) ? d.getChartShowName() : d.getName()).toList().contains(item)).toArray();
|
||||
Object[] header = ChartDataServer.filterExportHeader(request.getHeader(), request.getViewInfo());
|
||||
details.add(0, header);
|
||||
List<Integer> columnIndexs = new ArrayList<>();
|
||||
for (int i1 = 0; i1 < xAxis.size(); i1++) {
|
||||
ChartViewFieldDTO xAxi = xAxis.get(i1);
|
||||
if (xAxi.isHide()) {
|
||||
columnIndexs.add(i1);
|
||||
}
|
||||
}
|
||||
List<Integer> columnIndexs = ChartDataServer.getHiddenExportColumnIndexes(header, request.getViewInfo());
|
||||
removeColumn(details, columnIndexs);
|
||||
ChartDataServer.setExcelData(detailsSheet, cellStyle, header, details, detailFields, excelTypes, request.getViewInfo(), wb);
|
||||
sheetIndex++;
|
||||
@@ -876,4 +862,3 @@ public class ExportCenterDownLoadManage {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -135,6 +135,25 @@ public class ChartDataServerTest {
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void filterExportHeaderUsesCurrentDrillFieldsInsteadOfStaleViewAxes() {
|
||||
ChartViewFieldDTO province = field("province", "省份", DeTypeConstants.DE_STRING);
|
||||
ChartViewFieldDTO amount = field("amount", "销售额", DeTypeConstants.DE_FLOAT);
|
||||
ChartViewFieldDTO city = field("city", "城市", DeTypeConstants.DE_STRING);
|
||||
|
||||
ChartViewDTO view = new ChartViewDTO();
|
||||
view.setXAxis(new ArrayList<>(Arrays.asList(province, amount)));
|
||||
view.setDrillFields(new ArrayList<>(List.of(city)));
|
||||
|
||||
Map<String, Object> data = new HashMap<>();
|
||||
data.put("fields", new ArrayList<>(Arrays.asList(province, city, amount)));
|
||||
view.setData(data);
|
||||
|
||||
Object[] header = ChartDataServer.filterExportHeader(new Object[]{"省份", "城市", "销售额"}, view);
|
||||
|
||||
assertEquals(Arrays.asList("省份", "城市", "销售额"), Arrays.asList(header));
|
||||
}
|
||||
|
||||
private ChartDataServer chartDataServerWithExportLimits(Long viewLimit, Long datasetLimit) throws Exception {
|
||||
ChartDataManage chartDataManage = mock(ChartDataManage.class);
|
||||
when(chartDataManage.calcData(any(ChartViewDTO.class))).thenAnswer(invocation -> {
|
||||
|
||||
Reference in New Issue
Block a user