From 54563cf0d1bb5967103ead55a7d60741abccfc46 Mon Sep 17 00:00:00 2001 From: junjun Date: Tue, 20 Aug 2024 15:18:06 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E6=BA=90=E6=8F=92=E4=BB=B6=E8=AE=A1=E7=AE=97=E5=AD=97=E6=AE=B5?= =?UTF-8?q?=E6=8A=A5=E9=94=99=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../charts/impl/DefaultChartHandler.java | 8 +++- .../chart/charts/impl/YoyChartHandler.java | 2 +- .../charts/impl/map/SymbolicMapHandler.java | 6 +-- .../impl/numeric/NumericalChartHandler.java | 2 +- .../charts/impl/table/TableInfoHandler.java | 2 +- .../chart/manage/ChartDataManage.java | 32 ++++++++------ .../chart/manage/ChartViewManege.java | 6 ++- .../dataset/manage/DatasetDataManage.java | 26 +++++------ .../manage/DatasetTableFieldManage.java | 6 ++- .../engine/trans/CustomWhere2Str.java | 15 ++++--- .../engine/trans/Dimension2SQLObj.java | 5 ++- .../dataease/engine/trans/ExtWhere2Str.java | 5 ++- .../dataease/engine/trans/Field2SQLObj.java | 5 ++- .../dataease/engine/trans/Order2SQLObj.java | 9 ++-- .../dataease/engine/trans/Quota2SQLObj.java | 5 ++- .../dataease/engine/trans/WhereTree2Str.java | 15 ++++--- .../java/io/dataease/engine/utils/Utils.java | 43 ++++++++++++++++--- 17 files changed, 122 insertions(+), 70 deletions(-) diff --git a/core/core-backend/src/main/java/io/dataease/chart/charts/impl/DefaultChartHandler.java b/core/core-backend/src/main/java/io/dataease/chart/charts/impl/DefaultChartHandler.java index a965aa2726..4f124f9b70 100644 --- a/core/core-backend/src/main/java/io/dataease/chart/charts/impl/DefaultChartHandler.java +++ b/core/core-backend/src/main/java/io/dataease/chart/charts/impl/DefaultChartHandler.java @@ -11,6 +11,7 @@ import io.dataease.engine.sql.SQLProvider; import io.dataease.engine.trans.Dimension2SQLObj; import io.dataease.engine.trans.Quota2SQLObj; import io.dataease.engine.utils.Utils; +import io.dataease.extensions.datasource.api.PluginManageApi; import io.dataease.extensions.datasource.dto.DatasetTableFieldDTO; import io.dataease.extensions.datasource.dto.DatasourceRequest; import io.dataease.extensions.datasource.dto.DatasourceSchemaDTO; @@ -31,6 +32,7 @@ import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.math.BigDecimal; @@ -52,6 +54,8 @@ public class DefaultChartHandler extends AbstractChartPlugin { private String render = "antv"; @Getter private String type = "*"; + @Autowired(required = false) + public PluginManageApi pluginManage; @PostConstruct public void init() { @@ -105,8 +109,8 @@ public class DefaultChartHandler extends AbstractChartPlugin { var xAxis = formatResult.getAxisMap().get(ChartAxis.xAxis); var yAxis = formatResult.getAxisMap().get(ChartAxis.yAxis); var allFields = (List) filterResult.getContext().get("allFields"); - Dimension2SQLObj.dimension2sqlObj(sqlMeta, xAxis, FieldUtil.transFields(allFields), crossDs, dsMap, Utils.getParams(FieldUtil.transFields(allFields)), view.getCalParams()); - Quota2SQLObj.quota2sqlObj(sqlMeta, yAxis, FieldUtil.transFields(allFields), crossDs, dsMap, Utils.getParams(FieldUtil.transFields(allFields)), view.getCalParams()); + Dimension2SQLObj.dimension2sqlObj(sqlMeta, xAxis, FieldUtil.transFields(allFields), crossDs, dsMap, Utils.getParams(FieldUtil.transFields(allFields)), view.getCalParams(), pluginManage); + Quota2SQLObj.quota2sqlObj(sqlMeta, yAxis, FieldUtil.transFields(allFields), crossDs, dsMap, Utils.getParams(FieldUtil.transFields(allFields)), view.getCalParams(), pluginManage); String querySql = SQLProvider.createQuerySQL(sqlMeta, true, needOrder, view); querySql = provider.rebuildSQL(querySql, sqlMeta, crossDs, dsMap); datasourceRequest.setQuery(querySql); diff --git a/core/core-backend/src/main/java/io/dataease/chart/charts/impl/YoyChartHandler.java b/core/core-backend/src/main/java/io/dataease/chart/charts/impl/YoyChartHandler.java index bafa7e64d8..2cb8f7d0d5 100644 --- a/core/core-backend/src/main/java/io/dataease/chart/charts/impl/YoyChartHandler.java +++ b/core/core-backend/src/main/java/io/dataease/chart/charts/impl/YoyChartHandler.java @@ -81,7 +81,7 @@ public class YoyChartHandler extends DefaultChartHandler { if (yoyFiltered) { var originFilter = (List) filterResult.getContext().get("originFilter"); var allFields = (List) filterResult.getContext().get("allFields"); - ExtWhere2Str.extWhere2sqlOjb(sqlMeta, originFilter, FieldUtil.transFields(allFields), crossDs, dsMap, Utils.getParams(FieldUtil.transFields(allFields)), view.getCalParams()); + ExtWhere2Str.extWhere2sqlOjb(sqlMeta, originFilter, FieldUtil.transFields(allFields), crossDs, dsMap, Utils.getParams(FieldUtil.transFields(allFields)), view.getCalParams(), pluginManage); var originSql = SQLProvider.createQuerySQL(sqlMeta, true, needOrder, view); originSql = provider.rebuildSQL(originSql, sqlMeta, crossDs, dsMap); var request = new DatasourceRequest(); diff --git a/core/core-backend/src/main/java/io/dataease/chart/charts/impl/map/SymbolicMapHandler.java b/core/core-backend/src/main/java/io/dataease/chart/charts/impl/map/SymbolicMapHandler.java index ed6eeba61e..ecd44e7f00 100644 --- a/core/core-backend/src/main/java/io/dataease/chart/charts/impl/map/SymbolicMapHandler.java +++ b/core/core-backend/src/main/java/io/dataease/chart/charts/impl/map/SymbolicMapHandler.java @@ -71,11 +71,11 @@ public class SymbolicMapHandler extends GroupChartHandler { var allFields = (List) filterResult.getContext().get("allFields"); SQLMeta sqlMeta1 = new SQLMeta(); BeanUtils.copyBean(sqlMeta1, sqlMeta); - Dimension2SQLObj.dimension2sqlObj(sqlMeta, xAxis, FieldUtil.transFields(allFields), crossDs, dsMap, Utils.getParams(FieldUtil.transFields(allFields)), view.getCalParams()); + Dimension2SQLObj.dimension2sqlObj(sqlMeta, xAxis, FieldUtil.transFields(allFields), crossDs, dsMap, Utils.getParams(FieldUtil.transFields(allFields)), view.getCalParams(), pluginManage); List yFields = new ArrayList<>(); yFields.addAll(chartViewManege.transFieldDTO(Collections.singletonList(chartViewManege.createCountField(view.getTableId())))); yAxis.addAll(yFields); - Quota2SQLObj.quota2sqlObj(sqlMeta, yAxis, FieldUtil.transFields(allFields), crossDs, dsMap, Utils.getParams(FieldUtil.transFields(allFields)), view.getCalParams()); + Quota2SQLObj.quota2sqlObj(sqlMeta, yAxis, FieldUtil.transFields(allFields), crossDs, dsMap, Utils.getParams(FieldUtil.transFields(allFields)), view.getCalParams(), pluginManage); String querySql = SQLProvider.createQuerySQL(sqlMeta, true, needOrder, view); querySql = provider.rebuildSQL(querySql, sqlMeta, crossDs, dsMap); datasourceRequest.setQuery(querySql); @@ -94,7 +94,7 @@ public class SymbolicMapHandler extends GroupChartHandler { sql = Utils.replaceSchemaAlias(sql, dsMap); SQLMeta sqlMeta2 = new SQLMeta(); Table2SQLObj.table2sqlobj(sqlMeta2, null, "(" + sql + ")", crossDs); - Field2SQLObj.field2sqlObj(sqlMeta2, allFieldsTmp, allFieldsTmp, crossDs, dsMap, Utils.getParams(allFieldsTmp), null);// todo chartParam从视图里取 + Field2SQLObj.field2sqlObj(sqlMeta2, allFieldsTmp, allFieldsTmp, crossDs, dsMap, Utils.getParams(allFieldsTmp), null, pluginManage);// todo chartParam从视图里取 String querySQL; querySQL = SQLProvider.createQuerySQL(sqlMeta2, false, needOrder, false); querySQL = provider.rebuildSQL(querySQL, sqlMeta2, crossDs, dsMap); diff --git a/core/core-backend/src/main/java/io/dataease/chart/charts/impl/numeric/NumericalChartHandler.java b/core/core-backend/src/main/java/io/dataease/chart/charts/impl/numeric/NumericalChartHandler.java index e7083b1283..7ffe2b9345 100644 --- a/core/core-backend/src/main/java/io/dataease/chart/charts/impl/numeric/NumericalChartHandler.java +++ b/core/core-backend/src/main/java/io/dataease/chart/charts/impl/numeric/NumericalChartHandler.java @@ -37,7 +37,7 @@ public class NumericalChartHandler extends DefaultChartHandler { var xAxis = formatResult.getAxisMap().get(ChartAxis.xAxis); var yAxis = formatResult.getAxisMap().get(ChartAxis.yAxis); var allFields = (List) filterResult.getContext().get("allFields"); - Quota2SQLObj.quota2sqlObj(sqlMeta, yAxis, FieldUtil.transFields(allFields), crossDs, dsMap, Utils.getParams(FieldUtil.transFields(allFields)), view.getCalParams()); + Quota2SQLObj.quota2sqlObj(sqlMeta, yAxis, FieldUtil.transFields(allFields), crossDs, dsMap, Utils.getParams(FieldUtil.transFields(allFields)), view.getCalParams(), pluginManage); String querySql = SQLProvider.createQuerySQL(sqlMeta, true, needOrder, view); querySql = provider.rebuildSQL(querySql, sqlMeta, crossDs, dsMap); datasourceRequest.setQuery(querySql); diff --git a/core/core-backend/src/main/java/io/dataease/chart/charts/impl/table/TableInfoHandler.java b/core/core-backend/src/main/java/io/dataease/chart/charts/impl/table/TableInfoHandler.java index f19484b26c..6d59dd0b48 100644 --- a/core/core-backend/src/main/java/io/dataease/chart/charts/impl/table/TableInfoHandler.java +++ b/core/core-backend/src/main/java/io/dataease/chart/charts/impl/table/TableInfoHandler.java @@ -84,7 +84,7 @@ public class TableInfoHandler extends DefaultChartHandler { } else { pageInfo.setPageSize(chartExtRequest.getPageSize()); } - Dimension2SQLObj.dimension2sqlObj(sqlMeta, xAxis, FieldUtil.transFields(allFields), crossDs, dsMap, Utils.getParams(FieldUtil.transFields(allFields)), view.getCalParams()); + Dimension2SQLObj.dimension2sqlObj(sqlMeta, xAxis, FieldUtil.transFields(allFields), crossDs, dsMap, Utils.getParams(FieldUtil.transFields(allFields)), view.getCalParams(), pluginManage); String originSql = SQLProvider.createQuerySQL(sqlMeta, false, true, view);// 明细表强制加排序 String limit = ((pageInfo.getGoPage() != null && pageInfo.getPageSize() != null) ? " LIMIT " + pageInfo.getPageSize() + " OFFSET " + (pageInfo.getGoPage() - 1) * pageInfo.getPageSize() : ""); var querySql = originSql + limit; diff --git a/core/core-backend/src/main/java/io/dataease/chart/manage/ChartDataManage.java b/core/core-backend/src/main/java/io/dataease/chart/manage/ChartDataManage.java index 9f42257fcf..1c3158f6f8 100644 --- a/core/core-backend/src/main/java/io/dataease/chart/manage/ChartDataManage.java +++ b/core/core-backend/src/main/java/io/dataease/chart/manage/ChartDataManage.java @@ -15,6 +15,7 @@ import io.dataease.engine.trans.*; import io.dataease.engine.utils.SQLUtils; import io.dataease.engine.utils.Utils; import io.dataease.exception.DEException; +import io.dataease.extensions.datasource.api.PluginManageApi; import io.dataease.extensions.datasource.dto.DatasetTableFieldDTO; import io.dataease.extensions.datasource.dto.DatasourceRequest; import io.dataease.extensions.datasource.dto.DatasourceSchemaDTO; @@ -39,6 +40,7 @@ import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.*; @@ -66,6 +68,8 @@ public class ChartDataManage { @Resource private CorePermissionManage corePermissionManage; + @Autowired(required = false) + private PluginManageApi pluginManage; public static final String START_END_SEPARATOR = "_START_END_SPLIT"; @@ -353,9 +357,9 @@ public class ChartDataManage { SQLMeta sqlMeta = new SQLMeta(); Table2SQLObj.table2sqlobj(sqlMeta, null, "(" + sql + ")", crossDs); - CustomWhere2Str.customWhere2sqlObj(sqlMeta, fieldCustomFilter, transFields(allFields), crossDs, dsMap, Utils.getParams(transFields(allFields)), view.getCalParams()); - ExtWhere2Str.extWhere2sqlOjb(sqlMeta, extFilterList, transFields(allFields), crossDs, dsMap, Utils.getParams(transFields(allFields)), view.getCalParams()); - WhereTree2Str.transFilterTrees(sqlMeta, rowPermissionsTree, transFields(allFields), crossDs, dsMap, Utils.getParams(transFields(allFields)), view.getCalParams()); + CustomWhere2Str.customWhere2sqlObj(sqlMeta, fieldCustomFilter, transFields(allFields), crossDs, dsMap, Utils.getParams(transFields(allFields)), view.getCalParams(), pluginManage); + ExtWhere2Str.extWhere2sqlOjb(sqlMeta, extFilterList, transFields(allFields), crossDs, dsMap, Utils.getParams(transFields(allFields)), view.getCalParams(), pluginManage); + WhereTree2Str.transFilterTrees(sqlMeta, rowPermissionsTree, transFields(allFields), crossDs, dsMap, Utils.getParams(transFields(allFields)), view.getCalParams(), pluginManage); // TODO 數據源插件化之後放到插件裡面組裝SQL if (BooleanUtils.isTrue(view.getIsPlugin())) { List dsList = new ArrayList<>(); @@ -363,8 +367,8 @@ public class ChartDataManage { dsList.add(next.getValue().getType()); } boolean needOrder = Utils.isNeedOrder(dsList); - Dimension2SQLObj.dimension2sqlObj(sqlMeta, xAxis, FieldUtil.transFields(allFields), crossDs, dsMap, Utils.getParams(FieldUtil.transFields(allFields)), view.getCalParams()); - Quota2SQLObj.quota2sqlObj(sqlMeta, yAxis, FieldUtil.transFields(allFields), crossDs, dsMap, Utils.getParams(FieldUtil.transFields(allFields)), view.getCalParams()); + Dimension2SQLObj.dimension2sqlObj(sqlMeta, xAxis, FieldUtil.transFields(allFields), crossDs, dsMap, Utils.getParams(FieldUtil.transFields(allFields)), view.getCalParams(), pluginManage); + Quota2SQLObj.quota2sqlObj(sqlMeta, yAxis, FieldUtil.transFields(allFields), crossDs, dsMap, Utils.getParams(FieldUtil.transFields(allFields)), view.getCalParams(), pluginManage); String querySql = SQLProvider.createQuerySQL(sqlMeta, true, needOrder, view); querySql = provider.rebuildSQL(querySql, sqlMeta, crossDs, dsMap); filterResult.getContext().put("querySql", querySql); @@ -700,31 +704,31 @@ public class ChartDataManage { SQLMeta sqlMeta = new SQLMeta(); Table2SQLObj.table2sqlobj(sqlMeta, null, "(" + sql + ")", crossDs); - WhereTree2Str.transFilterTrees(sqlMeta, rowPermissionsTree, transFields(allFields), crossDs, dsMap, Utils.getParams(transFields(allFields)), view.getCalParams()); + WhereTree2Str.transFilterTrees(sqlMeta, rowPermissionsTree, transFields(allFields), crossDs, dsMap, Utils.getParams(transFields(allFields)), view.getCalParams(), pluginManage); if (StringUtils.equalsAnyIgnoreCase(view.getType(), "indicator", "gauge", "liquid")) { - Quota2SQLObj.quota2sqlObj(sqlMeta, yAxis, transFields(allFields), crossDs, dsMap, Utils.getParams(transFields(allFields)), view.getCalParams()); + Quota2SQLObj.quota2sqlObj(sqlMeta, yAxis, transFields(allFields), crossDs, dsMap, Utils.getParams(transFields(allFields)), view.getCalParams(), pluginManage); querySql = SQLProvider.createQuerySQL(sqlMeta, true, needOrder, view); } else if (StringUtils.containsIgnoreCase(view.getType(), "stack")) { List xFields = new ArrayList<>(); xFields.addAll(xAxis); xFields.addAll(extStack); - Dimension2SQLObj.dimension2sqlObj(sqlMeta, xFields, transFields(allFields), crossDs, dsMap, Utils.getParams(transFields(allFields)), view.getCalParams()); - Quota2SQLObj.quota2sqlObj(sqlMeta, yAxis, transFields(allFields), crossDs, dsMap, Utils.getParams(transFields(allFields)), view.getCalParams()); + Dimension2SQLObj.dimension2sqlObj(sqlMeta, xFields, transFields(allFields), crossDs, dsMap, Utils.getParams(transFields(allFields)), view.getCalParams(), pluginManage); + Quota2SQLObj.quota2sqlObj(sqlMeta, yAxis, transFields(allFields), crossDs, dsMap, Utils.getParams(transFields(allFields)), view.getCalParams(), pluginManage); querySql = SQLProvider.createQuerySQL(sqlMeta, true, needOrder, view); } else if (StringUtils.containsIgnoreCase(view.getType(), "scatter")) { List yFields = new ArrayList<>(); yFields.addAll(yAxis); yFields.addAll(extBubble); - Dimension2SQLObj.dimension2sqlObj(sqlMeta, xAxis, transFields(allFields), crossDs, dsMap, Utils.getParams(transFields(allFields)), view.getCalParams()); - Quota2SQLObj.quota2sqlObj(sqlMeta, yFields, transFields(allFields), crossDs, dsMap, Utils.getParams(transFields(allFields)), view.getCalParams()); + Dimension2SQLObj.dimension2sqlObj(sqlMeta, xAxis, transFields(allFields), crossDs, dsMap, Utils.getParams(transFields(allFields)), view.getCalParams(), pluginManage); + Quota2SQLObj.quota2sqlObj(sqlMeta, yFields, transFields(allFields), crossDs, dsMap, Utils.getParams(transFields(allFields)), view.getCalParams(), pluginManage); querySql = SQLProvider.createQuerySQL(sqlMeta, true, needOrder, view); } else if (StringUtils.equalsIgnoreCase("table-info", view.getType())) { - Dimension2SQLObj.dimension2sqlObj(sqlMeta, xAxis, transFields(allFields), crossDs, dsMap, Utils.getParams(transFields(allFields)), view.getCalParams()); + Dimension2SQLObj.dimension2sqlObj(sqlMeta, xAxis, transFields(allFields), crossDs, dsMap, Utils.getParams(transFields(allFields)), view.getCalParams(), pluginManage); querySql = SQLProvider.createQuerySQL(sqlMeta, false, true, view); } else { - Dimension2SQLObj.dimension2sqlObj(sqlMeta, xAxis, transFields(allFields), crossDs, dsMap, Utils.getParams(transFields(allFields)), view.getCalParams()); - Quota2SQLObj.quota2sqlObj(sqlMeta, yAxis, transFields(allFields), crossDs, dsMap, Utils.getParams(transFields(allFields)), view.getCalParams()); + Dimension2SQLObj.dimension2sqlObj(sqlMeta, xAxis, transFields(allFields), crossDs, dsMap, Utils.getParams(transFields(allFields)), view.getCalParams(), pluginManage); + Quota2SQLObj.quota2sqlObj(sqlMeta, yAxis, transFields(allFields), crossDs, dsMap, Utils.getParams(transFields(allFields)), view.getCalParams(), pluginManage); querySql = SQLProvider.createQuerySQL(sqlMeta, true, needOrder, view); } diff --git a/core/core-backend/src/main/java/io/dataease/chart/manage/ChartViewManege.java b/core/core-backend/src/main/java/io/dataease/chart/manage/ChartViewManege.java index b30d141628..fbba49ec89 100644 --- a/core/core-backend/src/main/java/io/dataease/chart/manage/ChartViewManege.java +++ b/core/core-backend/src/main/java/io/dataease/chart/manage/ChartViewManege.java @@ -19,6 +19,7 @@ import io.dataease.engine.constant.ExtFieldConstant; import io.dataease.engine.func.FunctionConstant; import io.dataease.engine.utils.Utils; import io.dataease.exception.DEException; +import io.dataease.extensions.datasource.api.PluginManageApi; import io.dataease.extensions.datasource.dto.CalParam; import io.dataease.extensions.datasource.dto.DatasetTableFieldDTO; import io.dataease.extensions.datasource.model.SQLObj; @@ -33,6 +34,7 @@ import io.dataease.visualization.dao.auto.mapper.DataVisualizationInfoMapper; import jakarta.annotation.Resource; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; @@ -62,6 +64,8 @@ public class ChartViewManege { @Resource private DatasetTableFieldManage datasetTableFieldManage; + @Autowired(required = false) + private PluginManageApi pluginManage; private ObjectMapper objectMapper = new ObjectMapper(); @@ -188,7 +192,7 @@ public class ChartViewManege { BeanUtils.copyBean(dto, e); return dto; }).collect(Collectors.toList()); - String originField = Utils.calcFieldRegex(ele.getOriginName(), tableObj, f, true, null, Utils.mergeParam(Utils.getParams(f), null)); + String originField = Utils.calcFieldRegex(ele.getOriginName(), tableObj, f, true, null, Utils.mergeParam(Utils.getParams(f), null), pluginManage); for (String func : FunctionConstant.AGG_FUNC) { if (Utils.matchFunction(func, originField)) { ele.setSummary(""); diff --git a/core/core-backend/src/main/java/io/dataease/dataset/manage/DatasetDataManage.java b/core/core-backend/src/main/java/io/dataease/dataset/manage/DatasetDataManage.java index 681dec641e..877c19e66f 100644 --- a/core/core-backend/src/main/java/io/dataease/dataset/manage/DatasetDataManage.java +++ b/core/core-backend/src/main/java/io/dataease/dataset/manage/DatasetDataManage.java @@ -218,9 +218,9 @@ public class DatasetDataManage { // build query sql SQLMeta sqlMeta = new SQLMeta(); Table2SQLObj.table2sqlobj(sqlMeta, null, "(" + sql + ")", crossDs); - Field2SQLObj.field2sqlObj(sqlMeta, fields, fields, crossDs, dsMap, Utils.getParams(fields), null); - WhereTree2Str.transFilterTrees(sqlMeta, rowPermissionsTree, fields, crossDs, dsMap, Utils.getParams(fields), null); - Order2SQLObj.getOrders(sqlMeta, datasetGroupInfoDTO.getSortFields(), fields, crossDs, dsMap, Utils.getParams(fields), null); + Field2SQLObj.field2sqlObj(sqlMeta, fields, fields, crossDs, dsMap, Utils.getParams(fields), null, pluginManage); + WhereTree2Str.transFilterTrees(sqlMeta, rowPermissionsTree, fields, crossDs, dsMap, Utils.getParams(fields), null, pluginManage); + Order2SQLObj.getOrders(sqlMeta, datasetGroupInfoDTO.getSortFields(), fields, crossDs, dsMap, Utils.getParams(fields), null, pluginManage); String querySQL; if (start == null || count == null) { querySQL = SQLProvider.createQuerySQL(sqlMeta, false, needOrder, false); @@ -509,9 +509,9 @@ public class DatasetDataManage { provider = ProviderFactory.getProvider(dsList.getFirst()); } - Field2SQLObj.field2sqlObj(sqlMeta, fields, allFields, crossDs, dsMap, Utils.getParams(allFields), null); - WhereTree2Str.transFilterTrees(sqlMeta, rowPermissionsTree, allFields, crossDs, dsMap, Utils.getParams(allFields), null); - Order2SQLObj.getOrders(sqlMeta, datasetGroupInfoDTO.getSortFields(), allFields, crossDs, dsMap, Utils.getParams(allFields), null); + Field2SQLObj.field2sqlObj(sqlMeta, fields, allFields, crossDs, dsMap, Utils.getParams(allFields), null, pluginManage); + WhereTree2Str.transFilterTrees(sqlMeta, rowPermissionsTree, allFields, crossDs, dsMap, Utils.getParams(allFields), null, pluginManage); + Order2SQLObj.getOrders(sqlMeta, datasetGroupInfoDTO.getSortFields(), allFields, crossDs, dsMap, Utils.getParams(allFields), null, pluginManage); String querySQL; if (multFieldValuesRequest.getResultMode() == 0) { querySQL = SQLProvider.createQuerySQLWithLimit(sqlMeta, false, needOrder, true, 0, 1000); @@ -756,10 +756,10 @@ public class DatasetDataManage { provider = ProviderFactory.getProvider(dsList.getFirst()); } - Field2SQLObj.field2sqlObj(sqlMeta, fields, allFields, crossDs, dsMap, Utils.getParams(allFields), null); - ExtWhere2Str.extWhere2sqlOjb(sqlMeta, extFilterList, allFields, crossDs, dsMap, Utils.getParams(allFields), null); - WhereTree2Str.transFilterTrees(sqlMeta, rowPermissionsTree, allFields, crossDs, dsMap, Utils.getParams(allFields), null); - Order2SQLObj.getOrders(sqlMeta, datasetGroupInfoDTO.getSortFields(), allFields, crossDs, dsMap, Utils.getParams(allFields), null); + Field2SQLObj.field2sqlObj(sqlMeta, fields, allFields, crossDs, dsMap, Utils.getParams(allFields), null, pluginManage); + ExtWhere2Str.extWhere2sqlOjb(sqlMeta, extFilterList, allFields, crossDs, dsMap, Utils.getParams(allFields), null, pluginManage); + WhereTree2Str.transFilterTrees(sqlMeta, rowPermissionsTree, allFields, crossDs, dsMap, Utils.getParams(allFields), null, pluginManage); + Order2SQLObj.getOrders(sqlMeta, datasetGroupInfoDTO.getSortFields(), allFields, crossDs, dsMap, Utils.getParams(allFields), null, pluginManage); String querySQL; if (request.getResultMode() == 0) { querySQL = SQLProvider.createQuerySQLWithLimit(sqlMeta, false, needOrder, sortDistinct && ids.size() == 1, 0, 1000); @@ -888,9 +888,9 @@ public class DatasetDataManage { provider = ProviderFactory.getProvider(dsList.getFirst()); } - Field2SQLObj.field2sqlObj(sqlMeta, fields, allFields, crossDs, dsMap, Utils.getParams(allFields), null); - WhereTree2Str.transFilterTrees(sqlMeta, rowPermissionsTree, allFields, crossDs, dsMap, Utils.getParams(allFields), null); - Order2SQLObj.getOrders(sqlMeta, datasetGroupInfoDTO.getSortFields(), allFields, crossDs, dsMap, Utils.getParams(allFields), null); + Field2SQLObj.field2sqlObj(sqlMeta, fields, allFields, crossDs, dsMap, Utils.getParams(allFields), null, pluginManage); + WhereTree2Str.transFilterTrees(sqlMeta, rowPermissionsTree, allFields, crossDs, dsMap, Utils.getParams(allFields), null, pluginManage); + Order2SQLObj.getOrders(sqlMeta, datasetGroupInfoDTO.getSortFields(), allFields, crossDs, dsMap, Utils.getParams(allFields), null, pluginManage); String querySQL; if (multFieldValuesRequest.getResultMode() == 0) { querySQL = SQLProvider.createQuerySQLWithLimit(sqlMeta, false, needOrder, false, 0, 1000); diff --git a/core/core-backend/src/main/java/io/dataease/dataset/manage/DatasetTableFieldManage.java b/core/core-backend/src/main/java/io/dataease/dataset/manage/DatasetTableFieldManage.java index 804acfde4e..3d1bbaed9c 100644 --- a/core/core-backend/src/main/java/io/dataease/dataset/manage/DatasetTableFieldManage.java +++ b/core/core-backend/src/main/java/io/dataease/dataset/manage/DatasetTableFieldManage.java @@ -10,6 +10,7 @@ import io.dataease.engine.constant.ExtFieldConstant; import io.dataease.engine.func.FunctionConstant; import io.dataease.engine.utils.Utils; import io.dataease.exception.DEException; +import io.dataease.extensions.datasource.api.PluginManageApi; import io.dataease.extensions.datasource.dto.CalParam; import io.dataease.extensions.datasource.dto.DatasetTableFieldDTO; import io.dataease.extensions.datasource.dto.DatasourceSchemaDTO; @@ -23,6 +24,7 @@ import io.dataease.utils.JsonUtil; import jakarta.annotation.Resource; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; @@ -44,6 +46,8 @@ public class DatasetTableFieldManage { private DatasetSQLManage datasetSQLManage; @Resource private DatasetGroupManage datasetGroupManage; + @Autowired(required = false) + private PluginManageApi pluginManage; public void save(CoreDatasetTableField coreDatasetTableField) { checkNameLength(coreDatasetTableField.getName()); @@ -258,7 +262,7 @@ public class DatasetTableFieldManage { .filter(ele -> { boolean flag = true; if (Objects.equals(ele.getExtField(), ExtFieldConstant.EXT_CALC)) { - String originField = Utils.calcFieldRegex(ele.getOriginName(), tableObj, fields, true, null, Utils.mergeParam(Utils.getParams(fields), null)); + String originField = Utils.calcFieldRegex(ele.getOriginName(), tableObj, fields, true, null, Utils.mergeParam(Utils.getParams(fields), null), pluginManage); for (String func : FunctionConstant.AGG_FUNC) { if (Utils.matchFunction(func, originField)) { flag = false; diff --git a/core/core-backend/src/main/java/io/dataease/engine/trans/CustomWhere2Str.java b/core/core-backend/src/main/java/io/dataease/engine/trans/CustomWhere2Str.java index 4bfdf0f5e5..1ee3b7476f 100644 --- a/core/core-backend/src/main/java/io/dataease/engine/trans/CustomWhere2Str.java +++ b/core/core-backend/src/main/java/io/dataease/engine/trans/CustomWhere2Str.java @@ -2,6 +2,7 @@ package io.dataease.engine.trans; import io.dataease.engine.constant.SQLConstants; import io.dataease.engine.utils.Utils; +import io.dataease.extensions.datasource.api.PluginManageApi; import io.dataease.extensions.datasource.constant.SqlPlaceholderConstants; import io.dataease.extensions.datasource.dto.CalParam; import io.dataease.extensions.datasource.dto.DatasetTableFieldDTO; @@ -22,7 +23,7 @@ import java.util.*; */ public class CustomWhere2Str { - public static void customWhere2sqlObj(SQLMeta meta, FilterTreeObj tree, List originFields, boolean isCross, Map dsMap, List fieldParam, List chartParam) { + public static void customWhere2sqlObj(SQLMeta meta, FilterTreeObj tree, List originFields, boolean isCross, Map dsMap, List fieldParam, List chartParam, PluginManageApi pluginManage) { SQLObj tableObj = meta.getTable(); if (ObjectUtils.isEmpty(tableObj)) { return; @@ -35,7 +36,7 @@ public class CustomWhere2Str { return; } Map fieldsDialect = new HashMap<>(); - String treeExp = transTreeToWhere(tableObj, tree, fieldsDialect, originFields, isCross, dsMap, fieldParam, chartParam); + String treeExp = transTreeToWhere(tableObj, tree, fieldsDialect, originFields, isCross, dsMap, fieldParam, chartParam, pluginManage); if (StringUtils.isNotEmpty(treeExp)) { res.add(treeExp); } @@ -43,7 +44,7 @@ public class CustomWhere2Str { meta.setCustomWheresDialect(fieldsDialect); } - private static String transTreeToWhere(SQLObj tableObj, FilterTreeObj tree, Map fieldsDialect, List originFields, boolean isCross, Map dsMap, List fieldParam, List chartParam) { + private static String transTreeToWhere(SQLObj tableObj, FilterTreeObj tree, Map fieldsDialect, List originFields, boolean isCross, Map dsMap, List fieldParam, List chartParam, PluginManageApi pluginManage) { if (ObjectUtils.isEmpty(tree)) { return null; } @@ -56,10 +57,10 @@ public class CustomWhere2Str { String exp = null; if (StringUtils.equalsIgnoreCase(item.getType(), "item")) { // 单个item拼接SQL,最后根据logic汇总 - exp = transTreeItem(tableObj, item, fieldsDialect, originFields, isCross, dsMap, fieldParam, chartParam); + exp = transTreeItem(tableObj, item, fieldsDialect, originFields, isCross, dsMap, fieldParam, chartParam, pluginManage); } else if (StringUtils.equalsIgnoreCase(item.getType(), "tree")) { // 递归tree - exp = transTreeToWhere(tableObj, item.getSubTree(), fieldsDialect, originFields, isCross, dsMap, fieldParam, chartParam); + exp = transTreeToWhere(tableObj, item.getSubTree(), fieldsDialect, originFields, isCross, dsMap, fieldParam, chartParam, pluginManage); } if (StringUtils.isNotEmpty(exp)) { list.add(exp); @@ -69,7 +70,7 @@ public class CustomWhere2Str { return CollectionUtils.isNotEmpty(list) ? "(" + String.join(" " + logic + " ", list) + ")" : null; } - private static String transTreeItem(SQLObj tableObj, FilterTreeItem item, Map fieldsDialect, List originFields, boolean isCross, Map dsMap, List fieldParam, List chartParam) { + private static String transTreeItem(SQLObj tableObj, FilterTreeItem item, Map fieldsDialect, List originFields, boolean isCross, Map dsMap, List fieldParam, List chartParam, PluginManageApi pluginManage) { String res = null; DatasetTableFieldDTO field = item.getField(); @@ -81,7 +82,7 @@ public class CustomWhere2Str { String originName; if (ObjectUtils.isNotEmpty(field.getExtField()) && field.getExtField() == 2) { // 解析origin name中有关联的字段生成sql表达式 - String calcFieldExp = Utils.calcFieldRegex(field.getOriginName(), tableObj, originFields, isCross, dsMap, paramMap); + String calcFieldExp = Utils.calcFieldRegex(field.getOriginName(), tableObj, originFields, isCross, dsMap, paramMap, pluginManage); // 给计算字段处加一个占位符,后续SQL方言转换后再替换 originName = String.format(SqlPlaceholderConstants.CALC_FIELD_PLACEHOLDER, field.getId()); fieldsDialect.put(originName, calcFieldExp); diff --git a/core/core-backend/src/main/java/io/dataease/engine/trans/Dimension2SQLObj.java b/core/core-backend/src/main/java/io/dataease/engine/trans/Dimension2SQLObj.java index fd606d2ecb..f6f88080b0 100644 --- a/core/core-backend/src/main/java/io/dataease/engine/trans/Dimension2SQLObj.java +++ b/core/core-backend/src/main/java/io/dataease/engine/trans/Dimension2SQLObj.java @@ -4,6 +4,7 @@ import io.dataease.engine.constant.DeTypeConstants; import io.dataease.engine.constant.ExtFieldConstant; import io.dataease.engine.constant.SQLConstants; import io.dataease.engine.utils.Utils; +import io.dataease.extensions.datasource.api.PluginManageApi; import io.dataease.extensions.datasource.constant.SqlPlaceholderConstants; import io.dataease.extensions.datasource.dto.CalParam; import io.dataease.extensions.datasource.dto.DatasetTableFieldDTO; @@ -23,7 +24,7 @@ import java.util.*; public class Dimension2SQLObj { public static void dimension2sqlObj(SQLMeta meta, List fields, List originFields, - boolean isCross, Map dsMap, List fieldParam, List chartParam) { + boolean isCross, Map dsMap, List fieldParam, List chartParam, PluginManageApi pluginManage) { SQLObj tableObj = meta.getTable(); if (ObjectUtils.isEmpty(tableObj)) { return; @@ -38,7 +39,7 @@ public class Dimension2SQLObj { String originField; if (ObjectUtils.isNotEmpty(x.getExtField()) && Objects.equals(x.getExtField(), ExtFieldConstant.EXT_CALC)) { // 解析origin name中有关联的字段生成sql表达式 - String calcFieldExp = Utils.calcFieldRegex(x.getOriginName(), tableObj, originFields, isCross, dsMap, paramMap); + String calcFieldExp = Utils.calcFieldRegex(x.getOriginName(), tableObj, originFields, isCross, dsMap, paramMap,pluginManage); // 给计算字段处加一个占位符,后续SQL方言转换后再替换 originField = String.format(SqlPlaceholderConstants.CALC_FIELD_PLACEHOLDER, x.getId()); fieldsDialect.put(originField, calcFieldExp); diff --git a/core/core-backend/src/main/java/io/dataease/engine/trans/ExtWhere2Str.java b/core/core-backend/src/main/java/io/dataease/engine/trans/ExtWhere2Str.java index 339d7e268f..c1d943702b 100644 --- a/core/core-backend/src/main/java/io/dataease/engine/trans/ExtWhere2Str.java +++ b/core/core-backend/src/main/java/io/dataease/engine/trans/ExtWhere2Str.java @@ -2,6 +2,7 @@ package io.dataease.engine.trans; import io.dataease.engine.constant.SQLConstants; import io.dataease.engine.utils.Utils; +import io.dataease.extensions.datasource.api.PluginManageApi; import io.dataease.extensions.datasource.constant.SqlPlaceholderConstants; import io.dataease.extensions.datasource.dto.CalParam; import io.dataease.extensions.datasource.dto.DatasetTableFieldDTO; @@ -22,7 +23,7 @@ import java.util.Map; */ public class ExtWhere2Str { - public static void extWhere2sqlOjb(SQLMeta meta, List fields, List originFields, boolean isCross, Map dsMap, List fieldParam, List chartParam) { + public static void extWhere2sqlOjb(SQLMeta meta, List fields, List originFields, boolean isCross, Map dsMap, List fieldParam, List chartParam, PluginManageApi pluginManage) { SQLObj tableObj = meta.getTable(); if (ObjectUtils.isEmpty(tableObj)) { return; @@ -51,7 +52,7 @@ public class ExtWhere2Str { String originName; if (ObjectUtils.isNotEmpty(field.getExtField()) && field.getExtField() == 2) { // 解析origin name中有关联的字段生成sql表达式 - String calcFieldExp = Utils.calcFieldRegex(field.getOriginName(), tableObj, originFields, isCross, dsMap, paramMap); + String calcFieldExp = Utils.calcFieldRegex(field.getOriginName(), tableObj, originFields, isCross, dsMap, paramMap, pluginManage); // 给计算字段处加一个占位符,后续SQL方言转换后再替换 originName = String.format(SqlPlaceholderConstants.CALC_FIELD_PLACEHOLDER, field.getId()); fieldsDialect.put(originName, calcFieldExp); diff --git a/core/core-backend/src/main/java/io/dataease/engine/trans/Field2SQLObj.java b/core/core-backend/src/main/java/io/dataease/engine/trans/Field2SQLObj.java index 88c4412008..fd8101b442 100644 --- a/core/core-backend/src/main/java/io/dataease/engine/trans/Field2SQLObj.java +++ b/core/core-backend/src/main/java/io/dataease/engine/trans/Field2SQLObj.java @@ -5,6 +5,7 @@ import io.dataease.engine.constant.ExtFieldConstant; import io.dataease.engine.constant.SQLConstants; import io.dataease.engine.func.FunctionConstant; import io.dataease.engine.utils.Utils; +import io.dataease.extensions.datasource.api.PluginManageApi; import io.dataease.extensions.datasource.constant.SqlPlaceholderConstants; import io.dataease.extensions.datasource.dto.CalParam; import io.dataease.extensions.datasource.dto.DatasetTableFieldDTO; @@ -21,7 +22,7 @@ import java.util.*; */ public class Field2SQLObj { - public static void field2sqlObj(SQLMeta meta, List fields, List originFields, boolean isCross, Map dsMap, List fieldParam, List chartParam) { + public static void field2sqlObj(SQLMeta meta, List fields, List originFields, boolean isCross, Map dsMap, List fieldParam, List chartParam, PluginManageApi pluginManage) { SQLObj tableObj = meta.getTable(); if (ObjectUtils.isEmpty(tableObj)) { return; @@ -35,7 +36,7 @@ public class Field2SQLObj { String originField; if (ObjectUtils.isNotEmpty(x.getExtField()) && Objects.equals(x.getExtField(), ExtFieldConstant.EXT_CALC)) { // 解析origin name中有关联的字段生成sql表达式 - String calcFieldExp = Utils.calcFieldRegex(x.getOriginName(), tableObj, originFields, isCross, dsMap, paramMap); + String calcFieldExp = Utils.calcFieldRegex(x.getOriginName(), tableObj, originFields, isCross, dsMap, paramMap,pluginManage); // 给计算字段处加一个占位符,后续SQL方言转换后再替换 originField = String.format(SqlPlaceholderConstants.CALC_FIELD_PLACEHOLDER, x.getId()); fieldsDialect.put(originField, calcFieldExp); diff --git a/core/core-backend/src/main/java/io/dataease/engine/trans/Order2SQLObj.java b/core/core-backend/src/main/java/io/dataease/engine/trans/Order2SQLObj.java index faf9e9e2bd..d66b92f4a0 100644 --- a/core/core-backend/src/main/java/io/dataease/engine/trans/Order2SQLObj.java +++ b/core/core-backend/src/main/java/io/dataease/engine/trans/Order2SQLObj.java @@ -5,6 +5,7 @@ import io.dataease.engine.constant.DeTypeConstants; import io.dataease.engine.constant.ExtFieldConstant; import io.dataease.engine.constant.SQLConstants; import io.dataease.engine.utils.Utils; +import io.dataease.extensions.datasource.api.PluginManageApi; import io.dataease.extensions.datasource.dto.CalParam; import io.dataease.extensions.datasource.dto.DatasetTableFieldDTO; import io.dataease.extensions.datasource.dto.DatasourceSchemaDTO; @@ -23,7 +24,7 @@ import java.util.Objects; */ public class Order2SQLObj { - public static void getOrders(SQLMeta meta, List sortFields, List originFields, boolean isCross, Map dsMap, List fieldParam, List chartParam) { + public static void getOrders(SQLMeta meta, List sortFields, List originFields, boolean isCross, Map dsMap, List fieldParam, List chartParam, PluginManageApi pluginManage) { SQLObj tableObj = meta.getTable(); List xOrders = meta.getXOrders() == null ? new ArrayList<>() : meta.getXOrders(); if (ObjectUtils.isEmpty(tableObj)) { @@ -33,19 +34,19 @@ public class Order2SQLObj { int step = originFields.size(); for (int i = step; i < (step + sortFields.size()); i++) { DeSortField deSortField = sortFields.get(i - step); - SQLObj order = buildSortField(deSortField, tableObj, i, originFields, isCross, dsMap, fieldParam, chartParam); + SQLObj order = buildSortField(deSortField, tableObj, i, originFields, isCross, dsMap, fieldParam, chartParam, pluginManage); xOrders.add(order); } meta.setXOrders(xOrders); } } - private static SQLObj buildSortField(DeSortField f, SQLObj tableObj, int i, List originFields, boolean isCross, Map dsMap, List fieldParam, List chartParam) { + private static SQLObj buildSortField(DeSortField f, SQLObj tableObj, int i, List originFields, boolean isCross, Map dsMap, List fieldParam, List chartParam, PluginManageApi pluginManage) { Map paramMap = Utils.mergeParam(fieldParam, chartParam); String originField; if (ObjectUtils.isNotEmpty(f.getExtField()) && Objects.equals(f.getExtField(), ExtFieldConstant.EXT_CALC)) { // 解析origin name中有关联的字段生成sql表达式 - originField = Utils.calcFieldRegex(f.getOriginName(), tableObj, originFields, isCross, dsMap, paramMap); + originField = Utils.calcFieldRegex(f.getOriginName(), tableObj, originFields, isCross, dsMap, paramMap, pluginManage); } else if (ObjectUtils.isNotEmpty(f.getExtField()) && Objects.equals(f.getExtField(), ExtFieldConstant.EXT_COPY)) { originField = String.format(SQLConstants.FIELD_NAME, tableObj.getTableAlias(), f.getDataeaseName()); } else { diff --git a/core/core-backend/src/main/java/io/dataease/engine/trans/Quota2SQLObj.java b/core/core-backend/src/main/java/io/dataease/engine/trans/Quota2SQLObj.java index ffcfc05cd7..54232693af 100644 --- a/core/core-backend/src/main/java/io/dataease/engine/trans/Quota2SQLObj.java +++ b/core/core-backend/src/main/java/io/dataease/engine/trans/Quota2SQLObj.java @@ -4,6 +4,7 @@ import io.dataease.engine.constant.DeTypeConstants; import io.dataease.engine.constant.ExtFieldConstant; import io.dataease.engine.constant.SQLConstants; import io.dataease.engine.utils.Utils; +import io.dataease.extensions.datasource.api.PluginManageApi; import io.dataease.extensions.datasource.constant.SqlPlaceholderConstants; import io.dataease.extensions.datasource.dto.CalParam; import io.dataease.extensions.datasource.dto.DatasetTableFieldDTO; @@ -22,7 +23,7 @@ import java.util.*; */ public class Quota2SQLObj { - public static void quota2sqlObj(SQLMeta meta, List fields, List originFields, boolean isCross, Map dsMap, List fieldParam, List chartParam) { + public static void quota2sqlObj(SQLMeta meta, List fields, List originFields, boolean isCross, Map dsMap, List fieldParam, List chartParam, PluginManageApi pluginManage) { SQLObj tableObj = meta.getTable(); if (ObjectUtils.isEmpty(tableObj)) { return; @@ -38,7 +39,7 @@ public class Quota2SQLObj { String originField; if (ObjectUtils.isNotEmpty(y.getExtField()) && Objects.equals(y.getExtField(), ExtFieldConstant.EXT_CALC)) { // 解析origin name中有关联的字段生成sql表达式 - String calcFieldExp = Utils.calcFieldRegex(y.getOriginName(), tableObj, originFields, isCross, dsMap, paramMap); + String calcFieldExp = Utils.calcFieldRegex(y.getOriginName(), tableObj, originFields, isCross, dsMap, paramMap, pluginManage); // 给计算字段处加一个占位符,后续SQL方言转换后再替换 originField = String.format(SqlPlaceholderConstants.CALC_FIELD_PLACEHOLDER, y.getId()); fieldsDialect.put(originField, calcFieldExp); diff --git a/core/core-backend/src/main/java/io/dataease/engine/trans/WhereTree2Str.java b/core/core-backend/src/main/java/io/dataease/engine/trans/WhereTree2Str.java index c64efec3e4..f8d29fd292 100644 --- a/core/core-backend/src/main/java/io/dataease/engine/trans/WhereTree2Str.java +++ b/core/core-backend/src/main/java/io/dataease/engine/trans/WhereTree2Str.java @@ -4,6 +4,7 @@ import io.dataease.api.permissions.dataset.dto.DataSetRowPermissionsTreeDTO; import io.dataease.engine.constant.ExtFieldConstant; import io.dataease.engine.constant.SQLConstants; import io.dataease.engine.utils.Utils; +import io.dataease.extensions.datasource.api.PluginManageApi; import io.dataease.extensions.datasource.constant.SqlPlaceholderConstants; import io.dataease.extensions.datasource.dto.CalParam; import io.dataease.extensions.datasource.dto.DatasetTableFieldDTO; @@ -22,7 +23,7 @@ import java.util.*; * @Author Junjun */ public class WhereTree2Str { - public static void transFilterTrees(SQLMeta meta, List requestList, List originFields, boolean isCross, Map dsMap, List fieldParam, List chartParam) { + public static void transFilterTrees(SQLMeta meta, List requestList, List originFields, boolean isCross, Map dsMap, List fieldParam, List chartParam, PluginManageApi pluginManage) { SQLObj tableObj = meta.getTable(); if (ObjectUtils.isEmpty(tableObj)) { return; @@ -40,7 +41,7 @@ public class WhereTree2Str { if (ObjectUtils.isEmpty(tree)) { continue; } - String treeExp = transTreeToWhere(tableObj, tree, originFields, fieldsDialect, isCross, dsMap, fieldParam, chartParam); + String treeExp = transTreeToWhere(tableObj, tree, originFields, fieldsDialect, isCross, dsMap, fieldParam, chartParam, pluginManage); if (StringUtils.isNotEmpty(treeExp)) { res.add(treeExp); } @@ -49,7 +50,7 @@ public class WhereTree2Str { meta.setWhereTreesDialect(fieldsDialect); } - private static String transTreeToWhere(SQLObj tableObj, DatasetRowPermissionsTreeObj tree, List originFields, Map fieldsDialect, boolean isCross, Map dsMap, List fieldParam, List chartParam) { + private static String transTreeToWhere(SQLObj tableObj, DatasetRowPermissionsTreeObj tree, List originFields, Map fieldsDialect, boolean isCross, Map dsMap, List fieldParam, List chartParam, PluginManageApi pluginManage) { if (ObjectUtils.isEmpty(tree)) { return null; } @@ -62,10 +63,10 @@ public class WhereTree2Str { String exp = null; if (StringUtils.equalsIgnoreCase(item.getType(), "item")) { // 单个item拼接SQL,最后根据logic汇总 - exp = transTreeItem(tableObj, item, originFields, fieldsDialect, isCross, dsMap, fieldParam, chartParam); + exp = transTreeItem(tableObj, item, originFields, fieldsDialect, isCross, dsMap, fieldParam, chartParam, pluginManage); } else if (StringUtils.equalsIgnoreCase(item.getType(), "tree")) { // 递归tree - exp = transTreeToWhere(tableObj, item.getSubTree(), originFields, fieldsDialect, isCross, dsMap, fieldParam, chartParam); + exp = transTreeToWhere(tableObj, item.getSubTree(), originFields, fieldsDialect, isCross, dsMap, fieldParam, chartParam, pluginManage); } if (StringUtils.isNotEmpty(exp)) { list.add(exp); @@ -75,7 +76,7 @@ public class WhereTree2Str { return CollectionUtils.isNotEmpty(list) ? "(" + String.join(" " + logic + " ", list) + ")" : null; } - public static String transTreeItem(SQLObj tableObj, DatasetRowPermissionsTreeItem item, List originFields, Map fieldsDialect, boolean isCross, Map dsMap, List fieldParam, List chartParam) { + public static String transTreeItem(SQLObj tableObj, DatasetRowPermissionsTreeItem item, List originFields, Map fieldsDialect, boolean isCross, Map dsMap, List fieldParam, List chartParam, PluginManageApi pluginManage) { String res = null; DatasetTableFieldDTO field = item.getField(); if (ObjectUtils.isEmpty(field)) { @@ -86,7 +87,7 @@ public class WhereTree2Str { String originName; if (ObjectUtils.isNotEmpty(field.getExtField()) && Objects.equals(field.getExtField(), ExtFieldConstant.EXT_CALC)) { // 解析origin name中有关联的字段生成sql表达式 - String calcFieldExp = Utils.calcFieldRegex(field.getOriginName(), tableObj, originFields, isCross, dsMap, paramMap); + String calcFieldExp = Utils.calcFieldRegex(field.getOriginName(), tableObj, originFields, isCross, dsMap, paramMap, pluginManage); // 给计算字段处加一个占位符,后续SQL方言转换后再替换 originName = String.format(SqlPlaceholderConstants.CALC_FIELD_PLACEHOLDER, field.getId()); fieldsDialect.put(originName, calcFieldExp); diff --git a/core/core-backend/src/main/java/io/dataease/engine/utils/Utils.java b/core/core-backend/src/main/java/io/dataease/engine/utils/Utils.java index 345a2b3aec..8844fd6f22 100644 --- a/core/core-backend/src/main/java/io/dataease/engine/utils/Utils.java +++ b/core/core-backend/src/main/java/io/dataease/engine/utils/Utils.java @@ -3,12 +3,15 @@ package io.dataease.engine.utils; import io.dataease.engine.constant.ExtFieldConstant; import io.dataease.engine.constant.SQLConstants; import io.dataease.exception.DEException; +import io.dataease.extensions.datasource.api.PluginManageApi; import io.dataease.extensions.datasource.constant.SqlPlaceholderConstants; import io.dataease.extensions.datasource.dto.CalParam; import io.dataease.extensions.datasource.dto.DatasetTableFieldDTO; import io.dataease.extensions.datasource.dto.DatasourceSchemaDTO; +import io.dataease.extensions.datasource.dto.DsTypeDTO; import io.dataease.extensions.datasource.model.SQLObj; import io.dataease.extensions.datasource.vo.DatasourceConfiguration; +import io.dataease.extensions.datasource.vo.XpackPluginsDatasourceVO; import io.dataease.i18n.Translator; import io.dataease.utils.JsonUtil; import org.apache.commons.lang3.ObjectUtils; @@ -27,13 +30,13 @@ public class Utils { } // 解析计算字段 - public static String calcFieldRegex(String originField, SQLObj tableObj, List originFields, boolean isCross, Map dsMap, Map paramMap) { + public static String calcFieldRegex(String originField, SQLObj tableObj, List originFields, boolean isCross, Map dsMap, Map paramMap, PluginManageApi pluginManage) { try { int i = 0; - DatasourceConfiguration.DatasourceType datasourceType = null; + DsTypeDTO datasourceType = null; if (dsMap != null && dsMap.entrySet().iterator().hasNext()) { Map.Entry next = dsMap.entrySet().iterator().next(); - datasourceType = DatasourceConfiguration.DatasourceType.valueOf(next.getValue().getType()); + datasourceType = getDs(pluginManage, next.getValue().getType()); } return buildCalcField(originField, tableObj, originFields, i, isCross, datasourceType, paramMap); } catch (Exception e) { @@ -42,13 +45,13 @@ public class Utils { return null; } - public static String calcSimpleFieldRegex(String originField, SQLObj tableObj, List originFields, boolean isCross, Map dsTypeMap) { + public static String calcSimpleFieldRegex(String originField, SQLObj tableObj, List originFields, boolean isCross, Map dsTypeMap, PluginManageApi pluginManage) { try { int i = 0; - DatasourceConfiguration.DatasourceType datasourceType = null; + DsTypeDTO datasourceType = null; if (dsTypeMap != null && dsTypeMap.entrySet().iterator().hasNext()) { Map.Entry next = dsTypeMap.entrySet().iterator().next(); - datasourceType = DatasourceConfiguration.DatasourceType.valueOf(next.getValue()); + datasourceType = getDs(pluginManage, next.getValue()); } return buildCalcField(originField, tableObj, originFields, i, isCross, datasourceType, null); } catch (Exception e) { @@ -57,7 +60,7 @@ public class Utils { return null; } - public static String buildCalcField(String originField, SQLObj tableObj, List originFields, int i, boolean isCross, DatasourceConfiguration.DatasourceType datasourceType, Map paramMap) throws Exception { + public static String buildCalcField(String originField, SQLObj tableObj, List originFields, int i, boolean isCross, DsTypeDTO datasourceType, Map paramMap) throws Exception { try { i++; if (i > 100) { @@ -441,4 +444,30 @@ public class Utils { } return map; } + + private static DsTypeDTO getDs(PluginManageApi pluginManage, String type) { + DsTypeDTO dto = new DsTypeDTO(); + try { + DatasourceConfiguration.DatasourceType datasourceType = DatasourceConfiguration.DatasourceType.valueOf(type); + dto.setType(type); + dto.setName(datasourceType.getName()); + dto.setCatalog(datasourceType.getCatalog()); + dto.setPrefix(datasourceType.getPrefix()); + dto.setSuffix(datasourceType.getSuffix()); + return dto; + } catch (Exception e) { + List xpackPluginsDatasourceVOS = pluginManage.queryPluginDs(); + for (XpackPluginsDatasourceVO vo : xpackPluginsDatasourceVOS) { + if (StringUtils.equalsIgnoreCase(vo.getType(), type)) { + dto.setType(type); + dto.setName(vo.getName()); + dto.setCatalog(vo.getCategory()); + dto.setPrefix(vo.getPrefix()); + dto.setSuffix(vo.getSuffix()); + return dto; + } + } + } + return null; + } }