From 4500a0b9b65d97e65862f6e43816dc4f37c720e6 Mon Sep 17 00:00:00 2001 From: Du YinHong <1836695061@qq.com> Date: Mon, 24 Aug 2026 10:42:37 +0800 Subject: [PATCH 1/7] =?UTF-8?q?=E6=9B=B4=E6=94=B9=E7=9B=AE=E7=9A=84=20?= =?UTF-8?q?=E8=A7=A3=E5=86=B3=E4=BA=86=E4=BB=80=E4=B9=88=E9=97=AE=E9=A2=98?= =?UTF-8?q?(=E8=AF=B7=E6=8F=90=E4=BA=A4=E5=88=B0dev=E5=88=86=E6=94=AF)=201?= =?UTF-8?q?.DictTypeTranslationImpl=E7=9A=84=E4=BF=AE=E6=94=B9=E4=B8=BA?= =?UTF-8?q?=E5=A6=82=E6=9E=9C=E5=89=8D=E6=96=B9=E4=BC=A0=E5=85=A5=E4=BA=86?= =?UTF-8?q?=E9=9D=9EString=E5=AD=97=E6=AE=B5=EF=BC=8C=E4=BE=8B=E5=A6=82?= =?UTF-8?q?=EF=BC=9A=E6=88=91=E4=BC=A0=E5=85=A51.13=E7=9A=84BigDecimal?= =?UTF-8?q?=E6=98=AF=E6=97=A0=E6=B3=95=E5=92=8C1.13=E7=9A=84String?= =?UTF-8?q?=E5=8C=B9=E9=85=8D=E7=9A=84=EF=BC=8C=E6=89=80=E4=BB=A5=E6=B2=A1?= =?UTF-8?q?=E8=BD=AC=E6=88=90=E5=8A=9F=EF=BC=8C=202.LambdaJoinQueryBuilder?= =?UTF-8?q?=E4=B8=AD=E5=8A=A0=E5=85=A5=E4=B8=A4=E7=A7=8DgroupBy=E6=96=B9?= =?UTF-8?q?=E6=B3=95=EF=BC=8C=E5=9B=A0=E4=B8=BA=E7=9B=AE=E5=89=8D=E7=9A=84?= =?UTF-8?q?join=E6=9F=A5=E8=AF=A2=E5=BC=95=E7=94=A8selectAs=E4=BD=BF?= =?UTF-8?q?=E7=94=A8GROUP=5FCONCAT=E6=88=96=E8=80=85=E7=B1=BB=E4=BC=BCSQL?= =?UTF-8?q?=E8=AF=AD=E5=8F=A5=E9=9C=80=E8=A6=81groupBy=EF=BC=8C=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E6=96=B9=E6=B3=95=E4=BD=BF=E7=94=A8=E6=9D=A5=E5=BC=95?= =?UTF-8?q?=E7=94=A8=20=E6=94=B9=E5=8A=A8=E9=80=BB=E8=BE=91=20=E8=BF=99?= =?UTF-8?q?=E4=B9=88=E5=86=99=E7=9A=84=E6=80=9D=E8=B7=AF(=E8=AE=A9?= =?UTF-8?q?=E4=BD=9C=E8=80=85=E6=9B=B4=E5=A5=BD=E7=9A=84=E7=90=86=E8=A7=A3?= =?UTF-8?q?=E4=BD=A0=E7=9A=84=E6=84=8F=E5=9B=BE)=201.=E5=B0=86=E4=BC=A0?= =?UTF-8?q?=E5=85=A5=E5=AD=97=E6=AE=B5=E8=BD=AC=E5=8C=96=E4=B8=BAString?= =?UTF-8?q?=E8=BF=9B=E8=A1=8C=E5=AF=B9=E6=AF=94=202.=E4=BD=BF=E7=94=A8wrap?= =?UTF-8?q?per.groupBy=EF=BC=8C=E7=84=B6=E5=90=8E=E9=81=8D=E5=8E=86?= =?UTF-8?q?=E5=AD=97=E6=AE=B5=E8=BF=9B=E8=A1=8CgroupBy=20=E6=B5=8B?= =?UTF-8?q?=E8=AF=95=20=E9=83=BD=E5=81=9A=E4=BA=86=E5=93=AA=E4=BA=9B?= =?UTF-8?q?=E6=B5=8B=E8=AF=95(=E6=9C=AA=E7=BB=8F=E8=BF=87=E6=B5=8B?= =?UTF-8?q?=E8=AF=95=E4=B8=8D=E9=87=87=E7=BA=B3)=201.=E5=B7=B2=E6=B5=8B?= =?UTF-8?q?=E8=AF=95=E4=BC=A0=E5=85=A5BigDecimal=E5=8C=B9=E9=85=8D?= =?UTF-8?q?=E6=88=90=E5=8A=9F=202.=E5=9C=A8=E5=A4=9A=E6=9D=A1sql=E8=AF=AD?= =?UTF-8?q?=E5=8F=A5=E6=B5=8B=E8=AF=95=E8=BF=87=E5=90=8E=E5=9D=87=E5=8F=AF?= =?UTF-8?q?=E4=BB=A5=E5=AE=9E=E7=8E=B0=E7=B1=BB=E4=BC=BCselectAs("GROUP=5F?= =?UTF-8?q?CONCAT(m=5Fchild.name=20SEPARATOR=20'=E3=80=81')",=20MaterialVo?= =?UTF-8?q?::getChildrenStatus)=E7=9A=84=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/core/utils/StringUtils.java | 2 ++ .../core/query/LambdaJoinQueryBuilder.java | 33 +++++++++++++++++++ .../core/impl/DictTypeTranslationImpl.java | 4 +-- 3 files changed, 37 insertions(+), 2 deletions(-) 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 acffb78d4..1a23802b3 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,6 +25,8 @@ 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 b97e558d4..48eaff16c 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 @@ -49,6 +49,39 @@ public final class LambdaJoinQueryBuilder { return this; } + /** + * 添加分组查询。 + * + * @param columns 分组字段 + * @return 当前联表查询构造辅助对象 + */ + @SafeVarargs + public final LambdaJoinQueryBuilder groupBy(SFunction... columns) { + return groupBy(null, columns); + } + + /** + * 添加分组查询。 + * + * @param alias 表别名 + * @param columns 分组字段 + * @return 当前联表查询构造辅助对象 + */ + @SafeVarargs + public final LambdaJoinQueryBuilder groupBy(String alias, SFunction... columns) { + if (columns == null) { + return this; + } + for (SFunction column : columns) { + String columnUnder = StringUtils.toUnderScoreCase(LambdaUtils.getName(column)); + if (StringUtils.isNotBlank(alias)) { + columnUnder = alias + StringUtils.DOT + columnUnder; + } + wrapper.groupBy(columnUnder); + } + 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 ea13812a2..4162e7e3e 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 @@ -33,7 +33,7 @@ public class DictTypeTranslationImpl implements TranslationInterface { */ @Override public String translation(Object key, String other) { - if (key instanceof String dictValue && StringUtils.isNotBlank(other)) { + if (key.toString() instanceof String dictValue && StringUtils.isNotBlank(other)) { return dictService.getDictLabel(other, dictValue); } return null; @@ -54,7 +54,7 @@ public class DictTypeTranslationImpl implements TranslationInterface { Map dictMap = dictService.getAllDictByDictType(other); Map result = new LinkedHashMap<>(keys.size()); for (Object key : keys) { - if (key instanceof String dictValue) { + if (key.toString() instanceof String dictValue) { result.put(key, StreamUtils.join( StreamUtils.filter(Arrays.asList(dictValue.split(",")), StringUtils::isNotBlank), value -> dictMap.get(value.trim()) From 63ff298d49e861d705e0d55541b528b9038b9682 Mon Sep 17 00:00:00 2001 From: Du YinHong <1836695061@qq.com> Date: Mon, 24 Aug 2026 14:25:59 +0800 Subject: [PATCH 2/7] =?UTF-8?q?1.=E5=A6=82=E6=9E=9C=E5=88=AB=E5=90=8D?= =?UTF-8?q?=E4=B8=BA=E7=A9=BA=EF=BC=8C=E8=A7=A3=E6=9E=90=E5=AD=97=E6=AE=B5?= =?UTF-8?q?=E6=89=80=E5=B1=9E=E5=AE=9E=E4=BD=93=E8=A1=A8=E5=90=8D=E4=BD=9C?= =?UTF-8?q?=E4=B8=BA=E9=BB=98=E8=AE=A4=E5=89=8D=E7=BC=80=EF=BC=8C=E9=81=BF?= =?UTF-8?q?=E5=85=8D=E5=90=8C=E5=90=8D=E5=88=97=E6=AD=A7=E4=B9=89=202.?= =?UTF-8?q?=E5=AD=97=E6=AE=B5=E8=BD=AC=E6=8D=A2=E6=97=B6=E5=BC=95=E7=94=A8?= =?UTF-8?q?qualifiedColumn=EF=BC=8C=E9=81=BF=E5=85=8D@TableField/@TableId?= =?UTF-8?q?=20=E8=87=AA=E5=AE=9A=E4=B9=89=E5=88=97=E5=90=8D=E3=80=81?= =?UTF-8?q?=E5=85=A8=E5=B1=80=E5=91=BD=E5=90=8D=E7=AD=96=E7=95=A5=E5=92=8C?= =?UTF-8?q?=E5=85=B3=E9=94=AE=E5=AD=97=E8=BD=AC=E4=B9=89=E8=A2=AB=E5=BF=BD?= =?UTF-8?q?=E7=95=A5=203.=E5=AD=97=E5=85=B8=E7=BF=BB=E8=AF=91=E6=97=B6?= =?UTF-8?q?=E6=96=B0=E5=A2=9EconvertToString=EF=BC=8C=E6=A0=B9=E6=8D=AE?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=E8=BF=94=E5=9B=9E=E5=AF=B9=E5=BA=94=E7=9A=84?= =?UTF-8?q?String=E5=80=BC=EF=BC=8C=E9=98=B2=E6=AD=A2=E6=8A=9B=E5=87=BA=20?= =?UTF-8?q?NullPointerException=E3=80=81=E7=A7=91=E5=AD=A6=E8=AE=A1?= =?UTF-8?q?=E6=95=B0=E6=B3=95=E3=80=81=E5=B0=BE=E9=9A=8F=E9=9B=B6=E7=AD=89?= =?UTF-8?q?=E5=85=B6=E4=BB=96=E9=97=AE=E9=A2=98=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/core/utils/StringUtils.java | 2 -- .../core/query/LambdaJoinQueryBuilder.java | 15 ++++++--- .../core/impl/DictTypeTranslationImpl.java | 31 +++++++++++++++++-- 3 files changed, 40 insertions(+), 8 deletions(-) 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(); + } + } } From 40374faedace6d4856dba632605709f09a641316 Mon Sep 17 00:00:00 2001 From: Du YinHong <1836695061@qq.com> Date: Mon, 24 Aug 2026 14:30:34 +0800 Subject: [PATCH 3/7] =?UTF-8?q?1.=E5=A6=82=E6=9E=9C=E5=88=AB=E5=90=8D?= =?UTF-8?q?=E4=B8=BA=E7=A9=BA=EF=BC=8C=E8=A7=A3=E6=9E=90=E5=AD=97=E6=AE=B5?= =?UTF-8?q?=E6=89=80=E5=B1=9E=E5=AE=9E=E4=BD=93=E8=A1=A8=E5=90=8D=E4=BD=9C?= =?UTF-8?q?=E4=B8=BA=E9=BB=98=E8=AE=A4=E5=89=8D=E7=BC=80=EF=BC=8C=E9=81=BF?= =?UTF-8?q?=E5=85=8D=E5=90=8C=E5=90=8D=E5=88=97=E6=AD=A7=E4=B9=89=202.?= =?UTF-8?q?=E5=AD=97=E6=AE=B5=E8=BD=AC=E6=8D=A2=E6=97=B6=E5=BC=95=E7=94=A8?= =?UTF-8?q?qualifiedColumn=EF=BC=8C=E9=81=BF=E5=85=8D@TableField/@TableId?= =?UTF-8?q?=20=E8=87=AA=E5=AE=9A=E4=B9=89=E5=88=97=E5=90=8D=E3=80=81?= =?UTF-8?q?=E5=85=A8=E5=B1=80=E5=91=BD=E5=90=8D=E7=AD=96=E7=95=A5=E5=92=8C?= =?UTF-8?q?=E5=85=B3=E9=94=AE=E5=AD=97=E8=BD=AC=E4=B9=89=E8=A2=AB=E5=BF=BD?= =?UTF-8?q?=E7=95=A5=203.=E5=AD=97=E5=85=B8=E7=BF=BB=E8=AF=91=E6=97=B6?= =?UTF-8?q?=E6=96=B0=E5=A2=9EconvertToString=EF=BC=8C=E6=A0=B9=E6=8D=AE?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=E8=BF=94=E5=9B=9E=E5=AF=B9=E5=BA=94=E7=9A=84?= =?UTF-8?q?String=E5=80=BC=EF=BC=8C=E9=98=B2=E6=AD=A2=E6=8A=9B=E5=87=BA=20?= =?UTF-8?q?NullPointerException=E3=80=81=E7=A7=91=E5=AD=A6=E8=AE=A1?= =?UTF-8?q?=E6=95=B0=E6=B3=95=E3=80=81=E5=B0=BE=E9=9A=8F=E9=9B=B6=E7=AD=89?= =?UTF-8?q?=E5=85=B6=E4=BB=96=E9=97=AE=E9=A2=98=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/core/utils/StringUtils.java | 2 -- .../core/query/LambdaJoinQueryBuilder.java | 15 ++++++--- .../core/impl/DictTypeTranslationImpl.java | 33 +++++++++++++++++-- 3 files changed, 41 insertions(+), 9 deletions(-) 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..a772ff362 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,8 +34,9 @@ public class DictTypeTranslationImpl implements TranslationInterface { */ @Override public String translation(Object key, String other) { - if (key.toString() instanceof String dictValue && StringUtils.isNotBlank(other)) { - return dictService.getDictLabel(other, dictValue); + if (StringUtils.isNotBlank(other)) { + String dictValue = convertToString(key); + return dictValue != null ? dictService.getDictLabel(other, dictValue) : null; } 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(); + } + } } From 768a0d980107bdfbd57bbaa2b5a1694514ae87c9 Mon Sep 17 00:00:00 2001 From: Du YinHong <1836695061@qq.com> Date: Mon, 24 Aug 2026 14:39:03 +0800 Subject: [PATCH 4/7] =?UTF-8?q?1.=E7=9B=B4=E6=8E=A5=E4=BD=BF=E7=94=A8hutoo?= =?UTF-8?q?l=E8=87=AA=E5=B8=A6=E7=9A=84=20Convert=20=E8=BD=AC=E6=8D=A2?= =?UTF-8?q?=E5=B7=A5=E5=85=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/impl/DictTypeTranslationImpl.java | 34 +++---------------- 1 file changed, 4 insertions(+), 30 deletions(-) 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 a772ff362..5312f1d92 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 @@ -1,5 +1,6 @@ package org.dromara.common.translation.core.impl; +import cn.hutool.core.convert.Convert; import lombok.AllArgsConstructor; import org.dromara.common.core.service.DictService; import org.dromara.common.core.utils.StreamUtils; @@ -8,7 +9,6 @@ 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; @@ -34,9 +34,8 @@ public class DictTypeTranslationImpl implements TranslationInterface { */ @Override public String translation(Object key, String other) { - if (StringUtils.isNotBlank(other)) { - String dictValue = convertToString(key); - return dictValue != null ? dictService.getDictLabel(other, dictValue) : null; + if (Convert.toStr(key) instanceof String dictValue && StringUtils.isNotBlank(other)) { + return dictService.getDictLabel(other, dictValue); } return null; } @@ -56,8 +55,7 @@ public class DictTypeTranslationImpl implements TranslationInterface { Map dictMap = dictService.getAllDictByDictType(other); Map result = new LinkedHashMap<>(keys.size()); for (Object key : keys) { - String dictValue = convertToString(key); - if (dictValue != null) { + if (Convert.toStr(key) instanceof String dictValue) { result.put(key, StreamUtils.join( StreamUtils.filter(Arrays.asList(dictValue.split(",")), StringUtils::isNotBlank), value -> dictMap.get(value.trim()) @@ -66,28 +64,4 @@ 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(); - } - } } From 9ed4cf1bfcab872af458f0af6d64422f258b90f5 Mon Sep 17 00:00:00 2001 From: Du YinHong <1836695061@qq.com> Date: Mon, 24 Aug 2026 14:56:56 +0800 Subject: [PATCH 5/7] =?UTF-8?q?1.=E5=89=94=E9=99=A4=E8=BD=AC=E6=8D=A2?= =?UTF-8?q?=E5=99=A8=E4=BF=AE=E6=94=B9=202.groupBy=E7=9B=B4=E6=8E=A5?= =?UTF-8?q?=E8=B0=83=E7=94=A8MPJ=E8=87=AA=E5=8A=A8=E8=A7=A3=E6=9E=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/query/LambdaJoinQueryBuilder.java | 15 ++++++--------- .../core/impl/DictTypeTranslationImpl.java | 4 ++-- 2 files changed, 8 insertions(+), 11 deletions(-) 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 d3a082077..9a04aff4a 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 @@ -75,16 +75,13 @@ public final class LambdaJoinQueryBuilder { return this; } for (SFunction column : columns) { - // 无别名时,解析字段所属实体表名作为默认前缀,避免同名列歧义 - String effectiveAlias = alias; - if (StringUtils.isBlank(effectiveAlias)) { - Class entityClass = LambdaUtils.getEntityClass(column); - TableInfo tableInfo = TableInfoHelper.getTableInfo(entityClass); - if (tableInfo != null) { - effectiveAlias = tableInfo.getTableName(); - } + if (StringUtils.isNotBlank(alias)) { + // 使用 MPJ 的别名重载 + wrapper.groupBy(alias, column); + } else { + // 无别名:交给 MPJ 自动解析 + wrapper.groupBy(column); } - 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 5312f1d92..96b0801e8 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 @@ -34,7 +34,7 @@ public class DictTypeTranslationImpl implements TranslationInterface { */ @Override public String translation(Object key, String other) { - if (Convert.toStr(key) instanceof String dictValue && StringUtils.isNotBlank(other)) { + if (key instanceof String dictValue && StringUtils.isNotBlank(other)) { return dictService.getDictLabel(other, dictValue); } return null; @@ -55,7 +55,7 @@ public class DictTypeTranslationImpl implements TranslationInterface { Map dictMap = dictService.getAllDictByDictType(other); Map result = new LinkedHashMap<>(keys.size()); for (Object key : keys) { - if (Convert.toStr(key) instanceof String dictValue) { + if (key instanceof String dictValue) { result.put(key, StreamUtils.join( StreamUtils.filter(Arrays.asList(dictValue.split(",")), StringUtils::isNotBlank), value -> dictMap.get(value.trim()) From 964cebce38dff9d75b91f3df4e84f23d32269150 Mon Sep 17 00:00:00 2001 From: Du YinHong <1836695061@qq.com> Date: Mon, 24 Aug 2026 15:03:25 +0800 Subject: [PATCH 6/7] =?UTF-8?q?1.=E5=89=94=E9=99=A4=E8=BD=AC=E6=8D=A2?= =?UTF-8?q?=E5=99=A8=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/translation/core/impl/DictTypeTranslationImpl.java | 1 - 1 file changed, 1 deletion(-) 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 96b0801e8..ea13812a2 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 @@ -1,6 +1,5 @@ package org.dromara.common.translation.core.impl; -import cn.hutool.core.convert.Convert; import lombok.AllArgsConstructor; import org.dromara.common.core.service.DictService; import org.dromara.common.core.utils.StreamUtils; From 52d526b57d56077f30400cfb6213d74e54c2d8fe Mon Sep 17 00:00:00 2001 From: Du YinHong <1836695061@qq.com> Date: Mon, 24 Aug 2026 15:04:49 +0800 Subject: [PATCH 7/7] =?UTF-8?q?1.=E5=88=A0=E9=99=A4=E6=97=A0=E7=94=A8?= =?UTF-8?q?=E5=AF=BC=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/mybatis/core/query/LambdaJoinQueryBuilder.java | 2 -- 1 file changed, 2 deletions(-) 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 9a04aff4a..00ab17327 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,8 +1,6 @@ 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;