From c281375c56054ef8facff62b052e4fbd62052dfc Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E8=B5=B5=E5=BF=A0=E6=9E=97?= <170083662@qq.com>
Date: Fri, 31 Jul 2026 00:36:47 +0800
Subject: [PATCH] =?UTF-8?q?feat(search):=20=E6=94=AF=E6=8C=81=E6=8C=89?=
=?UTF-8?q?=E5=A4=9A=E4=B8=AA=E5=88=86=E7=B1=BBID=E5=92=8C=E5=AF=BC?=
=?UTF-8?q?=E8=88=AAID=E5=AD=97=E7=AC=A6=E4=B8=B2=E8=81=9A=E5=90=88?=
=?UTF-8?q?=E6=9F=A5=E8=AF=A2?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- CmsArticle、CmsCase、CmsProduct、CmsPage参数新增分类IDs或导航IDs字符串字段
- 对传入多个ID字符串参数时,忽略单值ID字段避免查询冲突
- CmsArticleMapper和CmsPageMapper XML新增IN条件支持逗号分隔ID集合过滤
- CmsCaseServiceImpl和CmsProductServiceImpl实现聚合场景下优先使用IDs字符串查询
- 优化多栏目及导航聚合查询能力,提升灵活性和查询效率
---
.../java/com/gxwebsoft/cms/mapper/xml/CmsArticleMapper.xml | 6 ++++++
.../java/com/gxwebsoft/cms/mapper/xml/CmsPageMapper.xml | 6 ++++++
src/main/java/com/gxwebsoft/cms/param/CmsArticleParam.java | 4 ++++
src/main/java/com/gxwebsoft/cms/param/CmsCaseParam.java | 4 ++++
src/main/java/com/gxwebsoft/cms/param/CmsPageParam.java | 4 ++++
src/main/java/com/gxwebsoft/cms/param/CmsProductParam.java | 4 ++++
.../com/gxwebsoft/cms/service/impl/CmsCaseServiceImpl.java | 4 ++++
.../gxwebsoft/cms/service/impl/CmsProductServiceImpl.java | 4 ++++
8 files changed, 36 insertions(+)
diff --git a/src/main/java/com/gxwebsoft/cms/mapper/xml/CmsArticleMapper.xml b/src/main/java/com/gxwebsoft/cms/mapper/xml/CmsArticleMapper.xml
index b9ce6c3..44b6954 100644
--- a/src/main/java/com/gxwebsoft/cms/mapper/xml/CmsArticleMapper.xml
+++ b/src/main/java/com/gxwebsoft/cms/mapper/xml/CmsArticleMapper.xml
@@ -46,6 +46,12 @@
#{item}
+
+ AND a.category_id IN
+
+ #{item}
+
+
AND a.image LIKE CONCAT('%', #{param.image}, '%')
diff --git a/src/main/java/com/gxwebsoft/cms/mapper/xml/CmsPageMapper.xml b/src/main/java/com/gxwebsoft/cms/mapper/xml/CmsPageMapper.xml
index 118101f..9d73b14 100644
--- a/src/main/java/com/gxwebsoft/cms/mapper/xml/CmsPageMapper.xml
+++ b/src/main/java/com/gxwebsoft/cms/mapper/xml/CmsPageMapper.xml
@@ -14,6 +14,12 @@
AND n.navigation_id = #{param.navigationId}
+
+ AND n.navigation_id IN
+
+ #{item}
+
+
AND a.title LIKE CONCAT('%', #{param.title}, '%')
diff --git a/src/main/java/com/gxwebsoft/cms/param/CmsArticleParam.java b/src/main/java/com/gxwebsoft/cms/param/CmsArticleParam.java
index 5a7d12f..f194096 100644
--- a/src/main/java/com/gxwebsoft/cms/param/CmsArticleParam.java
+++ b/src/main/java/com/gxwebsoft/cms/param/CmsArticleParam.java
@@ -73,6 +73,10 @@ public class CmsArticleParam extends BaseParam {
@QueryField(type = QueryType.EQ)
private Integer categoryId;
+ @Schema(description = "分类ID集合(逗号分隔字符串),用于聚合父栏目下所有子栏目的文章,由前端递归收集后传入")
+ @TableField(exist = false)
+ private String categoryIdsStr;
+
@Schema(description = "父级栏目ID")
@QueryField(type = QueryType.EQ)
private Integer parentId;
diff --git a/src/main/java/com/gxwebsoft/cms/param/CmsCaseParam.java b/src/main/java/com/gxwebsoft/cms/param/CmsCaseParam.java
index 985fd05..d1f9022 100644
--- a/src/main/java/com/gxwebsoft/cms/param/CmsCaseParam.java
+++ b/src/main/java/com/gxwebsoft/cms/param/CmsCaseParam.java
@@ -38,4 +38,8 @@ public class CmsCaseParam extends BaseParam {
@Schema(description = "案例分类ID(关联 cms_navigation.navigation_id,model=case)")
@QueryField(type = QueryType.EQ)
private Integer categoryId;
+
+ @Schema(description = "案例分类ID集合(逗号分隔),用于聚合父栏目下所有子栏目的案例;优先级高于 categoryId")
+ @QueryField(type = QueryType.IN_STR)
+ private String categoryIds;
}
diff --git a/src/main/java/com/gxwebsoft/cms/param/CmsPageParam.java b/src/main/java/com/gxwebsoft/cms/param/CmsPageParam.java
index ef2d71e..533d686 100644
--- a/src/main/java/com/gxwebsoft/cms/param/CmsPageParam.java
+++ b/src/main/java/com/gxwebsoft/cms/param/CmsPageParam.java
@@ -54,4 +54,8 @@ public class CmsPageParam extends BaseParam {
@TableField(exist = false)
@QueryField(type = QueryType.EQ)
private Integer navigationId;
+
+ @Schema(description = "导航栏目ID集(逗号分隔),用于父栏目聚合查询其下所有子栏目的单页")
+ @TableField(exist = false)
+ private String navigationIdsStr;
}
diff --git a/src/main/java/com/gxwebsoft/cms/param/CmsProductParam.java b/src/main/java/com/gxwebsoft/cms/param/CmsProductParam.java
index 0cecf65..f9de78c 100644
--- a/src/main/java/com/gxwebsoft/cms/param/CmsProductParam.java
+++ b/src/main/java/com/gxwebsoft/cms/param/CmsProductParam.java
@@ -31,6 +31,10 @@ public class CmsProductParam extends BaseParam {
@QueryField(type = QueryType.EQ)
private Integer categoryId;
+ @Schema(description = "分类ID集合(逗号分隔),用于聚合父栏目下所有子栏目的产品;优先级高于 categoryId")
+ @QueryField(type = QueryType.IN_STR)
+ private String categoryIds;
+
@Schema(description = "状态: 1在售 0下架")
@QueryField(type = QueryType.EQ)
private Integer status;
diff --git a/src/main/java/com/gxwebsoft/cms/service/impl/CmsCaseServiceImpl.java b/src/main/java/com/gxwebsoft/cms/service/impl/CmsCaseServiceImpl.java
index 0f20cd6..6179c26 100644
--- a/src/main/java/com/gxwebsoft/cms/service/impl/CmsCaseServiceImpl.java
+++ b/src/main/java/com/gxwebsoft/cms/service/impl/CmsCaseServiceImpl.java
@@ -25,6 +25,10 @@ public class CmsCaseServiceImpl extends ServiceImpl impl
@Override
public PageResult pageRel(CmsCaseParam param) {
+ // 聚合场景:传入 categoryIds 时忽略单值 categoryId,避免 AND 冲突
+ if (StrUtil.isNotBlank(param.getCategoryIds())) {
+ param.setCategoryId(null);
+ }
PageParam page = new PageParam<>(param);
page.setDefaultOrder("sort_number asc, create_time desc");
QueryWrapper wrapper = page.getWrapper();
diff --git a/src/main/java/com/gxwebsoft/cms/service/impl/CmsProductServiceImpl.java b/src/main/java/com/gxwebsoft/cms/service/impl/CmsProductServiceImpl.java
index a110001..ff9fdf7 100644
--- a/src/main/java/com/gxwebsoft/cms/service/impl/CmsProductServiceImpl.java
+++ b/src/main/java/com/gxwebsoft/cms/service/impl/CmsProductServiceImpl.java
@@ -25,6 +25,10 @@ public class CmsProductServiceImpl extends ServiceImpl pageRel(CmsProductParam param) {
+ // 聚合场景:传入 categoryIds 时忽略单值 categoryId,避免 AND 冲突
+ if (StrUtil.isNotBlank(param.getCategoryIds())) {
+ param.setCategoryId(null);
+ }
PageParam page = new PageParam<>(param);
page.setDefaultOrder("sort_number asc, create_time desc");
QueryWrapper wrapper = page.getWrapper();