From 90b7508734d7701fd711b7e51fc07a57e4206fdf Mon Sep 17 00:00:00 2001 From: fit2cloud-chenyw Date: Mon, 19 Aug 2024 14:04:06 +0800 Subject: [PATCH] =?UTF-8?q?perf(X-Pack):=20=E9=98=88=E5=80=BC=E5=91=8A?= =?UTF-8?q?=E8=AD=A6=E6=BC=8F=E6=8F=90=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../chart/dao/ext/entity/ChartBasePO.java | 43 +++++++++ .../manage/ChartViewThresholdManage.java | 94 +++++++++++++++++++ 2 files changed, 137 insertions(+) create mode 100644 core/core-backend/src/main/java/io/dataease/chart/dao/ext/entity/ChartBasePO.java create mode 100644 core/core-backend/src/main/java/io/dataease/chart/manage/ChartViewThresholdManage.java diff --git a/core/core-backend/src/main/java/io/dataease/chart/dao/ext/entity/ChartBasePO.java b/core/core-backend/src/main/java/io/dataease/chart/dao/ext/entity/ChartBasePO.java new file mode 100644 index 0000000000..a52783c44f --- /dev/null +++ b/core/core-backend/src/main/java/io/dataease/chart/dao/ext/entity/ChartBasePO.java @@ -0,0 +1,43 @@ +package io.dataease.chart.dao.ext.entity; + +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +@Data +public class ChartBasePO implements Serializable { + @Serial + private static final long serialVersionUID = 183064537525500481L; + + private Long chartId; + + private String chartType; + + private String chartName; + + private Long resourceId; + + private String resourceType; + + private String resourceName; + + private Long tableId; + + private String xAxis; + + + private String xAxisExt; + + + private String yAxis; + + + private String yAxisExt; + + + private String extStack; + + + private String extBubble; +} diff --git a/core/core-backend/src/main/java/io/dataease/chart/manage/ChartViewThresholdManage.java b/core/core-backend/src/main/java/io/dataease/chart/manage/ChartViewThresholdManage.java new file mode 100644 index 0000000000..b162923180 --- /dev/null +++ b/core/core-backend/src/main/java/io/dataease/chart/manage/ChartViewThresholdManage.java @@ -0,0 +1,94 @@ +package io.dataease.chart.manage; + +import io.dataease.dataset.manage.DatasetTableFieldManage; +import io.dataease.extensions.datasource.dto.DatasetTableFieldDTO; +import io.dataease.extensions.view.filter.FilterTreeItem; +import io.dataease.extensions.view.filter.FilterTreeObj; +import io.dataease.utils.JsonUtil; +import jakarta.annotation.Resource; +import org.apache.commons.lang3.ObjectUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Component("chartViewThresholdManage") +public class ChartViewThresholdManage { + + @Resource + private DatasetTableFieldManage datasetTableFieldManage; + + public String convertThresholdRules(Long tableId, String thresholdRules) { + List fieldList = datasetTableFieldManage.selectByDatasetGroupId(tableId); + FilterTreeObj filterTreeObj = JsonUtil.parseObject(thresholdRules, FilterTreeObj.class); + Map fieldMap = fieldList.stream().collect(Collectors.toMap(item -> item.getId().toString(), item -> item)); + return convertTree(filterTreeObj, fieldMap); + } + + private String convertTree(FilterTreeObj filterTreeObj, Map fieldMap) { + String logic = filterTreeObj.getLogic(); + String logicText = translateLogic(logic); + List items = filterTreeObj.getItems(); + + StringBuilder result = new StringBuilder(); + for (FilterTreeItem item : items) { + String type = item.getType(); + if (StringUtils.equals("tree", type) && ObjectUtils.isNotEmpty(item.getSubTree())) { + String childResult = convertTree(item.getSubTree(), fieldMap); + result.append(childResult); + } else { + String itemResult = convertItem(item, fieldMap); + result.append(itemResult); + } + result.append(logicText); + } + int lastIndex = -1; + if ((!result.isEmpty()) && (lastIndex = result.lastIndexOf(logicText)) > 0) { + return result.substring(0, lastIndex); + } + + return null; + } + + private String convertItem(FilterTreeItem item, Map fieldMap) { + String filterType = item.getFilterType(); + Long fieldId = item.getFieldId(); + DatasetTableFieldDTO map = fieldMap.get(fieldId.toString()); + String fieldName = map.getName(); + if (StringUtils.equals(filterType, "enum")) { + List enumValue = item.getEnumValue(); + String enumValueText = String.join(",", enumValue); + return fieldName + " 包括 " + "( " + enumValueText + " )"; + } else { + return fieldName + " " + translateTerm(item.getTerm()) + " " + item.getValue(); + } + } + + private String translateTerm(String term) { + return switch (term) { + case "eq" -> "等于"; + case "not_eq" -> "不等于"; + case "lt" -> "小于"; + case "le" -> "小于等于"; + case "gt" -> "大于"; + case "ge" -> "大于等于"; + case "in" -> "包括"; + case "not in" -> "不包括"; + case "like" -> "包含"; + case "not like" -> "不包含"; + case "null" -> "为空"; + case "not null" -> "不为空"; + case "empty" -> "空字符串"; + case "not empty" -> "非字符串"; + case "between" -> "范围是"; + default -> " 等于 "; + }; + } + + private String translateLogic(String logic) { + if (StringUtils.equals(logic, "and")) return " 且 "; + return " 或 "; + } +}