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();