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 aff3756164..9285b088af 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 @@ -241,7 +241,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), pluginManage); + String originField = Utils.calcFieldRegex(ele, 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/DatasetTableFieldManage.java b/core/core-backend/src/main/java/io/dataease/dataset/manage/DatasetTableFieldManage.java index a9c7f0f07c..6408e1601e 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 @@ -262,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), pluginManage); + String originField = Utils.calcFieldRegex(ele, 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 5c86f950ad..ab4122eceb 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 @@ -90,7 +90,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, pluginManage); + String calcFieldExp = Utils.calcFieldRegex(field, 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 9078ce6962..309b6fe97e 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 @@ -46,7 +46,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, pluginManage); + String calcFieldExp = Utils.calcFieldRegex(x, 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 5a7fff988a..c218bee13e 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 @@ -60,7 +60,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, pluginManage); + String calcFieldExp = Utils.calcFieldRegex(field, 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 352e05b17e..7bae4d5cb7 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 @@ -43,7 +43,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, pluginManage); + String calcFieldExp = Utils.calcFieldRegex(x, 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 cdee20be25..f2c72f100c 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 @@ -52,7 +52,7 @@ public class Order2SQLObj { if (ObjectUtils.isNotEmpty(f.getExtField()) && Objects.equals(f.getExtField(), ExtFieldConstant.EXT_CALC)) { // 解析origin name中有关联的字段生成sql表达式 - String calcFieldExp = Utils.calcFieldRegex(f.getOriginName(), tableObj, originFields, isCross, dsMap, paramMap, pluginManage); + String calcFieldExp = Utils.calcFieldRegex(f, tableObj, originFields, isCross, dsMap, paramMap, pluginManage); // 给计算字段处加一个占位符,后续SQL方言转换后再替换 originField = String.format(SqlPlaceholderConstants.CALC_FIELD_PLACEHOLDER, f.getId()); fieldsDialect.put(originField, calcFieldExp); 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 6fcde84593..9a4db6e9b1 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 @@ -46,7 +46,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, pluginManage); + String calcFieldExp = Utils.calcFieldRegex(y, 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 eb2ec92ee7..08147fd476 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 @@ -106,7 +106,7 @@ public class WhereTree2Str { 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, pluginManage); + String calcFieldExp = Utils.calcFieldRegex(field, 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 6dfe0935f7..8fe7cd94c7 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 @@ -30,7 +30,7 @@ public class Utils { } // 解析计算字段 - public static String calcFieldRegex(String originField, SQLObj tableObj, List originFields, boolean isCross, Map dsMap, Map paramMap, PluginManageApi pluginManage) { + public static String calcFieldRegex(DatasetTableFieldDTO chartField, SQLObj tableObj, List originFields, boolean isCross, Map dsMap, Map paramMap, PluginManageApi pluginManage) { try { int i = 0; DsTypeDTO datasourceType = null; @@ -38,14 +38,14 @@ public class Utils { Map.Entry next = dsMap.entrySet().iterator().next(); datasourceType = getDs(pluginManage, next.getValue().getType()); } - return buildCalcField(originField, tableObj, originFields, i, isCross, datasourceType, paramMap); + return buildCalcField(chartField, tableObj, originFields, i, isCross, datasourceType, paramMap); } catch (Exception e) { DEException.throwException(Translator.get("i18n_field_circular_ref")); } return null; } - public static String calcSimpleFieldRegex(String originField, SQLObj tableObj, List originFields, boolean isCross, Map dsTypeMap, PluginManageApi pluginManage) { + public static String calcSimpleFieldRegex(DatasetTableFieldDTO chartField, SQLObj tableObj, List originFields, boolean isCross, Map dsTypeMap, PluginManageApi pluginManage) { try { int i = 0; DsTypeDTO datasourceType = null; @@ -53,19 +53,23 @@ public class Utils { Map.Entry next = dsTypeMap.entrySet().iterator().next(); datasourceType = getDs(pluginManage, next.getValue()); } - return buildCalcField(originField, tableObj, originFields, i, isCross, datasourceType, null); + return buildCalcField(chartField, tableObj, originFields, i, isCross, datasourceType, null); } catch (Exception e) { DEException.throwException(Translator.get("i18n_field_circular_ref")); } return null; } - public static String buildCalcField(String originField, SQLObj tableObj, List originFields, int i, boolean isCross, DsTypeDTO datasourceType, Map paramMap) throws Exception { + public static String buildCalcField(DatasetTableFieldDTO chartField, SQLObj tableObj, List originFields, int i, boolean isCross, DsTypeDTO datasourceType, Map paramMap) throws Exception { try { i++; if (i > 100) { DEException.throwException(Translator.get("i18n_field_circular_error")); } + String originField = getCalcField(chartField, originFields); + if (originField == null) { + DEException.throwException(Translator.get("i18n_field_circular_error")); + } originField = originField.replaceAll("[\\t\\n\\r]]", ""); // 正则提取[xxx] String regex = "\\[(.*?)]"; @@ -98,7 +102,8 @@ public class Utils { } } else { originField = originField.replaceAll("\\[" + ele.getId() + "]", "(" + ele.getOriginName() + ")"); - originField = buildCalcField(originField, tableObj, originFields, i, isCross, datasourceType, paramMap); + chartField.setOriginName(originField); + originField = buildCalcField(chartField, tableObj, originFields, i, isCross, datasourceType, paramMap); } } } @@ -109,6 +114,15 @@ public class Utils { return null; } + public static String getCalcField(DatasetTableFieldDTO ele, List originFields) { + for (DatasetTableFieldDTO field : originFields) { + if (Objects.equals(ele.getId(), field.getId())) { + return field.getOriginName(); + } + } + return null; + } + public static String getLogic(String logic) { if (logic != null) { switch (logic) {