From a62bcb866975483edecccf443584e3f9f1fcc45a Mon Sep 17 00:00:00 2001 From: wisonic-s <51065359+wisonic-s@users.noreply.github.com> Date: Fri, 20 Jun 2025 20:16:16 +0800 Subject: [PATCH] =?UTF-8?q?fix(=E5=9B=BE=E8=A1=A8):=20=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E6=98=8E=E7=BB=86=E8=A1=A8=E8=A1=A8=E5=A4=B4=E5=88=86=E7=BB=84?= =?UTF-8?q?=E5=90=8E=E5=88=86=E7=BB=84=E9=85=8D=E7=BD=AE=E6=97=A0=E6=95=88?= =?UTF-8?q?=E6=97=B6=E5=AF=BC=E5=87=BA=E8=A1=A8=E6=A0=BC=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../chart/server/ChartDataServer.java | 49 ++++++++++++++++--- 1 file changed, 43 insertions(+), 6 deletions(-) diff --git a/core/core-backend/src/main/java/io/dataease/chart/server/ChartDataServer.java b/core/core-backend/src/main/java/io/dataease/chart/server/ChartDataServer.java index 6e34d41bfd..45bfa6a31a 100644 --- a/core/core-backend/src/main/java/io/dataease/chart/server/ChartDataServer.java +++ b/core/core-backend/src/main/java/io/dataease/chart/server/ChartDataServer.java @@ -360,12 +360,16 @@ public class ChartDataServer implements ChartDataApi { Map customAttr = viewInfo.getCustomAttr(); Map tableHeaderMap = (Map) customAttr.get("tableHeader"); if (tableHeaderMap.get("headerGroup") != null && Boolean.parseBoolean(tableHeaderMap.get("headerGroup").toString())) { - tableHeader = JsonUtil.parseObject((String) JsonUtil.toJSONString(customAttr.get("tableHeader")), TableHeader.class); - for (TableHeader.ColumnInfo column : tableHeader.getHeaderGroupConfig().getColumns()) { - totalDepth = Math.max(totalDepth, getDepth(column, 1)); - } - for (TableHeader.ColumnInfo column : tableHeader.getHeaderGroupConfig().getColumns()) { - setWidth(column, 1); + var tmpHeader = JsonUtil.parseObject((String) JsonUtil.toJSONString(customAttr.get("tableHeader")), TableHeader.class); + // 校验字段数量和顺序 + if (validateHeaderGroup(tmpHeader, viewInfo.getXAxis())) { + tableHeader = tmpHeader; + for (TableHeader.ColumnInfo column : tableHeader.getHeaderGroupConfig().getColumns()) { + totalDepth = Math.max(totalDepth, getDepth(column, 1)); + } + for (TableHeader.ColumnInfo column : tableHeader.getHeaderGroupConfig().getColumns()) { + setWidth(column, 1); + } } } } @@ -517,6 +521,39 @@ public class ChartDataServer implements ChartDataApi { } } + private static boolean validateHeaderGroup(TableHeader header, List fields) { + if (header == null) { + return false; + } + var columns = header.getHeaderGroupConfig().getColumns(); + if (CollectionUtils.isEmpty(columns)) { + return false; + } + var leafColumn = getHeaderLeafColumn(columns); + if (CollectionUtils.isEmpty(leafColumn) || leafColumn.size() != fields.size()) { + return false; + } + for (int i = 0; i < leafColumn.size(); i++) { + var a = leafColumn.get(i); + var b = fields.get(i).getDataeaseName(); + if (!StringUtils.equals(a, b)) { + return false; + } + } + return true; + } + + private static List getHeaderLeafColumn(List columns) { + var result = new ArrayList(); + for (TableHeader.ColumnInfo column : columns) { + if (CollectionUtils.isEmpty(column.getChildren())) { + result.add(column.getKey()); + } else { + result.addAll(getHeaderLeafColumn(column.getChildren())); + } + } + return result; + } private static Integer getDepth(TableHeader.ColumnInfo column, Integer parentDepth) { if (org.springframework.util.CollectionUtils.isEmpty(column.getChildren())) {