diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/StringUtils.java b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/StringUtils.java index 1a23802b3..acffb78d4 100644 --- a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/StringUtils.java +++ b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/StringUtils.java @@ -25,8 +25,6 @@ public class StringUtils extends org.apache.commons.lang3.StringUtils { public static final String COLON = ":"; - public static final String DOT = "."; - private static final AntPathMatcher ANT_PATH_MATCHER = new AntPathMatcher(); @Deprecated diff --git a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/core/query/LambdaJoinQueryBuilder.java b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/core/query/LambdaJoinQueryBuilder.java index 48eaff16c..d3a082077 100644 --- a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/core/query/LambdaJoinQueryBuilder.java +++ b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/core/query/LambdaJoinQueryBuilder.java @@ -1,6 +1,8 @@ package org.dromara.common.mybatis.core.query; import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.metadata.TableInfo; +import com.baomidou.mybatisplus.core.metadata.TableInfoHelper; import com.baomidou.mybatisplus.core.toolkit.StringPool; import com.baomidou.mybatisplus.core.toolkit.support.SFunction; import com.github.yulichang.toolkit.LambdaUtils; @@ -73,11 +75,16 @@ public final class LambdaJoinQueryBuilder { return this; } for (SFunction column : columns) { - String columnUnder = StringUtils.toUnderScoreCase(LambdaUtils.getName(column)); - if (StringUtils.isNotBlank(alias)) { - columnUnder = alias + StringUtils.DOT + columnUnder; + // 无别名时,解析字段所属实体表名作为默认前缀,避免同名列歧义 + String effectiveAlias = alias; + if (StringUtils.isBlank(effectiveAlias)) { + Class entityClass = LambdaUtils.getEntityClass(column); + TableInfo tableInfo = TableInfoHelper.getTableInfo(entityClass); + if (tableInfo != null) { + effectiveAlias = tableInfo.getTableName(); + } } - wrapper.groupBy(columnUnder); + wrapper.groupBy(qualifiedColumn(effectiveAlias, column)); } return this; } diff --git a/ruoyi-common/ruoyi-common-translation/src/main/java/org/dromara/common/translation/core/impl/DictTypeTranslationImpl.java b/ruoyi-common/ruoyi-common-translation/src/main/java/org/dromara/common/translation/core/impl/DictTypeTranslationImpl.java index 4162e7e3e..c41dcb81e 100644 --- a/ruoyi-common/ruoyi-common-translation/src/main/java/org/dromara/common/translation/core/impl/DictTypeTranslationImpl.java +++ b/ruoyi-common/ruoyi-common-translation/src/main/java/org/dromara/common/translation/core/impl/DictTypeTranslationImpl.java @@ -8,6 +8,7 @@ import org.dromara.common.translation.annotation.TranslationType; import org.dromara.common.translation.constant.TransConstant; import org.dromara.common.translation.core.TranslationInterface; +import java.math.BigDecimal; import java.util.Arrays; import java.util.LinkedHashMap; import java.util.Map; @@ -33,7 +34,8 @@ public class DictTypeTranslationImpl implements TranslationInterface { */ @Override public String translation(Object key, String other) { - if (key.toString() instanceof String dictValue && StringUtils.isNotBlank(other)) { + if (StringUtils.isNotBlank(other)) { + String dictValue = convertToString(key); return dictService.getDictLabel(other, dictValue); } return null; @@ -54,7 +56,8 @@ public class DictTypeTranslationImpl implements TranslationInterface { Map dictMap = dictService.getAllDictByDictType(other); Map result = new LinkedHashMap<>(keys.size()); for (Object key : keys) { - if (key.toString() instanceof String dictValue) { + String dictValue = convertToString(key); + if (dictValue != null) { result.put(key, StreamUtils.join( StreamUtils.filter(Arrays.asList(dictValue.split(",")), StringUtils::isNotBlank), value -> dictMap.get(value.trim()) @@ -63,4 +66,28 @@ public class DictTypeTranslationImpl implements TranslationInterface { } return result; } + + /** + * 类型转换为String + * @param key 转换对象 + * @return string值 + */ + private String convertToString(Object key) { + if (key instanceof String s) { + return s; + } else if (key == null) { + return null; + } else if (key instanceof BigDecimal bd) { + // 规范化数值 + return bd.stripTrailingZeros().toPlainString(); + } else if (key instanceof Integer || key instanceof Long || key instanceof Short || key instanceof Byte) { + return key.toString(); + } else if (key instanceof Double || key instanceof Float) { + // 浮点也用 BigDecimal 规范化 + return new BigDecimal(key.toString()).stripTrailingZeros().toPlainString(); + } else { + // 其他类型按需处理,或干脆返回 null + return key.toString(); + } + } }